Strudelify
Till the End of Time cover art

1991 · Emotions

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, A@4 for four bars: 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@2 B@2 C D E F G H I J K L M N O P Q R@2 S@2 T@2 U T@2 U@2 V@2 W@2 X Y ~@9 Z@2 AA@2 AB ~@3
>`.pickRestart({
  A: "~@3 x ~@5 x ~@22", B: "~ x ~@2 x ~@11", C: "~ x ~@5 x ~@24", D: "x ~@2 x ~@12", E: "x ~@5 x ~@24 x",
  F: "~@5 x ~@25 x", G: "~@5 x ~@24 x ~", H: "~@2 x ~@12 x", I: "~@4 x ~@24 x ~@2", J: "~@3 x ~@25 x ~@2",
  K: "~@3 x ~@24 x ~@3", L: "~ x ~@12 x ~", M: "~@2 x ~@24 x ~@4", N: "~ x ~@25 x ~@4", O: "x ~@12 x ~@2",
  P: "x ~@25 x ~@4 x", Q: "~@25 x ~@5 x", R: "~@12 x ~@2 x", S: "~@23 x ~@5 x ~@2", T: "~@11 x ~@2 x ~",
  U: "~@21 x ~@5 x ~@4", V: "~@10 x ~@2 x ~@2", W: "~@19 x ~@5 x ~@6", X: "~@9 x ~@2 x ~@3", Y: "~@18 x ~@4 x ~@8",
  Z: "~@6 x ~@2 x ~@6", AA: "~@11 x ~@5 x ~@14", AB: "~@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@2 B@2 C@2 D@2 E@2 F G H I J K@2 L@2 M@2 N O P Q@2 R S Q R@2 T@2 A@2 B U ~@8 V J@2 K@2 L W ~@2
>`.pickRestart({
  A: "~@11 x ~@15 x ~@4", B: "~@5 x ~@7 x ~@2", C: "~@9 x ~@15 x ~@6", D: "~ x ~ x", E: "~@7 x ~@15 x ~@8",
  F: "~@3 x ~@7 x ~@4", G: "~@6 x ~@14 x ~@10", H: "~@5 x ~@15 x ~@10", I: "~@5 x ~@14 x ~@11", J: "~ x ~@3 x ~@2",
  K: "~@3 x ~@15 x ~@12", L: "~ x ~@7 x ~@6", M: "~ x ~@15 x ~@14", N: "x!2", O: "x ~@15 x ~@14 x", P: "~@15 x ~@15 x",
  Q: "~@7 x ~@7 x", R: "~@13 x ~@15 x ~@2", S: "~ x ~@5 x ~@7 x", T: "~@3 x ~@3 x", U: "~@10 x ~@14 x ~@6",
  V: "~@23 x ~ x ~@6", W: "~ 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@2 G H I J K L M N O P@2 Q R S T U V W X Y W X Z AA AB AC AD AE AF ~@8 AG AH AI AJ AK AL AM ~@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: "~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@4", H: "~@3 x ~@7 x ~@3 x ~@3 x ~@6 x ~@5", I: "~ x ~@3 x ~ x ~ x ~@3 x ~@2",
  J: "~@2 x ~@7 x ~@3 x ~@2 x ~@7 x ~@6", K: "~ x ~@7 x ~@3 x ~@3 x ~@7 x ~@6", L: "~ x ~@7 x ~@2 x ~@3 x ~@7 x ~@7",
  M: "x ~ x!3 ~ x ~", N: "x ~@6 x ~@3 x ~@3 x ~@7 x ~@7 x", O: "~@7 x ~@3 x ~@3 x ~@7 x ~@7 x",
  P: "~@3 x ~ x ~ x ~@3 x ~@3 x", Q: "~@5 x ~@3 x ~@3 x ~@7 x ~@7 x ~@2", R: "~@5 x ~@3 x ~@3 x ~@7 x ~@6 x ~@3",
  S: "~ x!3 ~ x ~ x", T: "~@4 x ~@3 x ~@3 x ~@6 x ~@7 x ~@4", U: "~@3 x ~@3 x ~@3 x ~@7 x ~@7 x ~@4",
  V: "~@3 x ~@3 x ~@3 x ~@6 x ~@7 x ~@5", W: "~ x ~ x ~ x ~@3 x ~@3 x ~@2", X: "~@2 x ~@3 x ~@2 x ~@7 x ~@7 x ~@6",
  Y: "~@7 x ~@3 x ~@6 x ~@7 x ~@5", Z: "~ x ~@3 x ~@3 x ~@7 x ~@7 x ~@6", AA: "~ x ~@2 x ~@3 x ~@7 x ~@7 x ~@7",
  AB: "x ~@3 x ~@3 x ~@7 x ~@7 x ~@6 x", AC: "~@3 x ~@3 x ~@7 x ~@7 x ~@7 x", AD: "~@3 x ~@3 x ~@7 x ~@7 x ~@6 x ~",
  AE: "~ x ~ x ~@3 x ~@3 x ~@3 x", AF: "~@2 x ~@3 x ~@7 x ~@6 x ~@7 x ~@2", AG: "~@7 x", AH: "x ~ x ~ x ~ x!2",
  AI: "x ~@7 x ~@7 x ~@6 x ~@3 x ~@3 x", AJ: "~@7 x ~@7 x ~@7 x ~@3 x ~@3 x", AK: "~@7 x ~@7 x ~@6 x ~@3 x ~@3 x ~",
  AL: "~@3 x ~@3 x ~@3 x ~ x ~ x", AM: "~@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@5 V W@2 X@2 Y@2 Z@2 ~@2 A ~ A ~
  AA@2 AB@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",
  O: "~@3 x ~@4", P: "~@11 x ~@20", Q: "~@5 x ~@10", R: "~@9 x ~@22", S: "~ x ~@2", T: "~@7 x ~@24", U: "~@3 x ~@12",
  V: "~@5 x ~@26", W: "~ x ~@6", X: "~@3 x ~@28", Y: "~ x ~@14", Z: "~ x ~@30", AA: "~@7 x", AB: "~@27 x ~@4",
})).gain(0.4)
// … 20 more lines

More by Mariah Carey