Strudelify

one jump ahead

Alan Menken

KeyD minorTempo76 bpm
0:00/0:00
// one jump ahead — Alan Menken
// 76 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/4 at bar 4, 4/4 at bar 6, 6/4 at bar 58, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6328620; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 71 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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: edit a riff to change every repeat.

// chords · french horn
const french_horn = note(`<
  ~@17 A ~@2 B C ~@3 C ~@3 D@3 E F@3 G@2 H I J@2 K@4 L@2 M@2 N@3 O@2 P Q@3 ~@3 R@2 S@2 T@2 U V W
>`.pickRestart({
  A: "~ bb3!3 c4 d4@3", B: "~@7 d4", C: "d4!4 a4 d4@3",
  D: "[~@6 d4@6 eb4@7 d4@7 d4@7 [d4,d5]@8 [d4,d5]@17 ~@11 [g4,bb4]@10 [eb4,d5]@10 ~ [f4,c5]@10 ~@10 [f4,a4]@10 ~ [d4,c5]@10 [eb4,bb4]@10 ~@3]/3", // D Gm Ebmaj7 F5 F D7 Eb5
  E: "~@8 [eb4,g4]@10 [c4,bb4]@10 [d4,a4]@10 ~ [bb3,f4]@9", // Eb C7 D5 Bb5
  F: "[~ [d4,a4]@10 ~ [c4,g4]@21 ~@10 [d4,f4]@10 [bb3,a4]@10 [c4,g4]@10 ~@11 [c4,e4]@10 [a3,g4]@10 ~ [bb3,f4]@10 ~@11 [bb3,d4]@10 [g3,f4]@8]/3", // D5 C5 Dm Bbmaj7 C5 C A7 Bb5 …
  G: "[~@2 [a3,e4]@10 ~ [a3,c4]@20 [f3,e4]@21 [a3,d4]@28 ~@14]/2", // A5 Am Fmaj7 D5
  H: "~@22 [a3,d4]@4 [a3,d4]@3 [a3,d4]@7 [a3,d4]@7 ~@5", // D5
  I: "~@3 [d3,a3]@3 [d3,a3]@4 [eb3,bb3]@7 [d3,a3]@7 ~@21 [a3,d4]@3", // D5 Eb5 D5
  J: "[~ [a3,d4]@4 [g3,c4]@7 [c4,f4]@3 [c4,f4]@4 [c4,f4]@7 [c4,f4]@7 ~@7 [c4,f4]@4 [c4,f4]@3 [c4,f4]@7 [c4,f4]@7 ~@8 [f3,c4]@3 [f3,c4]@4 [gb3,db4]@7 [f3,c4]@7 ~@6]/2", // D5 C5 F5 Gb5 F5
  K: "[~@37 c3@5 ~ db3@5 c3@5 db4@5 ~ c4@5 [db4,db5]@6 [c4,c5]@6 [f4,c5]@91 ~@25, ~@21 g3@21 ~ g2@10 g3@11 ~@128]/4", // Db C F5
  L: "[~@32 [g4,d5]@6 [f4,a4]@6 e5@11 f5@11 ~ [a3,c4]@8 [a3,c4]@9 [a3,c4]@5 [db4,f4]@7, ~@44 d5@23 ~@29]/2", // G5 F Am Db
  M: "[~@2 [f4,ab4]@8 [c4,c5]@6 [c4,c5]@6 [c4,c5]@6 [f3,f4]@5 [f3,f4]@6 [c4,c5]@6 [f3,f4]@5 [f3,f4]@9 [c4,c5]@3 [c4,c5]@5 [bb3,bb4]@6 [bb3,bb4]@6 [a3,a4]@6 [a3,a4]@5 [g3,g4]@6]/2", // Fm C F C F C Bb A …
  N: "[[g3,g4]@6 [f3,f4]@5 [a3,a4]@22 bb3@6 a3@6 [bb3,d4]@9 ~ [a3,e4]@9 ~@10 [f3,f4]@10 [a3,a4]@10 ~ [g3,g4]@10 d3@10 ~ [e3,e4]@10 [g3,g4]@10 [f3,f4]@8, ~@11 e3@4 ~@33]/3", // G F A Bb A5 F A G …
  O: "[~@3 d3@10 [f3,f4]@10 [a3,a4]@10 ~ [g3,g4]@10 [e3,e4]@10 [g3,g4]@10 ~ [f3,f4]@21 d3@10]/2", // F A G E G F
  P: "[f3,f4]@10 [a3,a4]@10 ~ [g3,g4]@10 d3@10 [e3,e4]@7", // F A G E
  Q: "[~@4 [g3,g4]@10 [f3,f4]@10 d3@10 ~ [f3,f4]@10 [a3,a4]@10 ~ [g3,g4]@10 [c4,c5]@10 [a3,a4]@11 ~ [d4,d5]@51 ~@5]/3", // G F A G C A D
  R: "[~@36 d5@4 [c5,e5]@4 ~ [d5,f5]@12 [bb4,g5]@4 [a4,e5]@17 [f4,d5]@17 ~]/2", // C Dm Eb A5 Dm
  S: "[~@43 [bb3,f4]@10 [a3,d4]@10 [f4,bb4]@10 ~@12 [e4,a4]@11]/2", // Bb5 D5 Bb5 A5
  T: "[[a4,db5]@25 ~@9 [f3,f4]@9 [a3,a4]@9 [g3,g4]@9 ~@10 [e3,e4]@9 [g3,g4]@9 [f3,f4]@7]/2", // A F A G E G F
  U: "~@11 [f3,f4]@9 [a3,a4]@9 [g3,g4]@9 [c4,c5]@10", V: "[a3,a4]@5 [d4,d5]@19", W: "~@9 d5@2 d5@3 d5@3 ~@31",
})).s("gm_french_horn").gain(0.4)

// chords · french horn · soft notes
const french_horn_soft = note("<~@4 A@6 B C D ~@45 E@3 F ~@9>".pickRestart({
  A: "[~@3 [bb3,bb4]@7 [bb3,bb4]@9 [bb3,bb4]@9 ~ [bb3,bb4]@9 [c4,c5]@14 ~ [d4,d5]@21 [bb3,bb4]@7 [eb4,eb5]@7 [d4,d5]@7 [c4,c5]@14 ~ [bb3,bb4]@43 ~@28 a3@7 c4@7 f4@7 a4@7 c5@14 d5@14 ~ bb4@28 ~@22]/6", // Bb C D Bb Eb D C Bb
  B: "~@35 c5@13", C: "~@2 d5@15 ~ c5@30", D: "bb4",
  E: "[~@42 d4@4 ~ [c4,e4]@4 [bb3,f4]@12 [bb3,g4]@4 ~ [a3,e4]@17 [f3,d4]@17 ~@33 d4@4 [c4,e4]@4 ~]/3", // C Bb5 Eb A5 Dm C
  F: "[bb3,f4]@12 [bb3,g4]@4 ~ [a3,e4]@16 [f3,d4]@15", // Bb5 Eb A5 Dm
})).s("gm_french_horn").gain(0.25)

// chords · french horn
const french_horn_2 = note(`<
  A@5 B@7 C D E F G H I J K L M N O P M N Q R@8 S T U V@3 W@2 X@3 Y@2 Z@3 AA@2 AB AC@3 AD@2 AE AF AG@5 AH AI AJ
>`.pickRestart({
  A: "[~@31 bb3@57 bb3@85 [g3,bb3]@57 [f4,a4]@10]/5", // Gm F
  B: "[~@5 [f4,bb4]@21 [g4,bb4]@21 [f4,a4]@14 ~ [d4,f4]@42 [a3,c4]@28 ~ [a3,c4]@28 c4@14 d4@14 ~ f4@14 eb4@14 [a3,d4]@28 ~ [g3,bb3]@28 g3@46 a3@15, ~@161 f4@28 ~ bb3@28 ~@118]/7", // Bb5 Gm F Dm Am D5 Gm
  C: "d3 f3 d3 f3 d3 f3 d3 f3", D: "d3 f3 d3 f3 d3 f3 d3 ~", E: "[d3,f3]@2 [f3,a3] [f3,bb3]",
  F: "[g3,bb3]@2 bb3 [f3,a3]", G: "[f3,bb3] [g3,bb3]", H: "d3 g3 d3 g3!2 bb3 a3 g3, bb3 ~",
  I: "[gb3,a3]@2 [a3,db4] [a3,d4]", J: "[bb3,d4]!2 [a3,d4] [a3,db4]", K: "[f3,bb3] [a3,d4]!2 [g3,db4]",
  L: "e4 d4 db4 d4, a3", M: "[bb3,d4]@8 [d4,gb4]@3 [d4,g4]@5", N: "[c4,eb4]@2 [bb3,f4] [d4,gb4]",
  O: "f4 eb4 d4 db4, ~ e4", P: "d4 a3 d4 a3 db4 a3 d4 a3, gb4", Q: "[eb4,g4] [db4,e4]",
  R: "[[c4,g4]@12 eb4@14 [g4,bb4]@15 [gb4,c5]@17 [d4,d5]@155 ~@9 [f3,f4] [g3,g4] [a3,a4]@124 ~@36]/8", // C5 Gm Gbdim D F G A
  S: "~@10 a3!2 ~ a3@2 ~@2 a3@2 ~ bb3@4 a3@2 ~ bb3@4 a3@2 ~@5 a3 ~ a3 ~ a3@2 ~ a3@2 ~",
  T: "~ bb3@3 a3@2 ~@2 bb3@4 a3@2 ~@5 a3!2 ~ a3@2 ~@2 a3@2 ~ bb3@4 a3@2 ~ bb3@4 a3@2 ~@5 a3",
  U: "~ a3 ~ a3@2 ~ a3@2 ~@2 bb3@3 a3@2 ~@2 bb3@4 a3@2 ~@5 a3!2 ~ a3@2 ~@2 a3@2 ~ bb3@4 a3@2 ~ bb3@3",
  V: "[~ a3@2 ~@5 c4 ~ c4 ~ c4@2 ~ c4@2 ~@2 db4@3 c4@2 ~@2 db4@4 c4@2 ~@5 c4!2 ~ c4@2 ~@2 c4@2 ~ db4@4 c4@2 ~ db4@4 c4@2 ~@5 c4 ~ c4 ~ c4@2 ~ c4@2 ~@2 db4@3 c4@2 ~@2 db4@4 c4@2 ~ [f4,ab4]@17 [c4,f4]@10 [c4,g4]@5 [c4,g4]@5 ~ [f4,g4]@11 [f4,g4]@5]/3", // Fm F5 C5 Fsus2
  W: "[[f4,g4]@5 [f4,ab4]@11 [f4,g4]@12 [f3,a3]@9 [f3,a3]@8 [f3,a3]@6 [g3,c4]@9 [a3,c4]@14 [bb3,db4]@11 [db4,f4]@11]/2", // Fsus2 Fm Fsus2 F C5 Am Bbm Db
  X: "[~ [c4,f4]@11 [c4,e4]@11 [a3,c4]@11 ~ [f4,g4]@11 [f4,a4]@11 ~ [bb3,d4]@11 [d4,f4]@46 [c3,f3]@8 [c3,f3]@9 [c3,f3]@5 [db3,bb3]@7]/3", // F5 C Am Fsus2 F Bb Dm F5 …
  Y: "[~@2 [c3,ab3]@14 [f3,ab3]@11 ~ [db3,f3]@11 [c3,f3]@23 [f3,a3]@11 [d3,f3]@23]/2", // Fm Db F5 F Dm
  Z: "[[bb2,d3]@11 [a2,e3]@10 ~ bb2@5 a2@6 g2@6 a2@6 [d3,g3]@18 ~ d3@10 [a3,d4]@10 [d4,f4]@10 ~ [c4,e4]@10 ~@11 [a3,c4]@10 [c4,e4]@10 [a3,d4]@8, ~@11 d3@4 ~@33]/3", // Bb A5 G5 D5 Dm C Am C …
  AA: "[~@13 [a3,d4]@10 [d4,f4]@10 ~ [c4,e4]@10 [g3,c4]@10 [c4,e4]@10 ~ [a3,d4]@21 ~@10]/2", // D5 Dm C C5 C D5
  AB: "[a3,d4]@10 [d4,f4]@10 ~ [c4,e4]@10 ~@10 [a3,c4]@7", // D5 Dm C Am
  AC: "[~@4 [c4,e4]@10 [a3,d4]@10 ~@11 [a3,d4]@10 [d4,f4]@10 ~ [c4,e4]@10 [a3,e4]@10 [e3,c4]@11 ~ [d3,a3]@50 d3@4 ~@2]/3", // C D5 Dm C A5 C D5
  AD: "[~@3 d3@4 ~@4 d3@4 ~@5 d3@8 d3@8 ~ d3@8 d3@8 d3@8 ~ d3@8 d3@8 ~ d3@8 d3@8 ~]/2",
  AE: "d3@8 d3@8 ~ d3@4 ~@4 d3@4 ~@4 d3@4 ~@5 d3@4 ~@2", AF: "~@2 d3@4 ~@5 d3@4 ~@4 d3@4 ~@5 d3@4 ~@4 d3@4 ~@5 d3@3",
  AG: "[~@5 d3@4 ~@4 d4@8 ~ d4@8 d4@8 ~ d4@8 d3@4 ~@5 d3@4 ~@4 d3@4 ~@5 d3@4 ~@4 [a3,d4]@41 [a3,db4]@47 ~@9 [a3,d4]@9 [d4,f4]@9 [c4,e4]@9 ~@10 [a3,c4]@9 [c4,e4]@9 [a3,d4]@7, ~@13 d3@4 ~@5 d3@4 ~@4 d3@4 ~@5 d3@4 ~@4 e4@17 a3@17 ~@159]/5", // D5 A D5 Dm C Am C D5
  AH: "~@11 [a3,d4]@9 [d4,f4]@9 [c4,e4]@9 [e4,a4]@10", AI: "[c4,e4]@5 ~@19", AJ: "~@9 d3@2 d3@3 d3@3 ~@31",
})).s("gm_french_horn").gain(0.3)

// other · french horn
const french_horn_3 = note(`<
  A@5 B@7 C@2 D E F G H I J K L M N O L M P Q@2 R@7 S T U@2 V W@2 X@3 Y Z AA@3 AB@7 AC@2 AD@6 AE@2 AF
>`.pickRestart({
  A: "[~@31 bb2@57 bb2@85 d3@57 ~@10]/5",
  B: "[~@5 bb3@21 [eb3,eb4]@21 ~@15 bb2@42 f3@28 ~ eb3@28 d3@28 ~ eb3@28 d3@28 ~ [g2,d3]@28 [eb2,c3]@46 [f2,c3]@15, ~@47 f3@57 ~@232]/7", // Eb G5 Cm F5
  C: "[bb1,bb2]/2", D: "[bb1,bb2]@2 f2 [bb1,bb2]", E: "[eb2,eb3] [c2,c3] [f2,f3] [eb2,eb3]", F: "[d2,d3] [eb2,eb3]",
  G: "[f2,f3] [eb2,eb3]", H: "[d2,d3]@2 [a1,a2] [d2,d3]", I: "[g2,g3] [e2,e3] [a2,a3] [g2,g3]",
  J: "[f2,bb2]@2 [e2,e3] [a2,a3]", K: "~ a2 gb3 a2 e3 a2 gb3@2, d2", L: "[g1,g2]@8 [d2,d3]@3 [g1,g2]@5",
  M: "~ g2 eb3@2 d3@2 a3@2, c2 d2", N: "~ bb2 g3 bb2 a3@2 g3@2, eb2 a2", O: "~ g2 gb3 g2 e3 g2 gb3 g2, d2",
  P: "~ bb2 g3 bb2 a2@2 [a1,a2]@2, eb2 ~", Q: "[d3@12 [d3,eb3]@14 [d2,bb3]@15 [d2,c4]@17 [g1,g2]@38]/2",
  R: "[~@4 [g1,g2]@41 [g1,g2]@62 ~@11 [g1,g2]@10 [d2,d3]@41 ~ [d2,d3]@41 [d2,d3]@41 ~ [d2,d3]@41 d2@4 ~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@4 ~@4 d2@4 ~@3 [d2,d3]@4 ~@2]/7", // G D
  S: "~ d2@4 ~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@4 ~@4 d2@4", // D
  T: "~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@4 ~@3 d2@4 ~@3 [d2,d3]@3", // D
  U: "[~@5 f2@4 ~@3 [f2,f3]@4 ~@3 f2@4 ~@3 [f2,f3]@4 ~@3 f2@4 ~@3 [f2,f3]@4 ~@3 f2@4 ~@3 [f2,f3]@4 ~@4 f2@4 ~@3 [f2,f3]@4 ~@3 f2@4 ~@3 [f2,f3]@4 ~@3 [db2,db3]@6]/2", // F Db
  V: "~@2 [db2,db3]@9 [d2,d3]@10 [b1,b2]@11 [c2,c3]@11 [c2,c3]@5", // Db D B C
  W: "[[c2,c3]@5 [c2,c3]@11 [c2,c3]@12 [f2,c3]@9 [f2,c3]@8 [f2,c3]@6 [c2,c3]@9 [f2,c3]@14 [bb1,bb2]@11 [db2,db3]@11]/2", // C F5 C F5 Bb Db
  X: "[~ [c2,c3]@11 [bb1,bb2]@11 [a1,a2]@23 [bb1,bb2]@23 [a1,a2]@46 [c2,f2]@8 [c2,f2]@3 [c2,f2]@6 [c2,f2]@5 [db2,g2]@7]/3", // C Bb A Bb A F5 Dbdim
  Y: "~@2 [c2,f2]@8 [c3,f3]@6 [bb1,bb2]@11 ~ [bb1,bb2]@11 [a1,a2]@9", // F5 Bb A
  Z: "~@2 [a1,a2]@11 ~ [g1,g2]@11 [g1,g2]@11 ~ [bb1,bb2]@11", // A G Bb
  AA: "[bb2@3 a2@3 g2@3 f2@2 [a1,e2]@22 [a1,d2]@31 [d2,a2]@41 [d2,a2]@39, bb1@11 ~@133]/3", // A5 D5
  AB: "[~@3 [d2,a2]@62 ~@10 [a2,d3]@10 ~ [d2,a2]@41 [d2,a2]@41 [d2,a2]@41 ~ d3@5 a2@5 c3@6 a2@6 d2@50 [d2,d3]@25 ~ [d2,d3]@8 [d2,d3]@8 ~ [d2,d3]@8 [d2,d3]@3, ~@105 d2@11 ~@52]/7", // D5 D
  AC: "[~@5 [d2,d3]@17 [d2,d3]@42 ~ [d2,d3]@8 [d2,d3]@8 [d2,d3]@8 ~ [d2,d3]@6]/2", // D
  AD: "[~@2 [d2,d3]@17 [d2,d3]@42 [d2,d3]@8 ~ [d2,d3]@8 [d2,d3]@8 ~ [d2,d3]@8 [a2,a3]@17 [d2,d3]@17 [d2,a2]@41 [a1,e2]@35 [a1,e2]@12 [d2,a2]@36 [d2,a2]@35]/6", // D A D D5 A5 D5
  AE: "[~ [d2,a2]@18 [d2,a2]@10 ~@19]/2", AF: "~@9 d2@2 d2@3 d2@3 ~@31",
})).s("gm_french_horn").gain(0.31)

stack(french_horn, french_horn_soft, french_horn_2, french_horn_3)

More by Alan Menken