Strudelify
KeyG majorTempo105 bpm
0:00/0:00
// lazy river — Hoagy CarmichaelSidney Arodin
// 105 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6344999; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 77 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · trumpet
const trumpet = note(`<
  A B C D E F G H I J C D K L@2 M A N O P C D E F G H I J C D K L@2 M A N O Q R S T U V W X Y Z AA AB AC AD AE AF AG AH
  AI AJ@2 AK AL AM AN AO AP AQ AR AS AT@2 AU AV AW AX ~ AY AZ ~
>`.pickRestart({
  A: "d5@5 f5@3 d5@5 a4@3 c5@5 a4@8 c4@3", B: "~ f4 e4 d#4", C: "d4@5 f#4@3 a4@5 d#5@3 d5@5 c5@3 d4@5 d#4@3",
  D: "c5@8 b4@5 a#4@3 ~@13 g4@3", E: "b3@5 d4@3 f4@5 a4@3 g4@5 f4@7 e4@2 g4@2", F: "e4@8 d#4@5 d4@3 ~@16",
  G: "e4@5 g4@3 a#4@5 e5@3 d5@8 a4@5 g#4@3", H: "g4@8 a4@5 g4@3 ~@16", I: "g4@2 a4@2 f4@9 c4@3 g4@2 g4@10 c4@2 d4@2",
  J: "f4@8 f4@5 c4@3 ~@16", K: "b3@5 d4@3 f4@5 a4@3 g4@5 f4@8 g4@3",
  L: "[e4@5 g4@3 e4@2 d#4@2 d4@4 ~@13 d5@8 c5@3 a#4@3 a4@2 g#4@11 ~@8]/2", M: "f5@5 f5@3 e5@5 f5@3 d5@8 ~@8",
  N: "f4@5 f4@3 e4@2 f4@2 f#4@12 ~@8", O: "d5@5 f5@3 d5@5 a4@3 c5@5 a4@8 a4@3", P: "f4@8 ~@13 c4@11",
  Q: "f4@5 g4@3 d#4@5 d4@3 c4@5 d4@8 e4@3", R: "f#4!2 d4 f4", S: "~@5 f#4@3 ~@5 d4@11 f4@8",
  T: "g4@3 ~@2 g4@3 b4@3 ~@2 b4@3 d5@3 ~@2 d5@3 g4@3 ~@2 g4@3", U: "~@5 e4@3 ~@5 d#4@3 g4@8 b4@8", V: "~@13 g4@3 c4@16",
  W: "c4@16 ~@5 e4@3 ~@5 g4@3", X: "c4@8 a3@8 f4@13 e4@3", Y: "a4@5 g4@5 ~ a4@5 e4@8 a3@8", Z: "d4", AA: "c4",
  AB: "g4 f4 e4 d4", AC: "b3@16 g4@8 f4@5 e4@3", AD: "g4@16 f4@5 e4@11", AE: "f4@16 f#4@8 d4@5 e4@3", AF: "d4 g4 e4 c4",
  AG: "f4@2 d4 f#4", AH: "d4@2 e4 c4", AI: "c5@8 a4@5 f4@3 d4@5 f4@3 c4@5 c#4@3",
  AJ: "[d4@5 f#4@3 a4@5 e5@3 d5@5 c5@3 c#5@5 d5@8 c5@8 b4@3 a#4@5 ~@11]/2",
  AK: "b4@5 g4@3 f4@5 a4@3 g4@5 f4@3 a#4@5 b4@3", AL: "d4@2 g4@2 f4@2 e4@2 d4@8 ~@5 d4@3 d4@8",
  AM: "e5@8 e5@8 d5@3 c5@2 b4@3 a#4@3 c#5@2 d5@3", AN: "a4@16 g#4@5 g4@11", AO: "a4 g4 f4 e4",
  AP: "a4@3 g4@2 f4@3 a4@3 g4@2 f#4@3 a4@3 g#4@2 g4@3 d5@5 e5@3", AQ: "c5@5 a4@3 e5@5 d#5@3 d5@5 e5@3 c5@5 a4@3",
  AR: "e5@8 d5@3 a4@2 c5@15 ~ c#5@3", AS: "d5@5 g#4@3 a4@5 g4@3 e4@5 d4@3 a4@5 c#4@3",
  AT: "[d4@16 ~@5 a4@3 a4@5 a4@11 g4@8 f4@5 d4@3 f4@5 d4@3]/2", AU: "a4@5 a#4@3 b4@5 c5@3 e5@5 d5@8 c#5@3",
  AV: "d5@5 f5@3 d5@5 a4@3 c5@5 a4@3 g4@5 e4@3", AW: "f4@5 f4@3 e4@5 f4@3 f#4@5 d4@8 d4@3",
  AX: "f4@5 d5@8 d5@3 c5@5 d5@3 g#4@5 f4@3", AY: "f5", AZ: "[a4,a5]",
})).s("gm_trumpet").gain(0.31)

// chords · piano
const piano = note(`<
  ~@2 A@2 B@2 C@2 D E A@2 B@2 F G H I H J A@2 B@2 C@2 D E A@2 B@2 F G H K@3 A@2 B L@5 M@2 B@2 N O H G H D A@2 B@2 C@2 D
  P A@2 B@2 Q R H R S@2 D@2 ~
>`.pickRestart({
  A: "[d2,c4,d4,f#4,a4]", B: "[g2,d4,f4,g4,b4]", C: "[c2,c4,e4,g4,a#4]", D: "[f2,c4,f4,a4]", E: "[f2,c4,d#4,f4,a4]",
  F: "[a#2,d4,f4,g#4,a#4]", G: "[c2,c4,f4,a4] [d2,d4,f#4,a4]", H: "[g2,d4,f4,g4,b4] [c2,c4,e4,g4,a#4]",
  I: "[f2,c4,f4,a4] [d2,d4,f#4,a4]", J: "[f2,c4,f4,a4] [c2,c4,e4,g4,a#4]", K: "[[f2,c4,f4,a4] [d2,d4,f#4,a4]@5]/3",
  L: "[g2,d4,f4,g4,b4]/5", M: "[d2,c4,d4,f#4,a4]/2", N: "[g2,d4,f4,g4,b4] [f2,f4,g#4,b4]",
  O: "[f2,c4,d#4,f4,a4] [d2,c4,d4,f#4,a4]", P: "[a2,c#4,e4,g4,a4]!2 [a2,c#4,e4,g4,a4]@2",
  Q: "[a#2,d4,f4,a#4] [f2,c4,f4,a4]", R: "[f2,c4,f4,a4] [d2,c4,d4,f#4,a4]",
  S: "[[g2,d4,f4,g4,b4] [c2,c4,e4,g4,a#4]@3]/2", // G7 C7
})).s("gm_piano").gain(0.31)

// chords · piano
const piano_2 = note("<A B@8 ~@21 C@2 D E F G F H@8 ~@32>".pickRestart({
  A: "[f2,c4,f4,a4] [d2,c4,d4,f#4,a4]", B: "[f2,c4,f4,a4]/8", C: "[g2,d4,f4,g4,b4]", D: "[a#2,d4,f4,g#4,a#4]!2",
  E: "[c2,c4,f4,a4] [d2,d4,f#4,a4]", F: "[g2,d4,f4,g4,b4] [c2,c4,e4,g4,a#4]", G: "[f2,c4,f4,a4] [d2,d4,f#4,a4]",
  H: "[[f2,c4,d#4,f4,a4]@5 [c2,c4,e4,g4,a#4]@59]/8", // F7 C7
})).s("gm_piano").gain(0.41)

stack(trumpet, piano, piano_2)