Strudelify

The Days of Wine and Roses

Oscar Peterson

KeyF majorTempo120 bpm
0:00/0:00
// The Days of Wine and Roses — Oscar Peterson
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 118 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · "ACOU BASS"
const bass = note(`<
  A@6 B C@3 D@2 E@3 F@5 G@5 H@4 I@2 J@4 K@3 L@6 M N@2 O@3 P@3 Q@3 R@2 S T@3 U@3 V@2 W@3 X Y@2 Z AA@2 AB@3 AC AD@2 AE@3
  AF@3 AG@3 AH@3 AI AJ@2 AK AL AM@3 AN AO AP AQ@3 AR@3 AS AT@3 ~@3
>`.pickRestart({
  A: "[~@6 db2 ~@11 gb2@17 ~@6 b1 ~@10 e2@18 ~@6 a1@2 ~@10 d2@17 ab1@8 db2@10 g1@8 c2@9 f1@14 ~ c2@2 f2@8 ~ e2@9 eb2@14 ~ eb2@2]/6",
  B: "~ bb2 ~@4 g2@2 ~ eb2@9 d2@13 ~",
  C: "[~ d2@2 a1@17 ~ d2@16 ~@2 d2@7 ~ d2@2 ~ bb1@2 ~ a1 ~@2 g1@18 d2@12 ~@2 d2 ~@7]/3",
  D: "[~ g2@2 ~@7 d2@3 g1@8 a1@9 bb1@15 f2 ~@2 f2@16]/2",
  E: "[~ eb2@14 ~ bb1@2 ~ eb1@8 bb1@9 a1@20 ~@4 a1@2 c2@9 d2@14 ~ a1@3 f1@7]/3",
  F: "[~ gb1@9 g1@17 bb1@12 ~@3 b1@2 ~ c2@14 ~ c2@2 ~ bb1@3 ~@5 a1@9 e1@13 ~@2 bb1@3 a1@8 db2@9 d2@18 g1@21 ~@2 g1@2 ~@2]/5",
  G: "[~@8 a1@18 ~@5 bb1@2 ~@10 eb2@17 ab1@15 eb2@3 ab2@6 ~@3 g2@7 ~ gb2@12 ~@3 db2@2 ~@7 bb1@2 ~@6 gb1@2 ~ f1@15 a1@3 c2@11 ~]/5",
  H: "[~@2 db2@3 c2@8 gb1@9 f1@8 ~ c2@2 ~@4 b1@3 bb1@18 f2@19 ~@4 bb2@3 f2@8 bb1@9 c2@9 db2@18]/4",
  I: "[ab2@14 db2@3 gb2@6 gb1@12 gb2@3 ~@5 db2@9 c2@12]/2",
  J: "[~@3 c2@2 bb1@9 g1@9 f1@15 ab1@2 ~@6 c2@8 ~ db2@3 d2@14 ~@3 ab1@17 ~ db2@17 ab1@17 ~]/4",
  K: "[c2@13 ~@2 c2@2 ~ f1@7 ~ f1@9 bb1@7 ~@2 bb1@8 eb2@7 ~@2 eb2@6 ab1@2 ~@27]/3",
  L: "[~@24 g1@3 c2@8 e2@7 c2@2 f2 ~@5 c2@2 ~ a1@9 g1@8 f1@9 bb1@9 db2@7 bb1@2 eb2 ~@5 eb2@2 bb1@8 ~ a1@8 c2@9 ~ d2@8 gb2@7 d2@2 a2 ~@5 a2@3 eb2@8 d2@9 ab1@9 g1@8]/6",
  M: "~ d2@8 c2@9 bb1@9 g2 ~@4", N: "[~ gb2@2 f2@9 d2@9 c2@9 bb1@9 f2@8 db2@7 f2@2 d2@8]/2",
  O: "[~ eb2@8 ~ db2@9 c2 ~@5 c2@2 bb1@8 ~ a1@8 bb1@9 c2@9 db2@9 d2@2 ~@4 d2@2 e2@9 f2@8]/3",
  P: "[~ gb2@9 g2 ~@5 bb1 ~@2 a1@9 g1@8 bb1@6 ~ g1@2 c2 ~@5 c2@2 ~ d2@6 g1@2 e2@9 gb2@6 eb2@2 ~ e2@9 ab1@7]/3",
  Q: "[~ a1@9 db2@9 d2@9 ab2@8 g2@2 ~@4 d2@2 ~ bb1@4 ~@2 a1@2 ~ g1@9 d2@9 e2@8 a1@9 bb1@7]/3",
  R: "[~@2 f2@9 eb2 ~@5 eb2@2 a2@9 ab2@9 gb2@8 f2@9 e2@9 gb2]/2", S: "~@5 db2@2 bb1@9 gb1@9 db2@7",
  T: "[bb1@2 c2@9 gb1@9 bb1@8 gb1@9 f1@9 a1@6 f1@2 ~ c2@8 b1@9 bb1@9 f2@8 eb2@7]/3",
  U: "[~@3 bb2@8 bb1 ~@5 bb1@2 f2@9 eb2@9 bb2@9 db2@9 ab2@8 gb2@9 db3@9 db2 ~@5 db2@2 ab2@7]/3",
  V: "[~@2 gb2@9 db3 ~@2 ab2 ~@2 db2 ~@2 c2@9 eb2@6 c2@2 g2 ~@5 g2@2 ~ gb2@9 f2@3 ~@3 f2@3]/2",
  W: "[c2@8 f1@6 ~ e2@2 eb2@6 db2@2 ~ d2@9 c2@8 bb1@9 ab1@9 db2@8 b1@9 ab1@8 ~ db2@7 ab1@2]/3",
  X: "c2@9 e2@8 f2@9 b2 ~@5", Y: "[b2@2 ~ bb2 ~@5 bb2@3 e2@8 eb2@9 g2@7 eb2@2 ab2 ~@5 ab2@2 ~ g2@8 f2@9]/2",
  Z: "gb2@9 g2@2 ~ d2 ~@2 g1@2 ~ db2@6 bb1@2 c2@2 ~@4", AA: "[~ c2@2 gb1@9 f1@9 a1@6 f1@2 c2@9 b1@9 bb1@8 d2@9]/2",
  AB: "[~ eb2@8 g2@7 gb2@2 a2 ~@5 eb2@3 d2@8 a1@9 a2 ~@5 eb2@3 d2@9 a1@8 a2@2 ~ eb2@2 ~ a1@2 ~ d2@2 gb2@6 g2@7 d2@2]/3",
  AC: "~ bb1@9 a1@8 ab1@8 ~@2 g1@4", AD: "[~@2 d2@2 c2@9 g2@8 c2@9 bb1@9 c2@6 bb1@2 db2@2 ~@5 db2@2 d2@8]/2",
  AE: "[~ eb2@8 ~ f2@8 g2@9 bb2@9 a2 ~@5 g2@2 ~ e2@8 c2@9 db2@9 d2@9 f2@9 a2@7]/3",
  AF: "[~ ab2@9 g2@7 d2@2 bb1@9 a1@8 g1@9 c2@9 g2@8 ~ gb2@8 f2@8 ~ e2@9 ab1@7]/3",
  AG: "[~@2 a1@8 eb2@9 d2@8 ~ gb1@9 g1@8 ab1@9 g1 ~@5 g1@3 d2@9 e2@8 a1@9 bb1@7]/3",
  AH: "[~ f2@8 ~ eb2 ~@5 eb2@2 ~ a1@9 ab1@9 c2@9 eb2@8 ab2@9 gb2@8 bb2@9 ~ db3 ~@5 db3@2 gb2@7]/3",
  AI: "~@2 f2@9 b2@8 a2@2 ~@3 f2@4 eb2@4", AJ: "[~ b1@4 a1@8 f2@6 ~ b1 ~ a1@6 ~ f1@2 a1@9 bb1@7 f1@2 c2@9 db2@6]/2",
  AK: "~@2 d2@9 eb2@9 f2@9 ab2 ~@2", AL: "~@3 bb2@2 c3@6 db3@7 ~@2 db3@2 ~ ab2@9",
  AM: "[e2@8 d2@9 gb2@9 db2@9 gb1@8 db2@6 ~ bb1@2 c2@9 eb2@6 c2@2 ~ g2@8 gb2@7 eb2@2 f2@6 c2@2 ~]/3",
  AN: "ab1@9 g1@8 f1@9 d2@6", AO: "~@2 ab2 ~@6 ab2@2 f2@9 gb2@7 eb2@2 g2@3", AP: "~@3 g1@3 b1@9 d2@8 db2@9",
  AQ: "[c2@9 gb2@9 f2@8 b1@9 bb1@9 d2@9 eb2 ~@5 eb2@2 db2@9 c2@9 gb1@9 f1@8]/3",
  AR: "[a1@9 bb1@9 d2@8 eb2@9 db2@9 c2 ~@6 c2@2 gb2@9 f2@8 b1@9 bb1@9 d2@8]/3",
  AS: "~ eb2@3 ~@5 g1@5 ~ ab1@3 ~@6 d2@2 ~ db2@4 ~", AT: "[~@3 c2@5 ~ b1@3 ~@10 bb1@3 ~@5 a1@6 ab1@38 ~@22]/3",
})).s("gm_acoustic_bass").gain(0.52).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@4 B@2 C@2 D E@4 F@2 G@2 H@7 I@7 J@4 K L@2 M N@2 O P Q R S@2 T U V@2 W@3 X@2 Y@3 Z AA@2 AB@3 AC AD AE AF AG AH AI AJ
  AK AL AM AN@2 AO@4 AP AQ@3 AR AS AT@3 AU@3 AV AW AX AY@5 AZ BA BB BC BD@2 BE@3 BF BG@5 ~
>`.pickRestart({
  A: "[~@6 [e3,ab3,b3,eb4,gb5,db6,gb6] ~@10 [e3,bb3,a5,d6,gb6,a6]@20 ~@4 [a3,db4,d4,gb4,e5,a5,db6,e6] ~@11 [ab3,d4,g4,g5,c6,e6,g6]@19 ~@4 [g3,b3,c4,e4,d5,g5,b5,d6]@3 ~@9 [gb3,c4,f4,f5,bb5,d6,f6]@14 ~@3 [eb4,gb4,db5]@6 [b3,f4,a4,e5]@2 ~@7 [d4,f4,c5]@2 ~@6, ~@103 ab3@8 f3 ~@8 [bb3,ab4] ~@7]/4", // Emaj7 D Dmaj7 C Cmaj7 Bb Ebm7 Esus4 …
  B: "[~ [e3,bb3,e4,ab4]@2 ~@6 b3@2 ~@17 d3 eb3 [a3,e4]@14 [eb3,g3,c4,db4,f4]@20, ~@8 d4@2 ~@2 a4@31 ~@21, ~@29 db4@14 ~@21]/2", // Bbm7b5 A5 Cm
  C: "[g4@4 ~@2 a4@3 ~@3 c5@3 ~@4 d5@23 e4@2 d5@4 ~@5 [ab4,c5]@5 ~@6, ~@15 a2@27 ~@22, ~@17 [e3,b3,c4]@26 ~@21, ~@9 [g4,b4]@12 ~ bb4 ~@9]/2", // Ab Cmaj7 G
  D: "~@4 [c4,eb4,ab4] ~@8 [gb3,bb3] ~@2 c5@3 ~@2 bb4@2 ~@2 [g4,ab4]@2 a4@3 g2 ~", // Ab Gb Abmaj7
  E: "[~@10 d4@5 ~ d4 ~@10 [a3,bb3,d4]@17 ~ d4@6 ~@2 a4@3 ~@3 ab3 a3@11 [a3,bb3,db4,f4,a4]@3 ~@6 [a3,bb3,db4,f4]@4 ~@3 eb3 [e3,ab3,d4]@6 [eb3,g3,db4]@28 ~ a4@5, ~@51 f4@4 ~@4 [db4,f4,c5]@12 ~@57]/4", // Bbmaj7 Bbm E7 Eb7 Dbmaj7
  F: "[~@2 e3 ~@7 [a2,g3,c4]@10 ~@2 [ab3,d4]@4 ~@4 [db3,g3,bb3,e4]@6 ~@3 [d3,a3,c4,f4]@3 ~@6 [e3,bb3,db4,g4]@4 ~@5 [f3,c4,d4,a4]@3 ~@4, ~ g4@2 ~@17 b2@4 ~@40]/2", // Am7 Abdim Dbdim Dm7 Edim Dm7
  G: "[~@2 c4@5 ~ [bb3,a4]@34 bb4@2 ~ [d4,c5]@4 ~@2 e3@2 ~ [c4,g4,bb4]@5 ~@3 g4 ab4, gb3@7 ~@44 bb3 ~@12, ~ [f4,bb4,d5]@5 ~ [f4,c5]@36 ~@2 ab4@2 ~@17]/2", // Bbmaj7 D7 C7 Bb F5
  H: "[a4@5 [e3,bb3] ~ g4@6 ~@18 e4@2 eb4@6 e4@12 [d4,eb4] ~@6 [f3,a3,b3]@8 f4@2 ~ [a3,db4,e4]@6 g2@3 d4@8 ~@6 [g2,f3,a3,bb3] ~@11 [a2,g3,a3,c4,e4]@17 ~@6 [bb2,ab3,c4,db4] ~@26 eb4@2 ~@16 ab2@2 [g3,c4,eb4,g4]@2 ~@13 e3@17 g4@2 ~ ab4@4 ~ bb4@2 ~ c5@4 ~@2 eb5, ~@13 a4@17 f4@2 ~ a2@10 ~@32 f3@11 ~@53 [eb3,db4,gb4]@14 d4@2 ~@33 [ab3,c4,eb4]@19 ~@17, ~@13 gb4@15 ~ gb4@4 ~@18 g4@17 ~@18 g4@18 ~@17 ab4@17 a4@16 ~@2 c5@32 ~@36, ~@14 [bb3,d4]@18 ~ g3@18 ~ e4@16 ~@24 d4@2 ~@33 f4@2 ~@23 eb4@2 ~@70]/7", // Edim Ebmaj7 Bm7b5 A Gm7 Am7 Bbm7 Cm …
  I: "[~@8 [f3,a3,gb4,b4] ~@11 [eb4,g4,c5,eb5]@2 ~@7 [b4,f5]@5 [g4,eb5]@2 ~@4 [a4,d5,ab5]@3 ~@2 [f4,a4,db5,gb5]@3 ~@3 a4@3 ~@2 [f4,a4,db5,gb5]@12 ~@4 c5@6 f4@8 ab4@2 ~ ab4@4 ~@12 f4@2 ab4@3 ~@3 c5@3 ab4@5 ~@4 ab4@3 ~@3 c5@2 ab4@6 ~@3 ab4@4 ~@2 b4@4 ~@2 ab4@2 ~@3 ab4@4 ~@2 bb4 ~@8 e4@2 gb4@2 ~@4 gb4@27 [g3,bb3,c4,ab4] ~@2 [bb3,c4,eb5,g5]@3 ~@9, ~@2 f5@14 ~@11 f3@3 ~@39 eb5@2 db5@2 ~@5 [ab3,bb3,c4,db4]@57 ~@7 [gb3,ab3,b3]@33 ~ [ab3,bb3]@34 ~@14, ~@28 [a3,gb4]@5 ~ [eb4,c5] ~@5 eb4 ~@9 [eb4,d5,ab5]@3 ~@15 f5@2 d5@2 ~@16 f4@2 ~@23 b4 ~@17 b4 ~@16 bb4 ~@16 b4@10 ~@34 [eb5,ab5]@2 ~@13, ~@43 ab4 ~@12]/7", // B7 Cm Bdim Cm D Gbm C7 Cm7 …
  J: "[~@3 [g3,bb3,c4] ~@2 [bb3,f5]@4 ~@4 [bb3,c4,g4,g5]@8 ~ [ab4,c5,eb5,ab5]@6 ~@20 [eb5,eb6]@7 ~@3 b5 ~@21 [ab3,c4,d4,g4]@5 ~ bb5@5 ~@2 g6@22 ~ [f3,b3,eb4,f5,f6]@11, ~@3 [eb4,eb5]@2 ~@24 [ab3,bb3,c4,eb4]@28 [ab3,c4]@24 ~@5 [ab3,c4,d4,g4,bb6]@6 [f3,b3]@25 ~@11, ~@32 [bb4,bb5]@25 ~ [d4,g4]@23 [ab5,eb6,ab6]@11 ~@25 [gb5,gb6] ~@10, ~@40 [c5,c6]@16 ~@2 [g5,c6]@34 ~ [eb4,g5,b5,eb6]@24 ~@11, ~@59 [e6,g6]@33 ~@36]/4", // C7 Bb5 C7 Ab Eb Abmaj7 Fm7b5 Eb …
  K: "~@6 [gb3,bb3,c4,f4,eb5,bb5,eb6] ~@8 [a3,db4,eb4,c5,gb5,c6] ~@2 [db4,eb4,bb4,bb5]@4 ~@4 [a3,db4,eb4,ab4,ab5]@3 ~@3", // Cm7b5 Ebm7b5 Eb7 Amaj7
  L: "[~@3 [ab3,c4,db4,f4,c5,f5,ab5,c6]@6 [ab3,c4,db4,f4,c5,f5,ab5,c6]@12 f4@5 ~ ab4@2 bb4@5 ~ [ab2,eb3,ab4]@2 ~@7 [bb5,d6]@2 ~@2 [bb5,d6]@3 ~@2 [ab5,d6]@2 ~ f5@3 ~@3 [eb5,a5]@2, ~@21 e4 ~@42]/2", // Dbmaj7 Ab5 Bb Abdim Ebdim
  M: "~ c5@3 ~@2 [bb4,d5]@2 ~ d5@4 ~@2 f4@2 ~ [eb4,a4]@5 ~ c4@2 ~ bb3@5, ~@9 ab4@3 ~ bb4@2 ~@17, ~@7 ab4 ~@8", // Bb Ebdim
  N: "[~ f3 ~ ab3@2 a3@4 ~@3 eb3@9 g4 a4@5 ~ eb3 ~ [f4,c5]@6 c4@2 ~ bb3@6 [bb2,f3] ~ ab3 a3@5 ~ db4@2 ~@7 eb2, ~@3 d4@6 f2@12 ab4@2 ~@41, ~@12 f3@2 ~@7 c5@6 ~@37]/2", // F5 Bb5
  O: "~@8 [bb2,f4] g4@6 ~@2 f4 d5@2 ~@5 [d2,f4] ~@2 ab4@2 ~@2, ~@13 g4@2 ~, ~@27 d5@5", // Bb5 Dm
  P: "~@3 d4@5 ~@2 d4 ~@10 [eb3,g3,db4] ~@10", Q: "~@4 [d3,gb3,c4] ~ f5@6 ~ e5@2 f5@4 ~@5 f4@3 ~@5",
  R: "~ [g2,f3]@3 ~@6 ab4@2 a4@3 ~@10 [f3,a3,bb3] ~@6, ~@5 c5@2 ~@9", // G7 Bbmaj7
  S: "[~ f4 ~@2 a4@4 ~@2 c5@3 bb4@6 ~@2 g4@5 ~ [bb2,ab3,ab4]@11 ~ f4@6 db4@2 ~ eb4@2 f4@3 db4@10 bb2]/2", // Bb7
  T: "~ eb2 ~@2 [d4,gb4,db5] ~@4 [f4,db5] c5 ~@2 eb2 ~ [c4,a4]@2 ~@4 [db4,bb4]@2 ~ bb2 ~@2 c4@5, ~@9 db4@2 ~@4 e4 ~@5 f4 ~@10", // Dmaj7 Db F Gb
  U: "~ [g3,e4]@2 ~ gb4 g4@8 c4@8 ~ d4@5 ~@5", // C
  V: "[~@4 e4@2 ~ f4@4 ~@2 [d2,a2]@2 ~@7 g4@2 ~ a4@4 ~@2 c5@2 d5@5 ~ g2 ~@2 f5@6 ~@3 f5@4 ~@2 [a3,bb3] ~ [ab4,d5]@3 ~@2]/2", // D5 Bbmaj7 Abdim
  W: "[~@16 e4@2 ~ g4@2 a4@3 bb4@2 ~ a4@2 ~ g4@4 ~@2 bb3 ~@2 gb4@4 ~@2 a4@2 ~ g4@6 ~@3 g4@9 ~@4 bb4 ~ f5 ~@2 a5@3 ~ e5@3 ~ [f5,gb5] g5@12, ~@66 [c4,db4,f4]@11 ~@6 [f3,a3,e4]@12 ~, ~@71 db5@2 ~@23]/3", // Gbmaj7 Dbmaj7 Fmaj7
  X: "[f5@2 [d5,e5] ~ [f3,b3,e4,db5]@3 ~@2 [f3,b3,e4,d5]@2 ~@2 e5@2 ~ f5@3 ~ d5@2 bb4@2 ~@2 gb4 ~@2 a4@2 g4@3 ~@6 e4@2 g4@2 d4@3 ~ e4@3 ~@4 bb2@2 ~@4 db4 f4@2, ~@13 [f3,b3,e4]@8 ~@36 ab3@7]/2", // Dsus2 Db7 Bdim E
  Y: "[ab4 ~ c5@2 eb5@5 ~@6 bb4@3 ~ b4@2 g4 gb4 ~ eb4@2 db4@2 [ab2,c4]@18 eb3 ~@4 ab3@2 ~ bb3@2 ~@2 c4@2 db4@3 [gb2,e3] ~@2 e4@2 ~ ab4@2 ~ eb5@5 ~@2 bb3 ~ eb5@4 ~@2 db5@2 ab4@6 ~, ~@9 eb3@2 ~@17 g3@14 ~@54, ~@10 db4@9 bb3 ~@3 e4@2 ~@38 eb4@2 ~@31]/3", // Ab Gb7
  Z: "e4@2 eb4@5 ~ [a3,b3]@2 ~@7 f2 ~@2 f5@6 a4@2 ~@4, ~@26 b4 ~@5", // Asus2
  AA: "[~@3 eb4 ~ [b5,f6]@3 [a5,eb6] ~@2 a3@2 ~ [b4,f5]@3 [a4,eb5] ~ eb3@2 ~ [b3,f4]@3 a3 eb4 ~ f2@3 [b4,f5]@3 ~ eb5 ~ bb2@2 ~ c5@4 ~@2 eb5@2 ~ c5@4 ~@2 [ab3,c4,db4,ab4,c5]@3 ~@6, ~@2 a3@2 ~@7 eb4 ~@22 a4@2 ~@28]/2", // Bdim Adim Bdim Adim Bdim Dbmaj7
  AB: "[ab4@2 ~ c5@6 [bb1,f4] ~ b4@2 c5@6 ~ c5@5 ~ ab4@2 ~ f4@4 ~@4 bb3 ~@5 e6 ~@2 eb6@6 a5 ~@2 bb5@2 db6@2 b5@3 ~@4 g5@2 ab5@2 ~ d5@2 eb5@2 gb5@2 e5@2 b4@2 c5@2 ~ eb5@2 db5@2 ab4 ~ c5@2 ab4 ~ b4@2, ab3 ~@10 eb5@6 ~@9 [ab3,c4,db4]@12 ~@3 a5@2 ~@3 [gb3,ab3,b3,eb4]@37 ~@13, ~@21 c6 ~@26]/3", // Bb5 Dbmaj7 Abm7
  AC: "~ ab4 bb4@3 gb5@2 ~@4 [e3,bb3,eb4]@2 g5@2 ~ eb5 d5 ~ c5 ~ bb4 g4 ab4 ~ c5 eb5 ~ ab5@2 bb5@2, ~@5 gb4 ~@21 g5@2 ~@3", // Eb
  AD: "ab5@3 ~@11 [g3,ab3,c4] ~ g5 ab5 ~ eb6 ~@2 g6@2 ab6 g6 ab6 g6 ab6 g6 ~ ab6, ~@21 f6@2 ~@9", // Abmaj7
  AE: "g6 ab6 g6 ab6 ~ [g6,ab6] ~ g6 ab6 [ab3,bb3,c4,eb4,g4,g6] ab6 g6@2 ab6 g6 ab6 g6@2 [gb3,bb3,db4,f4]@6 ~ gb6@2 ~ ab6@4, ~@24 f6@3 g6@2 ~@3", // Abmaj7 Gbmaj7
  AF: "~@3 g6@4 ~@2 [ab3,c4,d4] ~@2 c6@3 ~@2 ab5@3 ~ g5@5 [f3,b3,eb4] ~@2 b5@3, ~@9 [f6,g6]@3 ~@14 f5@3 ~@3", // Dm7b5 Fm7b5 Fsus2
  AG: "~@3 bb5@3 ab5@2 ~ eb5@2 b4@2 ~ [f3,b3,eb4] ~@2 ab4 ~@2 gb4@2 ~ g4@3 bb4@2 ~ d5@2 ~, ~@14 bb4@3 ~@15", // Fm7b5
  AH: "[f4,f5]@3 d5 ~@2 [ab4,ab5]@2 ~ g5@2 ~@3 [gb4,gb5]@2 ~ [f4,f5]@4 ~@2 eb5@2 ~ bb4@2 b4@4, g2 ~@7 g4@2 ~@13 f2 ~@2 f5@5 ~", // F Ab Gb F
  AI: "~ ab4 ~ [db5,f5]@4 ~@2 bb4 b4@2 ab4@3 ~@3 [gb4,c5]@3 eb4@5 ~ db4@2 b3@2 ~, ~@9 f5@2 ~@7 ab3 ~@8 ab4@5", // Db Gbdim
  AJ: "~@3 [c4,ab4]@2 ~ ab3@5 ~ eb3 ~@2 c4@5 ~ eb4@3 db4@5 ~ eb3 ~, ~@3 b3 ~@2 bb3 ~@8 b3@2 ~@15", // Fm
  AK: "~ f4@6 ab4@2 a4@4 ~@2 c5@2 ~ a4@2 ~@4 d4@2 c4@2 ~@4, ~ e4@2 ~@12 g2 ~@16",
  AL: "bb3@2 ~ ab3@4 ~@2 f2@3 [d3,a3]@9 c3@2 ~@6 e3@2 ~", // D5
  AM: "f3@2 g3@2 ab3 ~ a3@2 ~ bb3@2 b3@2 c4@2 a3 ~ bb3@2 ~@3 a3 ~ [eb2,bb3] ~ c4@2 db4@2 eb4@2, ~@6 c3 ~@25", // Eb5
  AN: "[~ f4@2 g4@2 a4@2 bb4 ~ db4 eb5 ~@3 c5@2 ~ bb4@2 a4@2 bb4 ~ c5@2 ~@2 a4@3 c4 bb4@2 ~ a4 ~ g4@2 ~ a4@2 ab4 ~@3 ab4@2 ~ gb4@2 f4@2 eb4@2 d4@4 ~ d4@2 ~@3, ~@12 d5@2 ~@12 bb4@2 ~@7 ab4@2 ~@11 g4 ~@15, ~@13 db5@2 ~@10 b4@2 ~@37]/2",
  AO: "[~@5 a2@2 d2 ~@2 d4 gb4@2 ~ bb4 ~ d5@2 gb5 ~ bb5 ~ db6 ~ d6@3 ~@2 c6@2 b5@2 bb5 ~ f5 ~ gb5@2 a5 ~ bb3 g5@2 d5 ~ bb4@2 ~@2 ab4 a4@2 bb3 [ab4,c5]@2 a4@2 g2 ~ f3 db4 ~@4 a4@2 d4 d5@2 [g4,bb4]@2 e4 ~@2 f4 ~ bb4@2 e4@2 c4 ~ f4 d4 bb3 a3@2 ~@5 bb2@8 f3 ~ a3@2 bb3@2 ~@2 bb2 ~ ab3@2 ~ ab3@2 f3@2 gb3 ~ g3@2 f4@2 ~@3, ~@41 [a3,d4]@8 g4@2 ~@12 f4@2 c5@2 ~@7 c5@2 ~@7 a4@2 ~@43, ~@50 c5@3 ~@11 a4@2 ~@9 a4@2 d4@2 ~@49]/4", // Ab Gm D5
  AP: "bb2 eb2@2 ~ f3@2 bb3 ~ db4@2 eb4 ~ f4@2 ~ bb4@2 db5@2 eb5 ~ f5@2 bb5@2 ~ db6 ~ f6@2 db6@2, ~@19 [g3,db4]@13", // Gdim
  AQ: "[bb5@2 ~@3 e6@7 ~ d6@4 ~@2 c6@2 ~ a5@5 ~ [g3,b3,c4] ~@2 d5@6 c5@2 [d5,eb5] e5@5 f5@2 ~@2 e5@5 f5@2 ~ [d5,f5]@4 ~@2 [c5,f5]@3 a4@4 ~ [g2,f3,g4]@2 ~ f4@6 [a3,bb3] f3@2 [ab4,d5]@3 a4@3 ~@3 d4@4, ~@4 [g3,b3,c4,e4]@12 ~@12 [e4,e5]@2 ~@18 [d5,eb5]@2 ~@21 d5@9 d4@2 ~ g4@2 ~@11, ~@2 eb6 ~@45]/3", // Cmaj7 Ebmaj7 Dm F5 G7 Bbmaj7 Abdim Cmaj7 …
  AR: "~@2 d4@2 ~@10 b3 ~ e4 g4@2 bb4 b4 d5 ~@2 d5 eb5 ~ f5@2 [g5,ab5] a5 ~, ~@11 b4 ~@4, ~@23 c5@2 ~ e5@2 ~@4", // Abmaj7
  AS: "~ e6 g6 ~@2 g6 ab6 ~ [db7,d7] e7 a7 ~@6 a4@2 bb4 a4 ab4 ~@2 a5 ~@7, c6@2 ~ e6@2 ~@10 [g3,c4,db4,f4]@11 ~@6, ~@4 f6@2 ~ a6@2 ~@23", // Dmaj7 Csus4
  AT: "[~@8 e5@2 ~ g5@3 ~@3 f5@2 c5@3 ~ db5@2 e5@3 db5@2 ~ d5@2 ~ f5@2 ~ a5@4 ~@2 [a3,b3,e4]@2 ~ [f3,b3,f5,f6]@4 ~ [f3,a3,bb3,d4,g6]@2 ~@3 d6@3 ~@4 db6@2 d6@2 ~@5 [c6,gb6]@3 g6@2 ~@4 [g3,a3,c4,e4,d6,a6,d7]@8 ~ [ab6,eb7]@5 [ab3,c4,db4,f4,d6,ab6,bb6,d7], ~@19 [a3,b3,e4]@19 ~@5 [d5,d6] ~ [a3,e4]@4 ~@5 [f3,a3,bb3,d4,a5,db6]@6 ~@3 [f3,a3,bb3,d4,a5,f6,a6]@5 ~@4 [g3,a3,c4,e4,c7]@6 ~@11 [ab3,c4,db4,f4,eb6,bb6]@7, ~@46 g5 ~@4 g5 ~@3 a6@5 ~@36]/3", // Asus2 Fdim Gm7 Cdim Am7 Ab5 Dbmaj7 Asus2 …
  AU: "[~@2 [ab3,c4,db4,f4,db6,ab6,db7]@5 ~@3 g6 ~@6 g3@2 [g3,c4,db4,f4,eb5,bb5,eb6]@8 ~ [g3,bb3,c4,f4,c6,g6,c7]@17 ~ [g3,bb3,c4,f4,c6,g6,c7]@3 ~@5 [b3,e4,b5,g6,b6]@6 ~ [c6,ab6,c7]@11 [e3,bb3,eb4,eb5,bb5,eb6]@6 ~@3 [e3,bb3,eb4,f6]@6 [e3,bb3,eb4,ab5,ab6] ~ [e3,bb3,eb4,bb5,bb6]@7, ~@8 [g3,c4,db4,f4,c6,gb6,c7]@4 ~@41 f3@7 [e3,bb3,eb4]@11 ~@10 [f5,c6] ~@14]/3", // Dbmaj7 Gm7b5 Gm7 Em Fm Eb Ebsus2 Emaj7 …
  AV: "~@4 b5@3 ~ [a3,db4,b5,gb6]@2 ~ [a3,db4,eb4,ab4,bb5,eb6,gb6,bb6]@6 [a3,db4,eb4,ab4,bb5,gb6,bb6]@2 ~ [db4,eb4,ab5]@4 ~@4 [a3,db4,eb4,ab4,f5,db6,f6]@4, ~@2 [a3,db4,eb4,ab4,eb6,gb6]@5 ~ [eb4,ab4,eb6,b6] ~@10 [a3,ab4]@5 ~@8, ~@2 [bb5,bb6]@2 ~@13 eb6 ~@2 [eb6,ab6]@2 ~@10, ~@3 b6@4 ~@25", // Gbm Ebm7 Dbsus2 Db Ebm7b5 Abm Amaj7 Bb …
  AW: "~@3 ab6@3 ~@14 [g2,a2] f2 f1@10, ~@3 [db4,eb4,ab4,ab5,db6]@13 a3 [f3,g3] e3 [c3,d3]@3 ~@10, ~@3 a3@9 [g4,a4]@8 b2@2 ~@10, ~@10 [c5,d5]@3 f4 [d4,e4]@8 ~@10, ~@11 b4@4 [b3,c4]@7 ~@10", // Gsus2 Dbsus2 Fsus2 Csus2 Gsus2 Csus2 Dsus2 Cmaj7
  AX: "f5@5 ~ [c4,db4,ab5]@2 ~ [ab3,c4,db4,c5]@4 ~@4 [ab3,bb3,c4,db4,f4,f5]@5 ~@4 [ab3,bb3,c4,db4,f4,c5]@4 ~@2, e5@2 ~@4 [ab3,f4] ~ [f4,c6]@4 ~@14 ab5@2 ~@4", // Dbmaj7 Db F5
  AY: "[~@9 [bb3,d4,eb4] ~@2 [bb3,d4,eb4,g4] ~@2 bb5@2 ~ db4@2 ab5@2 ~ [c5,c6]@3 ab5@2 ~ f5@2 ~@3 f5@2 ~@4 [c5,c6]@3 ~@6 eb5 ~ eb6 eb5 eb6 ~ eb6@2 eb5 eb6 eb5 eb6 ~ eb5!2 ~@6 [gb5,gb6]@2 ~ [e5,e6]@5 [e3,bb3,eb4]@18 ~@9 ab5@11 ~ [g3,bb3,c4,f4,c5,eb5,g5]@3 ~@5 [g3,bb3,c4,f4,c5,eb5]@8 ~ [ab3,d4,b4,d5,f5]@4 ~@5 [g3,bb3,c4,f4,c5,eb5,g5]@7 ~@2 [eb4,c5,eb5,ab5]@4 ~@4, ~@9 bb5@2 ~ [d5,d6]@5 [a3,d4,gb4,db5,db6]@3 ~@3 [ab3,db4]@20 [eb5,eb6]@6 ~@5 eb5@2 ~@7 eb6@3 ~@12 [c5,c6]@25 ~@57, ~@23 [c4,f4]@14 ab5@7 ~@2 [e3,gb3,ab3,b3,eb4]@11 ~@7 [e3,ab3,b3,eb4]@15 ~@17 [e3,bb3,eb4]@20 ~@35 [ab3,c4]@4 ~@5]/5", // Ebmaj7 C Gb E Eb Cm7 Abdim Cm7 …
  AZ: "[g3,bb3,db4,e4,db5,e5,bb5]@5 ~@4 [c4,eb4,c5,f5,ab5,c6]@6 [gb3,bb3,db4,f4,eb5,bb5,eb6]@3 ~@6 [f3,ab3,e4,g5,e6,g6]@2 ~@6, ~@7 f3@8 ~@17, ~@8 ab3@7 ~@9 [c4,c6] ~@7", // Gdim Fm7 Gbmaj7 C
  BA: "~ [f3,ab3,c4,g5,c6,e6,g6]@2 ~@6 [f3,ab3,c4,e4,f5,c6,f6] ~@2 [f3,ab3,c4,e4,g5,c6,g6]@4 ~@4 [f3,ab3,c4,e4,f5,c6,f6]@8 ~@2 [f3,b3,eb4,bb6]@2, e4@2 ~@28 [bb5,eb6,gb6] ~", // Fm Ebsus2 Ebm
  BB: "~ eb6@2 [f3,b3,eb4,ab5,eb6,ab6]@2 ~ e3 eb6 ~@7 [g1,g2]@15 g3@2, gb6@5 ~@27, [b3,eb4]@3 ~@3 [f3,b3,eb4,g5,g6]@25 ~, ~ a6@5 ~@26", // Fm7b5 G B Ebaug
  BC: "~ c3@2 ~@3 [g4,eb5]@2 ~@7 c5@3 [eb4,bb4]@4 ~@5 [eb4,ab4]@4 ~, ~@6 [bb3,bb4] ~@8 eb3@6 ~@6 eb3@2 ~@3, ~@18 f2@9 ~@5", // Cm Eb5 Ab5 Bb
  BD: "[~@3 c5@5 ~@4 c5@5 ~ [g3,db4,e4,gb4,a4,c5]@17 [gb3,c4,f4,bb4,d5]@2 ~@2 gb3@3 ~@5 [gb3,c4,f4,bb4,eb5]@4 ~@5 [a3,eb4,a4,b4,d5]@4 ~@4, ~ bb2@15 ~@48, ~@3 [ab3,db4,f4]@13 ~@22 [c4,f4,bb4,f5]@3 ~@23, ~@10 b4@7 ~@47]/2", // Gbm7 Bb Cm7b5 B7 Db Fsus4
  BE: "[~ [a3,eb4,b4]@4 ~@13 g5@5 ~@13 c6@5 ~@12 [f5,f6]@5 [gb5,db6,gb6]@3 ~@9 [bb5,bb6]@5 ~ [ab3,c4,d4,g4,c6,ab6,c7]@2 ~@7 [ab3,ab5,ab6]@9 ab3@2, [a4,eb5]@4 ~@5 [ab3,d4,g4,c5,e5]@14 ~ [g3,bb3,c4,db4,f4,c5,f5,a5]@17 [gb3,bb3,c4,f4,d5,bb5,d6]@17 [a3,db4,eb4,ab4]@17 ~@9 [c4,d4,g4]@12, ~@15 f5@8 ~@10 bb5@8 ~@9 [eb5,eb6]@9 ~@8 [ab5,ab6]@8 ~ f6 ~@19]/3", // B7 F Gb5 Bb Abmaj7 Ab Adim C …
  BF: "~ [db4,f4,f5,db6,f6]@4 ~@5 ab6@5 [g3,bb3,c4,f4,ab5,eb6,ab6]@3 ~@6 [d3,c4,f4,ab4]@3 ~ [db3,b3,e4]@4, ab3@4 ~@5 [ab3,db4,f4,ab5]@7 ~@11 ab4@3 ~@2", // Db Cm7 Dm7b5 Dbm7 Db
  BG: "[~@2 bb2 ~ [c3,eb4,ab4]@5 ~ [b2,a3,d4,ab4]@3 ~@8 [db3,ab3,c4,db4,f4]@4 ~@5 [e3,g3,b3,db4,eb4,gb4]@6 f4@14 ~@19 d7@6 ~@15 bb5@4 bb5@5 ~@61, ~@4 bb3@3 ~@12 bb2@5 ~@4 a2@7 ~ [ab2,eb3,g3,bb3,c4,d4]@18 d5@3 bb5 c6@2 d6@2 f6@2 bb6@2 c7@8 ~@10 gb4@64 ~@12, ~@21 f3@2 ~@28 f4@24 ~ d3@10 bb4@64 ~@10, ~@52 bb4@23 ~@4 bb3@8 c5@64 ~@9, ~@53 c5@22 ~@8 f4@64 ~@13]/5", // Ab Abdim Dbmaj7 Dbm7b5 Abmaj7
})).s("gm_piano").gain(0.48).pan(0.6)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A@2 ~ B C@2 ~ D ~ E@2 F ~@2 G H@2 I ~@3 J ~@5 K L@3 M@2 ~@2 N ~@5 O ~@2 P@2 ~ Q ~@2 R ~ S T U V ~ W X ~@2 Y ~ Z@2 AA
  AB ~@2 AC ~ AD@2 AE AF AG AH AI AJ AK AL AM ~ AN ~@2 AO AP AQ@2 ~@5 AR ~ AS AT ~@2 AU ~@2 AV ~@4 AW ~@4 AX@4
>`.pickRestart({
  A: "[~@17 d4@19 ~@28]/2", B: "~@9 bb4@6 ~@10 a4 ~@6, ~@8 b3@7 ~@9 g3@2 ~@6",
  C: "[~@9 c4 ~ c4 ~@15 db3@2 e3@14 ~@21]/2", D: "~@14 b4@2 ~@12 d3 ~@3", E: "[~ d4@6 ~@18 g2@2 f3@17 ~@20]/2",
  F: "~@22 d3 ~@9", G: "~@5 bb2@2 ~@15 eb3@2 ~@8", H: "[~@8 [g3,d4]@36 ~@3 a4@2 ~@15]/2", I: "~@7 g4, ~@7 [e3,g3]@9",
  J: "~@23 e4@3 ~@6, ~@11 g3@16 ~@5", K: "~@13 f4 ~@2",
  L: "[~@11 f4@2 ~@16 e4 ~@21 e4@2 ~@31 [g3,g4]@3 ~@9, ~@14 [e3,eb4]@33 ~@2 e3@34 ~@13]/3", // G Emaj7
  M: "[~@6 [g3,c4,f4]@4 ~@4 g3@7 ~@8 g4@27 ~@8]/2", N: "~@9 a3@2 ~@5", O: "~@15 a4",
  P: "[~@28 c4@3 d4@2 ~@18 f4@2 ~@11]/2", Q: "~@7 e2 ~@10 eb2 ~@13", R: "~@18 d5 ~@6 f3@2 ~@3 a4@2", S: "~@4 e3 ~@27",
  T: "~@5 a4@2 ~@12 c4@11 ~@2, ~@2 g3@11 ~@19", U: "~@25 g4 ~@6", V: "~ d4 ~ f4@2 ~ d4 ~@8 c4 ~@12 c4@2 ~@2",
  W: "~@8 g3 ~@7", X: "~@14 eb4 [e3,db5] ~@16", Y: "~@13 f4@3", Z: "[~@4 f5 ~@2 e3@18 ~@7]/2", AA: "~@29 a5 ~@2",
  AB: "~@9 c6 ~@6", AC: "a5 ~@15", AD: "[~@12 bb4 ~@18 c4@2 ~@31]/2", AE: "~@21 f4 ~@8 b3@2", AF: "~@25 f3@2 ~ c3 ~@3",
  AG: "~@10 g3 ~@5", AH: "~@9 g3 ~@22", AI: "~@12 gb4 ~@19, ~@11 g4@2 ~@19", AJ: "~@27 a5 ~@4",
  AK: "~@12 bb3@6 ~@13 d4", AL: "~@4 f4 ~@11 [g4,ab4] ~@15", AM: "~@12 f3@3 ~@2 bb3@3 ~@12, ~@11 a3@2 ~@19",
  AN: "~@3 f5 ~@28", AO: "~@9 a4 ~@6", AP: "~@23 b4 ~@8", AQ: "[~@14 e5@2 ~@3 f3@19 ~@5 f3 ~@11 f6@4 ~@5]/2",
  AR: "~@9 e5@12 ~@11, ~@7 g5@15 ~@10, ~@8 f5@13 ~@11", AS: "~@9 g4 ~@22", AT: "c5 ~@15", AU: "~@21 f3@6 ~@5",
  AV: "~ a5@5 ~@9 eb2@16 ~, ~ f3@2 ~@29", AW: "~@9 g4@17 ~@6",
  AX: "[~@9 gb5@16 ~@7, ~@9 d2@16 gb5@2 f6@2 d6@64 ~@35, ~@14 gb3@17 gb5 f6@64 ~@32, ~@17 c4@17 c6@64 ~@30, ~@24 f5@11 bb5@64 ~@29]/4",
})).s("gm_piano").gain(0.32).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F ~ G H I J K L ~ M ~ N O P Q R N S T U V W X Y U Z B AA AB AC AD AE AF ~ AG AH AI AJ AK AL AM AN L AO AP AQ
  AR O P AS AT AU S T AV AW AX AY AZ U Z B C BA AC BB BC BD BE AG F ~ G H I J K L AO AP AQ N O P Q BF AU S T U V W X Y U
  Z B C AB AC AD AE BD BE E BG ~ BH AF ~@4
>`.pickRestart({
  A: "x ~@16 x ~@14", B: "~@3 x ~@16 x ~@11", C: "~@3 x ~@12", D: "~@9 x ~@5 x ~@16", E: "~@27 x ~@4",
  F: "~@12 x ~@2 x ~@14 x ~", G: "~ x ~@19 x ~@10", H: "~@4 x ~@16 x ~@10", I: "~@7 x ~@24",
  J: "~ x ~@17 x ~@7 x ~@2 x ~", K: "~@13 x ~@16 x ~", L: "~ x ~@14 x ~@15", M: "~@11 x ~@4", N: "~@7 x",
  O: "~@16 x ~@14 x", P: "~@19 x ~@12", Q: "~@2 x ~@16 x ~@2 x ~@9", R: "~@22 x ~@2 x ~@6", S: "~@11 x ~@16 x ~@2 x",
  T: "~@14 x ~@16 x", U: "~@17 x ~@14", V: "~@5 x ~@14 x ~@11", W: "~@5 x ~@8 x ~@17", X: "x ~@3 x ~@8 x ~@2",
  Y: "~@14 x ~@14 x ~@2", Z: "x ~@4 x ~@2", AA: "~@3 x ~@9 x ~@2", AB: "~@9 x ~@16 x ~@2 x ~@2", AC: "~@3 x ~@4",
  AD: "x ~@14 x ~@16", AE: "x ~@8 x ~@6", AF: "~ x ~@6", AG: "~@12 x ~@14 x ~@4", AH: "~@15 x ~@14 x ~",
  AI: "~@9 x ~@6", AJ: "~ x ~@16 x ~@2 x ~@10", AK: "~ x ~@4 x ~", AL: "~@7 x ~@16 x ~@2 x ~@4", AM: "~@5 x ~@10",
  AN: "~@13 x ~@18", AO: "~@4 x ~@14 x ~@12", AP: "~@2 x ~@8 x ~@4", AQ: "~@10 x ~@14 x ~@6", AR: "~@13 x ~@14 x ~@3",
  AS: "~@2 x ~@16 x ~@12", AT: "~@5 x ~@19 x ~@6", AU: "~@2 x ~@4 x", AV: "~@2 x ~@14 x ~@14",
  AW: "~@2 x ~@2 x ~@14 x ~@11", AX: "~@23 x ~@8", AY: "~@11 x ~@14 x ~@5", AZ: "~@11 x ~@17 x ~@2",
  BA: "~@9 x ~@19 x ~@2", BB: "~@15 x ~@16", BC: "~@3 x ~@14 x ~@13", BD: "~@6 x ~@14 x ~@10", BE: "~@9 x ~@14 x ~@7",
  BF: "~@5 x ~@16 x ~@2 x ~@6", BG: "~@6 x ~@8 x", BH: "~@21 x ~@10",
})).gain(0.07)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@13 A ~@21 B ~@3 C ~@8 D ~@8 E ~@8 F ~@16 G H ~@20 B ~@12>".pickRestart({
  A: "~@5 x ~@9 x", B: "~@3 x", C: "~@3 x ~@12", D: "~@7 x", E: "~@2 x ~@2 x ~@13 x ~@2 x ~@9", F: "~@3 x ~@4",
  G: "~@10 x ~@2 x ~@16 x ~", H: "~ x ~@30",
})).gain(0.07)

// drums · low tom
const low_tom = s("lt").struct("<~@57 [~@25 x ~@6] ~@60>").gain(0.07)

// drums · hihat
const hihat = s("hh").struct(`<
// … 76 more lines

More by Oscar Peterson