Strudelify

Rockin' Pneumonia Boogie Woogie Flu

Johnny Rivers

KeyF majorTempo116 bpm
0:00/0:00
// Rockin' Pneumonia   Boogie Woogie Flu — Johnny Rivers
// 116 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · electric guitar clean
const electric_guitar_clean = note(`<
  ~@8 A@4 B C D E A F A G H I D J A K A K C L D E M N O@4 P@2 Q R O S O T P U V R M W X@2 ~ Y@2 Z
>`.pickRestart({
  A: "~@4 [f4,ab4,bb4,d5] ~@7 [f4,ab4,bb4,d5] ~@3", B: "~@4 [g4,c5,eb5]@2 ~@6 [g4,a4,c5,eb5] ~@3",
  C: "~@4 [g4,a4,c5,eb5] ~@7 [g4,a4,c5,eb5] ~@3", D: "[f4,ab4,bb4,d5] ~@15",
  E: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~", F: "~@4 [f4,ab4,bb4,d5]@5 ~@3 [f4,ab4,bb4,d5] ~@3",
  G: "~@4 [f4,ab4,bb4,d5]@6 ~@2 [f4,ab4,bb4,d5] ~@3", H: "~@4 [g4,bb4,c5,eb5] ~@7 [g4,bb4,c5,eb5]@2 ~@2",
  I: "~@2 [g4,a4,c5,eb5]@3 ~ [g4,a4,c5,eb5] ~", J: "~@2 [e4,f4] ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~",
  K: "~@2 [f4,ab4,bb4,d5]@5 ~", L: "~@2 [g4,a4,c5,eb5]@5 ~", M: "g4", N: "~@2 g4 ~ g4 ~ g4 ~ bb4@3 ~ bb4@3 ~",
  O: "~@4 [g4,bb4,c5,e5] ~@7 [g4,bb4,c5,e5] ~@3", P: "~@4 [f4,g4,b4,d5] ~@7 [f4,g4,b4,d5] ~@3", Q: "[e4,g4,c5] ~@15",
  R: "~@2 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~", S: "~@4 [g4,bb4,c5,e5]@6 ~@2 [g4,bb4,c5,e5] ~@3",
  T: "~@2 [g4,bb4,c5,e5]@3 ~ [g4,bb4,c5,e5] ~", U: "~@2 [f4,g4,b4,d5]@3 ~ [f4,g4,b4,d5] ~", V: "[e4,g4,c5] ~@7",
  W: "~@2 c5 ~ c5 ~ c5 ~ eb5@4 c5@2 bb4 ~", X: "[g4@13 ~@3]/2", Y: "[~@2 g4 ~ db5@3 ~ db5@4 a4@2 g4@11 ~@7]/2",
  Z: "eb5 c5 bb4 c5 ~@2 c6 ~",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.7)

// chords · percussive organ
const percussive_organ = note(`<
  ~ A@2 B C D E F G ~@6 H I J K L M N ~ O P Q R S T U V ~ W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM ~@4 AN AO AP AQ
  AR
>`.pickRestart({
  A: "[~@2 [db5,d5,bb5] ~@3 [c5,f5,ab5] ~@3 [eb5,g5]@2 ~@2 db5@2 d5@4 ~@12, ~@7 f5@3 ~@6]/2", // Gb Fm Eb
  B: "db6@2 d6 ~ db6@2 d6 ~ db6@2 c6@2 bb5@2 g5@2", C: "f5 ~",
  D: "db6@2 ~@2 [eb6,g6]@2 ~@2 [eb6,g6]@2 [db6,d6,f6] ~ bb5 ~ ab5@2, f6 ~@15", E: "f5@9 ~@7",
  F: "~@2 [bb4,f5,ab5] ~@3 [eb5,g5]@2 db5 d5 bb4@2 ab4@2 ~@2, ~@6 bb4 ~ f5@2 ~@6", G: "bb4@2 bb4 ~@13",
  H: "~@2 d6@8 db6@2 ~@2 bb5 ~, ~@2 db6 ~@13", I: "bb5@2 ~@2 bb5@2 ~@2 bb5@4 ab5 ~ db6@2",
  J: "d6@2 ~@2 bb5@2 ab5@2 f5 ~ [f5,ab5]@2 ~@2 [eb5,g5]@2", // Fm Eb
  K: "f5@2 d5@2 bb4 ~ [db5,f5]@2 d5@2 bb4 ~ [db5,d5,f5] ~ [eb5,g5]@2", L: "~ d5 ~@2 ab4@2 bb4@6 ~@4",
  M: "~ ab5 a5 f6 ab5 a5 f6 ab5", N: "a5@2 f6 ~ [ab5,e6] ~ [g5,eb6]@6 db6@2 bb5@2",
  O: "~@2 db5 ~ [d5,bb5] ~ eb5 ~, ~@4 bb5 ~@7 bb5 ~@3", P: "[db5,f5] d5 bb4 ~ bb4 ~@3 [db5,d5,f5] ~ bb4 ~ bb4 ~@3",
  Q: "[f5,ab5]@2 ~@2 [eb5,g5]@2 [db5,f5]@2 d5@2 bb4 ~ bb4 ~@3", // Fm Eb Db
  R: "[db5,d5,f5] ~@3 bb4@2 ~@2 [db5,f5] d5 ~@2 bb4@2 ~@2", // Db
  S: "f5@2 ~@2 [eb5,g5]@2 [db5,f5]@2 d5@2 bb4 ~ bb4 ~@3, ab5 ~@15", // Eb Db
  T: "~@4 [ab5,c6] ~ d6@2 [ab5,c6] a5 ~@2 [ab5,a5,c6] ~ [bb5,d6] ~, ~@6 bb5 ~@9", // Ab Bb
  U: "~@2 [c6,eb6] ~ d6@2 ~@2 d6@2 [ab5,a5,c6] ~ f5@2 eb5 ~, ~@4 bb5 ~@3 bb5 ~@7", V: "bb5 ~@15",
  W: "g5@2 ~@12 [gb6,g6,c7] ~", X: "~@2 f6@2 [eb6,g6] e6 ~@2 [gb5,g5] ~@3 f5@2 [eb5,g5]@2, ~@2 c7 ~@5 c6@2 ~@2 c6 ~@3",
  Y: "c5@2 c5 ~ [eb5,g5] e5 ~@4 c5 ~@3 c5 ~", Z: "~@2 c5@2 ~@2 c5 ~ [gb5,bb5] ~@3 [f5,a5]@2 [eb5,g5]@2",
  AA: "e5@2 c5 ~ c5 ~@5 [c5,d5] ~@3 c5 ~", // Csus2
  AB: "gb5@2 [g5,c6] ~ [gb5,c6] ~ g5@2 [f5,c6] ~ [eb5,g5] e5 ~@2 bb4@2, c6 ~@5 c6 ~@9", AC: "g4@5 bb4 b4 d5",
  AD: "f5@2 ~@2 e5@2 ~@2 e5@2 d5@2 bb4 b4 ~@2", AE: "c5 ~@15",
  AF: "~@4 [gb5,c6] ~@3 [gb5,bb5]@2 ~@2 [f5,a5]@2 [eb5,g5]@2, ~@12 e5 ~@3", // Gbdim Gb F Eb
  AG: "e5@2 c5 ~ c5@2 ~@2 c5@3 ~ c5@2 g5@2, ~@14 eb5 ~", AH: "~@10 c5 ~ gb5@2 [g5,bb5] ~, ~@12 bb5 ~@3",
  AI: "gb5@2 [g5,bb5] ~ gb5@2 [g5,bb5] ~ [f5,a5]@2 ~@2 [f5,a5]@2 ~@2, bb5 ~@3 bb5 ~@11", // Gm F
  AJ: "a5@2 [eb5,e5,g5] ~ c5@2 c5@2 ~@8, f5 ~@15", AK: "~@2 [db6,d6,g6] ~@3 [c6,g6] ~@3 bb5@2 b5@2 ~@2, ~@5 d6@2 ~",
  AL: "bb5 b5 ~@2 f5@2 g5@2 ~@2 g5 ~ bb5 g5 bb5@2", AM: "c6 ~@15", AN: "~@2 eb6 e6 f6 gb6 g6 ~ e6@2 c6@2 g5@2 f5@2",
  AO: "[d5,eb5] ~ c5 ~@13, e5 ~@7", AP: "[g6,c7]@4 f6@2 eb6 ~ a6@2 [eb6,g6] ~ c6@2 bb5 ~, gb6 ~@7 f6 ~ e6@2 ~@4",
  AQ: "[c6,d6]@3 ~@13", AR: "gb6@2 [g6,c7]@2 f6@2 [d6,eb6,e6,g6] ~@5 [bb4,d5,e5,g5,bb5]@2 ~@2, c7 ~@15",
})).s("gm_percussive_organ").gain(0.09).pan(0.9)

// chords · percussive organ · soft notes
const percussive_organ_soft = note(`<
  ~@2 A ~ B C ~ D ~@7 E ~ F G H ~@3 I ~ J K J L M ~@3 N ~ O ~ P ~ Q ~ R S ~ T ~ U V ~@7 W ~@2
>`.pickRestart({
  A: "~@14 eb5 ~", B: "~@14 bb5 ~", C: "~@2 [d6,f6] ~@3 db6 ~@9", D: "~@8 eb5 ~@5 f4 ~", E: "~@6 c6 ~",
  F: "~@2 ab5 ~@9 bb4@2 ~@2", G: "db5 ~@7", H: "[db5,f5] ~ bb4@2 ~@12", I: "~@2 bb4 ~@3 bb4 ~@3 bb4 ~@3 bb4@2",
  J: "~@2 bb4 ~@13", K: "~@2 bb4 ~@7 bb4 ~@5", L: "~@2 f5 ~@7 f5 ~@3 db6 ~", M: "[b5,c6,eb6] ~ db6 ~@3 ab5 ~@9",
  N: "~@6 [c6,gb6] ~@9", O: "~@10 c5 ~@5", P: "~@6 c5 ~", Q: "~@2 d5 ~@11 g4@2", R: "~@2 c5 ~@3 c5 ~@3 c5 ~@5",
  S: "~@15 e5", T: "~@10 eb5 ~@3 eb5 ~", U: "~@6 d6 ~@7 g5@2", V: "d6 ~ g5@2 ~@12", W: "~@6 g6 ~@8 b5",
})).s("gm_percussive_organ").gain(0.04).pan(0.9)

// bass · electric bass pick
const bass = note(`<
  A B C D C E C F G H G I J K L M@2 H G I N O L P G Q G R N S L T U V W X W Y Z AA AB AC W AD W AE Z AF AB AG AH AI AH
  AJ AH AK AL AM
>`.pickRestart({
  A: "f2", B: "~@6 d1 ~@3 eb1@2 ~@2 e1@2", C: "f1", D: "~@4 f2 ~@2 eb2!2 ~ eb2@2 d2@2 c2@2, ~@3 f2 ~@4",
  E: "~@4 d1 ~ d1@2 eb1 ~ eb1@2 e1 ~ e1@2", F: "~@4 f1 ~ f1 ~ f1 ~ f1 ~ f1@2 a1@2", G: "bb1@2 ~ bb1 f1@2 ~ f1",
  H: "bb1@4 ~@2 bb1@2 f1 ~ f1@2 g1@2 f1@2", I: "bb1@4 ~@2 bb1@2 d1 ~ d1@2 eb1@2 e1@2", J: "f1@2 ~ f1 c1@2 ~ c1",
  K: "f1@4 ~@2 f1 ~@3 f1@2 a1@4", L: "bb1 ~@7",
  M: "[~@2 f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~@2 bb1@4 ~@3 bb1@2 f1@4 ~@2 f1@2, ~@7 f1 ~@8]/2", N: "f1@2 ~ f1 c2@2 ~ c2",
  O: "f2@2 ~ eb2 f2 c2 f1 a1", P: "~@2 f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@2 a1@2", Q: "bb1@4 ~@2 bb1@2 f1 ~ f1@2 a1@2 f1@2",
  R: "bb1@3 ~ bb1 ~ bb1@2 d1 ~ d1@2 eb1@2 e1@2", S: "f2@4 ~@3 d2 f2@2 c2@2 f1@2 a1@2, ~@3 eb2 ~@4",
  T: "~@2 f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", U: "g1 ~@7", V: "~@2 g2 ~ g2 ~ g2 ~ g2@2 ~ g1@2 ~ b1@2, ~@5 d2 ~@2",
  W: "c2@2 ~ c2 g1@2 ~ g1", X: "c1@2 ~ c1 e1 g1 a1 g1, ~@8 eb1 ~@7", Y: "c1@2 ~@2 c1 ~ c1@2 e1 ~ e1@2 f1@2 gb1@2",
  Z: "g1@2 ~ g1 d1@2 ~ d1", AA: "g1@4 ~@2 g1 ~@3 g1@2 b1@2 g1@2", AB: "c2 ~@7",
  AC: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 b1@2", AD: "c1@4 ~ eb1 eb1@2 e1@2 g1@2 a1@2 g1@2",
  AE: "c1@4 ~@2 c1@2 e1 ~ e1@2 f1@2 gb1@2", AF: "g1@2 ~ g1 d1 g1 a1 d1", AG: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  AH: "g1", AI: "~@2 g1 ~ g1 ~ g1@2 e1@2 e1@2 f1@2 gb1@2", AJ: "~@2 g2 ~@3 f2@2 ~@2 e2@2 d2@2 c2@2",
  AK: "~@4 e1 ~ e1@2 f1 ~ f1@2 gb1 ~ gb1@2", AL: "g1@3 ~", AM: "g1 a1 b1 c2 ~@2 c1 ~",
})).s("gm_electric_bass_pick").gain(0.22).pan(0.6)

// chords · tenor sax
const tenor_sax = note("<~@16 A@4 B C D E A@4 F G D E H I J K L M N O P I Q@4 R S T I H I H I H U H V>".pickRestart({
  A: "~@2 [f3,ab3,bb3,d4] ~ [f3,ab3,bb3,d4]@2 [e3,g3,db4]@2 [f3,ab3,bb3,d4] ~@7", // Bb7 Dbdim Bb7
  B: "~@2 [f3,a3,c4,eb4] ~ [f3,a3,eb4]@2 [e3,b3,d4]@2 [f3,a3,c4,eb4] ~@7, ~@4 c4 ~@11", // F7 E7 F7
  C: "~@2 [f3,a3,c4,eb4] ~ [f3,a3,c4,eb4]@2 [e3,b3,d4]@2 [f3,a3,c4,eb4] ~@3 [f3,a3,c4,eb4] ~@3", // F7 E7 F7
  D: "[f3,ab3,bb3,d4] ~@15", E: "~@2 [f3,f4] ~ [f3,f4] ~ [f3,f4] ~ [f3,f4] ~ [f3,f4] ~ [f3,f4] ~ [f3,f4] ~",
  F: "~@2 [f3,a3,c4,eb4] ~ [f3,a3,c4,eb4]@2 [e3,d4]@2 [f3,a3,c4,eb4] ~@7", // F7 E7 F7
  G: "~@2 [f3,a3,c4,eb4] ~ [f3,a3,c4,eb4]@2 [e3,d4]@2 [f3,a3,c4,eb4] ~@3 [f3,a3]@2 ~@2, ~@12 [c4,eb4] ~@3", // F7 E7 F7 F Cm
  H: "[g3,g4] ~@15", I: "~@2 [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~",
  J: "~@2 [c4,e4] ~ [c4,e4]@2 eb4@2 [c4,e4] ~@7, ~@6 bb3 ~@9", // C
  K: "~@2 [bb3,c4,e4] ~ [bb3,c4,e4]@2 [a3,eb4]@2 [bb3,c4,e4] ~@7", // C7 Adim C7
  L: "~@2 [bb3,c4,e4] ~ [bb3,c4,e4]@2 [a3,eb4]@2 [c4,e4] ~@7", M: "~@2 [g3,c4,e4] ~ [c4,e4]@2 [b3,eb4]@2 [c4,e4] ~@7",
  N: "~@2 [b3,d4,f4] ~ [b3,d4,f4]@2 [db4,e4]@2 [b3,d4,f4] ~@7", // Bdim Dbm Bdim
  O: "~@2 [b3,d4,f4] ~ [b3,d4,f4]@2 [db4,e4]@2 [b3,d4,f4] ~@3 [b3,d4,f4] ~@3", P: "[bb3,c4,e4] ~@15",
  Q: "~@2 [g3,bb3,c4,e4] ~ [g3,bb3,c4,e4]@2 [gb3,a3,eb4]@2 [g3,bb3,c4,e4] ~@7", // C7 Ebdim C7
  R: "~@2 [g3,b3,d4,f4] ~ [g3,b3,d4,f4]@2 [gb3,db4,e4]@2 [g3,b3,d4,f4] ~@7", // G7 Gb7 G7
  S: "[g3,b3,d4,f4]@2 [gb3,db4,e4]@2 [g3,b3,d4,f4] ~@7 [g3,b3,d4,f4] ~@3", T: "[g3,bb3,c4,e4] ~@15",
  U: "~@4 [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~", // G
  V: "[bb3,e4,g4]@2 [a3,eb4,gb4]@2 [ab3,d4,f4]@2 [g3,c4] ~@5 [bb3,c4,e4,g4]@2 ~@2, ~@3 e4 ~@4", // Edim Ebdim Ddim C5 C7
})).s("gm_tenor_sax").gain(0.18).pan(0.8)

// chords · piano
const piano = note(`<
  A@6 B@2 C D E F G H I J K L M N O P Q R S@2 T@2 U V W X Y Z AA AB AC AD AE AF AG AH AA AB AC AI AJ AF AG AH AK@2 AL@2
  AM@2 AN@2
>`.pickRestart({
  A: "[~@2 f4 ~ [db5,d5,f5] ~ [eb5,g5] ~ [db5,d5] [d5,f5] [f4,bb4] ~ [eb4,bb4]@2 [db4,bb4] ~ [d4,bb4]@15 ~, [f2,f3]@31 ~]/2", // Db Eb Dmaj7 Dm Bb5 Eb5 Gb Gm …
  B: "[~@2 f4 ~ [db5,d5,f5] ~ [eb5,g5] ~ [db5,d5] [d5,f5] [f4,bb4] ~ [eb4,bb4]@2 [db4,bb4] ~@3 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3]@2 [f2,f3] ~, [f2,f3]@9 ~@7, ~@16 [d4,bb4]@15 ~]/2", // Db Eb Dmaj7 Dm Bb5 Eb5 Gb F …
  C: "bb2 ~ bb2@2 [bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~, ~@4 ab3 ~@7 ab3 ~@3", // Bb Bb7 Bb Bb7
  D: "bb2 ~ bb2@2 [ab3,bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [bb3,d4]@2 [ab3,bb3,d4,f4] ~, ~@12 [ab3,f4] ~@3", // Bb7 Bb Bb7 Db
  E: "bb2 ~ bb2@2 [bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~, ~@4 ab3 ~@11", // Bb Bb7
  F: "bb2 ~ bb2@2 [ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~ d2 ~ d2@2 [eb2,ab3,bb3,d4,f4]@2 e2 ~", // Bb7
  G: "f2 ~ f2@2 [f3,eb4,ab4,a4] ~ [g2,bb4,d5]@2 ab4 ~ c3@2 [eb4,d5] ~ c3@2, ~@4 c5@2 [f2,f4] ~ [c2,a4,c5]@4 bb4@2 ~@2", // F7 Gm Ebmaj7 F
  H: "[g4,c5,eb5]@2 f3@2 [bb2,f4,d5] ~ eb4@2 ~@2 [bb4,d5]@2 [f3,eb4,ab4,a4,c5] ~ f3@2, f2@4 [c3,bb4]@2 [a4,c5]@4 eb4 ~@5, ~@6 ab4 ~ f2@4 ~@4", // Cm Bb F7 C7 Am
  I: "[bb2,bb3]@2 bb4 ~ [db5,d5,f5] ~ g5@2 [db5,f5,gb5] d5 bb4 ~ eb4@2 db4 ~, ~@6 eb5 ~@5 bb4 ~@3", // Bb Db Gbmaj7
  J: "[d4,bb4]@2 [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f4] ~, ~@7 f3", // Gm F
  K: "bb2 ~ bb2@2 [bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [ab3,bb3,d4,f4]@2 [ab3,bb3,d4,f4] ~, ~@4 ab3 ~@11", // Bb Bb7
  L: "bb2 ~ bb2@2 [bb3,d4]@2 [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [ab3,bb3,f4]@2 [ab3,bb3,d4,f4] ~, ~@4 [ab3,f4] ~@7 d4 ~@3", // Bb Bb7 Db
  M: "bb2 ~ bb2@2 [ab3,d4,f4] ~ [ab3,bb3,d4,f4] ~ f2 ~ f2@2 [ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~, ~@2 bb3 ~@5", // Ddim Bb7
  N: "bb2 ~ bb2@2 [ab3,bb3,d4,f4] ~ [ab3,bb3,d4]@2 d2 ~ d2@2 [eb2,ab3,bb3,d4,f4]@2 e2 ~, ~@6 f4 ~@9", // Bb7
  O: "f2 ~ f2@2 [f3,eb4,ab4,a4] ~ g2 ~ [c2,f4,bb4,d5] ~ [c2,eb4,a4,c5]@2 c3 ~ [c3,g4,c5,eb5] ~, ~@4 c5@2 ~@4 ab4 ~@5", // F7 Bb Adim Cm
  P: "~@2 [g4,c5,eb5] ~ [f4,bb4,d5] ~ c3@2 [eb4,a4]@2 f2@2 [f3,eb4,ab4,a4,bb4] ~ f3@2, f2@4 f3@2 ~@2 c5@5 ~@3, ~@8 [f2,ab4] ~@7", // Cm Bb Ebdim Fm
  Q: "bb2@2 bb4 ~ [db5,d5,f5] ~ g5@2 [db5,f5] d5 bb4 ~ eb4@2 db4 ~, ~@6 eb5 ~@5 bb4 ~@3", // Db
  R: "[d4,bb4] ~@5 [d5,d6] [db5,db6], ~@12 [db5,db6] ~@3", // Gm D Db
  S: "[[bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb4,bb5]@2 [bb5,f6,bb6] ~ [bb4,bb5,f6] ~ [bb4,bb5]@2 [f6,bb6] ~ [db5,bb5,db6,f6,bb6] ~ [bb5,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [d5,bb5,d6,f6,bb6] ~ [f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~, [d5,d6]@2 [c5,c6]@2 [f6,bb6] ~ [g4,g5]@2 bb6@2 [f6,bb6] ~ bb5@2 [d5,d6]@7 ~@7 [d5,d6]@2 [db5,db6]@2, ~@8 f6 ~@3 bb5 ~@3]/2", // Bb5 Bb Bb5 Bb Bb5 Bbm Bb Bb5 …
  T: "[[bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb4,bb5]@2 [g4,g5,bb5,f6,bb6] ~ [bb4,bb5]@2 [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~ [bb5,f6,bb6] ~, [d5,d6]@2 [c5,c6]@2 [f6,bb6] ~@3 [f6,bb6] ~@3 [g4,g5]@2 [f4,f5]@6 ~@12]/2", // Bb5 Bb Gm7 Bb Bb5 D C Bb5 …
  U: "[f5,g5,f6] ~ [f5,c6,f6] ~ [c5,f5,c6]@2 [f5,c6,f6] ~ [c5,f5,c6]@2 [bb4,bb5]@2 [c5,c6]@2 [bb4,bb5]@2, [c5,c6]@2 ~@2 f6 ~@3 f6 ~ [c6,f6] ~ f5@4, ~@12 f6 ~ [c6,f6] ~", // Fsus2 F5 Bb C Bb C F5
  V: "[c5,c6,f6] ~ [c5,f5,c6]@2 [bb4,bb5]@2 [c5,c6]@2 [c6,f6] ~ [f5,c6,f6] ~@5, f5@2 f6 ~ [c6,f6] ~ [f5,f6] ~ f5@2 ~@6", // F5 Bb C F5 F
  W: "~@2 bb4 ~ [db5,d5,f5] ~ g5@2 [db5,f5] d5 bb4 ~ eb4@2 db4 ~, ~@6 eb5 ~@5 bb4 ~@3", // Db
  X: "[d4,bb4]@2 [f2,f3] ~ [f2,f3,f4] ~ [f2,f3] ~ [f2,f3] ~ [f2,f3,f4] ~ [f2,f3,f4] ~ [f2,f3,f4] ~, ~ f4 ~ f4!2 ~@3", // Gm F
  Y: "~@2 c5 ~ [eb5,e5,g5] ~ a5@2 [eb5,g5] e5 c5 ~ [f4,c5] ~ eb4@2, [g2,g3], ~@6 f5 ~@7 c5 ~", // Eb F5 G
  Z: "[e4,c5]@2 [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~, ~@3 g4 ~@4", // C G
  AA: "c3 ~ c3@2 [c4,e4,g4]@2 [bb3,c4,e4,g4] ~ g2 ~ g2@2 [bb3,c4,e4,g4]@2 [bb3,c4,e4,g4] ~, ~@4 bb3 ~@11", // C C7
  AB: "c3 ~ c3@2 [bb3,c4,e4,g4]@2 [bb3,c4,e4,g4] ~ g2 ~ g2@2 [c4,e4]@2 [bb3,c4,e4,g4] ~, ~@12 [bb3,g4] ~@3", // C7 C C7 Eb
  AC: "c3 ~ c3@2 [c4,e4,g4]@2 [bb3,c4,e4,g4] ~ g2 ~ g2@2 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~, ~@4 bb3 ~@11", // C C7
  AD: "c3 ~ c3@2 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~ e2 ~ e2@2 [bb3,c4,e4,g4]@2 gb2 ~, ~@12 f2 ~@3", // C7
  AE: "g2 ~ g2@2 [g3,f4,bb4,b4,d5] ~ [a2,c5,e5]@2 bb4 ~ d3@2 [f4,e5] ~ d3@2, ~@6 [g2,g4] ~ [d2,b4,d5]@4 c5@2 ~@2", // G7 Am Fmaj7 G
  AF: "[a4,d5,f5]@2 g3@2 [c3,g4,e5] ~ f4@2 ~@2 [c5,e5]@2 [g3,f4,bb4,b4,d5] ~ g3@2, g2@4 [d3,c5]@2 [b4,d5]@4 f4 ~@5, ~@6 bb4 ~ g2@4 ~@4", // Dm C G7 D7 Bm
  AG: "[c3,c4]@2 c5 ~ [eb5,e5,g5] ~ a5@2 [eb5,g5,ab5] e5 c5 ~ f4@2 eb4 ~, ~@6 f5 ~@5 c5 ~@3", // C Eb Abmaj7
  AH: "[e4,c5]@2 [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g3,g4] ~ [g2,g4] ~, ~@7 g3", // C G
  AI: "c3 ~ c3@2 [bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~ e2 ~ e2@2 [f2,bb3,c4,e4,g4]@2 gb2 ~", // C7
  AJ: "g2 ~ g2@2 [g3,f4,bb4,b4] ~ [a2,c5,e5]@2 bb4 ~ d3@2 [f4,e5] ~ d3@2, ~@4 d5@2 [g2,g4] ~ [d2,b4,d5]@4 c5@2 ~@2", // G7 Am Fmaj7 G
  AK: "[c3 ~ c5 ~ [eb5,e5,g5] ~ a5@2 [eb5,g5] e5 c5 ~ [f4,c5] ~ [eb4,c5] ~ [e4,c5]@16, [g2,g3]@29 ~@3, ~@6 f5 ~@25]/2", // Eb F5 Cm C G
  AL: "[ab2 ~ c5 ~ [eb5,g5] e5 a5@2 [eb5,g5] e5 c5 ~ [f4,c5] ~ eb4@2 [e4,c5]@16, [g2,g3]@29 ~@3, ~@6 f5 ~@7 c5 ~@17]/2", // Eb F5 C G
  AM: "[~@2 c5 ~ [eb5,e5,g5] ~ a5@2 [eb5,g5] e5 c5 ~ [f4,c5] ~ eb4@2 [e4,c5]@16, [g2,g3]@29 ~@3, ~@6 f5 ~@7 c5 ~@17]/2", // Eb F5 C G
  AN: "[~@2 c5 ~ [eb5,e5,g5] ~ a5@2 [eb5,g5] e5 c5 ~ [f4,c5] ~ eb4@2 e4@2 c4 ~ bb3 c4 c4@2 ~@4 [c2,c3,c5,c6]@2 ~@2, [g2,g3]@5 ~@3, ~@6 f5 ~@7 c5 ~ c5 ~@15]/2", // Eb F5 C G
})).s("gm_piano").gain(0.22).pan(0.3)

// bass · baritone sax
const bass_2 = note("<~@16 A@4 B C D E F A@3 B C D E ~ G H@4 I J K G H@4 L M N G O P Q P Q R Q S>".pickRestart({
  A: "~@2 bb1 ~ bb1@2 a1@2 bb1 ~@7", B: "~@2 f2 ~ f2@2 e2@2 f2 ~@7", C: "~@2 f2 ~ f2@2 e2@2 f2 ~@3 f2 ~@3",
  D: "bb1 ~@7", E: "~@2 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", F: "~@2 [bb1,b1] ~ bb1@2 a1@2 bb1 ~@7",
  G: "~@2 g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", H: "~@2 c2 ~ c2@2 b1@2 c2 ~@7", I: "~@2 [f2,g2] ~ g2@2 gb2@2 g2 ~@7",
  J: "~@2 g2 ~ g2@2 gb2@2 g2 ~@3 g2@2 ~@2", K: "c2 ~@7", L: "~@2 g2 ~ g2@2 gb2@2 g2 ~@7",
  M: "g2@2 gb2@2 g2 ~@5 g2 ~ gb2@2 g2@2", N: "c2 ~@15", O: "g2 ~@15", P: "~@2 g2 ~ g2 ~ g2 ~ g2 ~ g2@2 f2@2 gb2@2",
  Q: "g2 ~@7", R: "g2 ~@4 f2 gb2 f2", S: "g2 ~ g2 ~ g2@2 c2@2 ~@4 c2@2 ~@2",
})).s("gm_baritone_sax").gain(0.13).pan(0.2)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@7 A ~ B ~@7 B ~@7 B ~ B ~ C ~@4>".pickRestart({
  A: "~ x!3 ~@4", B: "~ x!2 ~@5", C: "~ x ~@6",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@6 B A ~ A ~@7 A ~@5 A ~@3 A ~ A ~@3>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A B A B C ~ A B A B A B C ~ A B A B A B C ~@3 B@6 C ~ B@6 C ~ C D C D C A C E
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x", D: "~ x!7", E: "x!2 ~ x ~@4",
})).gain(0.25)

// drums · mid tom
// … 35 more lines

More by Johnny Rivers