Strudelify

Centerfold

The J. Geils Band

KeyD♭ majorTempo117 bpm
0:00/0:00
// Centerfold — The J. Geils Band
// 117 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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
const piano = note("<~@8 A B C B C D A B ~@12 E D C D C F G F ~@20 E B C B A D C H ~@38>".pickRestart({
  A: "[ab4,c5,eb5]@2 ~@2 [ab4,c5,eb5]@2 ~@4 [gb4,bb4,db5] ~ [gb4,bb4,db5]@2 ~@2", // Ab Gb
  B: "~@2 [ab4,db5,f5] ~ [ab4,db5,gb5] ~ [ab4,db5,f5] ~", // Db Dbsus4 Db
  C: "[ab4,c5,eb5]@3 ~ [ab4,c5,eb5]@2 ~@4 [gb4,bb4,db5] ~ [gb4,bb4,db5]@2 ~@2", // Ab Gb
  D: "~@4 [ab4,db5,f5]@2 ~@2 [ab4,db5,gb5]@2 ~@2 [ab4,db5,f5]@3 ~", // Db Dbsus4 Db
  E: "~@4 [ab4,c5,eb5]@2 ~@4 [gb4,bb4,db5] ~ [gb4,bb4,db5]@2 ~@2", // Ab Gb
  F: "~@4 [ab4,db5,f5]@3 ~ [ab4,db5,gb5]@2 ~@2 [ab4,db5,f5]@3 ~", // Db Dbsus4 Db
  G: "[ab4,c5,eb5]@3 ~ [ab4,c5,eb5]@3 ~@3 [gb4,bb4,db5] ~ [gb4,bb4,db5]@2 ~@2", // Ab Gb
  H: "~@4 [ab4,db5,f5]@2 ~@2 [ab4,db5,gb5]@3 ~ [ab4,db5,f5]@3 ~", // Db Dbsus4 Db
})).s("gm_piano").gain(0.46)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B C D E F G H I B I J K L M L E B G N I B I O P Q P R S T U V M L M L E B G W I B X Y Z Q Z D AA Q Z D E B G W I
  B X J K L M L E B G H I B X W AB AC@2 AD Z Q Z D Z Q Z AE Z Q Z AF Z Q Z AE Z Q Z AE AG ~
>`.pickRestart({
  A: "ab1@3 ~ ab1@3 ~@2 gb1 gb1@2 gb1@2 ~@2", B: "db2@3 ~ db2@2 ~@3 db2 f1@2 gb1@2 g1@2",
  C: "ab1@3 ~ ab1@3 ~@2 gb1 gb1@2 gb1@3 ~", D: "db2@4 db2@2 eb2 e2 f2 ~ bb2 ~ ab2@3 ~",
  E: "ab1@3 ~ ab1@2 ~@4 gb1@2 gb1@2 ~@2", F: "db2@3 ~ db2@2 ~@3 db2 f1@2 gb1 ~ g1@2",
  G: "ab1@3 ~ ab1@2 ~@4 gb1@2 gb1@3 ~", H: "db2@3 ~ db2@2 eb2 e2 f2 ~ bb2 ~ ab2@2 ~@2",
  I: "ab1@3 ~ ab1@2 ~@4 gb1 ~ gb1@2 ~@2", J: "db2@3 ~ db2@2 b2 c3 db3@2 db2@2 eb2@2 e2@2",
  K: "[f1,f2]@2 f2 ~ f1@2 f2 ~ f1@2 f2 ~ f1@2 f2 ~", L: "bb1@2 bb2 ~ bb1@2 bb2 ~ db2@2 db3 ~ eb2@2 eb3 ~",
  M: "f1@2 f2 ~ f1@2 f2 ~ f1@2 f2 ~ f1@2 f2 ~", N: "db2@4 db2@2 eb2 e2 f2@2 [ab2,bb2] ~ ab2@3 ~",
  O: "db2@3 ~ db2@2 eb2 e2 f2 ~ bb2 ~ ab2@3 ~", P: "ab1@3 ~ ab1@2 ~@3 gb1 gb1@2 gb1@2 ~@2",
  Q: "db2@4 db2@2 ~@3 db2 f1@2 gb1@2 g1@2", R: "db2@4 db2 ~ eb2 e2 f2 ~ bb2 ~ ab2@3 ~",
  S: "ab1@4 ab1@2 ~@3 gb1 gb1@2 gb1@2 ~@2", T: "db2@3 ~ db2@2 ~@3 db2 f1@2 gb1@2 g1 ~",
  U: "ab1@3 ~ ab1@2 ~@3 gb1!2 ~ gb1@2 ~@2", V: "db2@5 ~ ab2@2 db3 ~ db2 ~ eb2 ~ e2 ~",
  W: "db2@3 ~ db2@2 eb2 e2 f2@2 bb2 ~ ab2@3 ~", X: "ab1@4 ab1@2 ~@4 gb1 ~ gb1@2 ~@2",
  Y: "db2@3 ~ db2@2 eb2 e2 [eb2,f2] ~ bb2 ~ ab2@3 ~", Z: "ab1@4 ab1@3 ~@2 gb1 gb1@2 gb1@3 ~",
  AA: "ab1@4 ab1@4 ~ gb1 gb1@2 gb1@3 ~", AB: "ab1@2 ~@6 gb1@3 ~@5", AC: "[db2@2 ~@8 f1 gb1 ab1@20]/2",
  AD: "~@6 ab2 ab1, ~@14 bb1 ~", AE: "db2@4 db2@2 eb2 e2 f2@2 bb2 ~ ab2@3 ~", AF: "db2@4 db2@2 ~@4 eb2 e2 f2@2 ~@2",
  AG: "ab1",
})).s("gm_acoustic_bass").gain(0.51)

// other · drawbar organ
const drawbar_organ = note(`<
  ~@19 A B ~@2 C D ~@2 E ~@2 F ~ F ~ G ~@4 A B ~@2 C D ~@2 E H I J I K I L I ~@2 F ~ F ~ G ~@4 A M ~@2 N O ~@2 P K Q@2 ~
  K I K I R S T U K I V I V I W X W Y W Y Z@2
>`.pickRestart({
  A: "~@7 ab4", B: "c5 ~ eb5@3 ~ f5@2 ~@8", C: "f4@2 ab4 ~ ab4@2 f4 ~ bb4 c5 ab4@2 ~@2 ab4 ~", D: "c5 ~ eb5@4 f5@2 ~@8",
  E: "f4@2 ab4 ~ ab4@2 f4 ~ bb4 c5 ab4@5 ~", F: "[ab5,c6,eb6]@7 ~@9", G: "[ab5,c6,eb6] ~",
  H: "c5@4 eb5@3 c5 bb4 ~ ab4 ~ ab4@2 ~ ab4", I: "f4@2 ab4 ~ ab4@2 f4 ab4 bb4@2 ab4 ~ ab4@2 bb4 ~",
  J: "c5@4 eb5@3 c5 bb4@2 ab4 ~ ab4@3 ab4", K: "c5@4 eb5@3 c5 bb4@2 ab4 ~ ab4@2 ~ ab4, b4 ~@15",
  L: "c5@4 eb5@2 ~ c5 bb4@2 ab4 ~ ab4@2 ~ ab4, b4 ~@15", M: "c5 ~ eb5@3 ~ f5@4 ~@6",
  N: "f4@2 ab4 ~ ab4@2 f4 ~ [b4,c5] ~ ab4@3 ~ ab4 ~", O: "c5 ~ eb5@3 ~ f5@3 ~@7",
  P: "f4@2 ab4 ~ ab4@2 f4 ~ [ab4,b4,c5] ~ ab4@3 ~@3", Q: "[f4@2 ab4 ~ ab4@2 f4 ab4 bb4@2 f4@2 ab4@20]/2",
  R: "[c5,f5]@4 eb5 ~@2 c5 [bb4,f5]@2 [ab4,eb5] ~ [ab4,eb5]@2 ~ [ab4,eb5], b4 ~@15", // F5 Bb5 Ab5
  S: "[f4,eb5]@2 [ab4,db5] ~ [ab4,db5]@2 f4 [ab4,db5] bb4 ~ ab4 ~ ab4 ~ bb4 ~", // F7 Db5
  T: "[c5,f5]@4 eb5 ~@2 c5 [bb4,f5]@2 [ab4,eb5] ~ [ab4,eb5]@2 ~ [ab4,eb5], [b4,eb5] ~@15", // F5 Bb5 Ab5 B
  U: "[f4,eb5]@2 [ab4,db5] ~ [ab4,db5]@2 f4 [ab4,db5] [bb4,c5,db5] ~ ab4 ~ ab4@2 bb4@2", // F7 Db5 Bbm
  V: "c5@3 ~ eb5@3 c5 bb4@2 ab4 ~ ab4@2 ~ ab4, b4 ~@15",
  W: "[c5,c6]@4 [eb5,eb6]@3 [c5,c6] [bb4,bb5]@2 [ab4,ab5] ~ [ab4,ab5]@2 ~ [ab4,ab5], b4 ~@15", // C Eb C Bb Ab
  X: "[f4,f5]@2 [ab4,ab5] ~ [ab4,ab5]@2 [f4,f5] [ab4,ab5] [bb4,bb5]@2 [ab4,ab5] ~ ab4@2 bb4@2, ~@12 ab5 ~ bb5 ~", // F Ab F Ab Bb Ab
  Y: "[f4,f5]@2 [ab4,ab5] ~ [ab4,ab5]@2 [f4,f5] [ab4,ab5] [bb4,bb5]@2 [ab4,ab5] ~ [ab4,ab5]@2 [bb4,bb5] ~", // F Ab F Ab Bb Ab Bb
  Z: "[c6@3 ~ eb6@2 ~ c6 bb5@2 ab5 ~ ab5@2 ~ ab5 f5@2 ab5 ~ ab5@2 f5 ab5 bb5@2 ab5 ~ ab5@2 ~@2, ab4@5 ~@3]/2",
})).s("gm_drawbar_organ").gain(0.46)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B C D E F G H I J K L ~@4 M N O P Q R S T U V W X Y Z AA AB ~@4 AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ ~@4 BA BB BC BD BE BF BG BH BI BJ@2 ~ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC
  CD CE@2
>`.pickRestart({
  A: "[g4,ab4] ab4@3 [eb3,ab3,c4,eb4,ab4]@2 ~ [gb2,db3,gb3,bb3,db4] [gb3,bb3,db4,gb4] [db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ab2@3 ~@5, [eb3,ab3,c4,eb4] ~@3", // Abmaj7 Ab Gb Ab
  B: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,db4,f4] [g2,db3,ab3,db4,f4] [ab3,db4] [ab3,db4,f4]@2 [g2,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4] [eb3,bb3,b3,eb4], g2 ~@3 g2 ~@5 db3@4 ~@2", // Db Db5 Db Bmaj7
  C: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 [d4,eb4] [gb2,db3,gb3,bb3,db4,f4] [db3,gb3,bb3,db4]!2 [db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ~@7 gb4@4 ~@5, ~@2 gb2 ~", // Ab Ebmaj7 Gbmaj7 Gb
  D: "[ab2,db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [ab3,db4,f4] [ab2,db3,ab3,db4,f4] [ab3,db4,f4] [ab2,db3,ab3,db4,f4]@2 [e2,ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] eb3, ~@4 ab2 ~@11", // Db
  E: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 [db3,d3] [gb2,db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@9 gb4@3 ~@4", // Ab Dmaj7 Gb
  F: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [ab2,db3,ab3,db4,f4] [e2,ab2,db3,ab3,db4,f4] [ab2,ab3,db4,f4] [ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] eb3, ab2 ~@15", // Db
  G: "ab3@2 ab3 ~ [eb3,ab3,c4,eb4]@2 [d3,g4] [gb2,db3,gb3,bb3,db4,gb4]!2 [db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4,gb4] ~@3, [ab2,ab4]@3 ~@5, [eb3,c4,eb4]@4 ~@5 gb4@3 ~@4", // Ab G5 Gb Ab Cm
  H: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [g2,ab3,db4,f4] [ab2,db3,ab3,db4,f4]!2 [db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] a2, ~@4 e2 ~@11", // Db
  I: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 d4 [d3,db4,gb4] db4 [gb3,bb3,db4,gb4] ~ gb3 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ab2@6 ~ [gb2,db3,gb3,bb3]@3 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@4", // Ab Dmaj7 Gb
  J: "[ab2,bb4] g2 ~@2 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] [g2,ab2,ab3,db4,f4] [ab2,db3,ab3,db4,f4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4] [a2,eb3,d4,eb4], [db3,ab3,db4,f4]@4 ab2 ~@11", // Absus2 Db D Db
  K: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 g4 [db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ~@9 gb2@3 ~@4", // Ab Gb
  L: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [ab3,db4,f4] [ab2,db3,ab3,db4,f4] [ab3,db4,f4] [ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] ~@3, ~@9 db3@3 ~@4", // Db
  M: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 d4 [gb2,db3,gb3,bb3,db4,f4] [gb2,db3,gb3,bb3,db4,gb4]!2 [gb2,db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~ g4 ~", // Ab Gbmaj7 Gb
  N: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] [ab2,db3,ab3,db4,f4] [g2,db3,ab3,db4] [ab2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [a2,eb3], ~@4 g2 ~@11", // Db Adim
  O: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 db3 [gb2,db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4,gb4]!2 [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ~@9 gb2@3 ~@4", // Ab Gb
  P: "[db3,ab3,db4,f4]@4 [g2,db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4] [ab3,db4,f4] [db3,ab3,db4,f4] [db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] e4, ~@4 [ab4,a4] ~@11", // Db Amaj7
  Q: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 d3 [db3,gb3,bb3,db4,gb4,g4] [db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4]@2 ~@2, ab2@6 ~ gb2@6 ~@3", // Ab Gb
  R: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4]!2 [ab3,db4,f4] [e2,db3,ab3,db4,f4]@2 [e2,ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] [a2,eb3,d4,eb4], e2 ~@15", // Db D
  S: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~ [d3,gb3,bb3,db4] [gb3,bb3,db4,gb4] [db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ~@7 gb2@4 ~@5, ~@7 db3@2 ~@7", // Ab Gb
  T: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [g2,ab3,db4,f4] [g2,db3,ab3,db4,f4] [g2,ab3,db4,f4] [e2,ab2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2", // Db
  U: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 d4 [d2,d3] ~ [gb2,db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ~@9 gb4@3 ~@4", // Ab D Gb
  V: "[db3,ab3,db4,f4]@4 [g2,db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4] [g2,ab2,db3,ab3,db4,f4] [ab2,db3,ab3,db4] [eb2,e2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [a2,eb4,e4]", // Db Db5 Db A
  W: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 d4 ~@2 [gb3,bb3,db4] [gb2,db3,gb3,bb3,db4]@2 ~ a3 ~@2, ~@7 [db4,gb4]@2 gb4@3 ~@4, ~@4 [gb2,db3,gb3,bb3] ~ [db3,gb3,bb3,db4,gb4] ~", // Ab Gb Gb5 Gb
  X: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4,bb4] [ab3,db4] [g2,ab3,db4] [ab3,db4,f4]@2 [e2,db3,ab3,db4,f4,a4]@2 [e2,db3,ab3,db4,f4] [eb3,gb3,g3,eb4,e4], ~@2 db3 ~, ~@4 f4 ~@3", // Db Gm7b5 Db5 Db Amaj7 Db
  Y: "~ ab4@2 ~ [ab2,eb3,ab3,c4,eb4,ab4]@2 [db3,d3,db4] [gb2,db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4] [gb2,db3,gb3,bb3] [gb2,gb3,bb3,db4,gb4]@2 [gb2,c3,db3,gb3,bb3,db4] ~@3, [ab2,eb3,ab3,c4,eb4]@4 ~@6 db3 ~@5", // Ab Dmaj7 Gb Ab
  Z: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [e2,db3,ab3] [e2,db3,ab3,db4,f4] [ab3,db4,f4] ~ ab2 [eb2,e2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4,a4,bb4] [d3,eb3], ~@5 [e2,db3,ab3,db4,f4] ~@2", // Db Dbm Db Amaj7 Ebmaj7 Db
  AA: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~ [gb2,db3,gb3,bb3,db4]!2 [db3,gb3,bb3] [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4] ~@3, ~@5 gb4@2 ~", // Ab Gb
  AB: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] ~ db3 [e2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4]@2 [e2,g2,db3,ab3,db4,f4] ~, g2 ~@3 ab2 ~@3 [db3,ab3,db4,f4]@2 ~@6", // Db
  AC: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 d3 [db3,gb3,bb3]!2 [gb2,db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4]@2 ~ db3 ~@2, ab2@6 ~ [gb2,db4]@2 ~@3 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, g4 ~@6 gb4@5 ~@4", // Ab Gb Gb5 Gb
  AD: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4] [db3,ab3,db4,f4] [g2,ab3,db4,f4,a4] [ab2,ab3,db4,f4]@2 [ab3,db4,f4]@2 [g2,ab2,db3,ab3,db4,f4] [eb3,eb4], ~@4 ab2 ~@5 db3@4 ~@2", // Db Eb
  AE: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 g4 [gb2,db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4]!2 [db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ~@2 [gb2,gb4] ~", // Ab Gb
  AF: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4]!2 [ab3,db4,f4] [e2,ab2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [a2,eb3], e2 ~@3 ab2 ~@11", // Db Adim
  AG: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@3 ~ [bb3,db4] [db3,gb3,bb3,db4] [db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4]@3 g4, ~@7 [db3,d4]@2 gb2@3 ~@4, ~@5 gb4@3", // Ab Bbm Gb Dmaj7
  AH: "[ab3,db4,f4]@3 ~ [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] ~ [g2,ab3,db4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] [eb3,eb4], [e2,db3] ~@3 g2 ~@3 [db3,ab3,db4,f4]@2 ~@6", // Db Eb Dbm Db
  AI: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@3 [e2,db3,gb3] [gb2,db3,gb3,bb3,db4] [db3,gb3,bb3] [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2", // Ab Gb7 Gb
  AJ: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [ab3,db4,f4] ~ db3 [g2,db3,ab3,db4,f4,a4,bb4]@2 [ab2,db3,ab3,db4,f4] ~@3, ab2 ~@3 db2 ~@3 [g2,db3,ab3,db4,f4]@2 ~@6", // Db Gm7b5 Db
  AK: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 [d3,eb4] [gb2,db3,gb3,bb3,db4,gb4] [gb2,db3,gb3,gb4] [gb2,db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4] db3 [gb2,db3,gb3,bb3,db4,gb4] ~@3", // Ab Ebmaj7 Gb Gb5 Gb
  AL: "[ab2,db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] [ab3,db4,f4] [g2,db3,ab3,db4,f4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4] [a2,d3,eb3,eb4,e4], ~@4 ab2 ~@11", // Db Asus4
  AM: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4]@2 ~ [gb2,db3,gb3,bb3,db4] [db3,gb3,bb3,db4,gb4] [gb2,gb3,bb3] [gb2,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ab4@6 ~@3 db3@3 ~@4", // Ab Gb
  AN: "[ab2,db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] [ab2,db3,ab3,db4,f4] [db3,db4,f4] [db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4,a4]@2 [ab2,db3,ab3,db4,f4] [a2,eb3]", // Db Amaj7 Db Adim
  AO: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~ [gb2,db3,gb3,bb3,db4] [gb2,db3,gb3,bb3,db4,gb4] [db3,gb3,bb3] [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@9 gb2@4 ~@3", // Ab Gb
  AP: "[g2,db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [g2,ab3,db4,f4] ~ [ab3,db4] [db3,ab3,db4,f4]@2 [e2,ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] [eb3,eb4], ~@4 [db3,ab3,db4,f4] ~@3", // Db Db5 Db Eb Db
  AQ: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 d3 [gb2,db3,gb3,bb3,db4]!2 [db3,gb3,bb3] [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2", // Ab Gb
  AR: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4]!2 [g2,ab3,db4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [e2,db3,ab3,c4,db4,f4] eb3", // Db Dbmaj7
  AS: "~ ab4@3 [ab2,eb3,ab3,c4,eb4,ab4]@2 g4 [db3,gb3,bb3] ~ [db3,gb3] [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4] ~@3, [ab2,eb3,ab3,c4,eb4]@4 ~@3 gb2@5 ~@4, ~@4 [db3,gb3,bb3,db4] ~@3", // Ab Gb Gb5 Gb Ab Gb
  AT: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4,a4] [ab2,db3,ab3,db4,f4] [db3,ab3,db4,f4] [db3,ab3,db4,f4,ab4]@2 [ab2,db3,ab3,db4,f4]@2 [e2,db3,ab3,db4,f4] [eb3,eb4,e4]", // Db Emaj7
  AU: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4]@2 ~ [gb2,db3,gb3,bb3,f4] [db3,gb3,bb3]!2 [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@7 gb4@5 ~@4, ~@7 db4@3 ~@6, ~@8 gb2@5 ~@3", // Ab Gbmaj7 Gb
  AV: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@3 [g2,db3,ab3,db4,f4] [ab3,db4,f4] [db3,ab3,db4,f4] [db3,ab3,db4,f4]@2 [e2,ab2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [d3,eb3], g2 ~@7", // Db Ebmaj7
  AW: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 db3 [gb2,db3,gb3,bb3,db4] [gb2,bb3] bb3 [gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4] ~@3, b3 ~@7 [db3,gb4]@5 ~@3, ~@4 [gb3,db4] ~@3, ~@9 gb2@3 ~@4", // Ab Gb Gb5
  AX: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 ~ [ab2,ab3,db4]@2 [ab2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4] [g2,ab3,db4,f4] [g2,db3,ab3,db4,f4] eb3, ~@4 ab2 ~@2 [db3,f4]@2 ~@7", // Db Db5 Db
  AY: "[ab2,eb3,ab3,c4,eb4]@4 ~ d4 ~@2 [db3,gb3,bb3,db4]!2 [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ~@2 [ab2,eb3,ab3,c4,eb4,ab4] ~ gb4@2 ~@2, ~@4 gb2 ~@3", // Ab Gb Ab
  AZ: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@3 [db3,ab3,db4,f4] [ab2,ab3,db4,f4] [ab3,db4,f4] [ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4] ~@3, g2 ~@3 [g2,ab2] ~@3 db3@4 ~@4, ~@9 ab2@3 ~@4", // Db Abmaj7
  BA: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 g3 ~@3 [gb2,db3,gb3,bb3,db4]@2 [gb2,db3,gb3,bb3,db4] ~@3, ~@5 gb4@2 ~", // Ab Gb
  BB: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4] [db3,ab3,db4,f4] [g2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4] ~, [g2,ab2] ~@15", // Db Abmaj7
  BC: "[eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~@3 [db3,gb3,bb3] [gb2,db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~ ab4 ~, ab2 ~@7 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@6", // Ab Gb
  BD: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [g2,db3,ab3,db4,f4] [db3,ab3,db4,f4] [ab2,db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4] [e2,a2,d3,eb3,ab3]", // Db
  BE: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 g3 ~@3 [gb2,db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@2, ab2@3 ~@5", // Ab Gb
  BF: "[db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@4 [e2,ab2,db3,ab3,db4,f4] [g2,ab3,db4,f4] [ab2,db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4]@2 [ab3,db4,f4] [eb3,eb4]", // Db Eb
  BG: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~@2 [gb3,bb3,db4]!2 [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@4 gb2@3 ~, ~@4 [db3,gb4] ~@3", // Ab Gb Gb5
  BH: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [db3,ab3,db4,f4] [g2,db3,ab3,db4,f4] [g2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] f4, ~@4 g2 ~@11", // Db
  BI: "[ab2,eb3,ab3,c4,eb4,ab4]@3 ~@5 [gb2,db3,gb3,bb3,db4,gb4]@2 ~@6", // Ab Gb
  BJ: "[[ab2,db3,ab3,db4,f4]@2 ~@11 ab2@19, ~@3 [eb3,ab3,c4,eb4,ab4]@5]/2", // Db Ab
  BK: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~@3 [gb2,db3,gb3,bb3,db4,gb4] [gb2,db3,gb3,bb3,db4,gb4]@2 ~ [a3,bb3] ~@2, ~@6 [gb2,db3,gb3,bb3,db4,gb4] ~", // Ab Gb Bbmaj7 Gb
  BL: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [e2,db3,ab3,db4,f4] [ab3,db4,f4] [e2,db3,ab3,db4,d4,f4]@2 [e2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [eb3,eb4]", // Db Eb
  BM: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 [g3,g4] ~ [gb3,bb3]!2 [db3,gb3,bb3,db4,gb4]@2 ~ gb3 ~@2, ~@4 gb2@2 [gb2,db3,gb3,a3,bb3,db4,gb4] ~, ~@4 [db3,db4,gb4] ~@3", // Ab G Gb Gb5
  BN: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [e2,db3,ab3,db4,f4] [ab3,db4,f4] [ab2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [eb3,eb4], ab2 ~@15", // Db Eb
  BO: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 db3!2 [gb3,bb3,db4,gb4] [gb3,bb3,db4] [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ~@2 gb2 ~, ~@4 db3 ~@3", // Ab Gb
  BP: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4] [ab3,db4,f4] [g2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] [a2,eb3,eb4], ~@4 ab2 ~@11", // Db Adim
  BQ: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 d3 db3 ~ [gb3,bb3,db4] [gb2,db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ~@4 [gb2,db3,gb3,bb3,db4,gb4] ~@3", // Ab Gb
  BR: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [ab3,db4,f4,ab4] [ab3,db4,f4] [ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [ab3,db4,f4,g4] [a2,eb3,ab3,eb4,ab4], ab4 ~@3 [g2,g4] ~@3 db3@4 g4 ~@3", // Db Ab G
  BS: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 ~@2 [db3,gb3,bb3,db4]!2 [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ab2@6 ~@2 gb2@5 ~@3, ~@4 gb4 ~@3", // Ab Gb
  BT: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [ab3,db4,f4]!2 [ab3,db4,f4]@2 [db3,ab3,db4,f4,ab4]@2 [db3,ab3,db4,f4] [a2,eb4,e4], e2 ~@7 db3@4 ~@4", // Db A
  BU: "[ab2,eb3,ab3,c4,eb4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@2 ~@2 [gb2,db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4,gb4] [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4]@2 ~@2, ab4 ~@4 [gb2,gb4]@2 ~", // Ab Gb
  BV: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [c3,ab3,db4,f4] [db3,ab3,db4,f4] [db3,ab3,db4,f4]@2 [db3,ab3,db4,f4]@2 [e2,ab2,db3,ab3,db4,f4] eb3, ab2 ~@7, e4 ~@15", // Db Dbmaj7 Db
  BW: "[eb3,ab3,c4,eb4]@4 [eb3,ab3,c4,eb4,ab4] ~@3 [gb3,bb3,db4]!2 [db3,gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4] ~@3, ab2@6 ~@2 gb2@5 ~@3, ab4 ~@7 [db3,gb4]@2 ~@6", // Ab Gb Gb5
  BX: "[db3,ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [ab3,db4,f4]!2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [db3,ab3,db4,f4,bb4] ~, [ab2,bb4] ~@7 db3@6 ~@2, ~@4 ab2 ~@3", // Db Bbm7 Absus2
  BY: "[ab2,eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4] ~@3 [db3,db4] [gb2,db3,gb3,bb3] [gb2,db3,gb3,bb3]@2 [gb2,db3,gb3,bb3,db4]@2 ~@2", // Ab Db Gb
  BZ: "[ab3,db4,f4]@4 [db3,ab3,db4,f4]@4 [db3,ab3,db4,f4] [ab2,db3,ab3,db4] [db3,ab3,db4,f4]@2 [g2,db3,ab3,db4,f4]@2 [db3,ab3,db4,f4] eb3", // Db Db5 Db
  CA: "[b3,e4,g4,ab4] c4 ~@2 [ab2,eb3,ab3,c4,eb4,ab4]@2 d4 ~ [gb3,bb3,db4,gb4]!2 [gb3,bb3,db4,gb4]@2 [db3,gb3,bb3,db4,gb4]@2 c4 ~, [ab2,eb3,ab3]@4 ~@4 [gb2,db3]@5 ~@3", // E Ab Gb Ab5 Gb5
  CB: "[ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4]@4 [e2,ab2,ab3,db4,f4] [ab3,db4,f4] [ab3,db4,f4]@2 [g2,db3,ab3,db4]@2 [e2,g2,db3,ab3,db4,f4] ~, ~@2 db3 ~", // Db
  CC: "[eb3,ab3,c4,eb4,ab4]@4 [eb3,ab3,c4,eb4,ab4]@2 d3 ~ [bb3,db4,gb4]!2 [db3,gb3,bb3,db4,gb4]@2 [gb2,db3,gb3,bb3,db4,gb4] ~@3, ab2@3 ~ gb2@2 ~@2, ~@4 [db3,gb3] ~@3", // Ab Gb Gb5
  CD: "[db3,ab3,db4,f4]@4 [g2,db3,ab3,db4,f4]@4 [ab2,db3,ab3,db4,f4] [db4,f4] [db3,ab3,db4,f4]@2 [f2,db3,ab3,db4,f4]@2 [ab2,db3,ab3,db4,f4] ~", // Db
  CE: "[~ ab2@17 ~@14, [eb3,ab3,c4,eb4,ab4] ~]/2", // Ab
})).s("gm_electric_guitar_clean").gain(0.46)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@17 A B A B C ~@5 D ~@9 A B A B C ~@5 E@2 ~@10 F@2 G@2 H I J B A B C ~@5 K L ~@4 M N M O M N M O M N M O M N M O M N
  M O ~
>`.pickRestart({
  A: "f4", B: "bb4@2 db5 eb5", C: "ab4", D: "c6@3 ~ eb6@3 c6 bb5@2 ab5 ~ ab5@4",
  E: "[c6@4 eb6@3 c6 bb5@2 ab5 ~ ab5 bb5 ab5@5 ~@13, ab5 ~@3, bb5 ~@31]/2", F: "[ab5@3 ab5@5 b5@3 gb5@3 ab5@17 ~]/2",
  G: "[~@10 b5 [b5,db6] ab5@2 ab6@18]/2", H: "~@3 ab6 bb6@2 ~@2", I: "~@6 db7@4 gb7@3 b6@3", J: "[f4,ab6]",
  K: "bb5 c6@3 eb6@3 c6 bb5@2 ab5 ~ ab5@4", L: "~@8 bb5@2 ab5 ~ ab5@4", M: "ab4 gb4", N: "db5@5 ab4 bb4@2",
  O: "db5@8 f5 ~ f5 gb5 f5@4, ~@9 gb5@2 ~@5",
})).s("gm_lead_2_sawtooth").gain(0.51)

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

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

// drums · clap
const clap = s("cp").struct("<A@16 ~@4 A@16 ~@4 A@24 ~@4 A@9 B ~@2 A@4 B ~@17>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@77 [~@5 x!2 ~] ~@24>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@12 B@3 C A@16 B@3 C A@24 B@3 C A@8 ~@3 D A@4 E ~@17>".pickRestart({
  A: "x!8", B: "x!4", C: "x!3 ~", D: "x!2 ~@2", E: "x!7 ~",
})).gain(0.8)
// … 25 more lines

More by The J. Geils Band