Strudelify
Any Dream Will Do cover art

1991 · Joseph and the Amazing Technicolor Dreamcoat (1991 London Cast Recording)

Any Dream Will Do

Jason Donovan

KeyC majorTempo126 bpm
0:00/0:00
// Any Dream Will Do — Jason Donovan
// 126 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 118 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A@2 B C B C D@2 A@2 B E A@2 F G B C H I B J@2 K A@2 B E A@2 F G B C H I B J@2 K L M N O P@2 Q R S@2 A@2 B E A@2 F
  G B C H I B J@2 K A@2 B E A@2 F G B C H I B J@2 K L M N O P@2 Q R S@2 A@2 B E A@2 F G B C H I B T A@2 B C B C U@4
>`.pickRestart({
  A: "[c2@8 ~ c2@14 g1@9 ~ g1@14 ~]/2", B: "c2@8 ~ c2@14 ~", C: "g1@8 ~ g1@15", D: "[c2@9 c2@14 g1@7 ~@18]/2",
  E: "f2@9 f2@14 ~", F: "c2@9 ~ c2@14", G: "g1@4 ~ g1@7", H: "c2@8 ~ c2@15", I: "f2@9 ~ f2@14",
  J: "[g1@8 ~ g1@14 c2@9 ~@2 c2@14]/2", K: "g1@9 g1@13 ~@2", L: "f2@8 ~ f2@12 ~ c2 ~", M: "f2@9 ~ f2@11 c2@2 ~",
  N: "d#2@8 ~ d#2@12 c2@2 ~", O: "f#2@3 d#2@3 f#2@2", P: "[c2@11 b1@6 ~ c2@5 d2@6 c2@6 b1@6 c2@6 ~]/2",
  Q: "g1@6 a1@5 b1@6 c2@6 ~", R: "b1@5 a1@6 g1@6 a1@7", S: "[d2@6 e2@6 f2@5 e2@6 g2@2 ~@23]/2", T: "g1 ~@2",
  U: "[c2 ~@8 c2@14 g1@10 ~@2 g1@16 c2@44 ~]/4",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@2 A B C D C D C E F@2 G H G I G J G J G H G I G K G J G L@2 I G J G M@5 N@2 O@2 P@2 Q@2 R@2 S E F@2 G H G I G J G J
  G H G I G K G J G L@2 I G J G M@5 N@2 O@2 P@2 Q@2 R@2 S E G J G L@2 I G J G T@5 A B C D C D A U@3
>`.pickRestart({
  A: "~@9 c5@14 ~, g5, e5@7 ~", B: "d5@9 c5@9 d5@5 ~, f5@7 ~", C: "~@5 g5@7, [c5,e5]@23 ~", D: "d5@9 c5@9 d5@5 ~, f5",
  E: "[b4,d5,g5] ~@7", F: "[c5 c5@20 ~@3 b4@22 ~@2, e5@22 ~ e5@23 ~@2]/2", G: "[c5,e5]@23 ~", H: "[c5,f5]@11 ~",
  I: "[b4,d5]@23 ~", J: "[b4,e5]@23 ~", K: "[b4,e5]@7 ~", L: "[[c5,f5]@23 ~ e5@24, ~@23 c5@23 ~@2]/2",
  M: "[[b4,e5]@23 ~ c5@20 ~@4 f5@23 ~ e5@23 ~ d5@24, ~@23 e5@22 ~@2 c5@22 ~@2 c5@22 ~@2 b4@23 ~@2]/5", // E5
  N: "[c5@22 ~ [a#4,d5]@23 ~@2, e5@23 ~]/2", O: "[f5,a5]/2", P: "[d#5,f#5]/2",
  Q: "[[c5,e5]@11 ~ [b4,d5]@5 ~ e5@4 ~@2 f5@5 e5@5 ~@2 d5@5 ~ e5@5 ~, ~@17 c5@5 ~ c5@11 ~ b4@5 ~ c5@4 ~@3]/2", // C Bm
  R: "[[b4,d5,g5]@23 ~]/2", S: "[a4,c5,f5]@11 ~",
  T: "[[b4,e5]@23 ~ c5@20 ~@4 f5@23 ~ e5@23 ~ d5@6 ~@18, ~@23 e5@22 ~@2 c5@22 ~@2 c5@22 ~@2 b4@6 ~@19]/5", // E5
  U: "[d5@11 c5@10 d5@6 [c4,g5]@39 ~@6, f5@25 ~@2 e5@32 ~@13]/3", // C5
})).s("gm_percussive_organ").gain(0.25)

// other · brass section · "BRASS 1"
const brass_section = note("<~@41 A@2 ~@40 A@2 ~@33>".pickRestart({
  A: "[~@5 f3@2 g3 [a3,b3] c4 d4 f4 g4 [a4,b4] c5 d5 [e5,f5] g5 [a5,b5] ~@2 [e6,f6] g6 a6@7 ~@18, ~@3 [c3,d3]@2 ~@15 d6@2 ~@26, ~@4 e3@2 ~@13 c6@2 ~@27]/2", // Asus2 Fmaj7 Asus2 Fmaj7 Csus2
})).s("gm_brass_section").gain(0.25)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@67 A B@2 C@2 D@2 E@2 B@2 C@2 F@2 G@2 ~@34>".pickRestart({
  A: "~@6 e5@5 ~ e5@6 f5@6", B: "[g5@30 e6@5 ~ e6@6 d6@6]/2", C: "[c6@3 g5@7 c6@2 b5@2 a5@2]/2",
  D: "[g5@9 e5@20 ~ f5@6 e5@6 d5@6]/2", E: "[g5@30 e5@5 ~ e5@6 f5@6]/2", F: "[g5@5 e5@10 f5@3 e5@3 d5@3]/2",
  G: "[c5@7 ~@5]/2",
})).s("gm_tubular_bells").gain(0.25).pan(0.8)

// other · soprano sax · "SOPRAN SAX"
const soprano_sax = note(`<
  ~@9 A B C@2 D E@2 B F@2 G@2 H E@2 I J K L M N E@2 K O K P@3 Q@2 R@2 S T U V W@5 X Y@2 Z N AA@2 K O AB@2 M N Q@2 AC@2 K
  AD@2 H AA@2 K AE@2 AF AG N AH@5 AI AJ@2 AK@5 AL@2 AM AG AN AO@2 AP AQ AR@2 AS N AT@4 ~@8
>`.pickRestart({
  A: "~@5 d#4 e4@4 ~ e4@6 f4@5 ~ f#4", B: "g4@17 ~@7", C: "[~@4 e5@10 ~ e5@2 ~ d5@5 c5@9 g4@16, ~@4 d#5 ~@43]/2",
  D: "~@5 c5@6 ~ b4@5 ~ a4@6", E: "[g4@9 e4@21 f4@5 ~ e4@6 d4@6]/2",
  F: "[~@6 e4@8 ~ e4@2 ~ f4@5 g4@19 ~@6, ~@23 f#4 ~@24]/2", G: "[~@3 d#5 e5@10 ~ e5@2 d5@5 ~ c5@10 g4@15]/2",
  H: "~@6 c5@5 ~ b4@6 a4@6", I: "c4@19 ~@5", J: "~@5 d#4 e4@8 ~ e4@2 f4@6 f#4", K: "g4",
  L: "~@5 e5@9 ~ e5@2 ~ d5@6, ~@5 d#5 ~@18", M: "c5@9 g4@8 ~ c5@3 g4@2 ~", N: "a4 c5 b4 a4",
  O: "~@6 e4@5 ~ e4@6 f4@5 f#4", P: "[~@5 d#5 e5@8 ~ e5@2 ~ d5@5 c5@9 ~ g4@20 c5@6 ~ b4@5 ~ a4@6]/3",
  Q: "[g4@3 e4@7 f4@2 e4@2 d4@2]/2", R: "[c4@5 ~@3]/2", S: "c5@3 a4@4 ~@2 d5@13 a4@2, ~@9 c#5 ~@14",
  T: "c5@4 a4@3 ~@2 d5@12 a4@2 ~, ~@9 c#5 ~@14", U: "c5@4 a4@2 ~@3 d5@12 a4@2 ~, ~@9 c#5 ~@14",
  V: "c5@4 a4@2 ~@3 c#5 d5@13 d#5, ~@10 c5 ~@13",
  W: "[e5@5 ~ e5@6 d5@5 e5@6 f5@5 ~ e5@6 d5@5 ~ c5@6 b4@30 g4@6 b4@6 d5@6 g5@25, ~@95 f#5 ~@24]/5",
  X: "~@5 d#4 e4@8 ~ e4@2 ~ f4@5 f#4", Y: "[g4@27 d#5 e5@10 ~ e5@2 d5@7]/2", Z: "c5@9 g4@9 c5@4 g4@2",
  AA: "[g4@9 e4@21 f4@6 e4@6 d4@5 f#4]/2", AB: "[g4@29 d#5 e5@8 ~ e5@2 ~ d5@6]/2",
  AC: "[c4@29 d#4 e4@8 e4@4 f4@5 f#4]/2", AD: "[~@3 d#5 e5@10 ~ e5@2 d5@6 c5@23 ~@2]/2",
  AE: "[~@5 e4@6 e4@6 f4@6 g4@19 ~@6]/2", AF: "~@4 e5@10 ~ e5@2 d5@7", AG: "c5@9 g4@8 c5@4 g4@2 g#4",
  AH: "[g4@9 e4@20 f4@6 ~ e4@5 d4@6 c4@41 ~@7 c5@4 ~ a4@4 ~ d5@12 a4@2 ~, ~@105 c#5 ~@14]/5",
  AI: "c5@4 a4@2 ~@3 [c5,c#5] ~@11 a4@2 ~, ~@3 d5@4 ~", // C#maj7
  AJ: "[c5@4 a4@3 ~@2 c#5 d5@11 a4@2 c5@4 a4@3 ~@3 d5@14 ~, ~@10 c5 ~@22 c#5 ~@14]/2",
  AK: "[e5@5 ~ e5@6 d5@5 e5@6 f5@5 ~ e5@6 d5@5 ~ c5@6 b4@30 g4@6 b4@5 c#5 d5@5 f#5 g5@18 g#5 a5@5 g5, d#5 ~@119]/5",
  AL: "[~@5 d#4 e4@4 ~ e4@6 f4@6 g4@24 ~, ~@23 f#4 ~@24]/2", AM: "~@4 d#5 e5@9 ~ e5@2 d5@6 ~",
  AN: "a4@5 c5@7 b4@6 a4@6", AO: "[g4@9 e4@20 f4@6 ~ e4@6 d4@5 ~]/2", AP: "g4@23 ~, f#4 ~@23",
  AQ: "~@5 d#4 e4@8 e4@3 f4@6 f#4", AR: "[g4@28 ~ d#5 e5@8 ~ e5@2 ~ d5@6]/2",
  AS: "c5@9 g4@8 c5@4 g4@2 g#4, ~@9 a4 ~@14", AT: "[g4@9 e4@21 f4@6 e4@6 d4@5 c4@26 ~@23]/4",
})).s("gm_soprano_sax").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@9 B A@37 C@3 A B A@37 C@3 A B A@13 B A@7 D E ~>".pickRestart({
  A: "x ~@4 x ~@6", B: "x", C: "x ~@4 x ~@5 x", D: "x ~@10 x ~@12", E: "~ x ~@6",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct("<A@9 ~ A@35 B A@5 ~ A@35 B A@5 ~ A@13 ~ A@7 C ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@9 x!3 ~@5", C: "~@7 x ~@13 x ~@2",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<A@9 ~ A@41 B A@41 B A@13 ~ A@7 ~ C ~>".pickRestart({
  A: "~@11 x", B: "x", C: "~ x ~@22",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@50 [~@5 x] ~@41 [~@5 x] ~@22 [~@23 x] ~@2>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<A@9 ~ A@16 B@21 C@3 B ~ B@37 C@3 B ~ B@13 ~ B@7 D ~@2>".pickRestart({
  A: "~@2 x", B: "~@3 x ~@4 x!2 ~@2", C: "~@3 x ~@4 x!2 ~ x", D: "~@7 x ~@10 x ~@2 x ~@2",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@50 [~@8 x!2 ~@2] ~@41 [~@8 x!2 ~@2] ~@22 [~@6 x!2] ~@2>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@43 A ~ A ~@39 A ~ A ~@30>".pickRestart({
  A: "~@11 x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@42 A ~@7 A ~@33 A ~@7 A ~@22 A B ~>".pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  A@9 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@2 x",
})).gain(0.3)

stack(
  bass, percussive_organ, brass_section, tubular_bells, soprano_sax, kick, snare, clap, low_tom, hihat, mid_tom,
  open_hat, crash, ride
)

More by Jason Donovan