Strudelify

When Your Lover Has Gone

Oscar Peterson

KeyG minorTempo120 bpm
0:00/0:00
// When Your Lover Has Gone — Oscar Peterson
// 120 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 121 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(`<
  ~@40 A B@4 C@2 D@2 E@2 F@8 G H@2 I J K@2 L@5 M N O@2 P@4 Q@2 R@2 S@5 T@2 U@2 V@2 W X Y@2 Z@7 AA@4 AB@2 AC@2 AD@2 AE
  AF@5
>`.pickRestart({
  A: "~@25 bb2@7", B: "[~@2 f2@9 d2@6 eb2@3 e2@9 f2@9 bb1@10 f2@9 e2@9 eb2@8 g2@10 ab2@9 a2@9 bb2@9 eb2@9 eb3@8]/4",
  C: "[~ db2@8 ~ c2@9 c3@9 d2@9 eb2@9 e2@9 g2@9]/2", D: "[~ c2@6 db2@3 d2@6 eb2@12 f2@9 gb2@9 g2@9 ab2@9]/2",
  E: "[c3@10 eb3@8 e3@9 ~ f3@9 d3@9 a2@9 gb2@9]/2",
  F: "[g2@8 bb2@9 g2@10 f2@9 e2@9 g2@9 d2@8 ~ db2@9 c2@9 g2@6 ab2@3 a2@9 db2@8 ~ d2@9 d3@9 g2@9 ~ gb2@9 f2@8 ~ f1@9 g1@9 a1@9 bb1@6 f2@3 gb2@9 g2@6 d2@3 db2@9 c2@6 eb2@3 e2@6 ~ f2@9 ab2@2 ~ a2@6 bb2@5]/8",
  G: "~@4 bb2@3 d2@9 eb2@8 e2@8", H: "[~ f2@9 g2@10 a2@8 bb2@3 db3@3 d3@4 eb3@9 g2@10 ab2@7]/2",
  I: "~ a2@9 bb2@9 eb2@9 bb2@4", J: "~@2 eb2@3 d2@6 db2@3 c2@7 c3@2 e2@9",
  K: "[f2@9 gb2@9 ~ g2@8 c2@10 g2@9 d2@9 eb2@9]/2",
  L: "[f2@9 gb2@6 bb2@2 ~ a2@9 ab2@9 gb2@9 ~ f2@8 ~ eb2@2 d2@3 c2@3 bb1@9 ~ d2@8 gb2@6 ~ a2@3 ab2@9 g2@9 bb2@9 gb2@9 bb2@9 f2@9 bb2@9 a2@6]/5",
  M: "~@3 a2@9 ab2@7 ~@2 ab2@8 ~ g2@2", N: "~ f2@2 ~ d2@2 ~ b1@6 g2@2 ~ c2@6 g2@2 ~ d2@7",
  O: "[~@3 eb2@8 e2@9 f2@10 gb2@9 g2@9 a2@9 bb2@7]/2",
  P: "[~@2 db3@9 d3@9 b2@9 c3@9 ~ bb2@8 a2@7 f2@3 g2@6 a2@3 bb2@8 d2@10 eb2@8 e2@9 f2@9 gb2@9 g2@9]/4",
  Q: "[~ a2@9 bb2@6 eb3@2 ~ g2@9 ab2@9 a2@9 bb2@9 eb2@9]/2", R: "[d2@8 ~ db2@9 c2@7 c3@2 d2@9 eb2@10 e2@9 g2@9]/2",
  S: "[a2@9 bb2@9 e2@9 eb2@9 f2@9 gb2@9 g2@9 ab2@9 bb2@9 c3@9 db3@9 d3@9 bb2@9 a2@9 gb2@9 g2@9 bb2@6 g2@4 f2@6]/5",
  T: "[~@3 bb2@6 f2@3 e2@6 c3@2 ~ d2@8 c2@10 d2@9 e2@9 c2@7]/2", U: "[~ db2@10 e2@9 f2@9 bb1@9 d2@10 eb2@9 f2@7]/2",
  V: "[~@2 a2@9 c3@9 db3@8 d3@9 c3@10 b2@7 ~@2 b2@8]/2", W: "~ c3@9 bb2@8 ~ a2@6 f2@3 g2@4",
  X: "~@3 a2@3 bb2@4 ~@2 bb2@2 d2@9 eb2@9", Y: "[~ e2@9 f2@8 gb2@9 g2@9 a2@9 bb2@6 ~ eb3@2 g2@10]/2",
  Z: "[ab2@9 a2@9 bb2@9 eb2@9 db2@8 ~ bb2@9 c2@7 c3@2 d2@9 eb2@9 ~ e2@9 bb2@9 b2@9 c3@8 e2@6 ~ c3@2 eb2@9 f2@10 bb2@9 a2@9 ab2@9 gb2@9 f2@9 ~ eb2@2 d2@3 c2@3 bb1@8 ~ d2@9 gb2@7]/7",
  AA: "[~@2 a2@9 g2@9 bb2@9 gb2@9 bb2@9 ~ f2@9 d3@6 bb2@3 a2@9 a1@9 ab2@7 ~@2 ab2@9 ~ g2@8 b1@8 ~ c2@7 b2]/4",
  AB: "[~ d2@10 eb2@8 e2@9 f2@9 gb2@9 ~ g2@9 eb2@8]/2", AC: "[d2@6 d3@2 ~ eb2@9 f2@10 gb2@9 g2@9 ab2@9 a2@9]/2",
  AD: "[b2@9 ~ c3@9 bb2@9 a2@9 g2@9 ~ gb2@9 eb2@8]/2", AE: "~ f2@9 a1@6 bb1@2 ~@6 bb1@4 d2@4",
  AF: "[~ f2@2 ~ eb2@4 ~ g2@4 bb2@5 c3 ~@3 d3@5 bb2@2 ~ c3@5 ~ bb2@3 ~@9 bb1@85 ~@27]/5",
})).s("gm_acoustic_bass").gain(0.33).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B@8 C@8 D@5 E@4 F@8 G H@6 I@4 J@2 K@2 L M N O@2 P Q R S T@2 U@3 V@2 W@3 X Y@3 Z@2 AA AB@4 AC AD AE@5 AF@4 AG@4 AH@3
  AI AJ AK AL AM AN AO@2 AP@2 AQ AR@3 AS AT@4 AU AV@4
>`.pickRestart({
  A: "~@8 a3@11 [b3,eb4,g4]@13, ~ f2@31, ~@7 [bb3,d4,f4]@11 ~@14", // Baug Bb
  B: "[~@11 [g3,bb3,c4,eb4]@3 ~@7 d4@20 ~@6 [g3,c4,d4,f4,a4]@8 [bb3,db4,e4,g4,bb4]@22 ~@6 [g3,bb3,eb4,f4]@9 ~@12 gb4@6 ~@19 a4@3 [c4,d4,f4,a4]@9 [b1,a3,db4,ab4]@6 ~ f2@8 bb1@12 f2@6 eb2@3 [e2,ab3,d4,gb4]@6 ~@17 a4@4 ~@9 ab4@6 ~@13 g4@5 ~@10 bb2@2 ~ d2@5 ~, ~@5 f2@36 f2@36 f2@34 [bb2,a3]@30 ~@78 [e2,db4,ab4]@18 ~@19, ~@20 [a3,c4,f4]@21 ~@51 [eb3,a3,g4]@19 ~@9 bb1@21 ~@43 eb2@36 ~@18 eb2@12 ~@6, ~@92 db4@2 ~@17 c4@21 ~@16 [a3,c4,d4]@29 ~@6 [g3,db4,f4]@21 [eb3,g3,db4,f4,a4]@16 ~@18 f3@18, ~@93 d4@17 [d4,f4]@22 ~@9 eb4@2 ~@4 g4@29 ~@61 [db4,g4]@19]/8", // Cm7 Dm7 Bbdim Eb Dm7 Db7 E7 Bbmaj7 …
  C: "[db2@3 ~@6 [d4,bb4,d5]@2 g4 ~@9 e3@8 ~ db5@5 ~ [e3,bb3,e4,a4]@11 ~ f3@8 ~ [eb2,gb3,c4,eb4]@8 ~ [g3,g4]@8 ~ gb3@17 ~@13 db5@5 ~@2 gb4@13 ~@13 eb5@6 ~@13 d5@6 ~@12 a4@6 ~@17 g2@3 ~@16 e3@3 ~@6 gb4@2 ~@22 bb4@6, ~@3 c2@27 ~@17 [d2,c4,f4]@9 gb4@9 [e2,c4,e4]@9 [f4,bb4,d5]@25 ~@36 d5@10 ~@8 eb5@10 ~@18 bb4@39 ~@6 bb4@17 c5@4 d4@9, ~@9 gb4 ~@19 db2@6 c5@40 eb2@36 [a2,g3,db4,bb4,db5]@14 ~ [ab2,gb3,c4,f4,a4]@19 [bb2,f3,d4,g4]@19 ~@25 [f3,bb3]@13 ~@6 [ab3,eb4,g4]@12 ~@6 [g3,d5]@30, ~@75 c4@24 [c4,f4,bb4,d5]@12 ~@33 [a3,a4,c5,f5]@19 ~@18 [d4,g4]@21 ~@24 d4@2 g4@28, ~@92 gb3@18 ~@53 [a2,gb3,c4,gb4,c5]@18 g2@17 ~@3 f2@18 ~ e2@36]/8", // Gm A Cdim G Dm7 C Bb Gdim …
  D: "[~@24 e3@3 ~ [g3,bb3,db4,e4]@6 ~@9 f3@2 ~ f3@5 ~ f3@9 ~@6 g4@6 f4@8 f4@7 ~@9 f3@9 ~@9 d3@2 ~ gb2@9 ~@6 [f3,b3,f4]@3 db2@7 g2@2 [g3,bb3]@6 [c3,g3]@2 ~ [gb2,ab3]@6, g3@27 ~@34 f3@12 ~@33 f4@24 ~@15 eb4@15, [db4,f4,a4]@12 ~@3 [bb3,db4,e4,g4]@12 ~@7 [a3,bb3,d4,f4]@39 [a3,db4,eb4,a4]@15 [a3,db4,eb4,f4,a4]@18 [gb3,c4]@21 ~@33, ~@9 a2@25 ~@39 f2@35 ~ d2@9 ~@9 g2@9 ~@9 c2@9 ~@6]/5", // Gdim Fdim Gm C5 Gbsus2 Dbaug Bbdim Bbmaj7 …
  E: "[~@9 [f1,db4,eb4,g4]@12 ~@16 [c4,d4,f4,a4]@4 ~@2 [c4,d4,f4,a4]@3 ~@3 [b3,db4,eb4,ab4]@6 ~@17 [f2,g2]@3 ~@16 bb2@2 ~@8 [g3,f4]@3 ~@8 [db4,f4,a4]@6 bb2@2 ~ [e2,ab3,d4,ab4]@6 ~, a3@21 bb2@54 ~ e2@18 eb2@26 ~@8, ~ f2@20 bb3@19 ~@15 [bb3,d4,f4,g4]@20 ~@25 [db4,a4]@3 ~@25, ~@22 a3@19 ~@41 [ab3,d4,gb4,bb4]@12 ~@34, ~@11 [d4,f4]@4 bb1@14 ~@3 bb1@6 ~@26]/4", // Eb7 Dm7 Abm Fsus2 G7 Dbaug E7 Gm7 …
  F: "[~@3 d4@6 ~ g3@2 ~@6 g3@7 [d2,f3,c4]@6 ~ [db2,f3]@5 ~@20 d5@6 ~@7 db5@5 ~ d4@8 [d3,a3,c4,f4]@9 ~ gb3@7 ~ [g3,c4,e4,g4]@9 ~@7 c4@11 ~@10 db5@6 ~@12 c5@6 ~@12 eb5@5 ~ c3@2 ~@10 d5@6 ~@12 c5@5 ~ [g2,g4]@9 ab3@3 g3@6 ~@9 [c4,eb4,gb4]@12, ~@2 [e2,ab3,ab4]@7 [eb2,db4,g4]@2 ~@6 g4@40 [bb3,d4,g4,bb4]@10 g3@9 ~@17 [eb4,gb4]@8 ~@16 [f4,bb4,d5]@12 ~ [c4,f4,bb4]@16 ~@35 [g4,a4]@18 ~@18 bb4@39, ~@17 [eb2,db4]@8 ~@6 b3@6 g3@26 d5@12 c5@36 ~@18 d5@16 ~@26 d5@9 ~@28 d5@9 d4@18 ~@21, ~@37 bb3@10 e3@28 [e3,bb3,g4]@8 ~@35 gb3@28 ~@34 [d3,bb3,f5]@19 ~@36 gb3@21, ~@38 c2@37 ~@26 e2@10 eb2@34 ~ [a2,g3,db4,gb4,bb4,db5]@17 [ab2,gb3,c4,f4,a4]@17 ~@19 [a2,gb3,c4,e4,gb4]@18 ~@39]/8", // Dm7 Db Dm7 C G Cdim E Eb7 …
  G: "f4@15 f4@4 ~@8 gb4@5, [bb2,f3,a3,c4,d4]@19 [a2,g3,db4,f4]@13", // Bbmaj7 Aaug
  H: "[~ db4@8 ~@6 g4@6 ~@9 b3@7 ~@9 [e3,g3,bb3,d4]@13 gb4 g4@5 bb4@2 ~ c5@6 ~@12 [gb3,bb4]@6 [a3,eb4,gb4]@11 ~ [gb3,c4,eb4,a4]@6 [g3,d4,f4,bb4]@12 [ab2,gb3,c4,f4,ab4]@9 [g2,f3,b3,e4,g4]@9 [g2,f3,b3,e4,g4]@9 [gb2,e3,bb3,eb4,gb4]@9 [gb2,e3,bb3,eb4,gb4]@8 ~ eb3@2 ~@4 gb2@3 g2@7 a2@3 ~@6, ~ [ab2,eb3,gb3,gb4]@20 [g2,f3,c4]@16 e2@22 e4@3 ~@130, ~@9 c4@12 g4@38 bb3@15 [bb3,e4,ab4,db5]@17 ~@76 [f2,a3,d4,f4]@9 ~@16]/6", // Em7b5 Gb Ebdim Gbdim Gm7 Fm Em Ebm …
  I: "[[c4,f4,a4,c5]@3 ~@6 [bb3,d4,f4,g4,bb4]@2 ~@3 [a3,d4,f4]@3 ~@4 [ab3,bb3,d4,f4,ab4]@3 ~@6 [g3,bb3,d4,g4]@4 ~@4 [bb3,d4,f4,a4]@4 ~@6 [bb3,d4,f4,g4,bb4]@6 ~ [a3,a4]@3 ~@5 db4 g4 ~@16 [b3,db4,f4,g4,b4]@3 ~ bb4@2 ~@7 [a3,a4]@6 [g3,g4]@2 ~@26, d4 ~@12 a4@3 ~@14 f4@2 ~@31 [c4,f4,c5]@3 ~@18 [bb3,f4]@3 ~@41]/4", // F Gm7 Dm Bb7 Gm Bbmaj7 Gm7 A …
  J: "[~@29 [d4,e4,g4]@5 bb3@2 ~ [db4,e4,g4,bb4,db5]@7 [c4,g4]@2 ~@7 [a3,a4]@3 ~ ab3@6 ~, ~@28 [bb4,d5]@7 ~@18 [bb3,d4,e4]@8 ~@3, ~@28 ab4@3 ~]/2", // Em7 Dbdim C5 A Bb Em7b5
  K: "[~@2 [g3,d4]@3 ~@6 [bb3,d4,e4]@3 ~@7 gb4 ~@4 [eb4,gb4,bb4] ~@3 db4@5 ~ gb4 ~@8 eb4@13 ~@6, ~ g4@4 ~@5 a4@4 ~@6 [eb4,bb4]@3 ~@6 [eb4,gb4,db5]@4 ~@2 [c4,eb4,bb4]@2 ~@7 [bb3,gb4,bb4]@14 ~@6, ~@11 a3@5 ~@4 bb3@6 c4@3 ~ bb4@3 ~@31]/2", // G5 Em7b5 Ebm Eb5 Ebm7 Cm7 Ebm
  L: "~@16 [f4,gb4,bb4,c5,f5]@3 ~@6 [eb4,gb4,eb5]@2 ~@2 [d4,f4,g4,d5]@3, ~@25 [bb4,c5] ~@6", // Fsus4 Ebm G7 Bbsus2
  M: "~@11 [c4,d4,bb4,d5]@2 ~@2 [c4,gb4,a4]@3 ~@11 [c4,eb4,gb4]@2 ~, ~@11 [f4,g4] ~@17 a4 ~@2", // Gm Gbdim Cdim Fsus2
  N: "~ [bb3,f4,g4,bb4]@3 ~@11 [bb3,d4]@2 ~@2 [f4,a4]@3 ~@10, ~@7 bb4 ~@8, ~@15 [f4,g4] ~@2 [a3,d4]@3 ~@11", // Gm7 Bb F Fsus2 D5
  O: "[~ [a3,a4]@2 ~ [g3,d4,g4]@3 ~@13 g3@2 [a3,bb3,d4,e4,a4]@7 gb3@2 ~ [ab3,e4]@6 [g3,d4,e4,g4]@14 ~@8 c4@4, ~ d4 ~@29 [d4,ab4]@5 ~@23 [db4,e4,g4,c5]@5]/2", // A G5 Asus4 Dbm Em7 Ddim C
  P: "~@4 [c4,e4,g4]@6 [bb3,db4,e4,bb4]@3 ~@2 [c4,f4,a4]@4 ~@4 [bb3,f4]@3 ~@3 f3@2 ~, ~@4 db4@3 ~@7 a3@5 ~@3 bb4@3 ~@3 [bb3,d4,f4]@3 ~", // C Bbdim F Bb5 Bb
  Q: "~@14 [gb3,db4,gb4]@2 ~@2 [g3,c4,eb4,g4]@4 ~@5 [a3,a4]@4 ~, ~@14 [a3,eb4] ~@11 [c4,eb4]@4 ~@2", // Gb5 Cm A Adim Cm
  R: "~ [f3,db4,eb4,f4]@3 ~@9 [f3,a3,db4,eb4,f4]@4 ~@2 [f3,d4,f4]@2 ~@11, ~@19 [g3,bb3] ~@12", // Db Faug Dm Gm
  S: "~@5 [f3,b3] ~ [f4,f5]@6 ~@4 [f4,f5]@6 ~@3 [f4,f5]@6", // Fdim F
  T: "[~@3 [f4,f5]@5 ~ [a3,eb4] ~@4 d5@4 bb4@3 f4@5 ~ eb4@2 ~ d4@6 f4@3 ~ g4@4 ~ bb4@3 ~@2 g4@5 ~@2 g4@5 ~@2, ~@9 eb5@3 ~@52]/2", // F Adim
  U: "[~@18 bb4@2 ~ g4@5 bb4@2 ~@2 d5@5 f5@3 ~ g4@5 db5@2 ~@2 bb4@6 ~@2 g4@6 ~ bb4@2 ~ db5@5 ~@4 [g4,g5]@6 db5@3 bb4@2 ~ g4@2 ~ bb4@2 ~ db5@2 ~, g4@11 ~@6 d5@2 ~@19 g5@5 ~@53, ~@2 d4@7 ~@15, ~@8 [g3,a3,bb3]@24 ~@3 [g3,db4]@39 ~@22]/3", // G Gm Gdim
  V: "[g5@2 ~ b4@3 eb5@2 ~ f5 ~@2 [gb4,gb5]@2 ~@2 [g4,g5]@13 ~@4 [d5,d6]@5 ~@4 [db5,db6]@4 ~@2 [c5,c6]@6 ~@2 [e3,a3,bb3,d4] c5@2 ~ bb4@4, ~@3 [f3,bb3,b3,eb4]@8 ~@3 [e3,d4]@38 ~@4 e5@2 ~@6]/2", // Gb G D Db C Dsus2 Ebsus2 E7
  W: "[~@2 a4@4 ~ g4@4 [e3,a3,bb3,d4] ~@3 bb4@4 ~ c5@2 ~@2 db5@5 bb4@3 ~ b4@5 ~@10 [gb3,bb3,db4,f4] ~@20 ab5@5 ~ g5@2 ~@2 gb5@4 ~ bb5@3 ~@6 eb5@2 ~, ~@11 a4@3 ~@6 [gb3,bb3,db4,f4]@19 c5@20 [ab3,bb3,c4,f4]@35 ~@2, ~@60 gb3@35 ~]/3", // Dsus2 Gbmaj7 Fm
  X: "~@7 [f3,bb3,d4] ~@19 f5@3 eb5@2, d5@17 ~ [gb3,c4,f4]@14", // Bb F
  Y: "[d5@2 ~@3 bb4@5 d5@8 ~ ab4 ~ g4 gb4@5 ~ bb4@2 ~@2 f4@5 eb4@2 ~ d4@6 [g3,a3,bb3] ~@15 d5@2 e5@2 ~@2 gb5@2 e5@3 ~ d5@2 ~@4 db5@2 ~ eb5@2 ~@2 f5@2 eb5@2 ~ db5 ~@3, ~@2 c5@2 ~@14 a4@2 ~@39 [b3,d4]@15 ~@3 [db4,f4]@17 ~@2, ~@3 [a3,d4]@15 ~@4 c4@14 ~@22 [g3,gb4]@15 ~@5 [gb3,ab3,bb3]@16 ~@2]/3", // Gm Bm Db D5 Gmaj7 Gb
  Z: "[~@3 c5@2 ~ d5@2 ~ e5@2 ~@7 bb4@5 d5@2 ~@2 a4@5 ab4@2 ~ g4@6 bb3 ~@2 gb4@7 ~@2 f4@6 f3@2 ~@3, [f3,a3,c4,e4]@13 ~@2 b4@3 ~@14 d5@5 ~@27, ~@16 d4@25 ~@23]/2", // Fmaj7
  AA: "~@8 d4@6 c4@2 ~ [d4,gb4,d5]@5 ~@2 [d4,f4,g4] ~@7, ~@5 c4@2 [eb4,gb4,a4,b4,d5]@8 ~@2 [eb4,a4]@3 ~@12, ~@3 db4 ~@8 [bb3,bb4] ~@3", // D G7 B7 Ebdim Bb
  AB: "[~@12 [g5,g6]@5 ~ eb6@2 ~@3 b5@4 g5@2 ~@2 c6@4 ~ bb5@2 ~@7 ab5@2 ~@2 a5@3 ~@3 ab5@3 g5@4 ~@5 f5@3 ~@3 bb3@2 ~ [d4,f4,a4]@2 ~@4 [bb3,d4]@2 ~@3 [a3,d4,a4]@3 ~@4 [d4,f4]@4 ~@4 [g3,g4]@6 eb3@2 ~ [gb3,a3,gb4]@5 ~ bb3 d4 ~@9, ~@48 [a3,eb4]@12 ~@3 [a3,bb3]@5 ~@25 [ab3,ab4]@4 ~@20 [f3,f4]@2 ~@9, ~@63 gb5@2 ~@16 bb4@2 ~@45, ~@64 d4@5 ~@7 [c4,c5]@4 ~@2 [f4,g4] ~@28 db4@3 ~@14]/4", // G Dm Bb D5 Dm G Gbm Adim …
  AC: "~@8 [c4,f4,g4]@3 ~@6 [c4,db4,f4,g4]@2 ~@7 [b3,g4,b4]@2 ~ [bb3,db4,f4,g4,bb4]@3, ~@7 c5@4 ~@5 c5@3 ~@13, ~@7 db4@2 ~@17 [db4,f4] ~@5", // Csus4 Em Gm7b5 Db
  AD: "~@15 [a3,bb3,db4,f4,a4]@3 ~@6 [ab3,db4,f4,ab4]@6 [g3,bb3,db4,g4]@2", // Bbm Db Gdim
  AE: "[~@16 [db4,e4,gb4,bb4,db5]@3 [e4,g4,bb4,d5]@10 bb4@2 g4@2 ~ e4 ~@2 ab4@2 a4@5 ~@2 ab4@5 ~@23 g4@5 ~ bb4@3 ~ d5@3 ~@2 eb5@3 ~@2 f5@3 ~ eb5@3 ~@2 bb4@4 gb4@2 ~ f4 ~ gb4@2 f4@2 eb4@2 ~ f4@15 [gb3,bb3,c4] ~@8 gb5@2 ~@2 ab5@2 gb5@3 db5@2 a4@2 ab4@2 ~ gb4, ~@19 d4@27 ~@7 g4@14 ~@22 db4@15 ~@56, ~@37 d5@6 ~@3 d5@20 ~@94, ~@62 [e3,bb3,d4]@23 ~@4 [gb3,bb3]@30 ~@41]/5", // Gb7 Em7b5 Cm7b5 Em7b5 Gb
  AF: "[f4 ~@4 d4@6 ~@4 d4@2 ~ a4@2 ~@3 c5@2 bb4 ~@2 d5 ~ c5 ~ f5@2 eb5@2 d5 ~@3 bb4@2 ~@2 a4 ~ ab4 ~@2 g4@22 ~@10 bb4@2 g4@2 ~ a4@2 ~@2 e4 ab4@2 ~ e4 g4@13 ~@11 e4 ~@2 c4@3 db4@2 eb4, ~@3 bb3@15 ~@21 [a3,d4]@13 ~@68 eb4@2 ~@6, ~@3 eb4@2 ~@12 f4@2 ~ c5@2 ~@16 c5@2 ~@3 d5@2 ~@35 d5@2 ~@46, ~@4 a3@14 ~@3 [gb3,c4]@16 ~@40 [e3,a3]@33 ~@11 db4@2 ~@5]/4", // D5 Gbdim A5
  AG: "[~ e4@2 ~ gb4@2 g4@2 a4@2 ~ bb4 ~ c5@2 db5 ~ d5 ~@4 f5@2 d5@2 eb5 ~ c5@2 d5@2 ~ bb4 ~@19 f5 ~ g5 ~@2 gb5@2 ab5@2 gb5@2 db5@2 a4@2 ~@2 gb4@3 f4 ~ eb4@2 db4@2 a3@2 ~ ab3@2 gb3@2 f3@2 ~ db3 ~@3 gb2@2 f2@9 ~@11 eb4@2 f4@2 g4 ~ ab4@2 ~ bb4@2 g4@2, ~@10 db4@6 ~@3 eb5@2 ~@36 eb4@15 ~@20 ab2@2 ~@34, ~@11 g3@7 ~@2 [a3,bb3,d4]@35 ~@2 a3@18 ~@13 eb3@2 ~ a2@2 ~@35, ~@17 ab4 ~@14]/4", // Bbmaj7
  AH: "[f4@2 eb4@6 g4@3 d4@5 db4@3 ~ c4 ~@5 [d4,eb4,gb4,d5]@3 [db4,bb4,db5]@6 [c4,d4,f4,a4]@3 ~@9 d4@7 g3@2 ~ [a3,bb3,d4,f4,a4]@6 g3@2 ~ [ab3,d4]@5 ~ [g3,bb3,d4,f4] ~@19 [bb3,c4,d5,f5,a5]@2 ~@2, ~@26 a4 ~@17 [bb3,a4]@10 ~@11 [bb3,f4,ab4]@5 ~@22 [d4,f4,a4] ~@3, ~@22 db4 ~@13 g4 ~@11, ~@45 [a3,f4]@10 ~@41]/3", // D Gb Dm7 Bbmaj7 Abdim Gm7 Bbmaj7 Bb7 …
  AI: "~@14 [g3,db4,f4,a4,db5,f5,a5]@6 ~ [a4,db5] ~@7 db5 f5@2, ~@21 g3@2 ~@6 [g3,db4,f4,a5]@2 ~, ~@30 a4 ~", // Dbaug A Dbaug
  AJ: "~ [g3,f4,db5,a5]@2 ~@21 [ab3,d4,ab4,db5,ab5]@3 ~@2 [db4,g4,db5,g5]@3", // Dbaug Db Dbdim
  AK: "~@3 [g3,g4]@2 ~@9 [db4,e4,gb4,bb4,db5]@5 ~ [d4,d5]@4 e4 ~ d5 [e4,g4]@2 [e4,g4] ~ d4, ~@3 db5 ~@16 bb4@11 ~, ~@20 [e4,g4]@3 ~@6 d5@2 ~", // G Gb7 D Em
  AL: "~@9 [d4,e4,g4,bb4,d5]@6 bb3@2 ~ [db4,e4,g4,bb4,db5]@6 ~ [c4,e4,g4,bb4]@2 ~@5", // Em7b5 Dbdim C7
  AM: "~@4 [g3,bb3,d4,e4,g4]@4 ~@2 [g3,bb3,d4,e4,g4]@3 ~ [a3,d4,a4]@3 ~@2 [d4,e4] ~@3 [e4,g4]@3 ~@2 [e4,g4,bb4] ~@3, ~@9 a4 ~@6, ~@19 a3@2 ~ [bb3,bb4]@3 ~@3 bb3@3 ~", // Em7b5 D5 Dsus2 Em Edim Bb
  AN: "[d4,gb4,d5]@3 ~@11 [d4,gb4,bb4,d5]@2 ~@2 gb4@2 ~@12, ~@14 eb4 ~@2 [d4,bb4,d5]@3 ~@12", // D Daug Gm
  AO: "[~ [db4,eb4,gb4,bb4,db5]@4 ~@2 [eb4,gb4,bb4]@3 ~@3 [c4,eb4,bb4]@5 ~ [c4,eb4,gb4,bb4,c5]@8 ~ [eb4,gb4,bb4] ~@2 [eb4,eb5]@6 [f4,g4,bb4,d5,f5]@14 ~@4 c4@2 ~ d4@5 ~, ~@6 [db4,db5]@4 ~@3 gb4@3 ~@12 [d4,d5]@3 ~@26 [eb4,a4,d5]@4 ~@3, ~@58 gb4@3 ~@3]/2", // Ebm7 Ebm Cm7 Cm7b5 Ebm Eb Gm7 Db …
  AP: "[bb3@2 ~ [c4,gb4]@6 [bb3,d4,f4,g4]@16 ~@5 [bb3,gb4]@13 ~@12 g4@8 ~, ~@3 a4@3 ~@3 bb4@35 ~@20, ~@29 [c4,eb4]@13 ~@12 [ab3,d4,c5,f5]@9 ~]/2", // Cdim Gm7 Ebm Cm Dm7b5
  AQ: "~@3 [g3,db4,g4,b4,db5,f5]@3 ~@11 [gb3,ab3,bb3,db4,gb4,bb4,db5,eb5,gb5]@3 ~@3 [gb3,bb3,gb4,bb4,gb5]@2 ~@4 g5@3, ~@22 db4@3 ~@7", // G7 Ebm7 Gb
  AR: "[~@4 bb4@2 ~@16 a3@2 ~@19 gb4 g4@4 ~ bb4@2 ~@2 c5@5 [g3,bb4]@3 ~ [bb3,e4]@6 [ab3,bb4]@3 ~@6 [a3,g4,c5]@19, ~@4 [b3,g4,e5,g5]@21 ~@6 [bb3,d4]@25 ~@5 [ab4,db5]@7 ~@9 eb4@14 ~@5, ~@4 f3@18 ~@3 e3@34 ~@37, ~@6 b4@19 ~@7 a3@23 ~@41]/3", // Gm Bbdim Absus2 Am7 Em Bb Db5
  AS: "~@7 [f3,a3,c4,d4,d5,f5,a5,d6]@8 ~@4 [f3,a3,c4,d4,f5,c6]@2 ~@7 [gb3,bb3,c4,f4,g5,e6,g6]@3 ~, ~@19 a5 ~@12", // Dm7 C7
  AT: "[~@5 [f3,b3,eb4,ab5,eb6,ab6]@6 ~@2 [f3,eb4,f5] ~@7 [f3,b3,eb4,g5,b5,eb6,g6]@18 bb3@2 ~@7 [bb3,d4]@12 [gb3,gb4] ~ g4@4 ~ bb4@2 ~ [bb3,c5]@5 ~ [db4,e4,g4,bb4,db5]@9 bb3@2 ~ [db4,e4,g4,bb4,db5]@4 ~@2 [db4,bb4,db5]@3 bb3@6 [c4,eb4,gb4,a4,c5]@4 ~@4 [bb3,d4,f4,g4,bb4]@3 ~@6 [bb2,bb3]@3 [db3,db4]@3 [d3,d4]@2, ~@13 b3@2 ~@27 e3@18 ~@37 bb4@3 ~@28, ~@24 g3@3 ~@4 g3@5 ~@11 [e4,g4]@3 ~@14]/4", // Fm7b5 F7 Ebaug Bb Gb Bbsus2 Dbdim Gb …
  AU: "~ [f3,f4] ~@2 [eb3,eb4]@5 ~ g4@2 ~ [bb3,bb4]@5 [c4,c5]@2 ~ db5@2 ~@2 db5@2 [bb3,bb4]@2 ~ [c4,c5]@2, ~@9 g3@4 ~@8 db4@3 d4@3 ~@5, ~@23 d5@2 ~@7", // F Eb Bb C Bb C
  AV: "[~ g3@2 [bb3,bb4]@3 ~@11 [ab3,c4,d4,g4,d5,e5,g5,bb5]@85 ~@26, ~ g4 ~@14 ab4@85 ~@27]/4", // Bb C7
})).s("gm_piano").gain(0.4).pan(0.6)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A@3 ~@2 B ~ C@2 ~@3 D@2 ~@11 E ~@2 F@2 ~ G H ~@4 I@2 ~@3 J K@2 ~ L M N O P Q R@2 S T U ~@6 V@2 W@2 X ~ Y@2 ~ Z@2 ~@3
  AA AB ~ AC ~@2 AD@2 ~@2 AE AF@2 ~@3 AG AH@2 AI AJ AK AL AM AN AO AP ~ AQ ~ AR ~@13
>`.pickRestart({
  A: "[~@19 ab3@19 ~@14 gb3@21 ~@23]/3", B: "~@13 eb3@7 ~@12", C: "[~@14 gb3@9 ~@9]/2", D: "[~@24 c5@5 ~ c5@18 ~@16]/2",
  E: "~@17 g3@7 ~@8", F: "[~@15 eb2@4 ~@13, ~@29 c4@8 ~@27]/2", G: "~@3 c5@18 ~@11", H: "~@7 c5@12 ~@13",
  I: "[~@28 c5@11 ~@25]/2", J: "~@7 a3@4 ~@12 [d4,f4] ~@8",
  K: "[~@21 g4 ~@8 [bb3,db4,f4]@4 ~@2 [db4,f4] ~@27, ~@20 db4@3 ~@13 bb3@2 ~@26]/2", // Bbm Db
  L: "~@13 bb4 ~@18, ~@6 [e4,c5] ~@9", M: "~ e4 ~@8 db4 ~@2 c5 ~@2, ~ bb3@3 ~@28", N: "~@3 c5@2 ~@7 db4@13 ~@7",
  O: "~@29 bb4@2 ~", P: "~@16 eb4 ~@12 c5@2 ~, ~@15 c5@3 ~@14", Q: "~ d4@2 ~@29",
  R: "[~@5 [bb3,e4]@3 ~@23 bb3@4 ~@3 bb3@13 ~@13]/2", // Bbdim
  S: "~@2 a3@2 c5@4 ~@2 g4@2 ~@3 g4@4 ~@4 c4@3 ~@3 g3@2 ~, ~@23 g4 ~@8", T: "~@18 bb3@3 ~@11", U: "~ a3@2 ~@29",
  V: "[~@14 [a3,bb3]@37 ~@2 a5@3 ~@8]/2", W: "[~@21 ab3@19 ~@8 ab3 ~@15]/2", X: "~@6 f5 ~",
  Y: "[~@3 bb3@14 ~@5 gb3@13 ~@29]/2", Z: "[~@12 c5@3 ~ e3@24 ~@24, ~@4 bb3@5 ~@7]/2", AA: "~@12 f4 ~@2 bb3",
  AB: "~@7 [d4,f4]@5 ~@10 g3 ~@9, ~@6 bb3@5 ~@21", AC: "~@12 bb3@2 ~ f4", AD: "[~@14 ab3@13 ~@5, ~@26 f4@11 ~@27]/2",
  AE: "~@7 bb3@13 ~@12", AF: "[~@21 e4 ~@42, ~@13 [bb3,d4]@32 ~@19]/2", AG: "~@17 b3@2 ~@9 ab4 ~@3",
  AH: "[~@29 [eb4,gb4]@5 ~ c5@3 ~@26]/2", AI: "~@28 c5 ~@3", AJ: "~@21 [db4,f5,a5]@2 ~@9, ~@21 f4 ~@10",
  AK: "~ a4@2 ~@26 g3@3, ~ db4 ~@30", AL: "~@3 [db4,g5] ~@20 g4@2 ~ d4@2 ~@3", AM: "~@25 c5@2 ~@5",
  AN: "~@14 e4@3 ~@15", AO: "[eb4,bb4] ~@8 eb4 ~@6", AP: "~@13 c5@5 ~@14", AQ: "~@3 [eb4,c5]@3 ~@26",
  AR: "~@23 [ab3,eb5]@2 ~@7, ~@23 db5 ~@8", // Ab5
})).s("gm_piano").gain(0.24).pan(0.6)

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

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

// drums · snare
const snare = s("sd").struct(`<
  ~@42 A ~@6 B ~@2 C ~ D ~@3 E ~@6 F ~ G ~@4 H D I ~ J K L ~ M ~ F ~@3 N O D P E ~@4 Q ~@2 B ~@5 A Q ~@2 R ~ S K ~ T M ~
  U V ~@3
>`.pickRestart({
  A: "~ x ~@6", B: "~@3 x", C: "~@5 x ~@10", D: "~@9 x ~@6", E: "~@13 x ~@2", F: "~@29 x ~@2", G: "~@7 x",
  H: "~@13 x ~@18", I: "~@31 x", J: "~@15 x", K: "~@7 x ~@24", L: "~@3 x ~@4", M: "~@5 x ~@2", N: "x", O: "~@5 x ~@26",
  P: "~@11 x ~@4", Q: "~ x ~@14", R: "~@21 x ~@10", S: "~@3 x ~@28", T: "~@3 x ~@12", U: "~@22 x ~@6 x ~ x",
  V: "~@5 x ~@5 x ~@2 x ~@2 x ~@14",
})).gain(0.16)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@50 A ~@22 B ~@12 C ~@8 D E ~@8 E ~@15>".pickRestart({
  A: "~ x ~@2 x ~@17 x ~@2 x ~@6", B: "~@9 x ~@22", C: "~@7 x", D: "~@11 x ~@2 x ~@14 x ~@2", E: "x",
})).gain(0.05)

// drums · low tom
const low_tom = s("lt").struct("<~@96 [~@3 x ~@28] ~@24>").gain(0.05)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A ~@8 B ~@8 C ~@4 D ~@3 E ~@8 F ~@8 G ~@8 H ~@4 I ~@3 J ~@8>".pickRestart({
  A: "~@15 x ~@16", B: "~@17 x ~@14", C: "~@19 x ~@12", D: "~ x ~@6", E: "~@21 x ~@10", F: "~@23 x ~@8",
  G: "~@25 x ~@6", H: "~@27 x ~@4", I: "~@3 x ~@4", J: "~@29 x ~@2",
})).gain(0.21)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@50 A ~@22 B ~@12 C ~@18 D ~@15>".pickRestart({
  A: "~@19 x ~@12", B: "~@11 x ~@20", C: "~@15 x", D: "~@9 x ~@22",
})).gain(0.05)

// drums · crash
const crash = s("cr").struct("<~@49 A ~@22 B ~@13 C ~@8 D ~@8 E ~@8 F ~@3 G ~@3>".pickRestart({
  A: "~@27 x ~@4", B: "~ x", C: "~@3 x ~@28", D: "~@5 x ~@26", E: "~@7 x ~@24", F: "~@9 x ~@22", G: "~@17 x ~@14",
})).gain(0.21)

// drums · ride
const ride = s("rd").struct(`<
  ~@40 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 K AB AC AD AE AF AG AH S AI AJ AK AL AM AN AO AP AQ AB AR
  AS O AT AU AV AW AX AJ AY AZ AM AN BA BB BC BD BE BF BG BH BI BJ BK BL AJ I BM BN BO BP BQ ~@3
// … 28 more lines

More by Oscar Peterson