Strudelify

Och was ik maar bij moeder thuis gebleven

Johnny Hoes

KeyA♭ majorTempo118 bpm
0:00/0:00
// Och was ik maar bij moeder thuis gebleven — Johnny Hoes
// 118 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 tuba (copy of ch 2 electric bass finger); ch 11 banjo (copy of ch 8 electric guitar clean)
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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 · church organ
const church_organ = note("<~@33 A@8 B C D ~@50>".pickRestart({
  A: "[~ [c4,eb4,ab4]@6 [ab3,db4,f4]@2 [bb3,eb4,g4]@2 [c4,eb4,ab4]@4 [bb3,eb4,g4]]/8", B: "~ [bb3,d4,f4]",
  C: "[bb3,eb4,g4] [bb3,d4,f4]", D: "[bb3,eb4,g4] ~@15",
})).s("gm_church_organ").gain(0.13)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E F G H I J K D E F G H I L M F N D O P Q R C D E F G H S T U V W X Y Z AA AB AC AD AE D AF F AG AH AI AJ AK
  D AF F AG AH AI AL AM F AG D AN AO AP AQ AR D AF F AG AH AI AS AT F AG D AU AV AW AX AY D AF F AG AH AI AZ BA
>`.pickRestart({
  A: "eb2@3 ~ eb2 ~@3 eb2@3 ~ eb2 ~@3", B: "bb1@3 ~ bb1@3 ~ eb2@2 ~@2 ab1@4", C: "ab1@3 ~ ab1@3 ~ ab2@2 ~@2 eb2@2 ~@2",
  D: "ab2 ~ eb2 ~ ab2 ~ eb2 ~", E: "ab1@3 ~ ab1@2 ~@2 db2@2 ~@2 ab1@2 ~@2", F: "db2 ~ ab1 ~ db2 ~ ab1 ~",
  G: "db2 ~ db2 ~ eb2 ~ bb1 ~", H: "eb2@2 ~@2 bb1@2 ~@2 eb2@3 ~ eb2@3 ~", I: "f2@3 ~ g2@3 ~ ab2@2 ~@2 ab2@2 ~@2",
  J: "a2@2 ~@2 a2@3 ~ bb2@2 ~@6", K: "~@4 ab2 ~ eb2 ~", L: "f2@2 ~@2 db2@3 ~ ab1@2 ~@6",
  M: "c2@3 ~ c2@4 db2@2 ~@2 ab1@2 ~@2", N: "db2 ~ db2 ~ ab2 ~ eb2 ~", O: "ab1@2 ~@2 a1@3 ~ bb1@2 ~@2 f1@2 ~@2",
  P: "bb1@2 ~@2 f1@2 ~@2 bb1@2 ~@2 bb1@3 ~", Q: "c2@3 ~ d2@3 ~ eb2@2 ~@2 eb2@3 ~", R: "f2@3 ~ gb2@3 ~ g2@2 ~@2 ab1@4",
  S: "f2@3 ~ g2@3 ~ ab2@2 ~@2 g2@2 ~@2", T: "f2@2 ~@2 eb2@3 ~ ab2@2 ~@2 g2@2 ~@2",
  U: "f2@2 ~@2 eb2@3 ~ ab1@2 ~@2 eb2@2 ~@2", V: "ab1 ~ eb2 ~ bb1 ~ f1 ~", W: "bb1 ~ bb1 ~ eb2 ~ bb1 ~",
  X: "eb2@2 db2 ~ c2 ~ bb1@2 ab1@2 ~@2 eb2@2 ~@2", Y: "ab1 ~ eb2 ~ ab1 ~ eb2 ~", Z: "ab1 ~ eb2 ~ eb2 ~ bb1 ~",
  AA: "eb2 ~ bb1 ~ bb1 ~ bb1 ~", AB: "eb2@2 ~@2 eb2@2 ~@2 bb1 ~ bb1 ~ c2@2 d2@2",
  AC: "eb2@2 ~@2 eb2@3 ~ eb2@3 ~ eb2 ~@3", AD: "eb2@3 ~ eb2 ~@3 bb1@3 ~ bb1@3 ~", AE: "eb2@2 ~@2 ab1@4 ab1@3 ~ ab2@3 ~",
  AF: "ab2@2 ~@2 eb2@2 ~@2 ab1@3 ~ ab1@2 ~@2", AG: "db2 ~ ab1 ~ db2 ~ db2 ~", AH: "eb2 ~ bb1 ~ eb2 ~ bb1 ~",
  AI: "eb2@3 ~ eb2@3 ~ f2@3 ~ g2@3 ~", AJ: "ab2@2 ~@2 ab2@2 ~@2 a2@2 ~@2 a2@3 ~", AK: "bb2 ~@7",
  AL: "ab2@2 ~@2 ab2@2 ~@2 f2@2 ~@2 db2@3 ~", AM: "ab1@2 ~@6 c2@3 ~ c2@4", AN: "ab2@2 ~@2 eb2@2 ~@2 ab1@2 ~@2 a1@3 ~",
  AO: "bb1 ~ f1 ~ bb1 ~ f1 ~", AP: "bb1@2 ~@2 bb1@3 ~ c2@3 ~ d2@3 ~", AQ: "eb2@2 ~@2 eb2@3 ~ f2@3 ~ gb2@3 ~",
  AR: "g2@2 ~@2 ab1@4 ab1@3 ~ ab1@3 ~", AS: "ab1@2 ~@2 ab1@2 ~@2 f2@2 ~@2 db2@3 ~",
  AT: "ab1@2 ~@2 ab1@2 ~@2 bb1@2 ~@2 c2@3 ~", AU: "ab2@2 ~@2 eb2@3 ~ ab1@2 ~@2 a1@2 ~@2",
  AV: "bb1@2 ~@2 f1@2 ~@2 bb1@2 ~@2 f1@3 ~", AW: "bb1@3 ~ f1@3 ~ bb1@2 ~@2 bb1@3 ~",
  AX: "eb2@3 ~ eb2@3 ~ f2@2 ~@2 gb2@3 ~", AY: "g2@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~", AZ: "ab1@2 ~@4 eb2 ~ ab1@2 ~@4 eb2 ~",
  BA: "ab1@2 ~@2 ab1@2 ~ ab1 ab1@2 ~@6",
})).s("gm_electric_bass_finger").gain(0.45)

// other · tenor sax
const tenor_sax = note(`<
  ~@2 A B@2 C D E F G A H@2 C I J@2 K L M N O P Q R S A B@2 C D T@2 U ~ V W X Y Z AA AB AC AD ~ AE AF AG AH@2 AI AJ AK
  AE AF AL AM@2 AN AO AP AQ AR AS AT AU AV@2 AW AE AF AG AX@2 AY AO AZ ~@8 AE AF AG AX@2 AY AO AZ ~
>`.pickRestart({
  A: "~@3 eb4", B: "[c4@4 f4@4 eb4@10 ~@2 ab4@4 c5@5 ~ c5 ~]/2", C: "bb4@4 ab4@4 db4@4 f4@3 ~", D: "f4@10 ~@2 f4@3 ~",
  E: "f4 ab4 g4@2", F: "~@4 g4@3 ~ g4@3 ~ g4@3 ~", G: "f4 e4 eb4 ~", H: "[c4@4 f4@4 eb4@10 ~@2 ab4@4 c5@5 ~ c5@2]/2",
  I: "f4@11 ~ f4@3 ~", J: "[f4@3 ~ ab4@4 g4@10 ~@2 f4@4 eb4@4 db5@3 ~]/2", K: "c5 bb4 ab4@2", L: "~@3 ab4",
  M: "g4@4 ab4@4 bb4@3 ab4 g4@2 ab4@2", N: "bb4@2 ab4@2 g4@2 ab4@2 bb4@3 ab4 g4@2 ab4@2",
  O: "bb4@2 ab4 ~ g4@2 f4@2 eb4@4 ab4@3 ~", P: "ab4@5 ~@7 g4@4", Q: "ab4 a4 bb4@2", R: "f4@5 ~ f4@2",
  S: "g4@4 ab4@4 bb4@3 ~@5", T: "[f4@4 ab4@3 ~ g4@10 ~@2 f4@3 ~ eb4@4 db5@3 ~]/2", U: "c5@4 bb4@4 ab4@5 ~@3",
  V: "~@4 eb4 db4 c4 db4", W: "eb4@3 ~ eb4@3 ~ f4@2 eb4@2 db4@2 eb4@2", X: "f4@5 ~ f4@2 g4 ~ g4 ~ g4 ~ g4 ~",
  Y: "g4@4 f4@2 g4@2 ab4@2 ~ ab4 g4@2 f4@2", Z: "eb4@5 ~@3 eb4@2 db4@2 c4@2 db4@2",
  AA: "eb4@4 eb4@3 ~ g4@2 f4@2 eb4@2 f4@2", AB: "g4@6 g4@2 f4@2 ~ f4 g4@2 ab4@2",
  AC: "bb4@3 ~ bb4@2 c5 ~ bb4@2 ab4@2 g4@2 f4@2", AD: "eb4 ~@7", AE: "~ eb4 c4 f4", AF: "eb4@5 ~ ab4@2",
  AG: "c5@5 ~ c5 ~ bb4@4 ab4@4", AH: "[db4@4 f4@3 ~ f4@10 ~@2 f4@3 ~ f4@4 ab4@4]/2", AI: "g4@9 ~@3 g4@3 ~",
  AJ: "g4@3 ~ g4@3 ~ f4@4 e4@4", AK: "eb4 ~@3", AL: "c5@5 ~ c5@2 bb4@4 ab4@4",
  AM: "[db4@4 f4@3 ~ f4@11 ~ f4@3 ~ f4@3 ~ ab4@4]/2", AN: "g4@5 ~ f4@2", AO: "eb4@4 db5@3 ~ c5@4 bb4@4", AP: "ab4 ~",
  AQ: "~ ab4 g4 ab4", AR: "bb4@3 ab4 g4@2 ab4@2 bb4@2 ab4@2 g4@2 ab4@2",
  AS: "bb4@3 ab4 g4@2 ab4@2 bb4@2 ab4 ~ g4@2 f4@2", AT: "eb4@4 ab4@3 ~ ab4@5 ~@3", AU: "~ g4 ab4 a4",
  AV: "[bb4@4 f4@5 ~ f4@2 g4@2 ab4@2]/2", AW: "bb4@3 ~@13", AX: "[db4@4 f4@3 ~ f4@10 ~@2 f4@3 ~ f4@4 ab4@3 ~]/2",
  AY: "g4@10 ~@2 f4@3 ~", AZ: "ab4@5 ~@11",
})).s("gm_tenor_sax").gain(0.5)

// chords · accordion
const accordion = note(`<
  A B C D E ~ F G H I J D E ~ F G H K L M ~@2 N ~@2 O P D E ~ F G H Q R S T U ~ V W X Y Z AA AB N ~ AC AD AE ~ AF AG N ~
  AC AD AE ~ AH AI ~@2 D E ~@2 AJ ~ N ~ AC AD AE ~ AH AK ~@2 D E ~@2 AJ ~ N ~ AC AD AE ~ AL ~
>`.pickRestart({
  A: "~@9 eb4 ~ eb4!2 g4 ~ bb4", B: "[g4,eb5]@5 ~@2 [g4,d5] [g4,db5]@5 ~@2 [g4,c5]",
  C: "[d4,bb4] ~@2 [d4,ab4] [d4,g4] ~@2 [d4,f4] eb4 ~@7", D: "~@10 [c4,eb4]!2 [eb4,ab4] [c4,eb4] [eb4,ab4] [ab4,c5]",
  E: "[c5,eb5] ~@15", F: "~@2 [f4,ab4]!2 [ab4,db5] [f4,ab4] [ab4,db5] [db5,f5] [f5,ab5] ~@7",
  G: "~@12 [eb4,g4] [f4,ab4] [g4,bb4] [ab4,c5]", H: "[bb4,db5] ~@15", I: "~@12 [ab4,c5,eb5]!2 ~ [ab4,c5,eb5]",
  J: "[gb4,c5,eb5]!2 ~ [gb4,c5,eb5]!3 ~ [gb4,c5,eb5] [g4,bb4,eb5] ~@7", K: "~@12 [eb4,ab4,c5]!2 ~ [eb4,ab4,c5]",
  L: "[f4,ab4,db5]!2 ~ [f4,ab4,db5]!3 ~ [f4,ab4,db5] [eb4,ab4,c5] ~@3 [c4,eb4,ab4]@4", // Db Ab
  M: "g4@4 gb4@3 ~@9, [c4,eb4]@7 ~@9", N: "~@2 [c4,eb4]!2 [eb4,ab4] [c4,eb4] [eb4,ab4] [ab4,c5] [c5,eb5] ~@7",
  O: "~@12 [g4,bb4,eb5]!2 ~ [g4,bb4,eb5]", P: "[ab4,db5,f5]!2 ~ [ab4,db5,f5] [c5,eb5,gb5]!2 ~ [c5,eb5,gb5] ~@8",
  Q: "~@8 [g4,ab4] ~@3 g4 ~@3", R: "f4 ~@3 eb4 ~@3 [g4,ab4] ~@3 g4 ~@3", S: "f4 eb4 f4 g4 ab4 bb4 c5 db5 eb5 ~@7",
  T: "~@2 [ab4,c5,eb5]!5 ~@9", U: "~@2 [f4,bb4,db5]!5 ~@9",
  V: "~ eb4 f4 g4 ab4 bb4 c5 db5 eb4@2 db4@2 c4@2 db4@2, ~@8 eb5 ~@7", W: "[c4,eb4,ab4]@2 [c4,eb4,ab4]@2 g4 f4 eb4 f4",
  X: "[eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@4 [bb3,d4,f4]@2 ~ f4 g4@2 ab4@2, ~@11 [bb3,d4]@4 ~", // Eb Bb
  Y: "bb4@3 ~ bb4@2 c5 ~ [f4,bb4,d5]@8, [eb4,g4]@7 ~@9", Z: "~ eb4 ~ eb4!2 g4 ~ bb4 eb5@5 ~@2 d5",
  AA: "db5@6 ~ c5 bb4 ~@2 ab4 g4 ~@2 f4", AB: "eb4 ~@15", AC: "~@10 [f4,ab4]!2 [ab4,db5] [f4,ab4] [ab4,db5] [db5,f5]",
  AD: "[f5,ab5] ~@15", AE: "~@4 [eb4,g4] [f4,ab4] [g4,bb4] [ab4,c5] [bb4,db5] ~@7",
  AF: "~@4 [ab4,c5,eb5]!2 ~ [ab4,c5,eb5] [gb4,c5,eb5]!2 ~ [gb4,c5,eb5]!3 ~ [gb4,c5,eb5]", AG: "[g4,bb4,eb5] ~@15",
  AH: "~@4 [eb4,ab4,c5]!2 ~ [eb4,ab4,c5] [f4,ab4,db5]!2 ~ [f4,ab4,db5]!3 ~ [f4,ab4,db5]", // Ab Db
  AI: "[eb4,ab4,c5] ~@3 [c4,eb4,ab4]@4 g4@4 gb4@4, ~@8 [c4,eb4]@7 ~", // Ab Cm
  AJ: "~@4 [g4,bb4,eb5]!2 ~ [g4,bb4,eb5] [ab4,db5,f5]!2 ~ [ab4,db5,f5] [c5,eb5,gb5]!2 ~ [c5,eb5,gb5]", // Eb Db Cdim
  AK: "[eb4,ab4,c5] ~@3 [c4,eb4,ab4]@4 g4@4 gb4@4, ~ [c4,eb4]", AL: "~@2 eb4!3 ~@11",
})).s("gm_accordion").gain(0.64).pan(0.6)

// other · accordion
const accordion_2 = note(`<
  ~ A B C@2 D E F@2 G H I@2 J E K@2 L M N O P Q R S T U C@2 D V W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM@2 AN AO
  AP AQ AK AL AR@2 AS AT AU AV AW AX AY AZ BA@2 BB BC AK AL AM@2 BD BE AU AV BF BG BH@2 BI@2 BJ BC BK AL AM@2 AS BE BL
  BM
>`.pickRestart({
  A: "[g4,bb4,eb5] ~ [eb4,g4,bb4] ~", B: "[d4,f4,bb4] ~ [bb3,d4,g4] ~ [g3,bb3,eb4] ~ eb5@2",
  C: "[c5@4 f5@4 eb5@11 ~ ab5@4 c6@5 ~ c6 ~]/2", D: "bb5@4 ab5@3 ~ db5@4 f5@3 ~", E: "f5@10 ~@2 f5@3 ~",
  F: "[f5@4 ab5@4 g5@10 ~@2 g5@3 ~ g5@3 ~ g5@3 ~]/2", G: "f5@4 e5@3 ~ eb5@3 ~ ab4!2 ~ ab4",
  H: "gb4!2 ~ gb4!3 ~ gb4 g4 ~@3 eb5@4", I: "[c5@4 f5@4 eb5@11 ~ ab5@4 c6@5 ~ c6@2]/2", J: "bb5@4 ab5@4 db5@4 f5@3 ~",
  K: "[f5@3 ~ ab5@4 g5@10 ~@2 f5@4 eb5@4 db6@4]/2", L: "c6@4 bb5@4 ab5@3 ~ eb5!2 ~ eb5",
  M: "f5!2 ~ f5 ab5!2 ~ ab5!2 ~@3 ab5@3 ~", N: "g5@4 ab5@3 ~ bb5@3 ab5 g5 ~ ab5 ~",
  O: "bb5@2 ab5 ~ g5 ~ ab5 ~ bb5@3 ab5 g5 ~ ab5 ~", P: "bb5@2 ab5 ~ g5 ~ f5 ~ eb5@3 ~ ab5@3 ~", Q: "ab5@9 ~@3 g5@4",
  R: "ab5@3 ~ a5@4 bb5@8", S: "f5@11 ~ f5@4", T: "g5@4 ab5@4 bb5@2 ~@2 eb5!2 ~ eb5",
  U: "f5!2 ~ f5 gb5!2 ~ gb5 g5 ~@3 eb5@4", V: "f5@11 ~ f5@3 ~", W: "[f5@4 ab5@4 g5@11 ~ f5@4 eb5@4 db6@4]/2",
  X: "c6@4 bb5@4 ab5@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  Y: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  Z: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~ eb5@2 db5 ~ c5@2 db5@2", AA: "eb5@3 ~ eb5@3 ~ f5@2 eb5@2 db5@2 eb5@2",
  AB: "f5@5 ~ f5@2 g5@2 g5 ~ g5 ~ g5 ~", AC: "g5@4 f5@2 g5@2 ab5@3 ab5 g5@2 f5@2", AD: "eb5@7 ~ eb5@2 db5@2 c5@2 db5@2",
  AE: "eb5@3 ~ eb5@3 ~ g5@2 f5@2 eb5@2 f5@2", AF: "g5@5 ~ g5@2 f5@2 ~ f5 g5@2 ab5@2",
  AG: "bb5@3 ~ bb5@2 c6@2 bb5@2 ab5@2 g5@2 f5@2", AH: "eb5!2 ~ eb5!2 g5 ~ bb5 eb6@6 ~ d6",
  AI: "db6@5 ~@2 c6 bb5 ~@2 ab5 g5 ~@2 f5", AJ: "eb5 ~@3 eb5@4 c5@4 f5@4", AK: "eb5@5 ~ ab5@2",
  AL: "c6@5 ~ c6@2 bb5@4 ab5@3 ~", AM: "[db5@4 f5@3 ~ f5@10 ~@2 f5@3 ~ f5@4 ab5@4]/2", AN: "g5@11 ~ g5@3 ~",
  AO: "g5@3 ~ g5@3 ~ f5@4 e5@4", AP: "eb5@3 ~ ab4!2 ~ ab4 gb4!2 ~ gb4!3 ~ gb4", AQ: "g4 ~@3 eb5@4 c5@4 f5@4",
  AR: "[db5@4 f5@3 ~ f5@10 ~@2 f5@3 ~ f5@4 ab5@3 ~]/2", AS: "g5@11 ~ f5@4", AT: "eb5 db6 c6 bb5",
  AU: "ab5@3 ~ eb5!2 ~ eb5 f5!2 ~ f5!3 ~ f5", AV: "ab5 ~@3 ab5@4 g5@4 ab5@4",
  AW: "bb5@3 ab5 g5@2 ab5 ~ bb5@2 ab5@2 g5@2 ab5@2", AX: "bb5@3 ab5 g5 ~ ab5 ~ bb5@2 ab5@2 g5@2 f5 ~",
  AY: "eb5@4 ab5@3 ~ ab5@8", AZ: "~@4 g5@4 ab5@3 ~ a5@4", BA: "[bb5@8 f5@10 ~@2 f5@3 ~ g5@3 ~ ab5@4]/2",
  BB: "bb5@3 ~ eb5!2 ~ eb5 f5!2 ~ f5 gb5!2 ~ gb5", BC: "g5 ~@3 eb5@4 c5@4 f5@4", BD: "g5@5 ~ f5@2",
  BE: "eb5@4 db6@3 ~ c6@4 bb5@4", BF: "bb5 ~@2 ab5 g5@2 ab5@2 bb5@2 ab5@2 g5@2 ab5@2",
  BG: "bb5 ab5 g5 ab5 bb5 ab5 g5 f5", BH: "[eb5@4 ab5@3 ~ ab5@10 ~@2 g5@4 ab5@4 a5@4]/2",
  BI: "[bb5@8 f5@11 ~ f5@4 g5@4 ab5@4]/2", BJ: "bb5@2 ~@2 eb5!2 ~ eb5 f5!2 ~ f5 gb5!2 ~ gb5", BK: "eb5@11 ~ ab5@4",
  BL: "ab5@2 [eb4,c5]!3 ~ [g4,db5]@2 [ab4,c5] ~ [eb4,c5]!3 ~ [g4,db5]@2", // Cm Gdim Ab Cm Gdim
  BM: "[ab4,c5] ~@3 [ab4,c5] ~@2 [ab4,c5]!2 ~@7", // Ab
})).s("gm_accordion").gain(0.5).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D E F G H I J C D E F G H I K L F M N O P Q R C D E F G H S N@2 T U V N W X@2 Y Z AA N AB F@2 H@2 AC AD N AB
  F@2 H@2 AE AF F@2 N@2 P@2 AG AD N AB F@2 H@2 AE AF F@2 N@2 P@2 AG AD N AB F@2 H@2 AH AI
>`.pickRestart({
  A: "~@4 [g3,bb3,eb4,g4] ~@7 [g3,bb3,eb4,g4] ~@3", B: "[f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4] ~@3 [g3,bb3,eb4,g4] ~@7",
  C: "~@10 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Ab
  D: "~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~", // Ab Ab7
  E: "~@2 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~@3 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~", // Ab7 Db
  F: "~@2 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~", // Db
  G: "~@2 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~@3 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~", // Db Eb
  H: "~@2 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~", // Eb
  I: "~@2 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~ [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3", // Eb Ab
  J: "[a3,c4,f4,a4] ~@3 [a3,c4,f4,a4] ~@3 [bb3,d4,f4,bb4] ~@7", // F Bb
  K: "[f3,ab3,db4,f4] ~@3 [f3,ab3,db4,f4] ~@3 [ab3,c4,eb4,ab4] ~@7", L: "~@10 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~",
  M: "~@2 [ab3,db4,f4,ab4] ~@3 [ab3,db4,f4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Db Ab
  N: "~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Ab
  O: "~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~", // Ab Bb
  P: "~@2 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~", // Bb
  Q: "~@2 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~ [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~@3", // Bb Eb
  R: "[ab3,db4,f4,ab4] ~@3 [a3,c4,f4,a4] ~@3 [bb3,eb4,g4,bb4] ~@7", // Db F Eb
  S: "~@2 [g3,bb3,eb4,g4] ~@3 [g3,bb3,eb4,g4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Eb Ab
  T: "~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [bb3,db4,f4,bb4] ~@3 [bb3,db4,f4,bb4] ~", // Ab Bbm
  U: "~@2 [bb3,db4,f4,bb4] ~@3 [bb3,db4,f4,bb4] ~@3 [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~", // Bbm Eb
  V: "~@2 [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~@3 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Eb Ab
  W: "~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~", // Ab Eb
  X: "~@2 [bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~@3 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~", // Eb Bb
  Y: "[bb3,eb4,g4,bb4] ~@7 [bb3,eb4,g4,bb4]!2 ~ [bb3,eb4,g4,bb4]!2 ~@3", // Eb
  Z: "[bb3,eb4,g4,bb4]!2 ~ [bb3,eb4,g4,bb4]!2 ~@3 [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~@3", // Eb Bb
  AA: "[bb3,eb4,g4,bb4] ~@9 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~", // Eb Ab
  AB: "~@2 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~", // Ab7
  AC: "[ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [a3,c4,f4,a4] ~@3 [a3,c4,f4,a4] ~@3", AD: "[bb3,eb4,g4,bb4] ~@15",
  AE: "[ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [f3,ab3,db4,f4] ~@3 [f3,ab3,db4,f4] ~@3", AF: "[ab3,c4,eb4,ab4] ~@15",
  AG: "[bb3,eb4,g4,bb4] ~@3 [bb3,eb4,g4,bb4] ~@3 [ab3,db4,f4,ab4] ~@3 [a3,c4,f4,a4] ~@3", // Eb Db F
  AH: "[ab3,c4,eb4,ab4] ~@5 [g3,bb3,eb4,g4] ~ [ab3,c4,eb4,ab4] ~@5 [g3,bb3,eb4,g4] ~", // Ab Eb Ab Eb
  AI: "[ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4]!2 ~@7", // Ab
})).s("gm_electric_guitar_clean").gain(0.44).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ A B C D@6 B C D@6 B E D@23 F G D@8 H D@7 I D@20 ~@2 G D@7 J K>".pickRestart({
  A: "~ x ~ x", B: "x!3 ~", C: "~@2 x!2", D: "x!4", E: "x ~ x!2", F: "x!2 ~ x", G: "~ x!3", H: "x", I: "x!2",
  J: "x ~@2 x!2 ~@2 x", K: "x ~@3 x ~@2 x!2 ~@7",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E@5 F G H E@5 F G I E@5 F G J E@6 K@2 E@7 L M N E@6 O P E@6 O P Q E@5 O P E@6 R S E@6 T C E@6 U V
>`.pickRestart({
  A: "~@9 x ~ x!3 ~ x", B: "x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3", C: "x!4", D: "x ~ x!2 ~@2 x ~@3 x ~@3 x ~",
  E: "~ x ~ x ~ x ~ x", F: "~@2 x ~@3 x ~@3 x!4 ~ x", G: "x!2 ~ x!3 ~ x!2 ~@7", H: "~@5 x ~ x",
  I: "~@6 x!3 ~ x ~@3 x ~", J: "~@6 x!2 ~@2 x ~@3 x ~", K: "~@2 x ~@3 x!3 ~ x ~@3 x ~", L: "x ~@3 x ~@3 x!2 ~ x!2 ~@3",
  M: "x!2 ~ x!2 ~@3 x ~@3 x ~@3", N: "x ~@3 x ~@3 x ~ x!2 ~@2 x ~", O: "~@2 x!4 ~ x!3 ~ x!3 ~ x", P: "x ~@13 x!2",
  Q: "x!2 ~ x ~ x ~ x", R: "~@5 x ~ x!3 ~ x!3 ~ x", S: "x", T: "~@4 x!2 ~ x!3 ~ x!3 ~ x", U: "x ~@2 x!2 ~@2 x",
  V: "x ~ x!3 ~@2 x!2 ~@7",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@35 [~@3 x] [x!4]!7 ~@51>").gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@3 A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 D@2 C ~@10 E B@5 F ~ E B@5 ~@2 E B@5 ~@2 E B@5 F ~ E B@5 F ~ E B@5 ~@2
>`.pickRestart({
  A: "~@3 x", B: "x!4", C: "x!2 ~@2", D: "x!2 ~ x", E: "~ x!3", F: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A B C ~@5 D@3 ~@5 D@2 C ~@5 D E C ~@5 D@3 ~@7 F G H I ~@5 I@3 ~@5 I C I ~@5 I H I ~@6 G I ~@6 B I ~@5 J C
>`.pickRestart({
// … 7 more lines