Strudelify

When Sunny Gets Blue

Miller

KeyC majorTempo80 bpm
0:00/0:00
// When Sunny Gets Blue — Miller
// 80 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Guitar  (" named as a guitar, played on electric guitar clean (its clarinet patch is not one)
// note: 16 stray notes after a silence of more than 6 bars (from bar 696) are dropped
// note: Full arrangement: all 145 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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.

// bass · acoustic bass · "Bass    ("
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U@3 V W X K Y Z AA AB AC@2 AD AE AF AG AH AI AJ@2 AK AL AM AN AO AP AQ AR AS
  AT AU AV@2 AW@2 AX AY AZ@2 BA AH BB BC@3 BD BE BF BG BH BI@2 BJ AL BK BL BM BN BO BP BQ BR AU BS BT BU@3 BV BW@3 BX BY
  BZ CA CB CC CD CE CF CG H CH CI CJ CK CL CM CN P CO CP CQ CR CS@2 CT CU CN CI CV CW CX CY I CZ DA DB ~@14
>`.pickRestart({
  A: "g2@10 ~@2 c2@8 ~@2 a1 ~", B: "a#1@5 ~ d#2@6", C: "f2@12 g2@9 ~ g2 ~", D: "a1@9 ~ a1 ~ d2@8 ~@2 a#1 ~",
  E: "b1@10 ~@2 a#1@4 ~@2 d#2@3 ~ d#1 ~", F: "f2@5 ~ c#2@6", G: "g2@10 ~@2 c2@8 ~@2 g#1 ~", H: "a1 d2", I: "g2 c2",
  J: "a#1@12 d#2@8 ~@2 e2 ~", K: "f2 g2", L: "a1@5 d#2 d2@6", M: "b1@8 ~@2 a1 ~ a#1@4 ~@2 d#2@3 ~ d#1 ~",
  N: "f2@6 c#2@5 g#2", O: "g2@12 c2@8 ~@2 d#2 ~", P: "e2 a1", Q: "d2@3 f#2@2 d2 e2@3 g2@3",
  R: "f#2@2 f#1 c2@2 b1@4 d#2@2 b1", S: "e2@2 e1 a#1@3 a1@2 a0 d#2@3", T: "d2@3 ~ d1 ~ c#2@5 ~ b1@6 a1@4 d2@2",
  U: "[d2@4 d1@2 d2@6 g2@5 ~ g2@4 c2@6 ~@2 c2@3 ~@3 a1@6 d#2@4 d2@6 ~@2 d2@3 ~@3 g2@4 g1@2 g#2@6]/3",
  V: "g2@6 a#1@6 a1@5 ~ d2@5 ~", W: "g2@8 ~@2 b1 ~ c2@8 ~@2 a1 ~", X: "a#1@8 ~@2 d2 ~ d#2@12",
  Y: "a1@8 ~@2 c#2 ~ d2@6 c2@5 ~", Z: "b1@12 a#1@3 ~ a#0 ~ d#2@4 ~@2", AA: "f2@8 ~@2 c2 ~ c#2@12", AB: "g2@5 ~ c2@6",
  AC: "[f2@12 c2@9 ~ g2@6 ~@2 g2@3 ~ c2@6 c1@2 c2@6]/2", AD: "a#1@4 a#0@2 e2@6 d#2@5 ~ d#2@6",
  AE: "f2@5 ~ f2@3 ~@3 g2@4 g1@2 a#1@6", AF: "a1@6 c2@4 a1@2 d2@5 ~ d2@3 ~@3", AG: "b1@6 d2@4 b1@2 a#1@5 ~ d#2@5 d#1",
  AH: "f2@4 f1@2 f2@6 c#2@5 ~ c#2@6", AI: "g2@2 g1 g2@3 c2@2 c1 a#1@3",
  AJ: "[a1@4 a0@2 d#2@6 d3@2 a2@2 d2@2 g#2@4 g2@7 ~ g2@4 c2@6 ~@2 c2@3 ~@3]/2", AK: "a#1@5 ~ a#1@6 d#2@6 g2@4 d#2@2",
  AL: "f2@2 f1 g#2@3 g2@2 g1 a#1@3", AM: "a1@5 ~@5 d#2@2 d2@5 ~ d2@6, ~ a1 ~@2", AN: "b1@4 b0@2 b1@6 a#1@5 ~ d#2@5 d#1",
  AO: "f2@3 a2@2 f2 c#2@3 f2@2 c#2", AP: "g2@5 ~ g2@5 ~ c2@4 c1@2 f2@6", AQ: "e2@5 ~ e2@4 a1@6 ~@2 a1@3 ~@3",
  AR: "d2@5 ~@5 f2@2 e2@4 e1@2 g2@6, ~ d2 ~@2", AS: "f#2@4 f#1@2 c2@6 b1@5 ~ b1@3 ~@3", AT: "e2@3 a#1@3 a1@2 a0 d#2@3",
  AU: "d2@6 e2@5 ~ f2@5 ~ f#2@4 d2@2", AV: "[d2@5 ~ d2@6 g2@6 b2@4 c2@6 ~@2 c2@3 ~@3 a1@4 a0@2 a1@6]/2",
  AW: "[d2@4 d1@2 g#2@6 g2@6 b2@4 g2@6 ~@2 g2@3 ~@3 a1@4 d2@7 ~]/2", AX: "g2@5 ~@5 c#2@2 c2@6 b1@6, ~ g2 ~@2",
  AY: "a#2 f2 a#1 e2@2 d2 d#2@2 d#1 d#2@3", AZ: "[f2@5 ~ f2@5 ~ g2@6 a#2@4 a1@7 ~ a1@6 d2@5 ~@5 c2@2, ~@7 d2]/2",
  BA: "b1@4 b0@2 b1@6 a#1@5 ~ d#2@5 ~", BB: "g2@3 c#2@3 c2@2 c1 c2@3",
  BC: "[f2@6 c3@6 f3@6 c3@4 g2@7 ~ c#2@6 c3@2 g2@2 c2@2 b1@4 a#1@7 ~ a#1@6 d#2@6 f#2@6]/3",
  BD: "f2@2 f1 g#2@3 g2@2 g1 g2@3", BE: "a1@6 c2@4 a1@2 d2@5 ~ d2@6", BF: "b1@5 ~ b1@6 a#1@5 a#0 d#2@5 ~",
  BG: "f2@5 ~ f2@5 ~ c#2@5 ~ c#2@3 ~@3", BH: "g2@4 g1@2 c#2@6 c2@5 ~ c2@3 ~@3",
  BI: "[a1@4 a0@2 a1@6 d2@5 ~ d2@4 g2@8 a#2@4 g2@2 c2@6 f2@4 c2@2]/2", BJ: "a#1@5 ~ a#1@5 ~ d#2@4 d#1@2 d#2@6",
  BK: "a1@5 ~ a1@5 ~ d2@6 c2@6", BL: "b1@5 ~ b1@4 b1@2 a#1@5 ~ d#2@5 d#1", BM: "f2@4 f1@2 d2@6 c#2@5 ~ c#2@5 ~",
  BN: "g2@4 g1@2 g2@6 c2@5 ~@5 f2@2, ~@3 c2", BO: "e2@5 ~ e2@6 a1@5 ~ a1@6", BP: "d2@2 d1 d2@3 e2@3 g2@2 e2",
  BQ: "f#2@4 f#1@2 f#2@6 b1@5 ~@5 f2@2, ~@3 b1", BR: "e2@2 e1 a#1@3 a1@3 c#2@2 a1", BS: "d2@2 d1 g#2@3 g2@3 c#2@3",
  BT: "c2@5 ~ c2@5 ~ a1@5 ~ a1@5 ~",
  BU: "[d2@4 d1@2 g#2@6 g2@6 b2@4 g3@4 d3@2 g2@2 a#1@4 g#1@2 a1@5 ~ d2@4 g2@6 ~@2 g2@3 ~@3 c3@2 g2@2 c2@2 b1@4 a1@2]/3",
  BV: "a#1@2 a#0 e2@2 d#2@3 d#1 f#2@3",
  BW: "[f2@4 f1@2 g#2@6 g2@5 ~ g2@4 a1@7 ~ d#2@6 d2@4 d1@2 c2@4 b1@6 ~@2 b1@3 ~@3 a#1@4 d#2@6 ~ d#1]/3",
  BX: "f2@5 ~ f2@5 ~ c#2@5 ~ c#2@6", BY: "g2@2 g1 c#2@3 c2@3 f#2@3", BZ: "f2@3 c3@3 f3@3 c3@2 g#2",
  CA: "g2@12 c2@8 ~@2 a1 ~", CB: "a#1@12 d#2@9 ~ d#2 ~", CC: "f2@6 g2@5 a#1", CD: "a1@9 ~ a1 ~ d2@12",
  CE: "b1@12 a#1@3 ~ a#0 ~ d#2@3 ~ d#1 ~", CF: "f2@8 ~@2 c2 ~ c#2@8 ~@2 f#2 ~", CG: "g2@10 c#2@2 c2@8 ~@2 g#1 ~",
  CH: "g2@9 ~ g2 ~ c2@8 ~@2 a1 ~", CI: "a#1@10 ~@2 d#2@9 ~ d#2 ~", CJ: "f2@10 ~@2 g2@9 ~ g2 ~", CK: "a1@12 d2@6 c2@5 ~",
  CL: "b1@6 a#1@2 ~ d#2@2 ~", CM: "f2@9 ~ f2 ~ c#2@8 ~@2 f#2 ~", CN: "g2@10 ~@2 c2@9 ~ c2 ~",
  CO: "d3 a2 d2 f2@2 d#2 e2@2 e1 g2@3", CP: "f#3@2 c#3@2 f#2@2 c2@4 a#1@2 b1@5 ~ b1@6",
  CQ: "e2@5 ~@5 a#1@2 a1@4 a0@2 a1@6, ~ e2 ~@2", CR: "d2@5 ~ c#2@5 ~ b1@6 a1@4 d2@2",
  CS: "[d2@4 d1@2 g#2@6 g2@5 ~ g2@3 ~ c2@6 ~@6 a#1@2 a2@2 e2@2 a1@2 d#2@4 c#2@2, ~@5 c2 ~@2]/2",
  CT: "d2@2 d1 g#2@3 g2@2 g1 g#2@3", CU: "g2@6 a#2@4 g2@2 a1@5 ~ d2@5 ~", CV: "f2@5 ~ g2@6", CW: "a1@8 ~@2 c#2 ~ d2@12",
  CX: "b1@9 ~ b1 ~ a#1@4 ~@2 d#2@4 ~@2", CY: "f2 c#2", CZ: "f2@12 c3@10 f2 ~", DA: "f2@7 a2@6 a#2@6 b2@5",
  DB: "~ c3@5 ~ e3@2 ~ f3@8 f2@3 ~@3",
})).s("gm_acoustic_bass").gain(0.56)

// bass · acoustic bass · "Bass    (" · soft notes
const bass_soft = note(`<
  ~ A B C D E F G ~@2 H ~@2 I ~ J ~@6 K L ~ M N ~ O ~ P Q ~ R ~ S T ~@4 U ~@6 V ~ W ~@3 K ~ R ~@13 X U ~@17 R ~@3 Y ~@3
  Z AA ~ AB ~ AC AD ~ AE AF AG ~@2 AH AI ~@5 AJ ~@3 AI AF F O AK ~@19
>`.pickRestart({
  A: "~@10 g1 ~@9 b1@2 ~@2", B: "~@10 a#0 ~@13", C: "~@20 g1 ~@3", D: "~@8 a0 ~@11 c2@2 ~@2", E: "~@10 b0 ~@13",
  F: "~@10 f1 ~@13", G: "~@10 g1 ~@9 a#1@2 ~@2", H: "~@10 f#2 ~", I: "~@4 b1 ~@7", J: "~@10 f2 ~", K: "~@5 c1@2 ~@17",
  L: "~@5 d1@2 ~@17", M: "~@4 c#2 ~@5 b1 ~", N: "~@4 e2 ~@7", O: "~@4 d#2 ~@7", P: "~@4 d2 ~@7", Q: "~@10 g1 ~@13",
  R: "~@5 g1@2 ~@17", S: "~@5 f1@2 ~@17", T: "~@17 d1@2 ~@5", U: "~@17 c1@2 ~@5", V: "~@17 a0@2 ~@5",
  W: "~@17 b0@2 ~@5", X: "~@17 c#1@2 ~@5", Y: "~@5 b0@2 ~@17", Z: "~@10 b1 ~", AA: "~@20 d#1 ~@3", AB: "~@8 a0 ~@15",
  AC: "~@4 d2 ~@5 g#2 ~", AD: "~@10 a#1 ~", AE: "~@8 g1 ~@11 b1@2 ~@2", AF: "~@10 a#0 ~@9 d#1 ~@3",
  AG: "~@10 f1 ~@9 g1 ~@3", AH: "~@8 f1 ~@11 g#2@2 ~@2", AI: "~@10 g1 ~@9 c1 ~@3", AJ: "~@17 g1@2 ~@5",
  AK: "~@8 b0 ~@15",
})).s("gm_acoustic_bass").gain(0.32)

// chords · piano · "Piano   ("
const piano = note(`<
  ~ A B C@3 D E@2 F G H@5 I@2 J@5 K@8 L@8 M N O@2 P@3 Q R S T@6 U@8 V@2 W@3 X Y Z AA AB AC@3 AD AE@3 AF AG AH@3 AI@2 AJ
  AK@3 AL@2 AM AN@3 AO AP@2 AQ AR AS AT AU AV@2 AW AX AY AZ BA BB@4 BC@2 BD@2 BE BF@3 BG BH BI@2 BJ ~ BK ~@14
>`.pickRestart({
  A: "[f3,a3,a#3,d4]@3 ~ [f3,a3,a#3,d4]@7 ~ [f3,a3,a#3,d4]@9 ~@3", // A#maj7
  B: "[g#3,c#4,f4,c5]@3 ~ [g#3,c#4,f4,c5]@7 ~ [g3,c#4,f4,c5]@3 ~@3 [g3,c#4,f4,c5]@6", // C#maj7 Csus4
  C: "[[e3,a3,c4,g4]@4 f3@2 [e3,a3,c4,g4]@3 ~ [f3,a#3,d4,a4]@11 ~ [g3,a3,c4,e4]@11 ~ [f#3,c4,e4,a4]@12 [a3,d4,f4,b4]@11 ~@3 [g#3,c#4,f4,a#4]@4 ~@2 [g3,c#4,f4,c5]@4 ~@2]/3", // Am7 A#maj7 Am7 F#m7b5 Bm7b5 A#m7 Csus4
  D: "~@4 [a3,c4,d4,f4]@6 ~@2 [b3,f4,a#4,d#5]@3 ~@3 [b3,f4,a#4,d#5]@6", // Dm7 Bmaj7
  E: "[~@4 [a#3,d4,f4,a4]@6 ~@6 [a#3,d4,e4,a4]@6 [g3,c4,e4,a4]@13 ~ [f#3,c4,e4,a4]@3 ~@3 [f#3,c4,e4,a4]@6]/2", // A#maj7 Am7 F#m7b5
  F: "[f3,a#3,d4,a4]@3 ~@3 [f3,a#3,d4,a4]@6 ~@4 [f3,a3,a#3,d4]@6 ~@2", // A#maj7
  G: "[g#3,c4,c#4,f4]@11 ~ [g3,c4,c#4,f4]@4 d#3@2 [g3,c4,c#4,f4]@3 ~@3", // C#maj7 Csus4
  H: "[[e3,g3,a3,c4]@11 ~ [f3,a#3,d4,a4]@3 ~ [f3,a#3,d4,a4]@6 [g3,a3,c4,e4]@11 ~@3 [f#3,a3,c4,e4]@4 d3@2 [f#3,a3,c4,e4]@3 ~ [a3,d4,f4,b4]@13 ~ [g#3,a#3,c#4,f4]@4 ~@2 [g3,a#3,c#4,f4]@4 [d3,a3,c4,f4]@11 ~@3 [f3,b3,d#4,g#4]@3 ~@3 [f3,b3,d#4,g#4]@4 [f3,a#3,d4,a4]@13 ~ [e3,a#3,d4,a4]@9 ~@3]/5", // Am7 A#maj7 Am7 F#m7b5 Bm7b5 A#m7 Gm7b5 Dm7 …
  I: "[[g3,d4,e4,b4]@9 ~@3 [g3,c#4,f#4,b4]@3 ~@3 [g3,c#4,f#4,b4]@4 [f#3,c#4,e4,a4]@12 [g3,d4,e4,b4]@7 ~ d4@2 ~@2 [a3,e4,g#4,c#5]@2]/2", // Em7 Gmaj7 F#m7 Em7 Amaj7
  J: "[e2@2 ~@4 e4@2 ~@3 c-1@2 ~@5 d#4@2 a4@2 d5 ~ [g3,b3,d4,e4]@10 [g3,c#4,f#4,b4]@7 ~ c#4@2 ~@2 [f#3,c#4,e4,a4]@21 ~@3 [f3,c4,d4,a4]@12 [f3,b3,e4,a4]@7 ~ f4@2 b4@2 d5 ~ [e3,b3,d4,g4]@10 [g3,c4,e4,a4]@12 [f3,a3,c4,e4]@2, ~ f4@29 ~@10, ~@3 c-1@6 ~ [a3,c4,d#4,g4]@7 ~@103, ~@13 c-1@107]/5", // Em7 Gmaj7 F#m7 Dm7 Fmaj7 Em7 Am7 Fmaj7 …
  K: "[~@12 [f3,b3,e4,a4]@2 c-1@3 ~@7 [f3,a#3,d4,g4]@3 ~@7 [g3,c4,e4,a4]@8 [f#3,c4,d#4,a#4]@6 [f3,a#3,d4,a4]@4 g2@2 [f3,a#3,d4,a4]@3 ~@3 [f3,a#3,d4,g4]@3 ~@3 [f3,a#3,d4,g4]@6 ~@4 [g#3,c#4,f4,a#4]@6 [g3,a#3,c#4,f4]@13 ~ [a3,e4,g4,c5]@9 ~@3 [a#3,d4,f4,a4]@9 ~ [c4,g4,a4,e5]@11 ~@3 [c4,f#4,a4,e5]@3 ~@6 b1@3 [d4,f4,a4,b4]@3 ~@3 [d4,f4,a4,b4]@5 ~@3 b1@3 ~@2 f7@2 c-1@3 [a3,d4,f4,c5]@3 d5@3 [a3,d4,f4,c5]@6 ~@4 [c#3,g4]@2 [b3,d#4,f4,g#4]@2 c-1@4, ~@17 c-1@138 c-1@10 ~@3 c-1@14 c-1@6 ~@4, ~@136 [c4,f#4,a4,e5]@7 ~@4 b7@30 ~@15, ~@155 c8@3 ~@34, ~@78 [c#4,g#4,a#4,f5]@2 ~ [c#4,f4,g4,a#4]@2 ~@7 [b3,d#4,f4,g#4]@2 ~@4]/8", // Fmaj7 Gm7 Am7 Cm7b5 A#maj7 Gm7 A#m7 Gm7b5 …
  L: "[[b1,a#4]@3 ~ [a#3,d4,f4,g4]@5 b1@3 [a#3,c#4,e4,g#4]@3 ~@3 [a#3,c#4,e4,g#4]@6 [a3,d4,f4,c5]@20 ~@4 [f3,g3,a#3,d4]@3 ~@9 [f3,g3,a#3,d4]@10 ~@2 [g#3,c4,c#4,f4]@6 c#4@2 g#4@2 a#4 ~ [g3,c4,c#4,f4]@3 ~@7 [a3,c4,e4,g4]@7 ~ e4@2 a4@2 c5 ~ [a#3,f4,g4,d5]@3 ~@7 [g3,c4,e4,a4]@12 ~@2 [f#3,b3,c4,e4]@3 ~@13 [a3,d4,f4,b4]@5 ~@3 [g#3,c#4,f4,a#4]@6 [g3,c#4,f4,c5]@6 [a3,d4,f4,c5]@6 d4@2 ~@8 [b3,d#4,f4,a#4]@5 ~ [a#3,f4,g4,d5]@2, c-1, ~ c8 ~ d3@61]/8", // Bmaj7 Gm7 A#m7b5 Dm7 Gm7 C#maj7 Csus4 Am7 …
  M: "~@6 [a#3,e4,a4,d5]@5 ~", N: "[g3,c4,e4,a4]@3 ~@13 [f#3,c4,e4,b4]@5 ~@3",
  O: "[[f3,a#3,d4,a4]@10 [f3,a#3,d4,g4]@7 ~ f3@2 ~@2 [g#3,a#3,c#4,f4]@4 ~@10 [g3,c#4,f4,c5]@6 c#4@2 g4@2 a#4 ~]/2", // A#maj7 Gm7 A#m7 Csus4
  P: "[[a3,e4,g4,c5]@3 ~@7 [a#3,f4,a4,d5]@12 [g3,c4,e4,a4]@12 ~@5 g#4@3 f#3@2 ~@2 [a3,b3,d4,f4]@7 ~ d4@2 a4@2 b4 ~ [g#3,c#4,f4,c5]@4 [g3,a#3,c#4,f4]@8, ~@18 [f#3,c4,e4,b4]@3 c4@2 ~@13, ~@11 [g#1,f5] ~@6]/3", // Am7 A#maj7 Am7 Bm7b5 C#maj7 Gm7b5 Esus2 C#
  Q: "[a3,d4,f4,c5]@3 d4 ~ [f3,a#3,b3,d#4]@6 ~", R: "[f3,a#3,d4,a4]@5 [e3,a#3,d4,a4]@6 ~",
  S: "[g3,b3,d4,e4]@10 ~@2 [g3,c#4,f#4,b4]@3 ~@9", // Em7 Gmaj7
  T: "[[f#3,a3,c#4,e4]@3 ~@9 [g3,d4,e4,b4]@6 d4@2 g4@2 b4 ~ a3 a3@5 e4@2 a4@2 c#5 ~ [a3,d#4,f#4,d5]@10 ~@6 [g3,d4,e4,b4]@5 ~@3 [g3,c#4,f#4,b4]@3 ~@9 [f#3,c#4,e4,a4]@11 ~ [f#3,c#4,e4,a4]@3 ~ d3@2 [f#3,c#4,e4,a4]@2 ~@4 [f3,c4,e4,a4]@10 ~@2 [f3,b3,e4,a4]@10 ~@6 [e3,g3,b3,d4]@5 ~@3 [g3,c4,e4,a4]@3 ~@7 [f3,c4,d4,a4]@2, ~@10 g#0@2 [c#4,e4,g#4]@3 ~@57, ~@11 c-1@61]/6", // F#m7 Em7 D Em7 Gmaj7 F#m7 Fmaj7 Em7 …
  U: "[~@8 c4@2 d4 ~@5 [f3,b3,e4,a4]@5 ~@3 [f3,a#3,d4,a4]@10 [g3,c4,e4,a4]@6 [f#3,c4,d#4,a#4]@6 [f3,a#3,d4,a4]@4 ~@10 [f3,a3,a#3,d4]@6 f3@2 a#3@2 d4 ~ [g#3,c#4,f4,a#4]@10 [g3,c4,c#4,f4]@12 [e3,a3,c4,g4]@4 ~@15 c4@5 [g3,c4,e4,a4]@4 ~@2 b1@6 ~@6 [f#3,c4,e4,b4]@5 ~@3 [a3,d4,f4,b4]@6 d4@2 a4@2 b4 ~ [g#3,a#3,c#4,f4]@6 [g3,c4,c#4,f4]@6 [d3,a3,c4,f4]@10 ~@6 [f3,b3,d#4,a#4]@5 ~@3, ~ c-1@191, ~@4 g#4@5 ~@183, ~@3 f3 ~@50 [f3,g3,a#3,d4]@5 ~@37, ~@7 b1@5 ~@180]/8", // Fmaj7 A#maj7 Am7 Cm7b5 A#maj7 A#m7 Csus4 Am7 …
  V: "[~@4 [f3,a#3,d4,a4]@5 ~@3 [e3,g#3,a#3,c#4]@6 e3@2 ~@2 [d3,a3,c4,f4]@12 ~@2 [d3,a3,c4,f4]@3 ~ f3@2 [d3,a3,c4,f4]@2 ~@4]/2", // A#maj7 A#m7b5 Dm7
  W: "[[f3,a3,a#3,d4]@10 ~@2 [f3,a#3,d4,a4]@10 [g#3,c#4,f4,c5]@12 [g3,c#4,f4,c5]@7 ~ c#4@2 ~@2 [e3,a3,c4,g4]@12 [f3,a3,a#3,d4]@12 ~@2]/3", // A#maj7 C#maj7 Csus4 Am7 A#maj7
  X: "[g3,c4,e4,a4]@3 ~@9 [f#3,a3,c4,e4]@6 f#3@2 c4@2 e4 ~", Y: "[a3,b3,d4,f4]@5 [g#3,c#4,f4,c5]@4 [g3,c#4,f4,a#4]@3",
  Z: "[d3,f3,a3,c4]@10 ~@2 [f3,b3,d#4,a#4]@3 ~@9", AA: "[f3,g3,a#3,d4]@6 f4@2 a#4@2 d5 ~ [e3,a3,a#3,d4]@10 ~@2",
  AB: "~@4 [g3,a3,c4,e4]@5 ~@3 [f#3,b3,c4,e4]@3 ~@9", // Am7 Esus2
  AC: "[[f3,a#3,d4,a4]@10 ~@6 [f3,a#3,d4,a4]@5 ~ [g#3,c#4,f4,a#4]@4 ~@8 [g3,c#4,f4,c5]@12 [e3,g3,a3,c4]@7 ~ e4@2 a4@2 c5 ~ [f3,a#3,d4,g4]@6 f4@2 ~@4]/3", // A#maj7 A#m7 Csus4 Am7 Gm7
  AD: "~@4 [g3,c4,e4,a4]@5 ~@7 [f#3,c4,e4,b4]@5 ~@3", // Am7 Esus2
  AE: "[~@4 [a3,d4,f4,b4]@5 ~@9 [g3,c#4,f4,c5]@3 ~@7 [d3,a3,c4,f4]@5 ~ [f3,b3,d#4,g#4]@12 [f3,a#3,d4,a4]@12 ~@2 [e3,a#3,d4,a4]@3 ~@9, ~@12 [g#3,c#4,f4,a#4]@5 b1@7 ~@2 d#8@7 ~@39, ~@13 c-1@7 ~ f#8@7 ~@44]/3", // Bm7b5 Csus4 Dm7 Fm7b5 A#maj7 Dsus2 A#m7
  AF: "[g3,d4,e4,b4]@6 d4@2 g4@2 b4 ~ [g3,c#4,f#4,b4]@3 ~@9", // Em7 Gmaj7
  AG: "[f#3,c#4,e4,a4]@10 ~@2 [g3,d4,e4,b4]@6 d4@2 g4@2 b4 ~", // F#m7 Em7
  AH: "[[e3,a3,c#4,f#4]@10 [a3,c4,d#4,g4]@7 ~ d#4@2 ~@2 [g3,b3,d4,e4]@4 ~@8 [g3,b3,c#4,f#4]@12 [f#3,a3,c#4,e4]@21 ~@5]/3", // F#m7 Am7b5 Em7 Gmaj7 F#m7
  AI: "[[f3,a3,c4,d4]@5 ~ [f3,a3,b3,e4]@5 [e3,g3,b3,d4]@6 ~ [g3,a3,c4,e4]@5 ~]/2", // Dm7 Fmaj7 Em7 Am7
  AJ: "[f3,a3,c4,d4]@3 ~@7 [f3,a3,b3,e4]@4 ~@10", // Dm7 Fmaj7
  AK: "[[f3,a#3,d4,a4]@3 ~@9 [g3,a3,c4,e4]@6 [f#3,c4,e4,a4]@4 [f3,a#3,d4,a4]@4 ~@8 [f3,a#3,d4,a4]@4 ~@8 [g#3,c4,c#4,f4]@4 ~@10 [g3,c4,c#4,f4]@10 ~@2]/3", // A#maj7 Am7 F#m7b5 A#maj7 C#maj7 Csus4
  AL: "[[e3,a3,c4,g4]@10 ~@6 [f3,g3,a#3,d4]@5 ~ [g3,a3,c4,e4]@12 [f#3,c4,e4,a4]@7 ~ f#3@2 ~@4]/2", // Am7 Gm7 Am7 F#m7b5
  AM: "~@4 [a3,b3,d4,f4]@5 ~@3 [g#3,c#4,f4,a#4]@6 [g3,c#4,f4,c5]@6, ~ c4@3 ~@4", // Bm7b5 A#m7 Csus4
  AN: "[[a3,c4,d4,f4]@3 ~@9 [b3,f4,g#4,d#5]@10 [a#3,f4,g4,d5]@4 ~@8 [a#3,e4,g#4,c#5]@12 [a3,c4,d4,f4]@11 ~ [a3,c4,d4,f4]@2 ~@12]/3", // Dm7 Fm7b5 Gm7 A#m7b5 Dm7
  AO: "[a#3,f4,g4,d5]@3 ~ [a#3,f4,g4,d5]@7 ~ [a#3,d4,f4,a4]@3 ~@3 [a#3,d4,f4,a4]@6", // Gm7 A#maj7
  AP: "[[g#3,c4,c#4,f4]@3 ~ [g#3,c4,c#4,f4]@6 ~@14 [e3,a3,c4,g4]@4 f3@2 [e3,a3,c4,g4]@3 ~@3 [f3,a#3,d4,a4]@11 ~, ~@10 [g3,c#4,f4,c5]@11 ~@27, ~@17 f6@9 ~@22]/2", // C#maj7 Am7 A#maj7 Csus4
  AQ: "[g3,c4,e4,a4]@3 ~ [g3,c4,e4,a4]@7 ~ [f#3,b3,c4,e4]@3 ~@3 [f#3,b3,c4,e4]@6", // Am7 Esus2
  AR: "~@2 [a3,d4,f4,b4]@3 ~ [g#3,c#4,f4,a#4]@2 ~ [g3,c#4,f4,a#4]@2 ~", // Bm7b5 A#m7 Gm7b5
  AS: "[a3,c4,d4,f4]@4 f3@2 [a3,c4,d4,f4]@3 ~ [b3,f4,g#4,d#5]@13 ~", // Dm7 Fm7b5
  AT: "~@4 [a#3,d4,f4,g4]@6 ~@2 [a#3,e4,a4,d5]@3 ~@3 [a#3,e4,a4,d5]@6, b1@5 ~@7", // Gm7 A#maj7
  AU: "~@2 [c4,g4,a4,e5]@3 ~@3 [c4,e4,f#4,b4]@3 ~", // Am7 Cmaj7
  AV: "[[a#3,f4,g4,d5]@3 ~ [a#3,f4,g4,d5]@7 ~ [a#3,f4,g4,d5]@3 ~ [a#3,f4,g4,d5]@6 [c#4,g#4,c5,f5]@11 ~ [c#4,g4,a#4,f5]@13 ~]/2", // Gm7 C#maj7 Gm7b5
  AW: "[a3,e4,g4,c5]@3 ~ [a3,e4,g4,c5]@6 d4@2 [f3,a#3,d4,g4]@4 g2@2 [f3,a#3,d4,g4]@3 ~@3, ~@5 c-1@5 ~@2", // Am7 Gm7
  AX: "[g3,c4,e4,a4]@3 ~@3 [g3,c4,e4,a4]@6 [f#3,c4,e4,b4]@4 d3@2 [f#3,c4,e4,b4]@3 ~@3", // Am7 Esus2
  AY: "[a3,b3,d4,f4]@3 ~ [a3,b3,d4,f4]@7 ~ [g#3,c#4,f4,c5]@4 ~@2 [g3,a#3,c#4,f4]@4 ~@2", // Bm7b5 C#maj7 Gm7b5
  AZ: "[a3,c4,d4,f4]@4 f3@2 [a3,c4,d4,f4]@3 ~ [f3,b3,d#4,a#4]@13 ~", // Dm7 D#sus2
  BA: "[f3,a#3,d4,a4]@4 g2@2 [f3,a#3,d4,a4]@3 ~@3 [e3,a3,a#3,d4]@3 ~@3 [e3,a3,a#3,d4]@6", // A#maj7 Dsus2
  BB: "[[g3,b3,d4,e4]@3 ~ [g3,b3,d4,e4]@6 ~@14 [f#3,a3,c#4,e4]@6 f#3@2 c#4@2 e4 ~@5 [g3,d4,e4,b4]@5 ~ [e3,a3,c#4,g#4]@7 ~ e4@2 a4@2 c#5 ~ [a3,d#4,g4,c5]@3 ~@7 [g3,d4,e4,b4]@4 ~@8 [g3,b3,c#4,f#4]@7 ~ c#4@2 g4@2 b4 ~, ~@10 [g3,a3,c#4,f#4,g4,b4]@11 ~@75, ~@12 [c-1,c8]@11 ~@73, ~@14 g1@11 ~@71, ~@17 g#4@11 ~@68]/4", // Em7 F#m7 Em7 Amaj7 Am7b5 Em7 Gmaj7 F#m …
  BC: "[[f#3,a3,c#4,e4]@17 ~@5 [f3,a3,c4,e4]@12 ~@2 [f3,b3,e4,a4]@6 f4@2 b4@2 d5 ~]/2", // F#m7 Fmaj7
  BD: "[~@4 [e3,b3,d4,g4]@5 ~@3 [g3,c4,e4,a4]@6 c4@2 ~@2 [f3,a3,c4,d4]@4 ~@8 [f3,b3,e4,a4]@12 ~@2]/2", // Em7 Am7 Dm7 Fmaj7
  BE: "[f3,a#3,d4,a4]@5 [g3,a3,c4,e4]@3 [f#3,c4,d#4,a#4]@4", // A#maj7 Am7 Cm7b5
  BF: "[[f3,a3,a#3,d4]@4 g2@2 [f3,a3,a#3,d4]@3 ~@3 [f3,a#3,d4,g4]@10 [g#3,c#4,f4,a#4]@13 ~ [g3,c#4,f4,a#4]@9 ~ [a3,c4,e4,g4]@13 ~ [a#3,d4,f4,g4]@3 ~ [a#3,d4,f4,g4]@7 ~]/3", // A#maj7 Gm7 A#m7 Gm7b5 Am7 Gm7
  BG: "~@4 [g3,c4,e4,a4]@6 ~@2 [f#3,b3,c4,e4]@4 d3@2 [f#3,b3,c4,e4]@3 ~@3", // Am7 Esus2
  BH: "~@2 [a3,d4,f4,b4]@3 ~ [g#3,c#4,f4,c5]@2 ~ [g3,a#3,c#4,f4]@2 ~", // Bm7b5 C#maj7 Gm7b5
  BI: "[[d3,f3,a3,c4]@4 [c-1,f3]@2 ~@16 [f3,g3,a#3,d4]@11 ~@3 [e3,a#3,c#4,g#4]@4 c3@2 [e3,a#3,c#4,g#4]@3 ~@3, ~@2 [d3,f3,a3,c4] ~ [f3,b3,d#4,a#4]@3 ~@9, ~@7 c-1@12 ~@29, ~@13 g7@12 ~@23]/2", // Dm7 F5 Gm7 A#m7b5 Dm7 D#sus2
  BJ: "[d3,a3,c4,f4]@3 ~ [d3,a3,c4,f4]@2 ~@4 [d3,a3,c4,f4]@12 ~@2", // Dm7
  BK: "[d3,g3,a3,c4]@3 ~@3 [d#3,g#3,a#3,c#4]@3 ~ [d3,g3,a3,c4]@11 ~@3", // Dsus4 D#sus4 Dsus4
})).s("gm_piano").gain(0.23)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~@2 A@2 ~ B C A@2 ~ A@4 D A E ~ A E ~ A C E ~@2 E A F E C A ~ A@2 ~@4 A ~ A@4 ~ F A@3 ~@2 A ~ D A@2 E ~ A@3 F ~@2
  E ~@3 A ~ A@3 ~ A@2 ~ C A ~ A G A@4 ~ A E A ~ E A D A E ~@2 A ~ A H A@2 ~@2 A@2 ~ D ~@2 A ~@2 A@10 D A I ~@14
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@4", D: "x ~ x", E: "x ~@10 x", F: "~@11 x", G: "~@5 x ~@6", H: "~ x ~@2 x ~",
  I: "~@5 x ~@3 x ~@2",
})).gain(0.19)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@6 B ~ A@7 ~ A B A@5 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@17
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.19)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B ~@6 C D E ~ F G H I F B ~@6 C B F J F K L M L N F M E ~ L I O H P ~ E I L F E Q F P R F L P E H F@2 H@2 L F L
  N P ~ L H R H L B F@2 L S F ~ F C P H@2 ~ F ~ L D ~@7 T ~@7 Q F I F H F P L C ~@7 Q U V ~@14
>`.pickRestart({
  A: "~@2 x", B: "x ~@4 x ~@5 x", C: "~ x ~@4", D: "~@3 x", E: "~@3 x!2 ~", F: "~ x", G: "~@2 x ~@2 x ~@2 x ~@3",
  H: "~@5 x ~@6", I: "~@5 x ~@2 x ~@3", J: "~@5 x ~@2 x ~@2 x", K: "~ x ~@2 x ~", L: "~@5 x ~@5 x",
  M: "~@2 x ~@2 x ~@2 x ~@2 x", N: "x ~@4 x!2 ~@5", O: "~@2 x ~@2 x ~@5 x", P: "~@5 x!2 ~@5", Q: "~@2 x ~@2 x!2 ~@5",
  R: "~@2 x ~@2 x ~@6", S: "~@8 x ~@2 x", T: "x ~@5 x ~@4 x", U: "~@2 x ~@2 x ~@2 x ~ x!2", V: "x ~ x!2 ~@8",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@40 A ~@7 B ~@15 B ~@7 A ~@15 C ~@31 C ~@24>".pickRestart({
  A: "~@2 x ~@5 x ~@2 x", B: "~@6 x ~ x!2 ~@2", C: "~@10 x!2",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C@4 D E A F G C@2 H A I E@8 A J F G A C A E@56 ~ E@7 I A@2 C@2 F A@2 E A G F C H C@2 E@8 ~ A C@2 F C A K E L M
  ~@14
>`.pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~ x ~ x!2 ~@2", C: "x ~@2 x ~@2 x ~@2 x ~ x", D: "x!2 ~@2", E: "~ x ~ x",
  F: "x ~@2 x ~@2 x ~ x!2 ~ x", G: "x ~ x!2 ~@2 x ~ x!2 ~ x", H: "x ~ x!2 ~@2 x ~@2 x ~ x", I: "~@5 x!2 ~@2 x ~ x",
  J: "x!2 ~ x", K: "~ x!3", L: "~ x!2 ~", M: "~@3 x",
})).gain(0.25)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A@5 B A ~ C A@4 B D E ~@8 A@4 C A C ~@64 E A D A@3 C D ~ C A@6 ~@9 C A@4 C F ~@17
>`.pickRestart({
  A: "~@5 x ~@6", B: "~@5 x ~@2 x ~@3", C: "~@5 x ~@5 x", D: "~@11 x", E: "~@2 x", F: "~@5 x ~@2 x ~@2 x",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 A ~@37 B ~@31 C ~@23 B ~@7 C ~@7 B ~@16>".pickRestart({
  A: "~@3 x", B: "~@9 x ~ x", C: "~@2 x",
})).gain(0.19)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@2 ~@4 B ~@7 C ~@2 C ~@2 D ~@3 A E ~@4 D ~@7 D ~@4 C ~@26 D ~@2 C ~@3 C ~@4 D C ~ F ~ G ~@2 D F ~ H D ~ A C ~@4 C
  ~@15 D G ~@6 I ~ J ~@15
>`.pickRestart({
// … 43 more lines

More by Miller