Strudelify

That's My Kick

Erroll Garner

KeyE♭ majorTempo164 bpm
0:00/0:00
// That's My Kick — Erroll Garner
// 164 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 7 "Bass-James" named as a bass, played on electric bass finger (its pad new age patch is not one)
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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.

// chords · piano · "Piano RH-Garner"
const piano = note(`<
  ~ A B ~@8 C@2 D E F G H I@3 ~ J K@2 L M N@3 O P Q R S T U V W X@3 ~@5 Y Z@2 AA@2 AB AC AD AE@3 AF@2 AG@4 AH AI@2 AJ AK
  AL AM AN AO AP AQ@2 ~ AR
>`.pickRestart({
  A: "~@4 [e4,ab4,c5]@6 [f4,bb4,db5]@7 ~@7", B: "~@6 [g4,b4,d5,g5]@7 [ab4,c5,eb5,ab5]@3 ~@8",
  C: "[~@9 [eb5,ab5,eb6]@2 ~@10 [eb5,g5,bb5,eb6]@12 ~@3 [eb6,gb6]@10 [f5,ab5,c6,f6]@2, ~@33 [gb5,a5,c6]@11 ~@4]/2", // Ab5 Eb Ebm Fm Gbdim
  D: "~@5 [f4,c5,f5] [g4,c5,g5]@2 [ab4,c5,ab5] ~@2 [a4,db5,a5]", // F5 C5 Ab A
  E: "~@2 [bb4,db5,bb5]@3 f5 [c5,f5,c6] ~@2 [db5,f5,db6] ~@2", // Bbm F5 Db
  F: "[eb5,bb5,eb6]@3 ~@2 [eb5,bb5,eb6] [f5,bb5,f6]@2 [eb5,bb5,eb6] ~@2 [gb5,a5,gb6]", // Eb5 Bb5 Eb5 Gbm
  G: "~@5 [eb5,eb6] [f5,a5,f6]@2 [e5,a5,e6] [eb5,a5,eb6]@2 [d5,a5,d6]", // Eb F A5 Ebdim D5
  H: "[db5,ab5,db6]@3 ~@2 [db5,ab5,db6] [d5,ab5,d6]@2 [db5,ab5,db6] ~@2 [e5,g5,e6]", // Db5 Ddim Db5 Em
  I: "[~@5 [c5,c6] [eb5,g5,eb6]@2 [d5,g5,d6] [db5,g5,db6]@2 [c5,eb5,ab5,c6]@6 [eb5,ab5,c6,eb6]@6 [f5,bb5,db6,f6]@6 [ab5,c6,f6,ab6]@7]/3", // C Eb G5 Dbdim Ab Bbm Fm
  J: "~@11 [e4,bb4,db5,f5]@13", K: "[~@23 [db5,gb5,db6]@6 [b4,gb5,b5]@2 ~ [a4,d5,a5]@3 [gb4,b4,d5,gb5]@13]/2",
  L: "~ [ab4,db5,e5,ab5]@3 [f4,ab4,db5,e5]@3 [ab4,db5,e5,ab5]@2 [c5,e5,ab5,c6] ~@2", // Dbm Db Dbm Caug
  M: "[d5,g5,bb5,d6]@5 ~ [d5,g5,bb5,d6]@6 [bb4,eb5,g5,bb5]@2 [g4,c5,eb5,g5]@4 [f4,c5,f5]@2 ~@4", // Gm Eb Cm F5
  N: "[~@2 [a4,d5,gb5,a5]@3 ~ [a4,d5,gb5,a5]@6 [a4,d5,gb5]@2 [ab4,b4,e5,ab5]@6 [ab4,b4,e5]@6 [ab4,db5,f5,ab5]@3 ~ [bb4,db5,f5,bb5]@2 [ab4,db5,f5,ab5]@3 ~ [ab4,db5,f5]@2 [g4,bb4,eb5,g5]@6 [g4,bb4,eb5]@6 ~@10 [f4,c5,f5]@2 [g4,c5,g5]@4 [ab4,c5,ab5]@2 ~@4]/3", // D E Db Bbm Db Eb F5 C5 …
  O: "[a4,db5,a5] ~@2 [bb4,db5,bb5]@3 f5 [c5,f5,c6] ~@2 [db5,f5,db6] ~", // A Bbm F5 Db
  P: "~ [eb5,bb5,eb6]@3 ~@2 [eb5,bb5,eb6] [f5,bb5,f6]@2 [eb5,bb5,eb6] ~@2", // Eb5 Bb5 Eb5
  Q: "[gb5,a5,gb6]@2 ~@10 [f5,a5,f6]@6 ~ [e5,a5,e6]@2 [eb5,a5,eb6]@3", // Gbm F A5 Ebdim
  R: "~ [d5,a5,d6]@2 [db5,ab5,db6]@6 ~@4 [db5,ab5,db6]@2 [eb5,ab5,eb6]@4 [db5,ab5,db6]@2 ~@3", // D5 Db5 Ab5 Db5
  S: "~ [e5,g5,e6]@2 ~@10 [eb5,g5,eb6]@6 [d5,g5,d6]@2 [db5,g5,db6]@3", // Em Eb G5 Dbdim
  T: "~ [b4,b5]@2 [c5,gb5,c6]@6 ~@4 [c5,gb5,c6]@2 [db5,gb5,db6]@4 [c5,gb5,c6]@2 ~@3", // B Cdim Gb5 Cdim
  U: "~ [eb5,gb5,eb6]@2 ~@10 c6@2 [eb5,gb5,eb6]@4 [d5,gb5,d6]@2 [db5,gb5,db6]@3", // Ebm D Gb5
  V: "~ [c5,gb5,c6]@2 [bb4,f5,bb5]@6 ~@4 [bb4,f5,bb5]@2 [c5,f5,c6]@4 [bb4,f5,bb5]@2 ~@3", // Cdim Bb5 F5 Bb5
  W: "~ [db5,f5,bb5,db6]@2 ~@10 [g4,bb4,db5,e5,g5]@11", // Bbm Gdim
  X: "[~ [ab4,c5,eb5,ab5]@4 ~@2 ab3@2 ~ ab3@3 ab3@2 ~ ab3@4 ab3@2 ab3@4 ab3@2 ab3@4 ab3@2 ab3@4 ab3@2 ab3@4 ab3@2 ab3@4 ab3@2 ~@20]/3", // Ab
  Y: "~@15 [eb5,ab5,eb6]@2 ~@7", // Ab5
  Z: "[~@3 [eb5,g5,bb5,eb6]@12 ~@2 [eb6,gb6]@10 [f5,ab5,c6,f6]@2 ~@10 [f4,c5,f5]@2 [g4,c5,g5]@4 [ab4,c5,ab5]@2 ~, ~@15 [gb5,a5,c6]@11 ~@22]/2", // Eb Ebm Fm F5 C5 Ab Gbdim
  AA: "[~@3 [a4,db5,a5]@2 ~@4 [bb4,db5,bb5]@6 f5@2 [c5,f5,c6]@2 ~@4 [db5,f5,db6]@2 ~@4 [eb5,bb5,eb6]@6 ~@4 [eb5,bb5,eb6]@2 [f5,bb5,f6]@4 [eb5,bb5,eb6]@2 ~]/2", // A Bbm F5 Db Eb5 Bb5 Eb5
  AB: "~@3 [gb5,a5,gb6]@2 ~@10 [eb5,eb6]@2 [f5,a5,f6]@4 [e5,a5,e6]@2 ~", // Gbm Eb F A5
  AC: "[eb5,a5,eb6]@3 [d5,a5,d6]@2 ~ [db5,ab5,db6]@6 ~@4 [db5,ab5,db6]@2 [d5,ab5,d6]@4 [db5,ab5,db6]@2", // Ebdim D5 Db5 Ddim Db5
  AD: "~@2 [e5,g5,e6] ~@5 [c5,c6] [eb5,g5,eb6]@2 [d5,g5,d6]", // Em C Eb G5
  AE: "[[db5,g5,db6]@2 [c5,eb5,ab5,c6]@6 [eb5,ab5,c6,eb6]@6 [f5,bb5,db6,f6]@6 [ab5,c6,f6,ab6]@7 ~@9]/3", // Dbdim Ab Bbm Fm
  AF: "[~@8 [e4,bb4,db5,f5]@7 ~@9]/2", // Bbm
  AG: "[~@5 [db5,gb5,db6]@6 [b4,gb5,b5]@2 [a4,d5,a5]@4 [gb4,b4,d5,gb5]@14 [ab4,db5,e5,ab5]@6 [f4,ab4,db5,e5]@6 [ab4,db5,e5,ab5]@4 [c5,e5,ab5,c6]@2 ~@4 [d5,g5,bb5,d6]@5 ~ [d5,g5,bb5,d6]@6 [bb4,eb5,g5,bb5]@2 [g4,c5,eb5,g5]@4 [f4,c5,f5]@2 ~@6 [a4,d5,gb5,a5]@3 ~ [a4,d5,gb5,a5]@6 [a4,d5,gb5]@2 [ab4,b4,e5,ab5]@5]/4", // Gb5 B5 D5 Bm Dbm Db Dbm Caug …
  AH: "~ [ab4,b4,e5]@6 [ab4,db5,f5,ab5]@4 [bb4,db5,f5,bb5]@2 [ab4,db5,f5,ab5]@4 [ab4,db5,f5]@2 [g4,bb4,eb5,g5]@5", // E Db Bbm Db Eb
  AI: "[~ [g4,bb4,eb5]@6 ~@10 [f4,c5,f5]@2 [g4,c5,g5]@4 [ab4,c5,ab5]@2 ~@4 [a4,db5,a5]@2 ~@4 [bb4,db5,bb5]@6 f5@2 ~ [c5,f5,c6]@2 ~@2]/2", // Eb F5 C5 Ab A Bbm F5
  AJ: "~ [db5,f5,db6] ~@2 [eb5,bb5,eb6]@3 ~@2 [eb5,bb5,eb6] [f5,bb5,f6]@2", // Db Eb5 Bb5
  AK: "[eb5,bb5,eb6] ~@2 [gb5,a5,gb6] ~@5 [f5,a5,f6]@3", // Eb5 Gbm F
  AL: "[e5,a5,e6] [eb5,a5,eb6]@2 [d5,a5,d6] [db5,ab5,db6]@3 ~@2 [db5,ab5,db6] [eb5,ab5,eb6]@2", // A5 Ebdim D5 Db5 Ab5
  AM: "[db5,ab5,db6] ~@2 [e5,g5,e6] ~@5 [eb5,g5,eb6]@3", // Db5 Em Eb
  AN: "[d5,g5,d6] [db5,g5,db6]@2 [b4,b5] [c5,gb5,c6]@3 ~@2 [c5,gb5,c6] [db5,gb5,db6]@2", // G5 Dbdim B Cdim Gb5
  AO: "[c5,gb5,c6] ~@2 [eb5,gb5,eb6] ~@5 c6 [eb5,gb5,eb6]@2", // Cdim Ebm
  AP: "[d5,gb5,d6]@2 [db5,gb5,db6]@4 [c5,gb5,c6]@2 ~ [bb4,f5,bb5]@6 ~@4 [bb4,f5,bb5]@2 [c5,f5,c6]@3", // D Gb5 Cdim Bb5 F5
  AQ: "[~ [bb4,f5,bb5]@2 ~@4 [db5,f5,bb5,db6]@2 ~@10 [g4,bb4,db5,e5,g5]@12 [ab4,c5,eb5,ab5]@8 ~@9]/2", // Bb5 Bbm Gdim Ab
  AR: "~ [ab5,ab6]@2 ~@5", // Ab
})).s("gm_piano").gain(0.15).pan(1)

// chords · piano · "Piano RH-Garner" · soft notes
const piano_soft = note("<A B C ~@2 D E@2 F@2 G@2 ~@9 H@2 I ~@17 J K L M@2 N@2 ~@9 O P Q ~@18>".pickRestart({
  A: "~@10 [eb4,eb5]@3 ~@2 [f4,f5]@6 [ab4,ab5]@3", B: "~@17 [g4,b4,eb5]@7", C: "[bb4,db5,f5,bb5]@7 ~@17",
  D: "~@7 [f4,c5,f5]@2 [g4,c5,g5]@4 [ab4,c5,ab5]@2 ~@4 [a4,db5,a5]@2 ~@3", // F5 C5 Ab A
  E: "[~ [bb4,db5,bb5]@6 ~ f5@2 [c5,f5,c6]@2 ~@4 [db5,f5,db6]@2 ~@4 [eb5,bb5,eb6]@6 ~@4 [eb5,bb5,eb6]@2 [f5,bb5,f6]@4 [eb5,bb5,eb6]@2 ~@4 [gb5,a5,gb6]@2 ~@2]/2", // Bbm F5 Db Eb5 Bb5 Eb5 Gbm
  F: "[~@8 [eb5,eb6]@2 [f5,a5,f6]@4 [e5,a5,e6]@2 [eb5,a5,eb6]@4 [d5,a5,d6]@2 [db5,ab5,db6]@6 ~@5 [db5,ab5,db6]@2 [d5,ab5,d6]@4 [db5,ab5,db6]@2 ~@4 [e5,g5,e6]@2 ~]/2", // Eb F A5 Ebdim D5 Db5 Ddim Db5 …
  G: "[~@9 [c5,c6]@2 [eb5,g5,eb6]@4 [d5,g5,d6]@2 [db5,g5,db6]@4 [b4,b5]@2 [c5,eb5,c6]@6 ~@19]/2", // C Eb G5 Dbdim B Cm
  H: "[[f4,ab4,db5,f5]@3 ~@4 [ab4,db5,f5,ab5]@3 ~@3 [bb4,db5,f5,bb5]@4 [c5,f5,ab5,c6] ~@5 [c5,e5,ab5,c6]@6 [bb4,ab5,bb5]@2 [ab4,db5,ab5]@4 ~@13]/2", // Db Bbm Fm Caug Bb7 Db5
  I: "~ [bb4,eb5,bb5]@4 ~@2 [ab4,eb5,ab5]@4 ~@2 [bb4,eb5,bb5]@4 [c5,eb5,c6] ~@6", // Eb5 Ab5 Eb5 Cm
  J: "~@7 [f4,c5,f5] [g4,c5,g5]@2 [ab4,c5,ab5] ~", // F5 C5 Ab
  K: "~ [a4,db5,a5] ~@2 [bb4,db5,bb5]@3 f5 [c5,f5,c6] ~@2 [db5,f5,db6]", // A Bbm F5 Db
  L: "~@2 [eb5,bb5,eb6]@3 ~@2 [eb5,bb5,eb6] [f5,bb5,f6]@2 [eb5,bb5,eb6] ~", // Eb5 Bb5 Eb5
  M: "[~ [gb5,a5,gb6] ~@5 [eb5,eb6] [f5,a5,f6]@2 [e5,a5,e6] [eb5,a5,eb6]@2 [d5,a5,d6] [db5,ab5,db6]@3 ~@2 [db5,ab5,db6] [d5,ab5,d6]@2 [db5,ab5,db6] ~]/2", // Gbm Eb F A5 Ebdim D5 Db5 Ddim …
  N: "[~@2 [e5,g5,e6]@2 ~@11 [c5,c6]@2 [eb5,g5,eb6]@4 [d5,g5,d6]@2 [db5,g5,db6]@4 [b4,b5]@2 [c5,eb5,c6]@6 ~@13]/2", // Em C Eb G5 Dbdim B Cm
  O: "~@6 [f4,ab4,db5,f5]@3 ~@3 [ab4,db5,f5,ab5]@3 ~@3 [bb4,db5,f5,bb5]@4 [c5,f5,ab5,c6] ~", // Db Bbm Fm
  P: "~@2 [c5,e5,ab5,c6]@3 [bb4,ab5,bb5] [ab4,db5,ab5]@2 ~@4", // Caug Bb7 Db5
  Q: "~@6 [bb4,eb5,bb5]@4 ~@2 [ab4,eb5,ab5]@4 ~@3 [bb4,eb5,bb5]@3 [c5,eb5,c6] ~", // Eb5 Ab5 Eb5 Cm
})).s("gm_piano").gain(0.1).pan(1)

// chords · piano · "Piano LH-Garner"
const piano_2 = note(`<
  ~ A@2 ~ B C@2 D@3 E@6 F G H I J K@2 L@3 M N@8 O@7 P@7 Q@8 R S@2 T@2 U V W X Y Z AA AB AC@8
>`.pickRestart({
  A: "[~@10 a2@7 ~@6 eb2@7 g2@7 ab2@3 ~@8]/2", B: "~@5 [ab3,c4,d4]",
  C: "[~@2 [ab3,c4,d4]@6 ~ [ab3,c4,d4]@6 [ab3,c4,d4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [bb3,c4,eb4]@3]/2", // Dm7b5 Gdim Cm7
  D: "[~@3 [bb3,c4,eb4]@6 ~ [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@2]/3", // Cm7 Adim Bbm7 Gdim
  E: "[~@4 [g3,bb3,db4]@6 ~ [g3,bb3,db4]@6 [g3,bb3,db4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 ~ [bb3,c4,eb4]@6 [bb3,c4,eb4]@6]/6", // Gdim Ab Cm7 Dm7b5 Gdim Cm7
  F: "[a3,c4,eb4]!4", G: "[ab3,bb3,db4]!4", H: "[g3,bb3,db4]!4", I: "[gb3,bb3,c4]!4",
  J: "[gb3,bb3,db4]!2 [gb3,a3,c4]!2", K: "[~@23 [f3,ab3,bb3]@6 ~@12 f3@7]/2",
  L: "[~ [eb3,ab3,c4]@6 [eb3,ab3,c4]@6 [eb3,ab3,c4]@4 [eb3,ab3,c4]@2 ~@4 [a3,d4,gb4]@6 [a3,d4,gb4]@2 ~ [a3,d4,gb4]@3 [ab3,d4]@6 ~@3 [b3,d4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@4 [ab3,bb3,db4]@2 ~@4, ~@21 ab3@4 ~@11]/3", // Ab D Abdim Bm Bbm7
  M: "[bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@6 [bb3,eb4,g4]@2 [a3,eb4]@4 [a3,eb4]@2 ~@4", // Eb Adim
  N: "[~@2 [a3,d4,gb4]@3 ~ [a3,d4,gb4]@6 [a3,d4,gb4]@2 [ab3,d4,gb4]@6 [ab3,d4,gb4]@6 [ab3,db4,f4]@6 [ab3,db4,f4]@6 [g3,db4,f4]@6 [g3,db4,f4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@4]/8", // D Abm7b5 Db Gm7b5 Dm7b5 Gdim Cm7 Adim …
  O: "[~@2 [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@6 ~ [gb3,bb3,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@3, ~@33 [ab2,c3]@8 [ab2,c3]@8 ~@7]/7", // Ebm Adim Bbm7 Gdim Dm7b5 Ab
  P: "[~@3 [g3,bb3,db4]@6 [g3,bb3,db4]@6 ~ [g3,bb3,db4]@6 [g3,bb3,db4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [ab3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@2]/7", // Gdim Cm7 Adim Bbm7 Gdim Ab Cm7
  Q: "[~@4 [ab3,c4,d4]@6 ~ [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [gb3,bb3,c4]@6 [gb3,bb3,c4]@6 [gb3,bb3,c4]@6 [gb3,bb3,c4]@6 ~ [gb3,bb3,db4]@6 [gb3,bb3,db4]@6 [gb3,a3,c4]@6]/8", // Dm7b5 Gdim Cm7 Adim Bbm7 Gdim Cm7b5 Gb …
  R: "[gb3,a3,c4] ~@3", S: "[~@2 [f3,ab3,bb3]@3 ~@6 f3@4 [eb3,ab3,c4]@3 [eb3,ab3,c4]@3 [eb3,ab3,c4]@2 [eb3,ab3,c4]]/2",
  T: "[~@2 [a3,d4,gb4]@3 [a3,d4,gb4] [a3,d4,gb4]@2 [ab3,d4]@3 ~ [b3,d4]@3 [ab3,bb3,db4]@3 [ab3,bb3,db4]@3 [ab3,bb3,db4]@2 [ab3,bb3,db4], ~@11 ab3@4 ~@9]/2", // D Abdim Bm Bbm7
  U: "~@4 [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@6 [bb3,eb4,g4]@2 [a3,eb4]@4 [a3,eb4]@2", // Eb Adim
  V: "~@7 [a3,d4,gb4]@3 [a3,d4,gb4]@6 ~ [a3,d4,gb4]@2 [ab3,d4,gb4]@5", // D Abm7b5
  W: "~ [ab3,d4,gb4]@6 [ab3,db4,f4]@6 [ab3,db4,f4]@6 [g3,db4,f4]@5", // Abm7b5 Db Gm7b5
  X: "~ [g3,db4,f4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@6 [ab3,c4,d4]@5", // Gm7b5 Dm7b5
  Y: "~ [ab3,c4,d4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@5", // Dm7b5 Gdim
  Z: "~ [g3,bb3,db4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@6 [bb3,c4,eb4]@5", // Gdim Cm7
  AA: "~ [bb3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@5", // Cm7 Adim
  AB: "~ [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@5", // Adim Bbm7
  AC: "[~@2 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@6 [gb3,bb3,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [a3,c4,eb4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 [g3,bb3,db4]@6 ab3@2 ~@2 ab3@2 g3@6 f3@6 eb3@6 ab2@6 ~@4 ab3@8 ~ ab1@6 ~@15]/8", // Bbm7 Gdim Ebm Adim Bbm7 Gdim
})).s("gm_piano").gain(0.12).pan(1)

// chords · piano · "Piano LH-Garner" · soft notes
const piano_soft_2 = note("<A B C@2 D ~@16 E F ~@34 G H I ~@18>".pickRestart({
  A: "~@14 f3@7 a3@3", B: "~@3 g2@7 ~@7 bb2@7",
  C: "[~@19 [d3,eb3,e3,f3,gb3,g3,ab3,a3,bb3] ~@2 [b2,c3,db3] ~@3 bb2@2 c3@2 ~@3 c3@2 d3@2 ~@3 d3@2 eb3@2 ~@2 eb3@2, ~@22 bb1@7 ~@19, ~@22 bb2@2 ~@4 c2@7 d2@7 eb2@6]/2",
  D: "~ e3@2 ~@2 e3@2 [f2,f3]@4 ~@3 [f1,f2]@7 ~@3, ~ e2@7 ~@16", // F
  E: "[f3,ab3,bb3]@6 ~ [f3,ab3,bb3]@6 [f3,ab3,bb3]@4 [f3,ab3,bb3]@2 ~@5", // Bb7
  F: "~@5 [f3,ab3,bb3]@2 [f3,ab3,bb3]@4 [f3,ab3,bb3]@6 ~@2 [ab3,bb3]@5", // Bb7 Absus2
  G: "~@3 [f3,ab3,bb3]@3 [f3,ab3,bb3]@3 [f3,ab3,bb3]@2 [f3,ab3,bb3]", // Bb7
  H: "~@5 [f3,ab3,bb3] [f3,ab3,bb3]@2 [f3,ab3,bb3]@3 ~", I: "[ab3,bb3] ~@3",
})).s("gm_piano").gain(0.04).pan(1)

// bass · electric bass finger · "Bass-James"
const bass = note("<~@2 A ~ B@8 C@3 D E F G H I ~@9 J K@8 L@3 M N O@7 P@4 Q R S T ~@4 U V W U V X@7 Y@3>".pickRestart({
  A: "eb3@6 g3@7 ab3@3 ~@8",
  B: "[~@21 bb2@6 d3@6 f3@6 ~@4 [bb3,d4]@2 eb3@6 g3@6 bb3@6 ~ db4@2 ~@2 [bb3,c4]@2 c4@6 eb3@6 g3@6 bb3@6 c4@6 a3@6 f3@6 eb3@6 bb3@6 f3@6 db3@6 ~ ab3@6 eb2@6 g2@6 bb2@6 db3@6 ab2@6 eb2@6 c3@6 ab2@6 c2]/8", // Bb Bbsus2
  C: "[~@3 [eb2,g2]@2 bb2@6 f2@2 ~@4 a1@4 g2@2 bb2@6 d3@6 f3@6 ~@4 [bb3,d4]@2 eb3@6 g3@6 bb3@6 ~ db4@2 ~ [bb3,c4]@2 ~, ~@15 f1@4 ~@53]/3", // Eb Bb Bbsus2
  D: "c4 eb3 g3 bb3", E: "c4 a3 f3 eb3", F: "bb3 f3 db3 ab3", G: "eb2 g2 bb2 db3", H: "g2 eb2 c3 bb2",
  I: "eb2 gb2 c2 ab2", J: "[bb3,d4] eb3@3 g3@3 bb3@3 db4 ~",
  K: "[[bb3,c4]@2 c4@6 eb3@6 g3@6 bb3@6 f3@6 g3@6 eb3@6 c3@6 bb2@6 db3@6 f3@6 bb3@6 ~ bb2@2 ~ [db3,g3]@2 ~ eb3@6 db3@6 g2@6 c3@6 bb2@6 gb2@6 eb2@6 f2@6 a2@6 c3@6 eb3@6 bb2@6 g2@6 db3@6 ab2@6 ~@4 eb3@2 bb2@2 ~@2 [eb2,g2]@2 g2@4 bb2@4 ~]/8", // Bbsus2 Dbdim Eb
  L: "[~ a2@2 ab2@6 eb2@6 c3@6 ab2@6 eb2@6 c3@6 eb3@6 ~ ab3@6 ~@20]/3", M: "~@2 bb2@3 d3@3 f3@3 ~",
  N: "~ [bb3,d4] eb3@3 g3@3 bb3@3 db4", // Bb
  O: "[~@2 [bb3,c4]@2 c4@6 eb3@6 g3@6 bb3@6 c4@6 a3@6 f3@6 eb3@6 bb3@6 f3@6 db3@6 ab3@6 eb2@6 g2@6 ~ bb2@6 db3@6 ab2@6 eb2@6 c3@6 ab2@6 c2@2 ~@2 [eb2,g2]@2 bb2@6 f2@2 ~@4 a1@4 g2@2 bb2@6 d3@6 f3@6 ~, ~@141 f1@4 ~@23]/7", // Bbsus2 Eb
  P: "[~@3 [bb3,d4]@2 eb3@6 g3@6 bb3@6 db4@2 ~@2 [bb3,c4]@2 c4@6 eb3@6 g3@6 bb3@6 c4@6 a3@6 f3@6 eb3@6 bb3@6 f3@6 ~ db3@6]/4", // Bb Bbsus2
  Q: "ab3 eb2 g2 bb2", R: "db3 g2 eb2 c3", S: "bb2 eb2 gb2 c2", T: "ab2 ~@3", U: "~@5 [bb3,d4]@2 eb3@6 g3@6 bb3@5",
  V: "~ db4@2 ~@2 [bb3,c4]@2 c4@6 eb3@6 g3@5", W: "~ bb3@6 ~@17",
  X: "[~ bb3@6 ~ f3@6 g3@6 eb3@6 c3@6 bb2@6 db3@6 f3@6 bb3@6 bb2@2 ~@2 [db3,g3]@2 eb3@6 db3@6 g2@6 c3@6 bb2@6 gb2@6 eb2@6 f2@6 a2@6 c3@6 eb3@6 bb2@6 g2@6 db3@6 ab2@6 ~@4 eb3@2 bb2@2 ~@2 [eb2,g2]@2 g2@4]/7", // Dbdim Eb
  Y: "[bb2@4 ~@2 a2@2 ~ ab2@6 eb2@6 c3@6 ab2@6 eb2@6 c3@6 eb3@6 ab3@6 ~@15]/3",
})).s("gm_electric_bass_finger").gain(0.16).pan(1)

// bass · electric bass finger · "Bass-James" · soft notes
const bass_soft = note("<A B C@3 ~@16 D E@2 F@2 ~@3 G ~@28 H I J K L ~@2 M ~@12>".pickRestart({
  A: "~@10 eb4@3 ~ f4@7 a4@3", B: "~@4 g3@6 a3@7 bb3@7",
  C: "[~@22 bb2@4 bb3@2 ~ c3@4 c4@2 ~ d3@4 d4@2 eb3@4 ~ eb4@2 e3@4 e4@2 f3@4 ~@3 f3@7 ~@3]/3",
  D: "db3@3 bb2@3 ab2@3 db3 ~ [eb3,f3]", E: "[gb3@6 bb2@6 ~ db3@6 gb3@2 ~@2 [bb2,db3]@2 ab2@6 c3@6 eb3@6 b2@5]/2",
  F: "[~ bb3@6 d3@6 a3@6 e3@2 ~@2 [ab3,b3]@2 ~@23]/2", G: "~ bb2@3 d3@3 f3@3 ~@2", H: "~ db3 bb2 ab2",
  I: "db3 ~ [eb3,f3] gb3@3 bb2@3 db3@3", J: "gb3 ~ [bb2,db3] ab2@3 c3@3 eb3@3", K: "b2@6 bb3@6 ~ d3@6 a3@5",
  L: "~ e3@2 ~@2 [ab3,b3]@2 bb2@6 d3@6 f3@5", M: "~@7 bb2@6 d3@6 f3@5",
})).s("gm_electric_bass_finger").gain(0.04).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B C D E F G@2 H G I J@5 K ~@8 L M@4 N O@6 P Q R Q R Q S T U V U V U W K X Y ~@7 Z AA@2 AB AC@6 AD AE AF
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@5 x ~@9 x ~ x ~@2", C: "~@3 x ~@5 x ~@10 x ~ x ~", D: "~@2 x ~@2 x ~@4 x!2",
  E: "~@2 x ~@2 x ~@2 x ~@2 x", F: "~@4 x ~@5 x ~@10 x ~ x", G: "~@5 x ~@5 x ~@9 x ~ x", H: "~@5 x ~@5 x ~@5 x ~@5 x",
  I: "~@5 x ~@5 x ~@6 x ~@5", J: "x ~@2 x ~@2 x ~@4 x", K: "x!4", L: "~ x ~@2 x ~@2 x ~@4", M: "x!2 ~@2 x ~@2 x ~@4",
  N: "x!2 ~ x ~ x ~@2", O: "~ x ~ x ~@5 x ~@5 x ~@8", P: "~ x ~@2 x ~@5 x ~@5 x ~@7", Q: "~ x!2 ~@2 x ~@2 x ~@2 x",
  R: "~@2 x ~@2 x ~@2 x ~@3", S: "~@4 x ~@5 x ~@6 x ~@6", T: "~@2 x ~@2 x ~@5 x ~@5 x ~@5 x",
  U: "~@5 x ~@5 x ~@5 x ~@6", V: "~@3 x ~ x ~@5 x ~@5 x ~@5 x", W: "~@3 x ~ x ~@5 x ~@6 x ~@5",
  X: "~@2 x!2 ~@2 x ~@2 x ~@2", Y: "x", Z: "~@7 x ~@5 x ~@5 x ~@4", AA: "~@5 x ~ x ~@5 x ~@5 x ~@4",
  AB: "~@5 x ~@2 x ~@5 x ~@5 x ~@3", AC: "~@3 x!2 ~@2 x ~@2 x ~", AD: "~@2 x!2 ~ x ~ x",
  AE: "~@7 x ~ x ~@5 x ~@5 x ~@2", AF: "~@7 x ~@16",
})).gain(0.07).pan(1)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@21 A B C D C D E F ~@28 G H I H B J D J K ~@12>".pickRestart({
  A: "x ~@2 x ~@2 x ~@4 x", B: "x ~@5 x ~@6 x ~@5 x ~@4", C: "~ x ~@5 x ~@5 x ~@9 x", D: "~ x ~@5 x ~@5 x ~@5 x ~@4",
  E: "~ x ~@6 x ~@5 x ~@9", F: "x!2 ~@2 x ~@2 x ~@2 x ~", G: "~ x!3", H: "~@2 x!2 ~@2 x ~@2 x ~@2", I: "x!4",
  J: "~@5 x ~ x ~@5 x ~@5 x ~@4", K: "~ x ~@22",
})).gain(0.04).pan(1)

// drums · snare
const snare = s("sd").struct("<~@8 A ~@3 B ~ C ~@26 D@6 E F@6 G H I ~@21>".pickRestart({
  A: "~ x!2 ~@4 x!2 ~@3", B: "~@3 x ~ x ~@9 x ~ x ~@6", C: "~@5 x ~@12 x ~@5", D: "~@5 x ~@5 x", E: "~@10 x ~@12 x",
  F: "~@11 x ~@11 x", G: "~@11 x ~@12", H: "x!2", I: "x",
})).gain(0.22).pan(1)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@20 [~@2 x ~@2 x ~@2 x ~@3] ~@35 [~@5 x ~@2 x ~@2 x] ~@21>").gain(0.11).pan(1)

// drums · low tom
const low_tom = s("lt").struct("<~@20 [~@11 x] ~@36 [~ x ~@4] ~@20>").gain(0.29).pan(1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [~@3 x] ~@36 x ~@20>").gain(0.29).pan(1)

// drums · high tom
const high_tom = s("ht").struct("<~@20 [~@11 x] ~@36 [~ x ~@4] ~@20>").gain(0.29).pan(1)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A B C D@2 E F@4 G H@6 ~@8 I J@4 K B@5 L M D@5 N O F@5 G H@2 P ~@7 Q R@2 S J@6 K B T
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2", C: "~ x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@3 x ~ x ~",
  D: "~ x!2 ~ x!2 ~ x!2 ~ x!2", E: "~@2 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@3 x ~ x",
  F: "~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", G: "~@3 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~@2",
  H: "x ~ x!2 ~ x!2 ~ x!2 ~ x", I: "~ x ~ x!2 ~ x!2 ~ x!2 ~", J: "x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  K: "x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@2", L: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~",
  M: "~ x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~", N: "~@2 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x",
  O: "~@2 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", P: "x!2 ~@4", Q: "~@7 x ~@3 x ~ x ~@3 x ~ x ~@3 x",
  R: "~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x", S: "~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@3", T: "~ x ~ x ~@3 x ~@16",
})).gain(0.25).pan(1)
// … 21 more lines

More by Erroll Garner