Strudelify

Till the End of Time

Mariah Carey

KeyB♭ majorTempo59 bpm
0:00/0:00
// Till the End of Time — Mariah Carey
// 59 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(59/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 · piano
const piano = note(`<
  ~@28 A@3 B C D E F@2 G H@3 I J@5 K L M@2 N O P@2 Q R S@3 T U@2 V@2 W X Y Z AA@8 AB@5
>`.pickRestart({
  A: "[~@19 [f4,c5,eb5]@16 [f4,bb4,d5]@16 [f4,c5,eb5]@16 [d5,eb5]@4 ~@3 c5@4 bb4@4 [d4,eb4,bb4]@14, ~@67 f4@16 ~@13, ~@67 bb4@11 ~@18, ~@71 d5@12 ~@13]/3", // F7 Bb F7 Ebmaj7
  B: "~ [eb4,ab4,c5]@8 [d4,eb4,bb4]@7", C: "~@2 [eb4,ab4,c5]@15 [f4,c5,eb5]@15", D: "~ [f4,bb4,d5]@16 [f4,c5,eb5]@15",
  E: "[d5,eb5] ~ c5 bb4 [d4,eb4,bb4]@4, f4 ~, bb4@3 ~@5, ~ d5@3 ~@4", // Ebmaj7
  F: "[[eb4,ab4,c5]@16 [d4,eb4,bb4]@15 [eb4,ab4,c5]@16 [eb4,g4,bb4]@8 [eb5,g5]@8 ~]/2", // Ab Ebmaj7 Ab Eb
  G: "~@15 [f4,a4,c5]@7 [f5,a5]@8 ~@2", // F
  H: "[~@14 [f4,a4,c5,d5]@16 [f4,c5,d5,f5]@16 [g4,bb4,d5]@15 [d5,g5]@8 [c5,f5]@8 [eb4,g4,bb4]@8 [eb5,g5]@8 ~@3]/3", // Dm7 Gm G5 F5 Eb
  I: "~@3 [f4,a4,c5]@2 [f5,a5]@2 ~", // F
  J: "[~@12 [f4,a4,c5,d5]@16 [f4,c5,d5,f5]@15 [g4,bb4,d5]@16 [d5,g5]@8 [c5,f5]@8 [eb4,g4]@31 [eb4,g4]@31 ~ [f4,bb4]@8 [f4,bb4]@8 [f4,bb4]@6]/5", // Dm7 Gm G5 F5 Eb Bb5
  K: "~ [f4,bb4]@8 [eb4,f4,ab4,c5]@8 ~@8 [eb4,f4,ab4,c5]@7", L: "~@9 [db4,f4,ab4]@8 ~@7 [ab4,db5,f5]@8",
  M: "[~ [db4,gb4,bb4]@2 [db4,gb4,bb4]@2 [eb4,gb4,bb4]@2 ~]/2", N: "~@7 [eb4,f4,ab4,c5]@8 ~@8 [eb4,f4,ab4,c5]@8 ~",
  O: "~@7 [db4,f4,ab4]@8 ~@7 [ab4,db5,f5]@8 ~@2", P: "[~@3 [db4,gb4,bb4]@8 [db4,gb4,bb4]@8 [eb4,g4,bb4]@8 ~@5]/2",
  Q: "~@7 [eb4,g4,bb4]@7 [eb5,g5]@8 ~@10", R: "~@3 [f4,a4,c5]@4 [f5,a5]@4 ~@5",
  S: "[~@6 [f4,a4,c5,d5]@15 [f4,c5,d5,f5]@16 [g4,bb4,d5]@16 [d5,g5]@8 [c5,f5]@7 [eb4,g4,bb4]@8 [eb5,g5]@8 ~@12]/3", // Dm7 Gm G5 F5 Eb
  T: "~ [f4,a4,c5]@2 [f5,a5]@2 ~@3", U: "[~@3 [f4,a4,c5,d5]@16 [f4,c5,d5,f5]@16 [g4,bb4,d5]@16 [d5,g5]@7 [c5,f5]@6]/2",
  V: "~ [eb4,g4]@15", W: "~ [db4,f4,bb4,db5]@12 [eb4,ab4,db5]@12 ~@7",
  X: "~ [f3,bb3,eb4]@12 [f3,bb3,d4]@9 f3@2 d4@2 eb4@2 d4@2 bb3@2", Y: "[f3,bb3,d4]@6 [eb3,ab3,c4]@5 bb3@2 bb3@2 bb3",
  Z: "[f3,bb3,eb4]@11 [f3,bb3,d4]@12 [f3,ab3,db4]@4 [eb3,ab3,c4]@4 [db3,gb3,bb3]", // Ebsus2 Bb Db Ab Gb
  AA: "[~@5 [f3,bb3,db4]@18 c4@2 bb3@2 ab3@4 [c4,eb4,g4]@11 [bb3,d4,f4]@20 [bb3,db4,f4]@12 [c4,eb4,ab4]@20 [c4,eb4,g4]@11 [bb3,d4,f4]@20 [bb3,db4,f4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [bb3,db4,f4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [bb3,db4,f4]@5]/8", // Bbm Cm Bb Bbm Ab Cm Bb Bbm …
  AB: "[~@7 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [bb3,db4,f4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [bb3,db4,f4]@12 [c4,eb4,ab4]@20 ~@7]/5", // Ab Cm Bb Bbm Ab Cm Bb Bbm …
})).s("gm_piano").gain(0.19)

// bass · synth bass 1 · "bass"
const bass = note("<~@26 A@7 B C D@8 E@3 F G@3 H@3 I@3 J K@2 L M N@2 O P Q R S T@8 U@6>".pickRestart({
  A: "[~@20 bb1@31 ~ bb1@31 bb1@10 ~@2 bb1@4 bb1@8 ~@2 bb1@2 d2@2 bb1@2 bb1@10 ~@2 bb1@4 bb1@8 ~ bb1@2 d2@2 bb1@2 eb2@8 ~@4 eb2@4 eb2@8 ~@8 eb2@8 ~@4 eb2@4 eb2@8 ~ eb2@2 d2@2 c2@2 bb1@10 ~@2 bb1@3]/7",
  B: "~ bb1@8 ~@2 bb1@2 d2@2 bb1@2 bb1@10 ~@2 bb1@3", C: "bb1@4 ~ bb1 d2 bb1 eb2@4 ~@2 eb2@2",
  D: "[eb2@8 ~@8 eb2@8 ~@3 eb2@4 eb2@8 ~@2 eb2@2 d2@2 c2@2 eb2@8 ~@4 eb2@4 eb2@8 eb2@2 eb2@6 eb2@8 ~@3 eb2@4 eb2@8 eb2@2 d2@2 eb2@2 f2@2 d2@8 ~@4 d2@4 d2@8 ~@4 f2@4 g2@8 ~@3 g2@4 g2@8 f2@8 eb2@8 ~@4 eb2@4 eb2@8 eb2@2 eb2@5 eb2@8 ~@4 eb2@4 eb2@8 eb2@2 d2@2 eb2@2 f2@2 d2@8 ~@4 d2@4 d2@4]/8",
  E: "[~@7 f2@4 g2@8 ~@4 g2@4 g2@8 f2@8 gb2@12 gb2@19 g2@12 g2@2 f2@2 eb2@6]/3", F: "~ f2@4 bb2@6 bb2@5",
  G: "[~ bb2@8 f2@12 f2@4 f2@16 db2@12 db2@15 c3@4 bb2@12 bb2@4 bb2@8]/3",
  H: "[bb2@2 ab2@2 gb2@2 f2@2 eb2@11 eb2@4 eb2@2 f2@2 gb2@2 f2@2 eb2@2 c3@2 g2@2 c2@2 f2@12 f2@4 f2@8 f2@8 db2@11 db2@14]/3",
  I: "[~@2 db3@2 c3@2 bb2@12 bb2@4 bb2@8 bb2@8 f2@11 f2@4 f2@8 f2@9 ~ eb2@11 eb2@12 ~@2]/3", J: "~@2 eb2 eb2@6 eb2@6 ~",
  K: "[~@4 eb2@2 d2@11 d2@12 gb2@8 g2@12 g2@4 g2@4 a2@4 bb2@3]/2", L: "~ g2@3 eb2@12 eb2@12 ~@4",
  M: "~ eb2 eb2@6 eb2@6 ~@2", N: "[~ eb2@2 d2@12 d2@12 gb2@8 g2@12 g2@11 g2@6]/2", O: "~ gb2@6 gb2@6 ~@3",
  P: "gb2@2 f2@12 f2@5 f2@12 ~", Q: "~ [gb2,db3]@12 [ab2,eb3]@12 ~@7", R: "~ bb2@31", S: "gb2@3 ab2@5",
  T: "[bb2@31 gb2@31 ~ bb2@11 bb2@20 gb2@12 ab2@20 bb2@11 bb2@20 gb2@12 ab2@19 bb2@12 bb2@20 gb2@12 ab2@19 bb2@5]/8",
  U: "[~@7 bb2@20 gb2@12 ab2@19 bb2@12 bb2@20 gb2@12 ab2@19 bb2@12 bb2@20 gb2@12 ab2@20 ~@7]/6",
})).s("gm_synth_bass_1").gain(0.25)

// chords · synth strings 2 · "Sinth strings"
const synth_strings_2 = note("<~@5 A B@5 C D E@5 F G H I@7 J@5 K L M@6 N O P@5 Q R S@8 T@2 U@3 V@3 ~@16>".pickRestart({
  A: "[c4,eb4] f3 [c4,eb4] f3 [bb3,d4] f3 [bb3,d4] f3", // Cm Bb
  B: "[[c4,eb4]@4 f3@4 [c4,eb4]@3 f3@4 [c4,eb4]@4 d4@4 c4@4 bb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@4 eb3@4 [ab3,c4]@4 eb3@4 [bb3,d4]@4 eb3@3 [bb3,d4]@4 eb3@4 [ab3,c4]@8 bb3@8 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@4 [bb3,d4]@4 f3@4 [bb3,d4]@4 f3@4 [c4,eb4]@3 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 d4@4 c4@4 bb3@4 [bb3,d4]@3]/5", // Cm Bb Ab Bb Ab Cm Bb Cm …
  C: "~ eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@4 eb3@4 [ab3,c4]@4 eb3@3 [bb3,d4]@4", // Bb Ab Bb
  D: "eb3 [bb3,d4] eb3 [ab3,c4]@2 bb3@2 [c4,eb4]", // Bb Ab Cm
  E: "[f3@4 [c4,eb4]@4 f3@4 [bb3,d4]@4 f3@4 [bb3,d4]@3 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 d4@4 c4@4 bb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@4 eb3@3 [ab3,c4]@4 eb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@8 bb3@8 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@3 bb3@4 [eb4,g4]@4 bb3@4 [f4,a4]@4 c4@3]/5", // Cm Bb Cm Bb Ab Bb Ab Eb …
  F: "~ [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [gb4,a4]@4 d4@3", // F Gbm
  G: "~ [gb4,a4]@4 d4@3 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [d4,g4]@4 bb3@4", // Gbm G5
  H: "[d4,g4] bb3 [d4,g4]@2 [c4,f4]@2 [eb4,g4] bb3", // G5 F5 Eb
  I: "[[eb4,g4]@3 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [gb4,a4]@4 d4@3 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [d4,g4]@4 bb3@4 [d4,g4]@4 bb3@4 [d4,g4]@8 [d4,g4]@8 ~@31 bb4@31 [c4,eb4]@8 [c4,eb4]@8 [bb3,d4]@8 [bb3,d4]@8 [c4,eb4]@4 f3@4 [c4,eb4]@4, ~@118 [eb4,gb4]@63 ~@43]/7", // Eb F Gbm G5 Cm Bb Cm Ebm
  J: "[f3@4 [f3,bb3,d4]@15 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@4 [bb3,d4]@4 f3@4 [bb3,d4]@4 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 d4@3 c4@4 bb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@4 eb3@4 [ab3,c4]@4 eb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@4 eb3@4 [ab3,c4]@7 bb3@8 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@3]/5", // Bb Cm Bb Cm Bb Ab Bb Ab …
  K: "~ [bb3,d4]@4 f3@4 [bb3,d4]@4 f3@4 [c4,eb4]@4 f3@4 [c4,eb4]@4 f3@3", // Bb Cm
  L: "[c4,eb4] d4 c4 bb3 [bb3,d4] eb3 [bb3,d4] eb3", // Cm Bb
  M: "[[ab3,c4]@4 eb3@4 [ab3,c4]@4 eb3@4 [bb3,d4]@4 eb3@4 [bb3,d4]@3 eb3@4 [ab3,c4]@8 bb3@8 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [f4,a4]@4 c4@3 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [d4,g4]@3 bb3@4 [d4,g4]@4 bb3@4 [d4,g4]@8 [c4,f4]@8 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@3]/6", // Ab Bb Ab Eb F Gbm G5 F5 …
  N: "~ bb3@4 [eb4,g4]@4 bb3@3 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4", // Eb F
  O: "c4 [f4,a4] c4 [gb4,a4] d4 [gb4,a4] d4 [gb4,a4]", // F Gbm
  P: "[d4@4 [gb4,a4]@3 d4@4 [d4,g4]@4 bb3@4 [d4,g4]@4 bb3@4 [d4,g4]@8 [d4,g4]@8 [eb4,gb4]@63 [bb3,d4,f4]@31 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@7]/5", // Gbm G5 Ebm Bb Fm
  Q: "~ [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@7 [f4,ab4]@8", R: "[f4,ab4] [db4,gb4]!3",
  S: "[[db4,gb4]@8 [eb4,gb4]@8 [eb4,gb4]@7 [eb4,gb4]@8 [eb4,gb4]@8 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@7 [f4,ab4]@8 [f4,ab4]@8 [f4,ab4]@8 [db4,gb4]@8 [db4,gb4]@8 [db4,gb4]@8 [db4,gb4]@8 [eb4,g4]@7 [eb4,g4]@8 [f4,a4]@8 [f4,a4]@9 ~ [eb4,g4]@4 bb3@3 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [gb4,a4]@3 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@3]/8", // Gb5 Ebm Fm Gb5 Eb F Eb F …
  T: "[~ d4@4 [d4,g4]@4 bb3@4 [d4,g4]@4 bb3@4 [d4,g4]@8 [c4,f4]@7 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4 bb3@4 [eb4,g4]@4]/2", // G5 F5 Eb
  U: "[bb3@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@4 c4@4 [f4,a4]@3 c4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [gb4,a4]@4 d4@4 [d4,g4]@4 bb3@4 [d4,g4]@4 bb3@4 [d4,g4]@7 [d4,g4]@6]/3", // F Gbm G5
  V: "[~@2 [eb4,gb4]@63 [db4,gb4,bb4]@16 ~@15]/3", // Ebm Gb
})).s("gm_synth_strings_2").gain(0.19)

// chords · pad warm · "sinth1"
const pad_warm = note("<~@5 A B@8 C@2 D@8 E@5 ~@18 F@7 G@2 ~@9 H I J K@8 L@4 ~@2>".pickRestart({
  A: "[eb4,f4,c5] [d4,f4,bb4]", // F7 Bb
  B: "[[eb4,f4,c5]@15 [d4,f4,bb4]@16 [d4,eb4,bb4]@16 [c4,eb4,ab4]@16 [d4,eb4,bb4]@15 [c4,eb4,ab4]@16 [eb4,f4,c5]@16 [d4,f4,bb4]@16 [eb4,f4,c5]@15 [d4,f4,bb4]@16 [d4,eb4,bb4]@16 [c4,eb4,ab4]@15 [d4,eb4,bb4]@16 [c4,eb4,ab4]@16 [eb4,f4,c5]@16 [d4,f4,bb4]@15 [eb4,f4,c5]@5]/8", // F7 Bb Ebmaj7 Ab Ebmaj7 Ab F7 Bb …
  C: "[~@11 [d4,f4,bb4]@16 [d4,eb4,bb4]@16 [c4,eb4,ab4]@15 [d4,eb4,bb4]@6]/2", // Bb Ebmaj7 Ab Ebmaj7
  D: "[~@10 [c4,eb4,ab4]@16 [bb3,eb4,g4]@31 [c4,f4,a4]@31 ~ [d4,gb4,a4,c5]@31 [d4,g4,bb4]@24 [c4,f4,a4]@8 [bb3,eb4,g4]@31 [c4,f4,a4]@31 ~ [d4,gb4,a4,c5]@31 [d4,g4,bb4]@10]/8", // Ab Eb F D7 Gm F Eb F …
  E: "[~@7 [d4,g4,bb4]@4 [eb4,gb4,bb4]@31 [c4,eb4]@8 [f4,bb4]@8 [c4,eb4,f4]@8 [d4,f4,bb4]@8 ~@6]/5", // Gm Ebm Cm Bb5 F7 Bb
  F: "[~@9 [eb4,f4,ab4]@31 ~ [db4,f4,ab4]@31 [db4,e4,bb4]@31 ~ [eb4,gb4,bb4]@31 [eb4,f4,ab4]@31 ~ [db4,f4,ab4]@31 [db4,e4,bb4]@26]/7", // Fm7 Db Bbdim Ebm Fm7 Db Bbdim
  G: "[~@6 [eb4,g4,bb4]@15 [f4,a4,c5]@17 ~@26]/2", H: "~ [db4,gb4,bb4]@16 ~@15", I: "~ [d4,f4,bb4]@31",
  J: "[db4,gb4,bb4]@3 [eb4,ab4,c5]@5", // Gb Ab
  K: "[[d4,f4,bb4]@23 [db4,f4,bb4]@4 [eb4,ab4,c5]@4 [db4,gb4,bb4]@31 ~ [c4,eb4,g4]@11 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@20 [c4,eb4,g4]@11 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@5]/8", // Bb Bbm Ab Gb Cm Bb Gb Ab …
  L: "[~@7 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@19 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@20 ~@6]/4", // Bb Gb Ab Cm Bb Gb Ab
})).s("gm_pad_warm").gain(0.14)

// chords · pad warm · "sinth1" · soft notes
const pad_warm_soft = note("<~@79 A@3>".pickRestart({
  A: "[~@25 [c4,eb4,g4]@12 [bb3,d4,f4]@20 [db4,gb4,bb4]@12 [c4,eb4,ab4]@20 ~@7]/3", // Cm Bb Gb Ab
})).s("gm_pad_warm").gain(0.05)

// chords · orchestral harp · "Harp"
const orchestral_harp = note(`<
  ~@16 A B C D E F G H I J@2 K@2 ~@7 L M N O P Q R S@2 ~@10 T U V W X Y Z AA ~@2 AB ~@16
>`.pickRestart({
  A: "~@27 eb5@2 ~@3, ~@13 [g4,bb4] ~@2", B: "~@13 [a4,c5] ~@2, ~@25 f4@2 ~@5", C: "~@13 d5 ~@2, ~@25 [gb4,a4]@2 ~@5",
  D: "~@25 [bb4,d5]@2 ~@5, ~@12 g4 ~@3", E: "~@2 d5@2 c5@2 g4@2 f4@2 ~@2 [g4,bb4,eb5] ~@3",
  F: "~@12 [a4,c5] ~@3, ~@23 f4@2 ~@7", G: "~@23 [gb4,a4,d5]@2 ~@7", H: "~@23 d5@2 ~@7, ~@11 [g4,bb4] ~@4",
  I: "~ d5@2 c5@2 g4@2 f4@2 ~@7", J: "[~@21 bb4@8 d5@8 gb5@8 ~@19]/2", K: "[~@5 [eb4,f4,c5]@4 ~@7]/2",
  L: "~@8 [bb4,eb5] ~@7, ~@15 g4@2 ~@15", M: "~@15 [f4,a4,c5]@2 ~@15", N: "~@15 d5@2 ~@15, ~@7 [gb4,a4] ~@8",
  O: "~@14 [g4,bb4,d5]@2 ~@9 d5@4 c5@3", P: "~ g4@4 f4@4 ~@5 eb5@2 ~@16, ~@13 [g4,bb4]@2 ~@17",
  Q: "~@13 [a4,c5]@2 ~@17, ~@6 f4 ~@9", R: "~@13 d5@2 ~@17, ~@6 [gb4,a4] ~@9",
  S: "[~@12 [bb4,d5]@2 ~@9 d5@4 c5@4 g4@4 f4@4 ~@25, ~@11 g4@2 ~@51]/2", T: "~@7 [g4,bb4,eb5]@2 ~@23",
  U: "~@7 c5@2 ~@23, ~@3 [f4,a4] ~@12", V: "~@3 [gb4,a4,d5] ~@12",
  W: "~@6 d5@2 ~@9 d5@4 c5@4 g4@4 f4@3, ~@5 [g4,bb4]@2 ~@25", X: "~@5 [bb4,eb5]@2 ~@25, ~@2 g4 ~@13",
  Y: "~@5 c5@2 ~@25, ~@2 [f4,a4] ~@13", Z: "~@2 [a4,d5] ~@13, ~@3 gb4@2 ~@27",
  AA: "~@4 d5@2 ~@9 d5@4 c5@4 g4@3 f4@4 ~@2, ~@3 [g4,bb4]@2 ~@27", AB: "~ gb4@16 ~@15",
})).s("gm_orchestral_harp").gain(0.25)

// other · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@16 A@8 B@5 ~@7 C@8 D@8 E@8 F@2 G H@3 ~@16>".pickRestart({
  A: "[~@26 eb3@31 eb3@31 ~ d3@31 g3@24 f3@8 eb3@31 eb3@31 ~ d3@31 g3@10]/8", B: "[~@14 g3@8 gb3@62 bb2@63 ~@13]/5",
  C: "[~@15 eb2@31 ~ eb2@31 d2@31 ~ g2@23 f2@8 eb2@31 eb2@31 ~ d2@31 g2@21]/8",
  D: "[~@3 g2@8 gb2@63 bb1@31 f2@31 ~ db2@31 gb2@31 ~ bb2@31 f2@25]/8",
  E: "[~@7 db2@31 gb2@31 ~ f2@15 f2@17 ~ eb2@31 eb2@31 ~ d2@31 g2@24 f2@7 eb2@28]/8", F: "[~@4 eb2@31 d2@29]/2",
  G: "~@3 g2@23 g2@6", H: "[~@2 gb2@63 ~@31]/3",
})).s("gm_string_ensemble_2").gain(0.32)

// other · timpani
const timpani = note("<~@28 [~@12 f2!7 ~@13] ~@18 [~ f2!8 ~@23] ~@6 [~@29 f2!3] [~ f2!5 ~@26] ~@26>")
  .s("gm_timpani").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  ~@29 A B C D E F G H I J K L M N O P Q R S T@2 U@2 V@2 W V@2 W@2 X@2 Y Z AA AB ~@9 AC@2 AD AE AF ~@3
>`.pickRestart({
  A: "~@3 x ~@5 x ~@22", B: "~@3 x ~@4 x ~@23", C: "~ x ~@2 x ~@11", D: "~@2 x ~@4 x ~@24", E: "~ x ~@5 x ~@24",
  F: "x ~@2 x ~@12", G: "x ~@5 x ~@24 x", H: "~@5 x ~@25 x", I: "~@5 x ~@24 x ~", J: "~@2 x ~@12 x",
  K: "~@4 x ~@24 x ~@2", L: "~@3 x ~@25 x ~@2", M: "~@3 x ~@24 x ~@3", N: "~ x ~@12 x ~", O: "~@2 x ~@24 x ~@4",
  P: "~ x ~@25 x ~@4", Q: "x ~@12 x ~@2", R: "x ~@25 x ~@4 x", S: "~@25 x ~@5 x", T: "~@12 x ~@2 x",
  U: "~@23 x ~@5 x ~@2", V: "~@11 x ~@2 x ~", W: "~@21 x ~@5 x ~@4", X: "~@10 x ~@2 x ~@2", Y: "~@19 x ~@5 x ~@6",
  Z: "~@19 x ~@4 x ~@7", AA: "~@9 x ~@2 x ~@3", AB: "~@18 x ~@4 x ~@8", AC: "~@6 x ~@2 x ~@6", AD: "~@11 x ~@5 x ~@14",
  AE: "~@11 x ~@4 x ~@15", AF: "~@5 x ~@2 x ~@7",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@79 [~@10 x ~@4 x ~@16] [~@9 x ~@5 x ~@16] [~@4 x ~@2 x ~@8]>").gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  ~@28 A B C@2 D@2 E@2 F G H I J K L M N O@2 P@2 Q R S T@2 U V T U@2 W@2 B X C Y ~@8 Z L@2 N AA O AB ~@2
>`.pickRestart({
  A: "~@12 x ~@14 x ~@4", B: "~@11 x ~@15 x ~@4", C: "~@5 x ~@7 x ~@2", D: "~@9 x ~@15 x ~@6", E: "~ x ~ x",
  F: "~@7 x ~@15 x ~@8", G: "~@7 x ~@14 x ~@9", H: "~@3 x ~@7 x ~@4", I: "~@6 x ~@14 x ~@10", J: "~@5 x ~@15 x ~@10",
  K: "~@5 x ~@14 x ~@11", L: "~ x ~@3 x ~@2", M: "~@4 x ~@14 x ~@12", N: "~@3 x ~@15 x ~@12", O: "~ x ~@7 x ~@6",
  P: "~ x ~@15 x ~@14", Q: "x!2", R: "x ~@15 x ~@14 x", S: "~@15 x ~@15 x", T: "~@7 x ~@7 x", U: "~@13 x ~@15 x ~@2",
  V: "~ x ~@5 x ~@7 x", W: "~@3 x ~@3 x", X: "~@11 x ~@14 x ~@5", Y: "~@10 x ~@14 x ~@6", Z: "~@23 x ~ x ~@6",
  AA: "~@3 x ~@14 x ~@13", AB: "~ x ~@14",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@79 [~@17 x ~@14] [~ x ~@15 x ~@14] [~ x ~@14 x ~@15]>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@47 [~@5 x ~ x ~@24] ~@34>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@28 A B C D E@2 F G H I J K L M N O P Q R S T U V W X Y Z AA Y Z AB AC AD AE AF AG AH ~@8 AI AJ AK AL AM AN AO ~@2
>`.pickRestart({
  A: "~@19 x ~@3 x ~@7 x", B: "~@7 x ~@7 x ~@3 x ~@3 x ~@7 x", C: "~@7 x ~@6 x ~@3 x ~@3 x ~@7 x ~",
  D: "~@3 x ~@3 x ~ x ~ x ~@3 x", E: "~@5 x ~@7 x ~@3 x ~@3 x ~@7 x ~@2", F: "~ x ~ x!3 ~ x",
  G: "~@4 x ~@7 x ~@3 x ~@3 x ~@6 x ~@4", H: "~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@4",
  I: "~@3 x ~@7 x ~@3 x ~@3 x ~@6 x ~@5", J: "~ x ~@3 x ~ x ~ x ~@3 x ~@2", K: "~@2 x ~@7 x ~@3 x ~@2 x ~@7 x ~@6",
  L: "~ x ~@7 x ~@3 x ~@3 x ~@7 x ~@6", M: "~ x ~@7 x ~@2 x ~@3 x ~@7 x ~@7", N: "x ~ x!3 ~ x ~",
  O: "x ~@6 x ~@3 x ~@3 x ~@7 x ~@7 x", P: "~@7 x ~@3 x ~@3 x ~@7 x ~@7 x", Q: "~@3 x ~ x ~ x ~@3 x ~@3 x",
  R: "~@6 x ~@3 x ~@3 x ~@7 x ~@6 x ~@2", S: "~@5 x ~@3 x ~@3 x ~@7 x ~@7 x ~@2",
  T: "~@5 x ~@3 x ~@3 x ~@7 x ~@6 x ~@3", U: "~ x!3 ~ x ~ x", V: "~@4 x ~@3 x ~@3 x ~@6 x ~@7 x ~@4",
  W: "~@3 x ~@3 x ~@3 x ~@7 x ~@7 x ~@4", X: "~@3 x ~@3 x ~@3 x ~@6 x ~@7 x ~@5", Y: "~ x ~ x ~ x ~@3 x ~@3 x ~@2",
  Z: "~@2 x ~@3 x ~@2 x ~@7 x ~@7 x ~@6", AA: "~@7 x ~@3 x ~@6 x ~@7 x ~@5", AB: "~ x ~@3 x ~@3 x ~@7 x ~@7 x ~@6",
  AC: "~ x ~@2 x ~@3 x ~@7 x ~@7 x ~@7", AD: "x ~@3 x ~@3 x ~@7 x ~@7 x ~@6 x", AE: "~@3 x ~@3 x ~@7 x ~@7 x ~@7 x",
  AF: "~@3 x ~@3 x ~@7 x ~@7 x ~@6 x ~", AG: "~ x ~ x ~@3 x ~@3 x ~@3 x", AH: "~@2 x ~@3 x ~@7 x ~@6 x ~@7 x ~@2",
  AI: "~@7 x", AJ: "x ~ x ~ x ~ x!2", AK: "x ~@7 x ~@7 x ~@6 x ~@3 x ~@3 x", AL: "~@7 x ~@7 x ~@7 x ~@3 x ~@3 x",
  AM: "~@7 x ~@7 x ~@6 x ~@3 x ~@3 x ~", AN: "~@3 x ~@3 x ~@3 x ~ x ~ x", AO: "~@3 x ~@12",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@79
  [~@13 x ~@7 x ~@3 x ~@3 x ~@2]
  [~@5 x ~@7 x ~@7 x ~@3 x ~@3 x ~@2]
  [~@5 x ~@6 x ~@7 x ~@11]
>`).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 [~@3 x ~@28] ~@34>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@73 [~@23 x ~ x!3 ~@4] ~@8>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 B C@2 D@2 E@2 F@2 ~ G@2 H@2 I@2 J@2 K@2 L@2 M@2 N O@2 P@2 Q@2 R@2 S@2 T@2 U@2 T U@2 V W@2 X@2 Y@2 Z@2 ~@2 AA
  ~ A ~ AB@2 AC@2 B@2 C@2 ~
>`.pickRestart({
  A: "~@15 x", B: "~@13 x ~@2", C: "~@25 x ~@6", D: "~@3 x", E: "~@23 x ~@8", F: "~@11 x ~@4", G: "~@5 x ~@2",
  H: "~@19 x ~@12", I: "~@9 x ~@6", J: "~@17 x ~@14", K: "~ x", L: "~@15 x ~@16", M: "~@7 x ~@8", N: "~@13 x ~@18",
// … 25 more lines

More by Mariah Carey