Strudelify
Do You Love Me cover art

1988

Do You Love Me

The Contours

KeyF majorTempo148 bpm
0:00/0:00
// Do You Love Me — The Contours
// 148 bpm, 4/4, key F major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 101, 4/4 at bar 102) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 154 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A C D@2 E F A B A B A G H I J@2 K L M N M N M O P ~ M N M N M N P Q A R S T A N A U V W X Y A B A B A G H I J@2
  K L M N M N M N P Q A R S T A N A U V W X Y A B A B A G H I J@2 K L ~@2 Z AA Z AB Y ~@5 AC AD@2 AE AF AG AH AG AH AG
  AI AJ AK AL@2 AM AN AO AP AO AP AO AQ AR AS AO AT@2 AU AO AV AO AW AX AY AZ AN AG AH AG AH AG AI AJ AK AL@2 AM ~
>`.pickRestart({
  A: "f1@4 c1@2 f1@3 ~ f1@2 c1 ~ f1 ~", B: "bb1@3 ~ bb1 ~ c2@3 ~ c2@2 bb1@2 a1 ~",
  C: "bb1@3 ~ bb1 ~ c2@3 ~@3 bb1 ~ a1 ~, ~@5 c2@2 ~", D: "c2@3 ~ c2@4 c2@3 ~ c2@2 g1 ~",
  E: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", F: "c1@13 ~@3", G: "bb1@3 ~ bb1 ~ c2@3 ~ c2 ~ c2 ~ c2 ~",
  H: "bb1@4 ~@2 bb1@3 ~ bb1@2 f1@2 bb1 ~", I: "bb1@5 ~ bb1@3 ~ bb1@3 ~ bb1 ~", J: "c2@5 ~ c2@3 ~ c2@2 g1 ~ g1 ~",
  K: "c2@5 ~ c2@2 ~@2 c2 ~ c2 ~ g1 ~", L: "c1 ~@7", M: "f1@2 ~@2 c1@2 f1@2 ~@2 f1@2 c1 ~ f1 ~",
  N: "bb1@3 ~ bb1@3 ~ c2@3 ~ c2@3 ~", O: "bb1@5 ~ bb1 ~ c2@3 ~ c2@3 ~", P: "f1 ~@7",
  Q: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 c1@2 c2@2", R: "bb1@3 ~ bb1@3 ~ c2@3 ~ c2@2 bb1 ~",
  S: "f1@3 ~ c1@2 f1@4 c1@2 f1@2 c1 ~", T: "bb1@3 ~ bb1@3 ~ c2@3 ~ bb1@2 a1 ~", U: "bb1@3 ~ bb1@3 ~ c2@4 bb1@2 b1 ~",
  V: "c2@5 ~ c2@3 ~ c2@2 g1@2 c2 ~", W: "c2@5 ~ c2@3 ~ c2@2 g1@2 c1 ~", X: "c2@5 ~ c2@3 ~ c2@2 c1 ~ g1 ~", Y: "c2 ~@7",
  Z: "c2@3 ~@3 c2@3 ~ c2@2 g1 ~ g1@2", AA: "c2@2 ~@2 c2 ~ c2@3 ~ c2@2 g1 ~ g1 ~",
  AB: "c2@3 ~@3 c2@2 ~@2 c2@2 g1 ~ g1 ~", AC: "~@4 c2 ~@2 c2", AD: "~@2 c2@2 g1 ~ g1@2 c2@3 ~@3 c2@2",
  AE: "~@2 c2@2 g1 ~ g1 ~ c2@3 ~ c2 ~ c2 ~", AF: "c2 ~ c2 ~ c2 ~ c2 ~ f1@4 c1@2 f1@2",
  AG: "~@2 f1@2 c1 ~ f1 ~ bb1@3 ~ bb1 ~ c2@2", AH: "~@2 c2@2 bb1@2 a1 ~ f1@4 c1@2 f1@2",
  AI: "~@2 c2 ~ c2 ~ c2 ~ bb1@4 ~@2 bb1@2", AJ: "~@2 bb1@2 f1@2 bb1 ~ bb1@5 ~ bb1@2",
  AK: "~@2 bb1@3 ~ bb1 ~ c2@5 ~ c2@2", AL: "~@2 c2@2 g1 ~ g1 ~ c2@5 ~ c2@2", AM: "~@2 c2 ~ c2 ~ g1 ~ c1@2 ~@6",
  AN: "~@8 f1@3 ~ c1@2 f1@2", AO: "~@2 f1@2 c1 ~ f1 ~ bb1@3 ~ bb1@3 ~", AP: "c2@3 ~ c2@3 ~ f1@2 ~@2 c1@2 f1@2",
  AQ: "c2@3 ~ c2@3 ~ f1@2 ~@6", AR: "~@8 c2 ~ c2 ~ c2 ~ c2 ~", AS: "c2 ~ c2@2 c1@2 c2@2 f1@4 c1@2 f1@2",
  AT: "[c2@3 ~ c2@2 bb1 ~ f1@3 ~ c1@2 f1@4 c1@2 f1@2 c1 ~ bb1@3 ~ bb1@3 ~]/2", AU: "c2@3 ~ bb1@2 a1 ~ f1@4 c1@2 f1@2",
  AV: "c2@3 ~ c2@3 ~ f1@4 c1@2 f1@2", AW: "c2@4 bb1@2 b1 ~ c2@5 ~ c2@2", AX: "~@2 c2@2 g1@2 c2 ~ c2@5 ~ c2@2",
  AY: "~@2 c2@2 g1@2 c1 ~ c2@5 ~ c2@2", AZ: "~@2 c2@2 c1 ~ g1 ~ c2@2 ~@6",
})).s("gm_acoustic_bass").gain(0.56)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D@3 E F G H I H J K L M N O P Q R S T U T V W X R Y Z AA AB V AC AD AE@2 AF AG AH AI AJ AK AL AM@2 Q G H I H J
  K L M AN O P Q R Y Z AA AB V AC AD AE@2 AF AG AH AI AJ AK AL AM@2 Q G H I H J K L M AN O P Q ~@2 AO AP AQ AR AS ~@5
  AT@4 AU AV AW AX AW AY AZ BA BB@2 BC@2 BD@2 BE BF BG BH BI BJ BK@2 BL BM BN BO BN BP BQ BR@3 BS AV AW AX AW AY AZ BA
  BB@2 BC@2 ~
>`.pickRestart({
  A: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~ c4 ~ [f4,a4,c5] ~ c4 ~@3, f3@7 ~", // F
  B: "[d4,f4]@3 ~ [bb3,d4] ~@3 [c4,e4,g4]@2 g3 ~ [c4,e4] ~@3, bb3 ~@3 f4@2 c3@6 g4@2 ~@2", // Dm Bb C
  C: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~ c4 ~ [f4,a4,c5] ~ [f4,a4,c5] ~ c4 ~, f3@15 ~", // F
  D: "[[bb3,d4,f4]@3 ~ [bb3,d4] ~@3 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4]@14 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@10 g3 ~, ~@2 f4 c3@20 ~, ~@14 g3@13 ~@3 g3@14 ~@4]/3", // Bb C
  E: "[c4,e4,g4]@3 ~ [c4,e4,g4]@11 ~, c3@15 ~", F: "[c4,e4,g4] ~@15, [c3,g3] ~@7",
  G: "~@4 [f3,f4,a4,c5] ~ [f3,f4,a4,c5] ~@5 [f4,a4,c5] ~@3, ~@6 f3 ~", // F
  H: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~ c3@2 [c4,e4,g4] ~ [c4,e4] ~ c3 ~, ~@6 g4 ~", // Bb C
  I: "f3 ~@3 [f4,a4,c5] ~ [f4,a4,c5] ~@3 f3 ~ [f4,c5]@2 ~@2, ~@12 a4 ~@3", // F F5
  J: "f3@2 ~@2 [f4,a4,c5] ~ [f4,a4,c5] ~@3 f3 ~ [f4,a4,c5] ~@3", // F
  K: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~@3", // Bb C
  L: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@3 bb2 ~ [bb3,d4,f4]@2 ~@2", // Bb
  M: "~@4 [bb3,db4,f4] ~ [bb3,db4,f4] ~@3 bb2 ~ [bb3,db4,f4] ~@3", // Bbm
  N: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@3 g3 ~ [c4,e4,g4] ~ g3 ~, c3@15 ~", // C
  O: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ g3 ~", // C
  P: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ g3 ~, c3@13 ~@3", Q: "[c4,e4,g4] ~@15, c3 ~@7",
  R: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~@3 c4 ~ [f4,a4,c5] ~@3, f3@3 ~", // F
  S: "[bb3,d4,f4]@3 ~ [bb3,d4,f4]@2 g3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2", // Bb C
  T: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~@3 c4 ~ [f4,a4,c5] ~ bb2@2, f3@3 ~", // F
  U: "[bb3,d4,f4]@3 ~ [bb3,d4] ~ g3 ~ [c4,e4,g4]@3 ~ c4!2 ~@2, ~@4 f4@2 ~@2 c3 ~@3 [e4,g4]@2 ~@2", // Bb C Em
  V: "[bb3,d4,f4]@3 ~ [bb3,d4] ~ g3 ~ [c4,e4,g4]@3 ~ [c4,e4] ~@3, ~@2 f4 ~@3 g4 ~", // Bb C
  W: "[f3,f4,a4,c5] ~ a1@2 bb1@2 b1@2, c4 ~@15", // F
  X: "~@2 [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~ [c3,c4,e4,g4] ~, c2@2 d2@2 eb2@2 e2 ~", // C
  Y: "[bb3,d4,f4]@3 ~ [bb3,d4] ~ c3@2 [c4,e4,g4]@3 ~ [c4,e4] ~@3, ~@2 f4 ~@3 g4 ~", // Bb C
  Z: "f3@2 ~@2 [f4,a4,c5] ~ [f4,c5]@2 ~@2 bb2 ~ [f4,a4,c5] ~@3, ~@6 a4 ~@9", // F F5 F
  AA: "[d4,f4]@3 ~ [d4,f4]@2 g3 ~ [c4,e4,g4]@3 ~ [e4,g4]@2 ~@2, bb2@4 bb3 ~@7 c4 ~@3", // Dm C Em
  AB: "f3@3 ~ [f4,a4,c5] ~ [f4,a4,c5] ~@3 f3 ~ [f4,a4,c5] ~ bb2 ~", AC: "[f3,f4,a4,c5] ~@15",
  AD: "~@2 [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~", // C
  AE: "[~@4 [f3,a3,c4] ~ [f3,a3,c4] ~@3 c3 ~ [a3,c4]@2 ~@2 bb3 ~@3 [bb3,d4,f4] ~ [bb3,d4,f4] ~ g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~, f2@12 f3 ~ bb2@7 ~@11]/2", // F Am Bb C
  AF: "c3 ~@3 [f3,a3,c4] ~ [f3,a3,c4] ~@3 f2 ~ [f3,a3,c4] ~ bb2@2", // F
  AG: "bb3@2 ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~ g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // Bb C
  AH: "c3 ~ f2 ~ [f3,a3,c4] ~ [f3,a3,c4] ~@3 f2 ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  AI: "bb2 ~@3 [bb3,d4,f4] ~ [bb3,d4,f4] ~ g3 ~ c3@2 [c4,e4,g4] ~ [c4,e4,g4] ~", // Bb C
  AJ: "c3 ~ f2 ~ [f3,a3,c4] ~ [f3,a3,c4] ~@3 f2 ~ [f3,a3,c4] ~ bb2@2", // F
  AK: "bb3@2 d4 ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // Bb C
  AL: "[c4,e4,g4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~@3 g3 ~ [c4,e4,g4]@2 g3 ~", // C
  AM: "[~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~ g3 ~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 g3 ~ [c4,e4] ~ g3 ~, c3@15 ~, ~@14 g4 ~]/2", // C
  AN: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ g3 ~, c3@15 ~", // C
  AO: "c3@2 ~@2 [g3,bb3,e4] ~ [g3,bb3,e4]@2 ~@2 [g3,bb3,e4]@2 c3 ~ [g3,bb3,e4] ~", // Edim
  AP: "[g3,bb3] ~ c3 ~ [g3,bb3,e4] ~ [g3,bb3,e4]@3 ~ [bb3,e4]@2 c3 ~ [g3,bb3,e4] ~, e4@2 ~@8 g3 ~@5", // Gm Edim Bbdim Edim
  AQ: "[g3,bb3] ~@3 c3 ~ [g3,bb3,e4]@3 ~ [g3,bb3,e4]@2 c3 ~ [g3,bb3,e4] ~, e4 ~@7", // Gm Edim
  AR: "[bb3,e4]@2 c3 ~@3 [g3,bb3,e4]@2 ~@2 [g3,bb3,e4]@2 c3 ~ [g3,bb3,e4] ~, g3 ~@15", AS: "[g3,bb3,e4] ~@15",
  AT: "[~@8 [c4,e4,g4]@4 g3 ~ [c4,e4,g4]@4 g3@2 [c4,e4,g4]@2 g3 ~ [c3,c4,e4,g4]@4 ~@2 [c4,e4,g4]@4 c3@2 [c4,e4,g4]@2 c4@2 [c3,c4,e4,g4]@5 ~ [c3,c4,e4,g4]@4 g3 ~ [c4,e4,g4]@2 c3 ~ [c3,e4,g4]@2 ~@2 [bb3,e4,g4] ~ [bb3,e4,g4] ~, ~@8 c3@12 ~@10 c3 ~@7 g3 ~@17 c4 ~@7]/4", // C Edim
  AU: "[bb3,e4,g4] ~ [bb3,e4,g4] ~ [bb3,e4,g4] ~ [bb3,e4,g4] ~@5 [f3,f4,a4,c5] ~ [f3,f4,a4,c5] ~", // Edim F
  AV: "~@4 [f4,a4,c5] ~@7 [bb3,d4,f4] ~ [bb3,d4,f4] ~, ~@2 f3 ~@5", // F Bb
  AW: "c3@2 [c4,e4,g4] ~ [c4,e4] ~ c3 ~ f3 ~@3 [f4,a4,c5] ~ [f4,a4,c5] ~, ~@2 g4 ~@5", // C F
  AX: "~@2 f3 ~ [f4,c5]@2 ~@6 [bb3,d4,f4] ~ [bb3,d4,f4] ~, ~@4 a4 ~@11", // F5 Bb
  AY: "~@2 f3 ~ [f4,a4,c5] ~@7 [bb3,d4,f4] ~ [bb3,d4,f4] ~", // F Bb
  AZ: "c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~@7 [bb3,d4,f4] ~ [bb3,d4,f4] ~", // C Bb
  BA: "~@2 bb2 ~ [bb3,d4,f4]@2 ~@6 [bb3,db4,f4] ~ [bb3,db4,f4] ~", // Bb Bbm
  BB: "[~@2 bb2 ~ [bb3,db4,f4] ~@7 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ g3 ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~, ~@8 c3@15 ~@9]/2", // Bbm C
  BC: "[~@4 [c4,e4,g4] ~ g3 ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ g3 ~ [c4,e4,g4] ~@7, ~@8 c3@13 ~@3 c3@2 ~@6]/2", // C
  BD: "[~@12 [f4,a4,c5] ~ [f4,a4,c5] ~@3 c4 ~ [f4,a4,c5] ~@3 [bb3,d4,f4]@3 ~ [bb3,d4] ~ c3@2, ~@4 f3@6 ~@4 f4 ~]/2", // F Bb
  BE: "[c4,e4,g4]@3 ~ [c4,e4] ~@3 f3@2 ~@2 [f4,a4,c5] ~ [f4,c5]@2, ~@4 g4@2 ~@8 a4 ~", // C F F5
  BF: "~@2 bb2 ~ [f4,a4,c5] ~@3 [d4,f4]@3 ~ [d4,f4]@2 g3 ~, ~@8 bb2@4 bb3 ~@3", // F Dm
  BG: "[c4,e4,g4]@3 ~ [e4,g4]@2 ~@2 f3@3 ~ [f4,a4,c5] ~ [f4,a4,c5] ~, ~@4 c4 ~@11", // C Em F
  BH: "~@2 f3 ~ [f4,a4,c5] ~ bb2 ~ [bb3,d4,f4]@3 ~ [bb3,d4] ~ g3 ~, ~@6 f4 ~", // F Bb
  BI: "[c4,e4,g4]@3 ~ [c4,e4] ~@3 [f3,f4,a4,c5] ~@7, ~@2 g4 ~@5", // C F
  BJ: "~@10 [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~", // C
  BK: "[[c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~ [c3,g3,c4,e4,g4] ~@5 [f3,a3,c4] ~ [f3,a3,c4] ~@3 c3 ~ [a3,c4]@2 ~@2 bb3 ~@3 [bb3,d4,f4] ~ [bb3,d4,f4] ~, ~@8 f2@12 f3 ~ bb2@7 ~@3]/2", // C F Am Bb
  BL: "g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ c3 ~@3 [f3,a3,c4] ~ [f3,a3,c4] ~", // C F
  BM: "~@2 f2 ~ [f3,a3,c4] ~ bb2@2 bb3@2 ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~", // F Bb
  BN: "g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ c3 ~ f2 ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // C F
  BO: "~@2 f2 ~ [f3,a3,c4] ~ [f3,a3,c4] ~ bb2 ~@3 [bb3,d4,f4] ~ [bb3,d4,f4] ~", // F Bb
  BP: "~@2 f2 ~ [f3,a3,c4] ~ bb2@2 bb3@2 d4 ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // F Bb
  BQ: "g3 ~ c3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4]@3 ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  BR: "[~@2 g3 ~ [c4,e4,g4]@2 g3 ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~ g3 ~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 g3 ~ [c4,e4] ~ g3 ~ [c3,c4,e4] ~@7, ~@4 c3@15 ~@5, ~@18 g4 ~ g4 ~@3]/3", // C
  BS: "~@12 [f3,f4,a4,c5] ~ [f3,f4,a4,c5] ~", // F
})).s("gm_piano").gain(0.64)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@45 A@4 B@2 C D C E F@2 G@3 H ~@20 B@2 C D C E I@2 G@3 H ~@2 J K L M N@2 O@2 P@2 Q@4 R@6 S@6 ~@20 T@6 U@6 ~
>`.pickRestart({
  A: "[~@24 [bb5,bb6] ~@7, [c5,c6]@25 ~@7, ~@8 [e5,e6]@17 ~@7, ~@16 [g5,g6]@9 ~@7]/4", // Bb C E G
  B: "[[a4,c5,a5,c6]@15 ~ [bb4,d5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~, [f4,f5]@21 ~@11]/2", // Am Bb C F
  C: "[f4,a4,c5,f5,a5,c6]@15 ~", D: "[f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~",
  E: "[f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@8 ~@2", // Bb C
  F: "[[d5,d6]@15 ~ [db5,db6]@15 ~, [bb4,f5,bb5,f6]@31 ~, [gb5,gb6] ~@31]/2", G: "[[g4,c5,e5,g5,c6,e6]@47 ~]/3",
  H: "[g4,c5,e5,g5,c6,e6] ~@7", I: "[[bb4,d5,f5,d6]@16 [db5,db6]@15 ~, [bb5,f6]@31 ~, [gb5,gb6] ~@31]/2",
  J: "c4@2 ~@2 [g4,bb4,e5] ~ [g4,bb4,e5]@2 ~@2 [g4,bb4,e5]@2 c4 ~ [g4,bb4,e5] ~", // Edim
  K: "[g4,bb4] ~ c4 ~ [g4,bb4,e5] ~ [g4,bb4,e5]@3 ~ [bb4,e5]@2 c4 ~ [g4,bb4,e5] ~, e5@2 ~@8 g4 ~@5", // Gm Edim Bbdim Edim
  L: "[g4,bb4] ~@3 c4 ~ [g4,bb4,e5]@3 ~ [g4,bb4,e5]@2 c4 ~ [g4,bb4,e5] ~, e5 ~@7", // Gm Edim
  M: "[bb4,e5]@2 ~ c4 ~@2 [g4,bb4,e5]@2 ~@2 [g4,bb4,e5]@2 c4 ~ [g4,bb4,e5] ~, g4 ~@15", // Bbdim Edim
  N: "[[g4,bb4,e5] ~@3 c6 ~ c6 ~ c6@4 ~@2 f5@6 ~@12]/2", O: "[~@4 c6 ~ c6 ~ c6@5 ~ f5@6 ~@12]/2",
  P: "[~@4 c6 ~ c6 ~ c6@6 f5@7 ~@11]/2",
  Q: "[~@8 [c4,g4]@28 ~@4 c6@15 ~ [c5,g5,c6]@2 ~@2 [c5,e5,g5,c6]@2 ~@2, ~@8 [c5,e5,g5]@47 ~ e5 ~@7]/4", // C5 C
  R: "[[c5,e5,g5,c6]@2 ~@2 [c5,e5,g5,c6]@2 ~@2 [a4,c5,a5,c6]@15 ~ [bb4,d5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~ [f4,a4,c5,f5,a5,c6]@15 ~ [f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~ [f4,a4,c5,f5,a5,c6]@15 ~ [f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@2, ~@8 [f4,f5]@21 ~@67]/6", // C Am Bb C F Bb C F …
  S: "[~@8 [d5,d6]@15 ~ [db5,db6]@15 ~ [g4,c5,e5,g5,c6,e6]@47 ~ [g4,c5,e5,g5,c6,e6]@2 ~@6, ~@8 [bb4,f5,bb5,f6]@31 ~@57, ~@8 [gb5,gb6] ~@87]/6", // D Db C Bb5 Gb
  T: "[~@8 [a4,c5,a5,c6]@15 ~ [bb4,d5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~ [f4,a4,c5,f5,a5,c6]@15 ~ [f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@9 ~ [f4,a4,c5,f5,a5,c6]@15 ~ [f4,bb4,d5,f5,bb5,d6]@5 ~ [g4,c5,e5,g5,c6,e6]@2, ~@8 [f4,f5]@21 ~@67]/6", // Am Bb C F Bb C F Bb …
  U: "[~@8 [d5,d6]@15 ~ [db5,db6]@15 ~ [g4,c5,e5,g5,c6,e6]@47 ~@9, ~@8 [bb4,f5,bb5,f6]@31 ~@57, ~@8 [gb5,gb6] ~@87]/6", // D Db C Bb5 Gb
})).s("gm_rock_organ").gain(0.56)

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

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

// drums · clap
const clap = s("cp").struct(`<
  ~@9 A@10 B ~ A@26 B ~ A@10 B ~ A@18 B ~ A@10 B ~ A@6 C B@7 D E C B@9 D E C B@17 D E C B@9 D E ~
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "~@2 x!2 ~@2 x ~", C: "~@3 x", D: "~@2 x!2 ~@2 x!2", E: "~ x ~@2",
})).gain(0.74)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!98 [~ x ~@2 x!4] [x!8]!53 x>").gain(0.74)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@7 A ~@3 A ~@5 B ~@5 B ~@3 B ~@7 B ~@3 B ~@7
  B ~@7 B ~@3 B ~@7 B ~@4
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.74)

// drums · cowbell
const cowbell = s("cb").struct("<~@27 A@2 ~@6 A@2 ~@30 A@2 ~@58 B A C ~@5 B A C ~@16>".pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "~@6 x!2", C: "~@2 x!2 ~@4",
})).gain(0.74)

// drums · congas
const congas = s("conga:18").struct("<~@99 [~@5 x ~ x] [~ x ~@3 x ~ x]!5 [~ x ~@6] ~@48>").gain(2.36)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@99
  [~ x]
  [~@2 x!2 ~@4]
  [~@2 x!3 ~@3]
  [~@2 x!2 ~@4]
  [~@2 x!3 ~@3]
  [~@2 x!2 ~@4]!2
  ~@48
>`).gain(2.36)

stack(bass, piano, rock_organ, kick, snare, clap, hihat, crash, cowbell, congas, congas_2)