Strudelify

Nobody Loves Me Like You Do

Whitney Houston

KeyG majorTempo60 bpm
0:00/0:00
// Nobody Loves Me Like You Do — Whitney Houston
// 60 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 58 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/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.

// other · piano · "NOBODYLO"
const piano = note("<~@22 A@4 B ~ C D@2 ~@10 E@5 ~ F@2 G H@2 I@3 ~@3>".pickRestart({
  A: "[~@31 g4@13 ~ a4@17 g4@14 a4@17 g4@14 b4@21]/4", B: "~@2 a4 g4@20 ~@9", C: "~@29 d5@3",
  D: "[~ b4@4 a4@6 g4@5 a4@6 b4@2 g4@32 ~@8]/2", E: "[~@23 g4@13 ~ a4@17 g4@14 a4@17 g4@14 b4@23 a4 g4@20 ~@17]/5",
  F: "[~@21 d5@4 b4@4 a4@6 g4@15 ~@2 d5@4 b4@4 a4@4]/2", G: "~ g4@15 ~@3 d5@4 b4@4 a4@5",
  H: "[~ g4@5 a4@6 b4@17 a4@2 g4@18 c5@4 ~ b4@4 a4@6]/2", I: "[~ g4@9 a4@10 ~ g4@56 ~@19]/3",
})).s("gm_piano").gain(0.05)

// bass · electric bass finger
const bass = note("<~@12 A B C D E F G H I J K@5 L M N@8 O@3 P@2 Q@2 R S@2 T U@6 ~@4>".pickRestart({
  A: "~@7 d2", B: "g2", C: "c2@3 b1", D: "a1 d2", E: "b1@2 e2 d2", F: "c2@3 c2", G: "b1@7 b1 e2@8", H: "c2@2 b1 b2",
  I: "e2@8 a2@7 e2", J: "a1@7 ~ b1@8 c2@8 d2@8",
  K: "[g1@13 ~ g1 ~ g1@2 g2@5 g1@3 ~ f#1@3 ~ c2@10 ~@2 c2@3 ~ b1@10 ~ b1@4 c2@6 c1@2 c3@4 ~@4 b2@7 b1@5 ~ b1@2 c2@13 ~ c2@2 b1@7 b2@8 e2@14 ~@2 a1@7 a1@3 ~ a1@4 c2@5]/5",
  L: "~ g1@2 c2@8 b1@5 b1@2 b2@8 c2@6", M: "g1@2 c2@8 b1@7 b2@7 ~ a1@7",
  N: "[~ b1@8 c2@7 d2@8 g2@31 ~ c2@15 ~ d2@11 ~ d2@4 g1@32 c2@24 b1@8 a1@16 d2@16 b1@16 e2@8 d2@8 c2@24 c2@8 b1@8]/8",
  O: "[~@6 b1@2 e2@16 c2@16 b1@8 b2@8 e2@16 a2@8 a1@7 ~ a1@7 ~]/3",
  P: "[b1@8 c2@8 d2@8 g1@13 ~ g1 ~ g1@2 g2@5 g1@3 ~ f#1@3 ~ c2@9]/2",
  Q: "[~@3 c2@3 ~ b1@10 ~ b1@4 c2@6 c1@2 c3@4 ~@4 b2@7 b1@5 ~ b1@2 c2@11]/2", R: "~@3 c2@2 b1@7 b2@8 e2@12",
  S: "[~@4 a1@7 a1@3 ~ a1@4 c2@6 g1@2 c2@8 b1@5 b1@2 b2@8 c2@6 g1@2 c2@6]/2", T: "~@2 b1@7 b2@7 ~ a1@8 b1@7",
  U: "[~ c2@13 d2@2 a1@8 b1@7 c2@15 ~ a1@8 b1@7 c2@5 ~ c2@2 d2@7 ~ e2@13 e2@2 a1@13 ~@2 a1@2 a1@8 b1@8 d2@35 ~@31]/6",
})).s("gm_electric_bass_finger").gain(0.53)

// other · electric guitar jazz
const electric_guitar_jazz = note("<A B C ~@47 D@2 ~@6>".pickRestart({
  A: "~@6 d5 b4", B: "c5@13 ~ c5 ~ c5@5 ~ c5@6 a4@4", C: "g4@7 ~", D: "[~@30 d4@15 ~@19]/2",
})).s("gm_electric_guitar_jazz").gain(0.35).pan(0.6)

// chords · piano
const piano_2 = note("<A@2 B@4 C D E@2 F G@6 H I J@2 K L@7 M@5 N@6 O@7 P@4 Q@7>".pickRestart({
  A: "[g4@8 ~@32 c3@6 [g4,b4] ~ [g4,b4,e5]@4 d5@2 ~@8 c4@2, [g3,a4]@26 f#4@2 [d4,d5]@4 [g4,e5]@15 ~@7 f#4@6 [c5,d5]@4, d4@16 [f#4,d5,f#5]@4 g5@27 ~@9 f#3@8, ~@4 g4@2 d5 g5 e4@16 d3@8, ~@10 b4@12 g4@2 f#5@23 ~@7 d5@4 a3@6]/2", // G Em Gsus2 D C Csus2 D
  B: "[[d4,g4,b4]@4 [d4,g4,b4]@4 [g4,b4]@4 ~@4 e4@2 ~@2 e4@4 ~@7 b2 [a2,c4,e4]@4 c4@3 ~@9 [d4,g4,b4]@4 g4@3 ~@4 d4 ~@3 b3, g3@16 [c3,c4]@8 [d4,e4]@2 c4@2 [b2,d4,e4]@4 ~@8 [d3,d4]@7 b2@13 [d4,g4] g3@3, ~@4 d4@3 d4@5 g3@3 g4@3 [e4,g4]@6 ~@2 b4@5 [d4,a4], ~@24 b4@39 ~@17 c4@8 f#4@4 c4@4 ~@14 b3@2 [d4,g4]@4 a4@2 f#4@9 ~, ~@24 g4@30 c3@9 ~@15 c3@17 ~@17 e3@15 ~]/4", // G Am G C Dsus2 E7 D G5 …
  C: "~@6 c4@2 ~@7 c4, c3@15 ~ [c3,a4]@16, [e4,g4,c5]@4 [e4,g4,c5]@4 f#4@5 a3@3, ~ c4@2 ~@3 c4 [d4,f#4,c5]", // F C D7
  D: "~@8 [e4,g4]@6 ~ b3, b4@7 [e4,g4,b4], g3@7 b2@9, b2@8 g4@4 b3@4 e3@15 ~, [d4,g4]@4 b3@4 d4@23 ~", // Em G5
  E: "[~@8 [e4,g4,c5]@6 c3@2 ~@12 c4@3 ~ g3@10 ~@4 e2@2 ~@8 [d4,g4,b4]@7 ~, c3@7 ~ b2@7 ~@6 g3 b3@2 g4@4 ~@4, [e4,g4,c5]@4 ~@4 c5@4 a4@11 d4@5 ~@4, ~ g3@3 ~ f#3@7 ~ g3@3, ~@24 [d#2,f#4,c5,d#5]@7 ~ [e2,g4,d5]@16 [a2,d3,c5,d5]@15 ~]/2", // C G C Cdim Em7 D7
  F: "[a2,c4,e4,g4]@7 ~ [b2,b3,d4,g4]@6 d4@2 [c3,c4,e4,g4]@7 ~@5 f#3@4, ~@3 [d3,c4,d4,f#4,a4]", // Am7 G C D7
  G: "[g4@8 ~@8 f#5@6 ~@18 g3@6 g4 ~@5 d5@2 ~@10 [d4,a4,b4]@8 [d4,a4,b4]@8 [d4,f#4,a4,b4]@8 d4@4 ~@36 [c3,c4,e4]@8 ~@8 f#4@8 ~@8 g4@8 ~@14 d4@2 ~@6 b3@2, g3@30 d4@17 ~ [d3,g4,e5]@12 c5@52 [d4,e4]@4 c4@4 [d3,d4,e4]@8 ~@16 [d3,c5]@40 [d4,g4]@2 g3@6, [b4,d5]@5 b4@11 [g4,e5]@7 ~@4 f#4@2 a3@19 e4@4 c4@4 g3@6 g4@6 g4@4 d4@4 f#4@11 b3 [d4,g4]@2 a4 f#4@3 [d4,a4]@2, ~@8 g4@20 d5@19 ~ b4@8 f#3@36 d4@4 [e3,b3]@31 ~@17 a4@12 c4@35 ~, ~@12 d5@2 g5@2 d5@6 f#5@25 ~@7 d5@8 c4@2 g3@24 [f#4,a4,b4]@39 ~@9 e4@55 ~]/6", // Bm7 C Em7 Dsus2 D7 G5 Bm C …
  H: "~@4 [e4,g4,c5]@4 ~@7 c4, c3@15 ~ [d3,a4]@16, [e4,g4,c5]@4 ~@9 a3@3, ~ c4@2 ~@3 c4 [d4,f#4,c5]", // C D5 C D7
  I: "~@6 b3@2 [e4,g4]@6 ~ b3, b4@7 ~, g3@15 ~ e3@15 ~, [d4,g4]@8 [d4,g4]@7 ~@13 [e4,g4,b4]@4, ~ b3@2 ~@5", // Em G5 Em
  J: "[~@8 c5@8 ~@8 [f#4,c5,d#5]@4 c4@3 ~ g3@10 ~@4 d4@2 g3@4 ~@4 [c#4,g4]@7 ~, c3@6 a4@5 b3 ~@4, [e4,g4,c5]@4 [e4,g4]@11 ~ [g4,d5]@8 g4@4 ~@4, ~@2 g3@13 ~@6 g3@3 ~@2 g3@6, ~@16 c5@4 f#3@28 [d3,d4,d5]@15 ~]/2", // Cdim C#dim C Em G5 D
  K: "g4 [b3,d4,g4] ~ [d3,c4,d4,f#4,a4], a2, c4@3 ~, e4 [c3,b3,e4,g4], ~ b2@3", // G D7 Cmaj7
  L: "[g3@16 ~@2 g3@2 ~@2 [d4,g4] ~@2 b4@2 [b3,d4,b4]@2 d5 ~@9 [e4,g4]@4 ~@15 a3@2 [c4,a4]@2 ~@12 g3@4 [d4,f#4]@4 ~@9 c4@2 ~@8 [e4,g4]@4 c4@3 ~@8 [f#3,f#4,a4,c5,d#5]@8 [g4,b4,d5]@8 g4@6 ~@13 b3@2 d5 ~ [e4,g4,c5]@8 ~@4 c4@4 ~@13 [c4,a4]@2 ~@12 c4@2 ~@15 f#4@2 [c3,c4,e4,g4]@7, d5@23 d4@4 ~@4 [e4,g4,c5]@8 ~@4 c4@4 [d4,f#4]@4 d3@11 c3@14 ~@2 d3@11 [d4,a4]@4 [e4,g4,c5]@8 ~@8 [f#4,a4]@7 ~@24 g4@7 d4@7 ~@9 [e4,g4,c5]@8 ~@3 f#3@6 f#3@6 ~@4 g3@11 ~@2 f#3@6 f#4@2 c5@6 ~@7, b4@23 g4@7 ~@9 c5@14 c4 [d4,f#4,c5]@7 ~ [e4,g4,c5]@8 c5@13 c5@10 ~@8 c5@15 ~@16 [b4,d5]@21 ~@23 c4@6 a3@4 ~@16 [d4,f#4]@3 a3@8 [c4,a4]@4 ~@7, [d4,g4]@20 g3@12 ~@3 g3@26 ~@5 g3@8 ~@8 c4@2 d4@3 f#3@6 c3@14 ~@2 [d3,d4]@15 g3@12 ~@6 d3@13 c3@14 ~@2 [d3,d4,a4]@15 c3@14 d3@17 ~@7, ~@16 d3@15 c3@14 ~@2 a4@9 f#3@6 ~@8 [e4,g4]@7 ~ a4@6 f#4@10 ~@3 g3@11 ~@5 c4@11 ~@14 b3@7 b3@4 g4@5 ~@17 f#4@7 f#4@8 [e4,g4,c5]@8 [e4,g4,c5]@8 a4@5 d4@9 ~@8]/7", // G5 Bm Em F D Em F#dim G …
  M: "[~ g4@7 ~@8 [d3,c4,d4,f#4,a4]@7 ~ g4@8 ~@6 g5@2 [a4,f#5]@4 ~@20 c3@6 [g4,b4] ~ [g4,b4,e5]@4 d5@2 ~@8 c4@2 [d4,g4,b4]@8 [d4,g4,b4]@8 [g4,b4]@8 ~@8 e4@4 ~@4 e4@8 ~@14 b2@2 [a2,c4,e4]@8, ~ [g3,b3]@22 ~ [g3,d4]@16 ~@8 f#5@4 d5@2 b4@2 [e4,e5]@15 ~@7 f#4@6 [c5,d5]@4 ~@24 b4@32 [b2,d4,e4]@8 ~@8, ~@8 [e3,e4]@15 ~@11 b4@6 ~@4 b4@6 [d4,f#4]@21 ~ d3@16 ~@24 g4@30 c3@6 g4@12, ~@9 g4@15 ~@8 g4@7 ~ [g4,d5] ~@5 a4@25 ~@7 d5@4 a3@6 ~@16 d4@12 d4@20 g3@15 ~@9, ~@36 d5@4 ~@4 g5@27 ~@9 f#3@8 g3@32 [c3,c4]@16 [d4,e4]@4 c4@11 ~@9]/5", // D7 D G Em G Am G G5 …
  N: "[c4@6 ~@18 [d4,g4,b4]@8 g4@6 ~@8 d4@2 ~@6 b3@2 ~@12 c4@4 ~@14 c4@2 ~@16 [e4,g4]@12 ~@2 b3@2 ~@8 [e4,g4,c5]@6 c3@2 ~@12 c4@3 ~ g3@10 ~@4 e2@2 ~@8 [d4,g4,b4]@7 ~ [a2,c4,e4,g4]@7 ~, [e4,g4]@22 b2@26 [d4,g4]@2 g3@6 ~@4 c4@8 ~@12 c4@6 ~@2 [d4,g4]@4 b3@4 d4@23 ~@25 [d#2,f#4,c5,d#5]@7 ~ [e2,g4,d5]@12 b3@4 g4@8 ~@16, ~@3 c3@7 c4@2 ~@7 b3 [d4,g4]@2 a4 f#4@3 [d4,a4]@2 [e4,g4,c5]@4 [e4,g4,c5]@4 f#4@6 [d4,f#4,c5]@2 b4@14 [e4,g4,b4]@2 [e4,g4,c5]@4 ~@4 c5@4 a4@11 d4@5 ~@8, ~@8 [d3,d4]@16 ~@16 e3@15 ~ c3@15 ~ [c3,a4]@16 b2@8 g4@4 b3@4 e3@15 ~@5 g3@12 ~@4 f#3@28 [a2,d3,c5,d5]@15 ~@9, ~@8 c4@8 f#4@7 ~@9 b4@23 ~@27 a3@6 g3@14 b2@18 c3@14 ~@2 b2@14 ~@12 g3@6 ~@4 g3@12 ~@8]/6", // G Em C G Am7 Em G5 Cdim …
  O: "[[b2,b3,d4,g4]@6 d4@2 [c3,c4,e4,g4]@7 ~@5 f#3@4 g3@16 ~@2 g3@2 ~@2 [d4,g4] ~@2 b4@2 [b3,d4,b4]@2 d5 ~@9 [e4,g4]@4 ~@15 a3@2 [c4,a4]@2 ~@12 g3@4 [d4,f#4]@4 ~@9 c4@2 ~@8 [e4,g4]@4 c4@3 ~@8 [f#3,f#4,a4,c5,d#5]@8 [g4,b4,d5]@8 g4@6 ~@13 b3@2 d5 ~ [e4,g4,c5]@8 ~@4 c4@4 ~@13 [c4,a4]@2 ~@8 [e4,g4,c5]@4 c4@2, ~@16 [d3,c4,d4,f#4,a4]@8 d5@23 d4@4 ~@4 [e4,g4,c5]@8 ~@4 c4@4 [d4,f#4]@4 d3@11 c3@14 ~@2 d3@11 [d4,a4]@4 [e4,g4,c5]@8 ~@8 [f#4,a4]@7 ~@24 g4@7 d4@7 ~@9 [e4,g4,c5]@8 ~@3 f#3@6 f#3@6 ~@4 g3@10, ~@24 b4@23 g4@7 ~@9 c5@14 c4 [d4,f#4,c5]@7 ~ [e4,g4,c5]@8 c5@13 c5@10 ~@8 c5@15 ~@16 [b4,d5]@21 ~@23 c4@6 a3@4 ~@14, ~@24 [d4,g4]@20 g3@12 ~@3 g3@26 ~@5 g3@8 ~@8 c4@2 d4@3 f#3@6 c3@14 ~@2 [d3,d4]@15 g3@12 ~@6 d3@13 c3@14 ~@2 [d3,d4,a4]@15 c3@14, ~@40 d3@15 c3@14 ~@2 a4@9 f#3@6 ~@8 [e4,g4]@7 ~ a4@6 f#4@10 ~@3 g3@11 ~@5 c4@11 ~@14 b3@7 b3@4 g4@5 ~@17 f#4@7 f#4@8 [e4,g4,c5]@8 ~@6]/7", // G C G5 Bm Em F D Em …
  P: "[~@15 f#4@2 [c3,c4,g4]@7 ~ g4@7 ~ g4@5 c3@2 c3@2 c3@2 [c3,e4,a4]@2 c3 ~ [c3,c4,g4]@7 ~ g4@7 [e3,e4,g4]@15 ~ [c3,c4]@7 ~ [g3,b3]@7 [e4,g4]@7 ~ [b3,f#4,a4]@7 ~ [e4,g4,b4]@12 ~@3 [a3,d4,e4]@3, d3@17 ~@15 e3@15 ~@47 e3@14 ~@20, ~@2 a4@5 d4@2 f#4@2 c5@6 ~@21 c4@2 g4@7 ~ e4@15 ~@16 e4@13 ~@36, ~@2 [d4,f#4]@3 a3@8 [c4,a4]@4 e4@15 e4@10 c4@5 ~@32 g4@3 ~@5 g4@4 ~@37, ~@3 f#3@13 ~@9 [g3,b3]@22 ~@9 [g3,b3]@22 ~@50]/4", // C5 Am C5 Em C G Em B7 …
  Q: "[~@9 [e3,e4]@3 ~@2 [c3,c4,g4]@8 g4@8 ~ [c4,d4]@31 ~@48 g4@2 [g4,b4,e5]@4 d5@3 ~@11 e4@11 ~@2 b4@64 ~@17, ~@5 [a3,c#4]@7 ~@2 e4@32 ~@17 d4@15 [f#4,d5,f#5]@4 g5@2 g4@2 f#5@2 f#4@2 [d4,d5]@4 [g4,e5]@10 c3@12 ~@5 c4@64 ~@39, ~@22 [g3,b3]@24 ~@16 g3@47 ~@3 d3@30 [e2,f#4,g#4]@64 ~@18, ~@30 [e3,g4]@32 ~ [b4,d5]@9 b4@37 ~ b4 ~@8 d5@11 [c5,d5]@64 ~@30, ~@70 g4@4 d5@2 g5@2 e4@32 ~@9 f#4@22 [b3,e4]@64 ~@19]/7", // E C5 Csus2 Em A D C G …
})).s("gm_piano").gain(0.25).pan(0.6)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A ~ B C D E F G H ~ I@2 ~ J K@2 L F M N O P ~@3 Q ~@2 R ~ S T@2 U@2 V W X@2 ~ Y ~@2 Z@2 ~@8 AA ~@3
>`.pickRestart({
  A: "~@10 f#4 ~@5", B: "~ e4 ~@6, g3 ~", C: "~@4 c3@3 ~@7 a3@2, ~@3 f#3",
  D: "~@6 g3@7 ~@3, g3@3 ~@5, ~@2 b3@5 ~@9, ~ d4 ~@2", E: "~@5 f#3@3, ~@4 d4@3 ~", F: "~@10 g3@2 ~ b3@2 ~, ~@3 g3",
  G: "~@12 c4@3 ~ [f#4,a4]@8 ~@8, ~@8 d4@7 ~", H: "~@8 d3@7 ~@13 b3@3 ~, b4 ~",
  I: "[~@26 f#4@20 [b4,e5] ~@5 f#4@2 ~@10, ~@20 g5@27 ~@17]/2", J: "g3 ~",
  K: "[~@22 g3@7 ~@3, ~ c3@4 [d4,g4] ~@2, ~@8 c4@20 a3@35 ~, ~@20 f#3@43 ~, ~@32 [g3,d4,b4]@4 b3@4 b4@23 ~]/2", // G5 G
  L: "~@3 c4 ~ f#3@3, ~@4 [d4,f#4]@3 ~", M: "~@16 [d3,d4]@15 ~, ~@3 c4@4 ~, ~@2 [f#4,a4] ~",
  N: "~@8 d3@8 ~@12 b3@3 ~, b4 ~", O: "~@7 d4@5 ~@2 f#3@2", P: "~@7 d3 ~@8",
  Q: "~@8 g3@7 ~@8 b4@3 ~@6, ~@6 d3@8 ~ g3@12 ~@5", R: "~@3 b4", S: "~@6 f#4 ~@9", T: "[~@7 e4 ~@8, ~@3 g3@2 ~@3]/2",
  U: "[c3@3 ~@7 a3@2 ~@6 g3@7 ~@7, ~@4 f#3@2 g3@3 ~@7, ~@14 b3@5 ~@13, ~@4 d4 ~@3]/2", V: "~@3 f#3@3 ~@2, ~@2 d4@3 ~@3",
  W: "~@6 g3@2 ~ b3@2 ~@5, ~@2 g3 ~", X: "[~@4 c4@3 ~ [f#4,a4]@8 ~@16 d3@7 ~@13 b3@3 ~@9, ~@4 d4@7 ~ b4@8 ~@12]/2",
  Y: "~@3 d3 ~@12", Z: "[~@32 g3@7 ~@8 b4@3 ~@14, ~@30 d3@8 ~ g3@12 ~@13]/2", AA: "~@20 f#4@3 ~@9",
})).s("gm_piano").gain(0.13).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@13 A B C D E F G H I J ~@7 K@3 L@7 M@2 ~@7 N ~@8>".pickRestart({
  A: "~@10 g3@11 ~@11, g2@21 ~@11, ~ d3@10 ~@5, ~@4 g3@5 ~@23, ~@6 b3@15 ~@11",
  B: "~@5 c4@6 ~@2 e3 ~ e3, c3@11 ~ c3@4, ~@2 g3@19 ~@7 g3@4, ~@4 c4@5 ~@23, ~@3 d4@8 ~@5",
  C: "~@10 a3@5 ~@11 d4@4 c4@2, a2@15 ~@7 g4@6 ~@4, ~@2 e3@13 ~ d3@14 ~@2, ~@4 a3@5 ~@9 a3@13 ~, ~@6 c4@10 ~@4 d4@4 f#4@7 ~",
  D: "~@5 b3@3 ~@3 b3 ~ a3 ~ a3, b2@15 ~@17, ~@2 f#3@13 ~ e3@7 ~ d3@7 ~, ~@2 b3@3 ~@4 b3@2 ~@5, ~@6 d4@9 ~@5 d4@4 ~@4 d4@4",
  E: "~ g3 ~@2 [d4,e4]@11 ~, c3@31 ~, ~@4 c4@27 ~, ~@6 g3@25 ~", // Dsus2
  F: "~@6 d4@10 ~@2 b3@2 ~@4 e4@5 ~@3, b2@15 ~@7 b3@7 ~@3, ~ f#3@7 e3@7 ~, ~@4 b3@12 ~@4 d4@9 ~@3",
  G: "~@2 g3@2 ~@4 c4@6 ~@4 b3@2 ~@4 d#4@5 ~@3, c3@14 ~@2 b2@13 ~@3, ~@4 d4@10 ~@6 e4@9 ~@3, ~@6 g3@7 ~@9 b3@7 ~@3",
  H: "~@12 b3@2 g3@2 ~@8 a3@7 ~, e3@14 ~@2 a2@15 ~, ~@2 b3@4 f#4@9 ~@5 g3@11 ~, ~@2 e4@2 g4@4 ~@3 b3@5, ~@10 e4@5 ~@3 e3@13 ~",
  I: "~@2 e3@2 ~@2 e3@2 ~@2 f#3@2 ~@2 f#3@2 ~@2 g3@2 ~@4 e4@5 ~@3, a2@4 a3@4 b2@8 c3@13 ~@3, ~@6 b3@2 ~@2 c4@3 ~@3, ~@22 g3@7 ~@3",
  J: "[g3,b3,d4]@9 ~@7", // G
  K: "[~@22 g3@2 ~@2 g3@2 ~@4 e3@8 ~@24 b3@2 ~@18 d4@3 ~@9, ~@24 e3@6 g3@14 ~@14 d3@4 d3@6 a3@4 b3@4 d3@4 a3@7 ~@9, ~@14 c3@3 ~@11 g2@15 ~@5, ~@60 g3@5 ~ [g3,b3]@4 d3@4 a3@4 b3@8 ~@10, ~@82 d3@5 ~@9]/3", // G
  L: "[~@18 e3@2 ~@2 e3@2 ~@10 a3@4 ~@12 d4@4 c4@2 ~@10 b3@6 ~@6 b3@2 ~@2 a3@2 ~@2 a3@2 ~@2 g3@2 ~@4 [d4,e4]@22 ~@8 d4@10 ~@2 b3@2 ~@4 e4@5 ~@5 g3@2 ~@4 c4@6 ~@4 b3@2 ~@4 d#4@5 ~@15 b3@2 g3@2 ~@8 a3@7 ~@3 e3@2 ~@2 e3@2, ~@4 g3@6 c4@4 e3@4 ~@8 e3@13 ~ d3@14 ~@2 b2@15 ~@17 c3@31 ~ b2@15 ~@17 c3@14 ~@2 b2@13 ~@9 f#4@9 ~@5 g3@11 ~@5 a3@4, ~@6 e3@6 g3@7 ~ g3@4 ~@4 a3@5 ~@5 g3@4 a3@13 ~@3 f#3@13 ~ e3@7 ~ d3@7 ~@7 g3@25 ~@3 f#3@14 e3@14 ~@8 g3@7 ~@19 e3@14 ~@2 a2@15 ~ a2@6 ~@2, ~@8 d4@7 ~ b2@8 a2@15 ~@7 g4@6 ~@10 d4@9 ~@5 d4@4 ~@4 d4@4 ~@52 d4@9 ~@7 d4@10 ~@6 e4@9 ~@7 e4@4 g4@8 ~@6 b3@10 ~@8, ~@16 d4@4 ~@10 c4@10 ~@4 d4@4 f#4@7 ~@5 b3@6 ~@8 b3@4 ~@14 c4@27 ~@5 b3@12 ~@6 b3@7 ~@25 b3@7 ~@5 b3@6 ~@2 e4@5 ~@3 e3@13 ~@9]/7", // Dsus2
  M: "[~@2 f#3@2 ~@2 f#3@2 ~@2 g3@2 ~@4 e4@5 ~@3 [g3,b3,d4]@18 ~@22, b2@8 c3@13 ~@43, ~@2 b3@2 ~@2 c4@3 ~@23, ~@14 g3@7 ~@43]/2", // G
  N: "~@13 g3@3 ~@16",
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.4)

// other · electric guitar jazz
const electric_guitar_jazz_2 = note(`<
  A B C D E ~@2 F ~ G ~@2 H I J K L@3 ~ M N O P@3 Q@2 R S@2 ~@4 T@2 U V@2 W X@3 Y Z AA AB AC@6 ~@4
>`.pickRestart({
  A: "~@12 d5@2 f5@10 f#5@3 ~ d5@4", B: "e5@12 ~@4 d5@5 ~ d5@6 c5@4", C: "b4@3 ~@5", D: "d4@11 ~ g4@4", E: "a#3@7 ~@9",
  F: "~@8 d5@7 ~", G: "a4@8 g4@8 a4@15 ~", H: "~@4 c6@3 a5 g5@6 a5@2", I: "g5 ~",
  J: "~@3 f4@9 g4 ~@3 c4@2 ~ c4@4 ~ c4@8", K: "a#3@3 ~@5",
  L: "[~@10 b4@2 c5@2 d5 ~ d5@6 f#5@2 b4@6 d5@16 ~@13 a4@12 ~ g4@8 e4@10 ~@6]/3", M: "f4@15 ~ g4@8 a4@8",
  N: "c5 d5!2 e5", O: "b4@6 ~@2 b4@4 c#5@4 d#5@11 ~@5",
  P: "[~@7 d5@6 f#5@9 ~@4 f5@4 d#5@13 ~@3 f#5@11 f#5@10 ~@2 e5@4 d5@4 c#5@15 ~@4]/3",
  Q: "[~@4 e5@5 b4@2 a4@8 ~@12 a4@2 b4@2 c5@2 b4@4 e5@4 d5@5 d5@4 e5@3 ~ e5@5 ~]/2",
  R: "~@2 c5@2 d5@6 e5@6 ~@5 e5@4 f5@6 ~", S: "[~ d5@7 g4@7 ~ f4@4 g4@4 c4@14 ~@26]/2",
  T: "[~@2 b4@2 c5@2 d5 ~ d5@6 f#5@2 b4@6 d5@16 ~@13 a4@12 ~]/2", U: "g4@4 e4@5 ~@7",
  V: "[~@24 f4@15 ~ g4@8 a4@8 c5@8]/2", W: "d5@4 d5@4 e5@4 b4@3 ~",
  X: "[~@31 d5@6 f#5@9 ~@4 f5@4 d#5@13 ~@3 f#5@11 f#5@10 ~@2 e5@3]/3", Y: "~ d5@4 c#5@15 ~@8 e5@4",
  Z: "~ b4@2 a4@8 ~@12 a4@2 b4@2 c5@2 b4@3", AA: "~ e5@4 d5@5 d5@4 e5@3 ~ e5@5 ~@3 c5@2 d5@4",
  AB: "~@2 e5@6 ~@5 e5@4 f5@6 ~@2 d5@7",
  AC: "[g4@7 ~ f4@4 g4@4 g5@6 ~@2 d5@7 g4@7 ~ f4@4 g4@4 ~@8 d5@7 g4@7 ~ g4@7 ~@9 a4@22 ~ d4@7 ~@2 e4@6 ~@2 f4@35 ~@31]/6",
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.6)

// other · lead 1 square
const lead_1_square = note(`<
  ~@2 A B C@2 D E F G H I ~@10 J K L M N O@2 P@2 ~@4 Q R S@3 ~ T@2 U V@2 W@4 X@2 Y@2 ~@4
>`.pickRestart({
  A: "~@6 d4 g4 f#4@2 d4@4 ~@2", B: "d4@2 e4@3 ~@2 e4@16 ~@9",
  C: "[~@8 e4@2 g4@2 a4@8 f#4@2 a4@4 f#4@4 d4@14 ~@18 b3 ~]/2", D: "d4@6 c4 ~ c4@2 b3@4 a3@11 ~@3 a3@2 b3@2",
  E: "d4@2 ~ e4@7 b3@3 ~ a3@2 b3 a3 g3@8 ~@2 g3@4", F: "e4@20 f#4@7 ~ f#4@4", G: "g4 ~",
  H: "~@4 c4 ~ c4@5 d4@2 ~ a3@4 g3@7 ~ a3@3 ~ b3@2", I: "~ g3@15 ~@16", J: "~@31 g4",
  K: "~ g4 ~ g4@2 ~@2 g4@3 ~ g4 ~ a4@2 ~ a4@2 ~@12 g4 ~", L: "g4 ~ g4@2 ~@2 g4@3 ~ g4@2 a4@2 ~@15 g4 ~ g4",
  M: "~ g4 ~@3 g4 ~@3 g4@2 b4@4 ~@2 b4 ~ b4@5 b4@2 b4@6", N: "~@2 a4 g4@17 ~@12",
  O: "[~@22 d4 ~ d4@2 e4@2 f#4 ~ g4@7 a4@2 b4@4 ~ a4@2 b4@5 ~@10 d5@2 ~]/2",
  P: "[~ b4@4 a4 ~ a4@4 g4@4 ~ a4@4 ~@2 b4@2 g4@13 ~@27]/2", Q: "~@24 c4@6 b3 ~",
  R: "b3@2 ~ a3@3 b3@2 a3@12 ~@2 a3@2 d4@2 ~ e4@5",
  S: "[~@2 b3@3 a3@2 ~ b3 a3 g3@8 ~@4 g3@2 e4@16 ~@2 f#4@2 ~ f#4 ~@2 f#4@2 b4@3 e5@6 b4 g4 ~ a4@6 b4@3 ~ b4@2 g4 a4 ~ e4 g4@7 ~@11]/3",
  T: "[~@23 g4 ~ g4 ~ g4@2 ~@2 g4@3 ~ g4 ~ a4@2 ~ a4@2 ~@12 g4 ~ g4 ~ g4@2 ~@2 g4@2]/2",
  U: "~@2 g4@2 a4@2 ~@15 g4 ~ g4 ~ g4 ~@3 g4 ~@2", V: "[~ g4@2 b4@4 ~@2 b4 ~ b4@5 b4@2 b4@7 ~ a4 g4@8 ~@29]/2",
  W: "[~@7 d4!2 ~@2 d5@2 d5@7 ~ b4@7 a4@2 b4@6 a4@3 ~ b4@2 ~@11 d5@2 ~@2 b4@4 a4 ~ a4@4 g4@3 e5@5 d5 b4 ~ d5@6 d5@2 ~@2 b4@4 a4 ~ a4@3 g4@3 ~ e5@5 d5 b4 ~ d5@6 d5@2 ~@2 b4@4 a4 ~ a4@3]/4",
  X: "[~ g4@4 ~ a4@6 b4 ~ b4@7 ~ b4@3 b4@4 a4@2 g4@10 ~@8 c5@2 ~@3 b4@4 a4 ~ a4@4]/2",
  Y: "[~ g4@6 ~@3 a4@4 ~@7 g4@4 ~@6 g4@32 ~]/2",
})).s("gm_lead_1_square").gain(0.36)

// other · string ensemble 1
const string_ensemble_1 = note("<A@3 ~@8 A@3 B C D E@2 F ~@2 G@4 H@5 ~@4 I@5 ~ J@6 K L@8 ~@2>".pickRestart({
  A: "[d6@47 ~]/3", B: "~@7 a4", C: "b4@16 a4@4 g4@4 f#4@3 c5@4 ~", D: "d5@15 ~",
  E: "[e6@16 f#6@9 ~ f#6@2 g6@2 a6@26 ~@8]/2", F: "g5 a5",
  G: "[~@17 g5 ~ b5@2 c6 ~ d6@2 g5 ~ g6@2 d6@2 e6@16 f#6@15 e6@15 f#6@16 e6@15 f#6@8 a6@8 g6@4]/4",
  H: "[~@4 e6@38 d6@15 ~ e6@16 d6@15 e6@15 g5@47 ~@9]/5",
  I: "[~@16 g3@2 a3@2 b3@2 g3@2 ~@12 g3@4 a3@12 g3@4 a3@15 g3@14 ~@3 e5@12 g5@2 a5@2 b5@28 f#6@2 g6@2 e6@20 ~@4, ~@3 e3@2 ~@15]/5",
  J: "[~@9 g5 ~ b5@2 c6 ~ d6@2 g5 ~ g6@2 d6@2 e6@16 f#6@15 e6@15 f#6@16 e6@15 f#6@8 a6@8 g6@7 ~ e6@38 d6@15 ~ e6@14]/6",
  K: "~@2 d6@15 e6@15", L: "[~@16 e6@15 g5@15 ~ e6@15 g5@31 a5@16 e6@17 g5@28 ~@5 d6@72 ~@25, g5@31 ~@225]/8",
})).s("gm_string_ensemble_1").gain(0.2)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@14 A ~@5 B ~@34 C@3>".pickRestart({
  A: "~@5 f#4 g4 ~", B: "b5@16 a5@15 ~", C: "[~@5 b5@19 ~@8]/3",
})).s("gm_string_ensemble_1").gain(0.11)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@13 A B C D@3 E F G@8 H@2 ~@2 I@7 J@7 K L@5 ~ M@3 ~>".pickRestart({
  A: "[d3,a3]", B: "g3 ~@2 b2, d4, c3@25 ~@7, ~@8 g3@23 ~",
  C: "a3 b3 c4 [c3,g3] a3@2 ~ c3, a2@13 ~@3 d3@13 ~@3, ~@3 f#3", // C5
  D: "[[b2,a3] e3 [g3,e4] d4 b3 [b3,e4], ~@16 b3@25 ~@7 f#3@33 ~@15]/3", E: "d4 c4 e4 d#4, g3 a3",
  F: "[g3,d4,e4] [a3,c#4]", // Em7 A
  G: "[c4@8 ~@8 c4@16 [b3,d4]@31 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@15 [d3,d4]@8 [f#3,d#4]@8 [b3,e4]@15 d4@8 c#4@8 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@15 [b2,a3,d4]@16 [a2,e3,a3]@7, a3@12 b3@4 g3@46 ~@78 a3@16 e3@31 ~@69, ~@8 d4@9 ~@154 a3@16 ~@69, ~@14 e4@17 ~@225]/8", // Bm C5 Bm7 C5 Bm7 C5 D D#m …
  H: "[[b2,f#3,b3]@8 [c3,c4]@16 [b2,b3]@33 ~@7, ~@8 g3@47 ~@9]/2", // B5 C B
  I: "[~@24 a3@4 b3@4 c4@4 ~@4 a3@8 ~@4 c3@4 [b2,a3]@16 e3@16 [g3,e4]@15 ~ d4@15 b3@15 ~@2 [b3,e4]@16 d4@8 c4@8 e4@8 d#4@8 [g3,d4,e4]@16 [a3,c#4]@16 [a3,c4]@8, ~@24 a2@12 [c3,g3]@5 ~@7 f#3@9 ~@15 b3@25 ~@71 a3@16 ~@40, ~@39 d3@13 ~@51 f#3@33 ~@16 g3@17 ~@55]/7", // B7 C E5 Em7 A Am C5
  J: "[~@8 c4@16 [b3,d4]@31 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@15 [d3,d4]@8 [f#3,d#4]@8 [b3,e4]@15 d4@8 c#4@8 [c3,g3,c4]@15 [b2,a3,d4]@16 [c3,g3,c4]@14, d4@9 ~@154 a3@16 ~@45, ~@3 b3@5 g3@46 ~@78 a3@16 e3@31 ~@45, ~@6 e4@17 ~@201]/7", // Bm C5 Bm7 C5 Bm7 C5 D D#m …
  K: "~ [b2,a3,d4]@16 [e3,a3]@7 [f#3,b3]@8", // Bm7 A5 B5
  L: "[[g3,c4]@16 [e3,a3]@7 [f#3,b3]@8 [g3,c4]@16 [e3,a3]@7 [f#3,b3]@8 [g3,c4]@8 [a3,d4]@8 [b3,e4]@15 d4@8 c#4@8 [e3,a3]@8 [f#3,b3]@8 ~ e4@33 ~, ~@93 a3@15 ~@17 [d3,c4]@33 ~@2]/5", // C5 A5 B5 C5 A5 B5 C5 D5 …
  M: "[d4@7 e4@7 g3@2 a3@9 ~@20 [g#3,e4]@50 ~, ~@25 c4@23 ~@48]/3", // C#m
})).s("gm_string_ensemble_2").gain(0.17).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@22 A B C D E F G H ~@10 I J K L M N O P Q R S T ~@6>".pickRestart({
  A: "~@31 x", B: "~@11 x ~@3 x ~@14 x ~", C: "~@10 x ~@3 x ~@14 x ~@2", D: "~@9 x ~@3 x ~@14 x ~@3",
  E: "~@8 x ~@3 x ~@14 x ~@4", F: "~@7 x ~@3 x ~@14 x ~@5", G: "~@6 x ~@3 x ~@14 x ~@6", H: "~@9 x ~@22", I: "~@3 x",
  J: "~@23 x ~@8", K: "~@3 x ~@3 x ~@14 x ~@9", L: "~@2 x ~@3 x ~@14 x ~@10", M: "~ x ~@3 x ~@14 x ~@11",
  N: "x ~@3 x ~@14 x ~@11 x", O: "~@3 x ~@14 x ~@11 x ~", P: "~@2 x ~@14 x ~@14", Q: "~ x ~@12 x ~ x ~@14 x",
  R: "~@13 x ~ x ~@14 x ~", S: "~@14 x ~@14 x ~@2", T: "~@7 x ~@3 x ~@3 x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@22 A B C D E F G H ~@11 I J K L M N O P Q R S ~@6>".pickRestart({
  A: "~@27 x ~@4", B: "~@7 x ~@14 x ~@9", C: "~@6 x ~@14 x ~@10", D: "~@5 x ~@14 x ~@11", E: "~@4 x ~@14 x ~@12",
  F: "~@3 x ~@14 x ~@13", G: "~@2 x ~@14 x ~@14", H: "~ x ~@30", I: "~@19 x ~@11 x", J: "~@7 x ~@7 x",
  K: "~@13 x ~@15 x ~@2", L: "~@3 x ~@3 x", M: "~@11 x ~@15 x ~@4", N: "~@5 x ~@7 x ~@2", O: "~@9 x ~@15 x ~@6",
  P: "~@3 x", Q: "~@23 x ~@8", R: "~@3 x ~@7 x ~@4", S: "~@5 x ~@26",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@22 A B C D E F G ~@12 H I J K L M N O P Q R ~@6>".pickRestart({
  A: "~@31 x", B: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~",
  C: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@7 x ~@2", D: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3",
  E: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x", F: "~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@7 x ~@3 x ~",
  G: "~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~@7 x ~@6", H: "~@23 x ~@3 x ~@3 x",
  I: "~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~", J: "~@2 x ~@3 x ~@3 x ~@2 x ~@7 x ~@3 x ~@3 x ~@2",
  K: "~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", L: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  M: "~@3 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~", N: "~@2 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2",
  O: "~ x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x", P: "~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x ~",
  Q: "~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x ~@2", R: "~ x ~@3 x ~@3 x ~@4 x ~@7 x ~@7 x ~",
})).gain(0.37)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@3 x ~@4] [~@13 x ~@18] ~@8>").gain(0.5)

// … 36 more lines

More by Whitney Houston