Strudelify

Bad Bad Leroy Brown

Jim Croce

KeyG majorTempo144 bpm
0:00/0:00
// Bad Bad Leroy Brown — Croce Jim
// 144 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "E.PIANO 2" epiano2 (copy of ch 1 "A.PIANO 1" piano)
// note: Full arrangement: all 111 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I@5 J K L M@4 N O P L I@5 J K L I@5 J K L M@4 N O P L I@5 J K L Q@7 R@3 S@2 T U V W I@5 J K L X@4 Y Z
  AA AB I@5 J K L I@5 J K AC AD AE@5 ~
>`.pickRestart({
  A: "[g3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g2,g3,b3] ~@3 [g2,g3,b3,d4] ~ [g3,e4]@2 ~@2 [g2,g3,c4,e4] ~, [g2,b3] ~@5 g2 ~@5 d4@2 ~@4 [g2,c4] ~@5", // G5 G C G C G C5
  B: "[g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~, g2 ~@5 [g2,c4] ~@5 g2 ~@5 g2 ~@5", // G C G C C5
  C: "[g2,g3,b3,d4] ~@3 [g2,g3,b3,d4] ~ [g3,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g2,g3,b3,d4] ~@3 [g2,g3,b3,d4] ~ [g2,g3,c4,e4] ~@3 [g2,g3,c4,e4] ~, ~@6 [g2,c4] ~@17", // G C G C C5
  D: "[g3,d4,f4]@2 ~@2 [g2,g3,d4,f4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~, g2 ~@5 g2 ~@5 g2 ~@5 g2 ~@5", // G7 C G C
  E: "[g2,g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g2,g3,c4,e4] ~, ~@6 g2 ~@5 g2 ~@5 g2 ~@5", // G C G C
  F: "[g2,g3,b3] ~@3 [g2,g3,b3,d4] ~ [g2,g3,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g2,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,e4]@2 ~@2 [g2,g3,c4,e4] ~, d4@2 ~@4 c4 ~@5 [g3,b3] ~@5 [g2,c4] ~@5", // G C G5 G C G C5
  G: "[g2,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g3,e4]@2 ~@2 [g2,g3,c4,e4] ~ [g3,b3,d4]@2 ~@2 [g2,g3,b3,d4] ~ [g2,g3,e4]@2 ~@2 [g2,g3,c4,e4] ~, g3 ~@5 [g2,c4] ~@5 g2 ~@5 c4 ~@5", // G C G C C5
  H: "d2@4 [f#3,a3,d4]@2 d2@4 ~@2 d2@4 ~@2 d2@4 [f#3,a3] ~, ~@10 [f#3,a3,d4]@5 ~ [f#3,a3,d4]@5 ~ d4@2", // D F#m D
  I: "[[g2,g3,b3,d4]@4 d3 ~ [g3,c4,e4]@4 ~@2 [g3,b3,d4]@4 d3@2 [g3,c4,e4]@4 d3@2 [g3,d4,f4]@4 d3 ~ [g3,c4,e4]@2 ~@2 [g3,b3,d4]@6 d3@2 [g3,b3,d4]@4 e3 ~ [a3,c#4,e4]@4 ~@2 [a3,d4,f#4]@4 e3@2 [a3,c#4,e4]@4 e3@2 [a3,d4,f#4]@4 e3@2 [a3,c#4,e4]@4 ~@2 [b3,d4,e4]@2 ~@2 [a3,c#4,e4]@6 ~@2 [a3,c#4,e4]@3 ~@3 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@2 ~@4 b2@4 [b3,d#4,f#4] ~, ~@10 g2@32 ~@4 a2@16 ~@2 a2@19 ~@5 [a2,e3]@4 ~@2 b2@11 ~ b2@7 ~@7, ~@52 e3@4 ~@20 e3@7 ~@29 [b3,d#4,f#4]@4 ~@4]/5", // G C G C G7 C G A …
  J: "[g3,c4,e4,g4]@2 g3 [c4,e4,g4]@2 ~ [c4,e4,g4]@2 c3 [c4,e4,g4]@2 ~, c3@7 ~@5, ~@5 g3@2 ~@5", // C
  K: "[a3,f#4,a4]@5 ~ [d4,f#4,a4]@4 ~@2 [c3,c4,e4,g4]@5 ~ [e4,g4] ~@3 [g2,g3,b3,d4]@2, d3 ~@3, d4@3 ~@15 c4@2 ~@4", // D C Em G
  L: "~@4 [d2,d3,f#3,a3,c4,d4] ~ [d2,f#3,a3,d4]@2 ~@2 [d2,d3,f#3,a3,c4,d4] ~ [d3,f#3,c4,d4] ~@3 [d2,d3,f#3,a3,c4,d4] ~ [d3,a3,c4,d4] ~@3 [d2,d3,f#3,a3,c4,d4] ~, ~@6 [d3,c4] ~@5 [d2,a3]@2 ~@4 [d2,f#3]@2 ~@4", // D7 D D7 D5 D
  M: "[[g3,b3,d4]@4 d3 ~ [g3,c4,e4]@4 d3 ~ [g3,b3,d4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,b3,d4]@4 d3 ~ [g3,c4,e4]@3 ~ [g3,b3,d4]@6 d3@2 ~@2 e3 ~@3 [a3,c#4,e4]@4 ~@2 [a3,d4,f#4]@4 e3@2 [a3,c#4,e4]@4 ~@2 [a3,d4,f#4]@4 e3@2 [a3,c#4,e4]@4 ~@2 [b3,d4,e4]@2 ~@2 [a3,c#4,e4]@6 ~@2 [a3,c#4,e4]@4 b2 ~, g2@19 ~@3 g2@20 [g3,c4,e4]@4 a2@16 ~@2 a2@19 ~@5 [a2,e3]@5 ~@3, ~@52 e3@4 ~@8 e3@4 ~@8 e3@7 ~@13]/4", // G C G C G C G A …
  N: "[b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@2 ~@4 b2@4 [b3,d#4,f#4] ~, b2@4 ~ b2@3 [b3,d#4,f#4]@2 ~@2", // B
  O: "[c4,e4,g4]@2 g3 [c4,e4,g4]@2 g3 [c4,e4,g4]@2 g3 [c4,e4,g4]@2 ~, c3@11 ~, g3 ~@7", // C
  P: "[d3,a3,d4,f#4,a4]@4 ~@2 [d3,a3,d4,f#4,a4]@4 ~@2 [c3,c4,e4,g4]@5 ~ [c4,e4,g4]@2 ~@2 [g3,b3,d4]@2", // D C G
  Q: "[[g3,b3,d4]@15 ~ [c4,d4]@2 ~@4 [g3,b3,d4]@6 d3 ~ [g3,c4,e4]@2 ~@2 [g3,b3,d4]@6 d3@2 [g3,b3,d4]@4 e3@2 [a3,c#4,e4]@16 e3 ~ [b3,d4,e4]@2 ~@2 [a3,c#4,e4]@6 e3@2 [g3,c#4,e4]@2 ~@2 [g3,c#4,e4]@6 e3@2 [a3,c#4,e4]@4 ~@2 [b3,d#4,f#4]@11 ~ [b3,d#4,f#4]@10 ~@12 c4@2 [c4,e4,g4]@4 g3@2 [c4,e4,g4]@4 ~@2 [d4,f#4,a4]@4 ~@2 [d4,f#4,a4]@4 c3@2 [c4,e4,g4]@5 ~ [c4,e4,g4] ~@3 [g3,b3,d4] ~, g2@42 ~@4 a2@46 ~@2 b2@11 ~@13 c3@19 ~@5 [d3,a3]@9 ~@17, ~@16 a3 ~@103 [e4,g4]@11 ~@37, ~@15 c4 ~@5, ~@18 g3 ~@5]/7", // G Csus2 G C G A E7 A …
  R: "[~@4 [f#3,a3,d4] ~ [f#3,d4]@2 ~@2 [f#3,a3,d4] ~ [f#3,a3,d4]@2 ~@2 [f#3,a3,d4] ~ [f#3,a3] ~@5 [g3,b3,d4]@16 d3 ~ [a3,c4,d4]@3 ~ [g3,b3,d4]@12 d3 ~ [g3,b3,d4]@2 ~@2 [g3,b3]@6 ~@2, ~@6 g#3 ~@11 d4@2 ~@2 g2@44 ~@6]/3", // D F#m G D7 G
  S: "[[a3,c#4,e4]@16 ~@2 [b3,d4,e4]@3 ~ [a3,c#4,e4]@18 e3@2 [a3,c#4,e4]@3 ~@3, ~@4 a2@7 ~, ~@16 e3@17 ~@15]/2", // A E7 A
  T: "[d#4,f#4]@8 ~ [d#4,f#4] b3 ~, b3@3 ~, b2@7 ~ b2@2 ~@2", U: "[c4,e4,g4]@8 g3 [c4,e4,g4]@2 ~, c3@19 ~@5, g3@7 ~@5",
  V: "[d3,a3,a4]@5 ~ [d4,f#4,a4]@4 c3@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~@3 [g2,g3,b3,d4]@2, [d4,f#4] ~@7", // D5 D C G D
  W: "~@4 [f#3,a3,d4] ~ [f#3,a3] ~@3 [f#3,a3,d4] ~ [f#3,a3,b6,c7] a6 [f6,g6] [d6,e6] [f#3,a3,d4,b5,c6] a5 g5 e5 [c5,d5] b4 [f#3,a3,d4,f4,g4,a4] ~, ~@3 d4 ~@2 d4 ~@2 [f#3,a3,d4,f5] ~@2", // D F#m D F#dim Fsus2 Dsus2 D7 Csus2 …
  X: "[~@34 a#3@2 ~@12 [a2,a3,c#4,e4]@45 ~@3, [g2,g3]@23 ~@25, d4@5 d4@5 ~@2, b3@3 b3@3 ~@2]/4", // A G
  Y: "[b2,b3,d#4,f#4]@11 ~", Z: "[c3,c4,e4,g4]@11 ~", AA: "[d4,f#4,a4]@11 ~, d3",
  AB: "[c4,f#4] ~ d3 ~ [c4,f#4] ~ d3 ~ [c4,f#4,a4] ~ d3@2 [c4,f#4] ~ d3 ~ [c4,f#4] ~ d3@2 [c4,f#4] ~ d3 ~, a4 ~ a4 ~@3 a4 ~ a4 ~ a4 ~", // Cdim F#dim Cdim
  AC: "~@4 g3 ~ [c4,e4]@3 ~ g3@2 [b3,d4]@4 g3@2 [c4,e4]@4 g3 ~, ~@6 g3 ~@17", // C Bm C
  AD: "~@4 b3 ~ [d#4,f#4]@4 ~@2 [b3,d#4,f#4] ~@5 b2@4 [b3,d#4,f#4] ~, b2@8 ~@2 b2@7 ~@7, ~@6 b3@3 ~@7 [b3,d#4,f#4]@4 ~@4", // D#m B
  AE: "[[c4,e4,g4]@4 ~@2 [c4,f4,a4]@2 ~@2 [c4,e4,g4]@6 g3@2 [c4,e4,g4]@4 ~@2 [d4,f#4,a4]@4 ~@2 [d4,f#4,a4]@4 ~@2 [c4,e4,g4]@5 ~ [c4,e4,g4]@4 ~@2 [g3,b3,d4]@4 d3@2 [g3,c4,e4]@2 ~@2 [g2,g3,b3,d4]@62, ~@4 c3@15 ~@3 [d3,a3]@10 ~@4 c3@8 ~@2 g2@7 ~@67]/5", // C F C D C G C G …
})).s("gm_piano").gain(0.56)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@4 A B C D E C F G H I J K B L M N O P Q R S T U V W X Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO S T U V W X
  Y@2 E C F G H I J K B L M N O P Q R S T U V W X Y@2 AP AQ AR AS AT AU AV AW S T U V W X Y@2 S T U V W X AX AY AZ BA BB
  BC@4
>`.pickRestart({
  A: "g2@3 ~@9 d2@5 ~@7", B: "g2@5 ~@7 d2@6 ~@6", C: "g2 ~ d2 ~", D: "g2 ~@3 d2@2 d1@3 ~ d2@2 d1@3 ~ d2@2 d1@5 ~",
  E: "g2@2 ~@4 d2@3 ~@3", F: "a2@6 ~@6 e2@7 ~@5", G: "a2@7 ~@5 e2@5 ~ a2@5 ~", H: "b2@6 ~@6 f#2@7 ~@5",
  I: "c3@7 ~@5 g2@8 ~@4", J: "d3@5 ~ c3@6 b2@5 ~ a2@5 ~", K: "g2@5 ~ f#2@6 e2@5 ~ d2@5 ~",
  L: "g2@7 ~@5 d2@5 ~ g2@4 ~@2", M: "a2 ~ e2 ~", N: "a2@7 ~@5 e2@5 ~ a2@4 ~@2", O: "b2 ~ f#2 ~",
  P: "c3@7 ~@5 g2@4 ~@2 c3@4 ~@2", Q: "d3@3 ~ c3@3 ~", R: "g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2",
  S: "g2 ~@3 g2@2 e2@2 ~@2 e2@2 d2@2 ~@2 d2@2 e2@2 d2 ~ e2 ~", T: "g2@2 ~@2 g2 ~ e2@2 ~@2 d2@5 ~ d2@2 e2@2 d2 ~ e2 ~",
  U: "a2@2 ~@2 a2 ~ f#2@2 ~@2 f#2 ~ e2@2 ~@2 e2@2 a1@2 ~@2 a1@2",
  V: "a2@2 ~@2 a2@2 e2@2 ~@2 a1@4 ~@2 a1 ~ e2 ~ a1 ~ e2@2", W: "b1 ~ b1 d#2 ~ d#2 f#2 ~ f#2 b2 ~ b2",
  X: "c2@2 ~@2 c2@2 e2@2 ~@2 g2@5 ~ c3@2 g2@2 e2@2 c2 ~",
  Y: "[d2@4 ~@2 d2@4 ~@2 c2@5 ~ c2@2 ~@2 g2@4 ~@2 g2 ~ f#2@2 ~@2 f#2@2 e2@2 ~@2 e2 ~ d2@3 ~ d2@2]/2",
  Z: "g2@4 ~@6 g2 ~ d2@7 ~@3 d2 ~", AA: "g2@6 ~@6 g2@2 d2 ~ g1@2 d2@4 ~@2", AB: "a2@6 ~@4 a2 ~ e2@6 ~@4 a1 ~",
  AC: "a2@3 ~@2 a2 ~@2 a2 a1 ~ e2", AD: "b1@5 ~@7 b1@7 ~@5", AE: "c2@6 ~@4 c2@2 g1@3 ~ c2@2 g1@4 ~@2",
  AF: "d3@5 ~ c3@5 ~ b2@5 ~ a2@5 ~", AG: "g2@2 ~@2 g2 ~ f#2@2 ~@2 f#2@2 e2@2 ~@2 e2 ~ d2@2 ~@2 d2 ~",
  AH: "g1@5 ~@5 g1 ~ g2@6 ~@4 d2@2", AI: "g1@6 ~@4 g2@2 ~@4 g2@2 g1 ~ d2 ~ g2 ~", AJ: "a2@5 ~@5 a2@2 e2@6 ~@4 e2@2",
  AK: "a1@7 ~@3 a2@3 ~@3 a2@2 a1@2 ~@2 e2@2", AL: "b2@7 ~@3 b2@2 f#2@5 ~ b2@4 ~@2",
  AM: "c3@4 ~@6 c3@2 g2@3 ~ c3@2 g2@4 ~@2", AN: "d3@2 ~ c3@2 ~ b2@2 ~ a2@2 ~",
  AO: "g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2 ~@3 d2 ~ d2@2 ~@2 d2 ~", AP: "g2@7 ~@3 g2@2 d2@10 ~@2",
  AQ: "g2@7 ~@3 g2@2 d2@2 e2@2 g2@2 d2@3 ~ g#2 ~", AR: "a2@7 ~@3 a2@2 e2@11 ~", AS: "a2@7 ~@3 e2@2 ~@4 e2@2 a2@4 e2 ~",
  AT: "b2@11 ~ f#2@5 ~ b2@5 ~", AU: "c3@7 ~@3 c3@2 g2@3 ~ c3@2 g2@3 ~ c3@2", AV: "d3@5 ~ c3@5 ~ b2@5 ~ a2@4 ~@2",
  AW: "g2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2 d1@3 ~ d2@2", AX: "d2@4 ~@2 d2@4 ~@2 c2@5 ~ c2@2 ~@2 g2@2",
  AY: "~@4 g2@2 e2@5 ~ d2@6 g1@6", AZ: "b1@8 ~@2 b1@2 f#1@5 ~ b1@5 ~", BA: "c2@7 ~@3 c2@2 g1@3 ~ c2@2 g1@4 c2@2",
  BB: "d2@5 ~ d2@5 ~ c2@5 ~ a1@4 ~@2", BC: "[g1@3 ~ g2@2 d2@3 ~ g1@64 ~@22]/4",
})).s("gm_acoustic_bass").gain(0.48)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@24 A@4 B@2 C@3 ~@15 A@4 B@2 C@3 ~@15 A@4 B@2 C@3 ~@7 A@4 B@2 D@6 B@2 E F G@6 ~
>`.pickRestart({
  A: "[[g3,b3,d4]@4 [g3,b3]@2 [g3,c4,e4]@4 e4@2 [g3,b3,d4]@4 [g3,b3,d4]@2 [g3,c4,e4]@4 g3@2 [g3,b3,d4]@4 [g3,b3,d4]@2 [g3,c4,e4]@4 g3@2 [b3,d4]@4 g3@2 [g3,e4]@4 [b3,d4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [b3,d4]@4 e4 ~ [a3,c#4]@4 e4@2 [b3,d4]@4 b3@2 [a3,c#4]@4 a3@2 [b3,d4,e4]@4 e4@2 [a3,c#4]@4 [a3,c#4,e4]@2 [b3,d4]@4 [a3,b3,c#4,e4]@2, ~@4 d4@6 c4@4 ~@8 [c4,e4]@4 ~@8 [c4,e4]@4 ~@2 [b3,d4]@4 ~@2 g3@4 ~@8 [b3,d4]@4 ~@2 [a3,c#4]@4 ~@2 e4 ~ e4 ~@3 e4 ~@7 e4@2 ~@4 e4@2 ~@4, ~@10 g3 ~ e4@2 ~@22 g3@2 ~@4 c4@3 ~@9 e4@2 ~@4 e4 ~@5 e4 ~@3 d4@6 c#4@4 ~@2 [b3,d4]@4 ~@10]/4", // G C G C G C Bm C …
  B: "[[b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,f#4]@4 d#4@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@2 [c4,e4]@4 [c4,e4,g4]@2 e4@4 [c4,e4,g4]@2, ~@18 e4@6 ~@12 g4@2 ~@4 g4 ~@5, ~@11 [b3,f#4]@2 ~@8 c4 ~@2]/2", // B B5 C B5
  C: "[[a3,d4,f#4]@4 [a3,d4,f#4]@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [g3,c4,e4]@4 [g3,c4,e4]@2 [g3,c4,e4]@4 [g3,b3,d4]@6 [f#3,a3,c4] ~ [f#3,a3,c4]@4 [f#3,a3,c4]@2 [f#3,a3]@4 [f#3,a3,c4]@2 f#3@4 [a3,c4] ~@25, ~@18 c4 ~@2 a3 ~ f#3@2 ~@11, ~@42 c4 ~@29]/3", // D C G F#dim F#m F#dim Am
  D: "[[a3,d4,f#4]@4 [a3,d4,f#4]@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [g3,c4,e4]@4 [g3,c4,e4]@2 [g3,c4,e4]@4 [g3,b3,d4]@6 [f#3,a3,c4] ~ [f#3,a3,c4]@4 [f#3,a3,c4]@2 [f#3,a3]@4 [f#3,a3,c4]@2 f#3@4 [a3,c4] ~ [g3,b3,d4]@4 [g3,b3]@2 [g3,c4,e4]@4 e4@2 [g3,b3,d4]@4 [g3,b3,d4]@2 [g3,c4,e4]@4 g3@2 [g3,b3,d4]@4 [g3,b3,d4]@2 [g3,c4,e4]@4 g3@2 [b3,d4]@4 g3@2 [g3,e4]@4 [b3,d4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [b3,d4]@4 e4 ~ [a3,c#4]@4 e4@2 [b3,d4]@4 b3@2 [a3,c#4]@4 a3@2 [b3,d4,e4]@4 e4@2 [a3,c#4]@4 [a3,c#4,e4]@2 [b3,d4]@4 [a3,b3,c#4,e4]@2, ~@36 c4@2 ~@4 a3@2 ~@2 f#3@4 ~@8 c4@4 ~@8 [c4,e4]@4 ~@8 [c4,e4]@4 ~@2 [b3,d4]@4 ~@2 g3@4 ~@8 [b3,d4]@4 ~@2 [a3,c#4]@4 ~@2 e4 ~ e4 ~@3 e4 ~@7 e4@2 ~@4 e4@2 ~@4, ~@42 c4 ~@9 d4@6 g3 ~ e4@2 ~@22 g3@2 ~@4 c4@3 ~@9 e4@2 ~@4 e4 ~@5 e4 ~@3 d4@6 c#4@4 ~@2 [b3,d4]@4 ~@10]/6", // D C G F#dim F#m F#dim Am G …
  E: "[a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4] [g3,c4,e4]@2 [g3,c4,e4] [g3,c4,e4]@2 ~", // D C
  F: "g3@3 [g3,c4,e4]@2 b3@7, [b3,d4]@5 d4@5 ~@2, ~@5 g3 ~@6", // C Bm
  G: "[b3@14 ~@62 g3@2 g3@4 [g2,b3,d4]@61 ~, [d#4,f#4]@43 ~@5 [a3,d4,f#4]@20 ~@4 [b3,d4]@9 ~@63, ~@24 [c4,e4,g4]@35 ~ [c4,e4]@18 [c4,e4]@18 ~@48, ~@30 g3@8 ~@3 g3@5 ~@26]/6", // G D#m D Bm C
})).s("gm_acoustic_guitar_nylon").gain(0.44)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@48 A B C D E F G H ~@8 I@4 J K ~@2 A B C D E F G H ~@8 A B C D E F G H L@2 M@2 N O P Q N R S T ~@3
>`.pickRestart({
  A: "~@6 [g4,b4] ~@11 [g4,b4] ~@5, ~@3 d5 ~@5 d5 ~@2", // G
  B: "~@6 [c5,e5]@2 ~@2 [b4,d5]@6 g4@2 [g4,b4,d5]@3 ~@3, ~@4 g4@4 ~@2 g4@5 ~@9", // C Bm G
  C: "~@3 [a4,c#5,e5] ~@5 [a4,c#5,e5] ~@2", D: "~@4 [a4,e5] ~ [b4,d5,e5]@2 ~@2 [a4,c#5,e5]@8 [a4,c#5] ~@5, ~@9 e5 ~@2",
  E: "~@3 [b4,d#5,f#5] ~@5 [b4,d#5,f#5] ~@2", F: "~@3 [c5,e5,g5] ~@5 [c5,e5,g5] ~@2",
  G: "~@6 [d5,f#5,a5]@2 ~@10 [c5,e5] ~@5, ~@9 g5 ~@2", // D C
  H: "~@4 [a4,d5,f#5] ~ [a4,d5,f#5] ~@3 [a4,d5,f#5] ~ [a4,d5,f#5] ~@3 [a4,d5,f#5] ~ [a4,d5,f#5] ~@3 [a4,d5,f#5] ~", // D
  I: "[[d4,g4,d5,g5]@29 ~ [g4,b4,g5,b5] ~@5 [a4,a5]@4 [g4,g5]@2 [e4,e5]@3 ~@3 [e4,e5]@29 ~ [b4,b5]@3 ~@3 [a4,a5]@4 [g4,g5]@2 [e4,e5]@5 ~, ~@46 [g4,g5]@31 ~ [g4,g5] ~@17]/4", // G5 G A G E B A G …
  J: "[f#4,b4,f#5,b5]", K: "[g4,c5,g5,c6]@7 ~", L: "[[g4,b4,d5]@47 ~]/2", M: "[[a4,c#5,e5]@47 ~]/2",
  N: "[b4,d#5,f#5]@23 ~", O: "[g4,c5,e5]@11 ~", P: "[a4,d5,f#5]@11 ~ [g4,c5,e5]@11 ~", Q: "[g4,b4,d5]@11 ~",
  R: "[g4,c5,e5]@23 ~", S: "[a4,d5,f#5]@11 ~ [g4,c5,e5]@10 ~@2, ~@12 d5 ~@11",
  T: "[b4,d5]@2 ~ [c5,e5] ~ [g4,b4,d5] ~@6, g4 ~@3 g4@4 ~@16", // Bm C G
})).s("gm_rock_organ").gain(0.53)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@4 B C B C B C B C B C B C B C B C D C D C D C D C B C B C B C B C B C B C B C B C D C D C D C D C A C A C A C A
  C B C B C B C B C D C D C D C D E A@8 D C D C D C D E D C D C D C D C D C D F ~@3
>`.pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x", C: "x ~@4 x ~@2 x ~@2 x", D: "x ~ x ~@2 x!2 ~ x ~@3", E: "x ~@4 x!2 ~ x ~@2 x",
  F: "x ~@4 x ~@6",
})).gain(0.58)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@3 B A@15 B A@7 C A@7 B A@7 B A@7 C A@7 D A@7 B A@7 E ~@7 B A@7 E A@7 C A@3 F ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@4 x!4", C: "~@3 x ~@3 x!5", D: "~@3 x ~ x ~@2 x!4", E: "~@2 x!2 ~@4 x ~@2 x",
  F: "~@2 x!2 ~@8",
})).gain(0.58)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7 A ~@15 A ~@7 B ~@7 A ~@7 A ~@7 B ~@7 C ~@7 A ~@7 D ~@7 A ~@7 D ~@7 B ~@3 E ~@3
>`.pickRestart({
  A: "~@6 x!2 ~@4", B: "~@4 x!2 ~@4 x ~ x ~@11", C: "~@4 x!2 ~@6 x ~@11", D: "~@9 x!2 ~", E: "x!2 ~@10",
})).gain(0.17)

// drums · clap
const clap = s("cp").struct("<~@24 A@8 ~@8 A@16 ~@8 A@16 ~@8 A@19 B ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.58)

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@15 A ~@7 A ~@23 A ~@7 B ~@7 A ~@7 B ~@15>".pickRestart({
  A: "~@8 x!4", B: "~@3 x",
})).gain(0.58)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!4 ~@4 [x!4]!99 [x!2 ~@2] ~@3>").gain(0.52)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@8 [~@2 x ~@2 x ~@2 x ~@2 x]!99 [~@2 x ~@2 x ~@6] ~@3>").gain(0.17)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@15 A ~@7 A ~@23 A ~@7 B ~@7 A ~@7 B ~@15>".pickRestart({
  A: "~@6 x!2 ~@4", B: "~ x ~@2",
})).gain(0.58)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@23 A ~@23 A ~@15 A ~@7 A ~@7 A ~@2 B ~@3>".pickRestart({
  A: "x", B: "~@5 x ~@6",
})).gain(0.58)

// drums · ride
const ride = s("rd").struct("<~@24 A@8 ~@16 A@8 ~@16 A@8 ~@8 A@19 B ~@3>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.58)

stack(
  piano, bass, acoustic_guitar_nylon, rock_organ, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft, mid_tom,
  crash, ride
)

More by Jim Croce