Strudelify
Last Date cover art

1997

Last Date

The Spotnicks

KeyC majorTempo67 bpm
0:00/0:00
// Last Date — The Spotnicks
// 67 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 1) are rendered on a constant 2/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/2)

// 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.

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B C D E@2 F G H@2 I J K@2 L M N O P Q R S T U V@2 I W X@2 Y J Z@2 L M N O P AA AB@2 AC AD AE AF AG AD AH@2 AG AD AI
  AJ AK AL AM AN AO G AP@2 I AQ AR@2 AS D AT@2 AU M N AV P Q AB@2 ~@16 AO AW AX@2 I AY AZ@2 BA BB BC@2 L BD BE BF P BG
  BH@2 BI@3 ~
>`.pickRestart({
  A: "~@6 [g3,b3] ~@3 [g3,b3] ~", B: "[a3,c4] ~@3 [a3,c4] ~ [b3,d4] ~@3 [b3,d4] ~", C: "[c4,e4]@5 ~@7 [c5,a5,c6]@12",
  D: "[c5,g5,c6]@12 [g4,e5]@3 ~ d5@4 [g4,c5]@3 ~, ~@8 g4 ~@3", // C5 C C5
  E: "[~@12 c5@21 ~@3 [f4,a4]@2 ~@2 [e4,g4]@2 ~@2 [d4,f4]@2 ~@2, d5@17 ~@7, f4@13 ~@11, ~@8 a4@25 ~@15]/2", // F Em Dm
  F: "[c4,e4]@4 ~@8 [c5,g5,c6]@3 ~ [c5,g#5,c6]@2 ~@2 [c5,a5,c6]@3 ~", // C C5 Fm F
  G: "[c5,g5,c6]@2 ~ e5 d5 [g4,c5], ~@12 g4@3 ~ g4@2 ~@6", // C5
  H: "[~@6 c5@9 ~@3 [f4,a4] ~ [e4,g4] ~ [d4,f4] ~, [f4,d5]@31 ~@17, ~@8 a4@21 ~@19]/2", // F Em Dm
  I: "[c4,e4]@8 ~@4 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@3 ~", J: "[c5,g5,c6]@3 [g4,e5] d5 [g4,c5], ~@8 g4 ~@3",
  K: "[~@12 c5@25 ~@3 c4@4 [d4,c5]@3 ~, [f4,d5]@37 ~@11, ~@8 a4@29 ~@3 c5@2 ~@6]/2", L: "[e4,c5]@4 [d4,b4] [e4,c5]",
  M: "[f4,d5]@4 [e4,c5] [f4,d5]", N: "[g4,e5]@4 [f4,d5] [g4,e5]", O: "[a4,f5]@3 [f5,a5] [e5,g5] [d5,f5]",
  P: "[e5,g5]@11 ~ [e5,g5]@4 [d5,f5]@4 [c5,e5]@3 ~", Q: "[d5,f5]@11 ~ [d5,f5]@4 e5@4 [b4,d5]@3 ~, ~@8 c5 ~@3",
  R: "c5 ~@3 g5@2 ~@2 g5@2 e5@2, ~@4 c5@17 ~@3, ~@6 e5@11 ~@7, ~@12 c6@11 ~",
  S: "~@2 g5 ~ g5 d5, b4@17 ~@7, ~@4 d5@13 ~@7, ~@3 b5@2 ~",
  T: "~@12 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@3 ~, ~@12 a#5 ~@11", U: "[c5,g5,c6]@3 [g4,e5] [g4,d5] [g4,c5]",
  V: "[~@6 c5@10 ~@2 [f4,a4] ~ [e4,g4] ~ [d4,f4] ~, d5@17 ~@7, f4@23 ~@25, ~@8 a4@25 ~@15]/2", // F Em Dm
  W: "[c5,g5,c6]@3 e5 [g4,d5] [g4,c5], ~@4 g4 ~@3", // C5 G5 C5
  X: "[~@12 c5@19 ~@5 f4@4 [e4,g4]@4 [d4,f4]@4, d5@31 ~@17, f4@11 ~@13, ~@8 a4@22 ~@6 a4@3 ~@9]/2", // Em Dm
  Y: "[c4,e4]@7 ~@5 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@2 ~@2", // C C5 Fm F
  Z: "[~@12 c5@23 ~@5 c4@4 d4@3 ~, [f4,d5]@37 ~@11, ~@8 a4@29 ~@3 c5@7 ~]/2", // Dm
  AA: "[d5,f5]@11 ~ [d5,f5]@3 ~ e5@4 [b4,d5]@4, ~@8 c5 ~@3", // Dm Bm
  AB: "[c5 ~@3 g5@2 ~@2 g5@2 ~@8 c5@5 ~, ~@4 c5@28 e5@15 ~, ~@3 e5@5 ~@2 e5@4 g5@9 ~, ~@12 c6@35 ~, ~@24 a#5@23 ~]/2",
  AC: "a5 ~@3 f5@4 c5@4 a5@4 f5@4 c5@4", AD: "b5 g5 ~ b5 g5 d5, ~@8 d5@9 ~@7", AE: "~ g5 ~ c6 g5 a5, c6@8 e5@13 ~@3",
  AF: "[g5,a#5]@14 ~@2 c5 ~ c5 ~ c5@4", AG: "a5 f5 c5 a5 f5 c5",
  AH: "[c6@4 g5@4 ~@4 c6@4 g5@4 a5@4 [g5,a#5]@14 ~@2 c5 ~ c5 ~ c5@4, ~@4 e5@15 ~@5]/2", AI: "c6 g5 ~ c6 a5 b5, ~ e5@2",
  AJ: "[a5,b5,c6]@4 d5 e5", AK: "f5 e5 d5", AL: "c5 b4 a4", AM: "g4 b4 d5 ~ d5 g5, ~@12 b4@7 ~@5",
  AN: "d5@4 g5@4 b5 ~@3 [g5,b5,d#6]@10 ~@2", AO: "~@12 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@3 ~",
  AP: "[~@12 c5@17 ~@7 [f4,a4]@4 [e4,g4]@2 ~@2 [d4,f4]@2 ~@2, [f4,d5]@31 ~@17, ~@4 a4@11 ~@9]/2", // F Em Dm
  AQ: "[c5,g5,c6]@12 [g4,e5]@3 ~ [g4,d5]@3 ~ [g4,c5]@3 ~", // C5 C G5 C5
  AR: "[~@12 c5@19 ~@5 f4@4 [e4,g4]@3 ~ [d4,f4]@3 ~, d5@2 ~, f4@9 ~@7, ~@8 a4@22 ~@6 a4@3 ~@9]/2", // Em Dm
  AS: "[c4,e4]@6 ~@6 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@3 ~", // C C5 Fm F
  AT: "[~@12 c5@26 ~@2 c5@3 ~ [c4,c5]@2 ~@2, [f4,d5]@13 ~@3, ~@4 a4@15 ~@5]/2", // C Dm
  AU: "c4@3 ~ e4@12 [d4,b4]@4 [e4,c5]@4, c5@5 ~@3", AV: "[a4,f5]@3 a5 [e5,g5] [d5,f5], ~@3 f5@2 ~, ~@12 a4 ~@11",
  AW: "[c5,g5,c6]@11 ~ [g4,e5]@4 d5@4 [e4,c5]@4, ~@12 f5 ~@3 f4@2 ~@6", // C5 C
  AX: "[d5@8 g4 ~@3 c5@21 ~@3 [f4,a4]@2 ~@2 [e4,g4]@2 ~@2 [d4,f4]@2 ~@2, f4@11 ~@5, ~@8 a4@25 ~@15]/2", // F Em Dm
  AY: "[c5,g5,c6]@3 [g4,e5] [f4,d5] [e4,c5]", // C5 C Dm C
  AZ: "[~@12 c5@19 ~@5 f4@4 [e4,g4]@4 [d4,f4]@4, d5@2 ~, f4@9 ~@7, ~@8 a4@22 ~@6 a4@3 ~@9]/2", // Em Dm
  BA: "[c4,e4]@4 ~@8 [c5,g5,c6]@3 ~ [c5,g#5,c6]@3 ~ [c5,a5,c6]@3 ~", // C C5 Fm F
  BB: "[c5,g5,c6]@11 ~ e5@4 d5@4 [e4,c5]@4, ~@12 g4@3 ~ f4@2 ~@6", // C5 C
  BC: "[~@12 c5@25 ~@3 c4@4 d4@4, d5@37 ~@3 c5@2 ~@2 c5@2 ~@2, f4@2 ~, ~@8 a4@27 ~@13]/2",
  BD: "[f4,d5]@16 [e4,c5]@4 [f4,d5]@3 ~", BE: "[g4,e5]@16 [f4,d5]@4 [g4,e5]@3 ~",
  BF: "a4@12 [f5,a5]@4 [e5,g5]@4 [d5,f5]@3 ~, f5@5 ~@7", BG: "[d5,f5]@11 ~ [a4,f5]@4 [g4,e5]@4 [f4,d5]@4",
  BH: "[[e4,c5]@21 ~@2 [a4,f5]@14 ~ [g4,e5]@10]/2", BI: "[~@4 d5@11 [e4,c5]@36 ~@21, ~@3 f4@11 ~@58]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B C D E B C F E B G H I J K L M N O P E Q R S T B C S E B C S I J K L M N U V H W U B H X T Y H W Z AA AB AC AD
  P E B C S E B C S E B C S I J K AE M AF U B H AG T B H AH E B H AI Z AJ AB AC AD P AK AL C S AK B AM S AN B C S I AO K
  L M AF AP AQ AR@3 ~
>`.pickRestart({
  A: "c2@9 ~ c2 ~", B: "c2 e2", C: "f2@15 ~@5 c2@4", D: "f2@11 ~ f1@10 ~@2", E: "c2@15 ~@5 g1@4", F: "f2@12 f2@11 ~",
  G: "f2@19 ~ c2@4", H: "f2@17 ~@3 f2@4", I: "c2@9 ~ c2@2", J: "d2@9 ~ d2@2", K: "e2@9 ~ e2@2",
  L: "f2@15 ~ f2@3 ~ f2@4", M: "g2@15 ~ g2@3 ~ g2@3 ~", N: "g1@4 a1 b1", O: "c2@15 ~ b1@4 a1@3 ~",
  P: "g1@11 ~ g2@8 g1@4", Q: "c2@12 e2@11 ~", R: "f2@4 ~ c2", S: "f2@11 ~ f1@4 g1@4 a1@4", T: "c2@17 ~@3 g1@4",
  U: "c2@5 g1", V: "c2@3 ~ c2@10 ~@2 c2@4 e2@4", W: "g2@4 g1 a1", X: "g2@12 g1@7 ~ a1@4", Y: "c2@3 ~ c2@12 e2@7 ~",
  Z: "c2 b1", AA: "a1 g2", AB: "f2 e2", AC: "d2 c2", AD: "b1 a1", AE: "f2@9 ~ f2@2", AF: "g1@5 ~ g1@2 a1@2 b1@2",
  AG: "g2@19 ~ g1@4", AH: "g2@14 ~@2 g2@3 ~ g1@4", AI: "g2@3 g1 a1 b1", AJ: "a1@12 g1@11 ~", AK: "c2@7 ~@3 g1@2",
  AL: "c2@11 ~ e2@12", AM: "f2@7 ~@3 c2@2", AN: "c2@13 ~@7 g1@4", AO: "d2@7 ~@3 d2@2", AP: "~ c2@23",
  AQ: "~ f2@13 e2@10", AR: "[~@2 d2@13 c2@57]/3",
})).s("gm_acoustic_bass").gain(0.51)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@2 A B C D E B F G H B F C I J K L M N K O P Q R S T B C S U Q V@2 I W I X Y Z AA AB AC AD AE AF AC AD AG@2 AH AI AJ
  AK AL AM AN AO AP AQ F AR U AS F AT U Q F C I AU I AV Q W AS AW AX AY AZ@2 BA BB BC BD BA AY BE BF BG BH BI BJ BK Q BL
  S U Q C S AP B F BM I BN BO BP I BQ BR@2 BS@3 ~
>`.pickRestart({
  A: "[e4,g4] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,a4,c5]@2 ~@2 [e4,a4] ~@3 [e4,a4] ~@3, c5 ~@7 c5 ~ c5 ~", // Em C Am A5
  B: "[g4,c5]@2 ~@2 [e4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [g4,c5] ~@3 [e4,g4,c5] ~@3, e4 ~@3 g4@2 ~@10 e4@2 ~@6", // C5 C C5 C
  C: "[f4,a4] ~@3 [f4,a4,c5] ~@3 [a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4] ~@3, c5 ~@3 f4 ~@3 c5 ~ c5 ~", // F Am F
  D: "[a4,c5]@2 ~@2 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4]@3 ~ [e4,g4] ~@3 [d4,f4]@2 ~@2, f4 ~@3 c5@2 ~@6 c4@8 ~@4", // Am F Em Dm
  E: "[e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,g#4,c5]@2 ~@2 [e4,c5]@2 ~@2, c4@8 ~@4 c5@2 ~@6 a4 ~@3", // C Em Eaug C
  F: "[f4,a4] ~@3 [a4,c5]@2 ~@2 [f4,a4] ~@3 [f4,c5]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@3, c5@2 ~@2 f4 ~@3 c5@2 ~@2 a4 ~@3 c5@2 ~@2 c5@2 ~@2", // F Am F F5 F
  G: "[f4,c5]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@3 [c4,f4,a4]@3 ~ [c4,e4,g4]@2 ~@2 [c4,f4]@2 ~@2, a4 ~@3 c5@2 ~@2 c5@2 ~@10 d4 ~@3", // F5 F C F5
  H: "e4@2 ~@2 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,g4,c5]@2 ~@2 [e4,g#4]@2 ~@2 [e4,a4] ~@3, c4@8 c5@2 ~@6 c5 ~@3 c5@2 ~@2", // C Em C E A5
  I: "[e4,g4,c5]@2 ~@2 [e4,g4] ~@3 [e4,g4] ~@3 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5] ~@3, ~@2 c5 ~ c5 ~@7", // C Em C
  J: "[d4,g4,b4]@3 ~ [d4,g4,b4]@2 ~@2 [d4,g4] ~@3 [d4,g4,b4]@2 ~@2 [g4,b4]@2 ~@2 [d4,g4] ~@3, b3, ~@8 b4@2 ~@6 d4 ~@3 b4@2 ~@2", // G G5 G G5
  K: "[e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4] ~@3 [g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4] ~@3, c4@5 ~, ~@8 c5@2 ~@2 e4 ~@7 c5@2 ~@2", // C Em C5 C Em
  L: "[f4,a4] ~@3 [f4,a4] ~@3 [f4,a4]@2 ~@2 [f4,a4]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@3, [a3,c4]@19 ~@5", // F Am
  M: "[e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3, c4@5 ~, ~@6 c5 ~@5", // C Em C
  N: "[g4,b4]@2 ~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3, b3@2 ~, d4 ~@11 b4@2 ~@10", // G G5 G
  O: "[d4,g4]@6 ~@2 g4@2 b4 ~, b3@5 ~, b4@2 ~, ~@4 d4@3 ~", // G5
  P: "[e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,c5]@2 ~@2 [e4,c5]@2 ~@2, c4@2 ~@6 g4 ~@7 g#4 ~@3 a4 ~@3", // C
  Q: "[e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,g4,c5]@2 ~@2 [e4,g4] ~@3 [g4,c5]@2 ~@2, ~@8 c5@2 ~@6 c5@2 ~@2 e4 ~@3", // C Em C Em C5
  R: "[f4,a4] ~@3 [f4,c5]@2 ~@2 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3, c5@2 ~@2 a4 ~@7 c5@2 ~@6 c5@2 ~@2", // F F5 F
  S: "[f4,c5]@2 ~@2 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4,c5]@3 ~ [e4,g4,c5] ~@3 [d4,f4,c5]@2 ~@2, a4 ~@7 c5@2 ~@14", // F5 F C Dm7
  T: "[g4,c5] ~@3 [g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5]@2 ~@2 [e4,g#4,c5]@2 ~@2 [e4,c5]@2 ~@2, e4@4 e4@4 ~@12 a4 ~@3", // C5 C Eaug C
  U: "[e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5] ~@3 [e4,g4,c5]@2 ~@2 [e4,g#4,c5]@2 ~@2 [e4,a4,c5]@2 ~@2", // C Eaug Am
  V: "[f4,c5]@2 ~@2 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4] ~@3 [f4,a4,c5] ~@3, a4 ~@3 c5@2 ~@2 c5@2 ~@2 c5@2 ~@2 c5@2 ~@6", // F5 F
  W: "[g4,b4]@2 ~@2 [g4,b4]@2 ~@2 [g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4] ~@3, d4 ~@3 d4 ~@3 d4 ~@11 b4@2 ~@2", // G G5
  X: "[f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3", // F
  Y: "[e4,g4] ~@3 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5] ~@3, c4@17 ~@7, c5 ~@11", // Em C
  Z: "[d4,g4,b4]@2 ~@2 [g4,b4]@2 ~@2 g4 ~@7 g4@4 d4@2 ~@2, b3@23 ~, ~@4 d4 ~@3 d4@9 ~@7, ~ b4", // G
  AA: "[e4,g4,c5]@2 ~@2 [g4,c5]@2 ~@2 [e4,g4] ~@3 [e4,g4] ~@3 [g3,g4]@3 ~ a3@4, c4@7 ~ e4@4, ~@4 e4 ~@3 c5@2 ~@2 c5@2 ~@6 a4@2 ~@2", // C C5 Em G
  AB: "[e4,g4,a#4,c5]@2 ~@2 [e4,g4,a#4,c5]@2 ~@2 [e4,g4,a#4,c5] ~@3 [e4,g4,a#4,c5]@2 ~@2 [a#4,c5]@2 ~@2 [e4,g4,c5] ~@3, a#3@5 ~@3, ~@2 c4@14 [e4,g4] ~@3 a#4@2 ~@2", // C7 A#sus2 C Em
  AC: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5,f5] ~@3 [c5,f5]@2 ~@2 [a4,c5,f5]@2 ~@2 [a4,c5,f5] ~@3, f4@23 ~, f5@2 ~@2 f5@2 ~@6 a4 ~@11", // Am F F5 F
  AD: "[b4,d5] ~@3 [b4,d5,g5] ~@3 [b4,d5] ~@3 [b4,d5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3, g4@17 ~@7, g5 ~@3 g5 ~ g5 ~@5", // Bm G Bm G
  AE: "[g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5]@2 ~@2 [a4,c5,e5]@3 ~, e4@11 ~", // C Am
  AF: "[a#4,c5]@2 ~@2 [a#4,c5,e5]@2 ~@2 [a#4,c5] ~@3 [a#4,c5,e5]@2 ~@2 [a#4,c5,e5]@2 ~@2 [a#4,c5] ~@3, c4@3 ~, e5 ~@7 e5@2 ~@2 d5@12, ~@12 e4@7 ~ e5@2 ~@2", // A#sus2 C7 A#sus2 C7 A#sus2
  AG: "[[g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5]@2 ~@2 [a4,c5,e5]@2 ~@2 [a#4,c5,e5]@2 ~@2 [c5,e5]@2 ~@2 [a#4,c5] ~@3 [a#4,c5,e5]@2 ~@2 [a#4,e5] ~@3 [a#4,c5,e5] ~@3, e4@35 ~@13, ~@8 e5@2 ~@18 a#4 ~@3 e5@2 ~@6 c5@2 ~@6]/2", // C C5 C Am C7 C A#sus2 C7 …
  AH: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5,f5] ~@3 [a4,c5] ~@3, f4, f5 ~ f5 ~ f5 ~ f5 ~@3 f5 ~", // Am F Am
  AI: "[b4,d5] ~@3 [b4,d5] ~@3 [b4,d5] ~@3 [b4,d5] ~@3 [d5,g5]@2 ~@2 [b4,d5,g5] ~@3, g4@19 ~@5, g5@2 ~@2 g5@2 ~@2 g5@2 ~@2 g5@2 ~@2 b4 ~@7", // Bm G5 G
  AJ: "[g4,e5]@2 ~@2 [g4,c5] ~@3 [g4,c5] ~@3 [g4,b4] ~@3 [b4,e5]@2 ~@2 [g4,b4] ~@3, e4@10 ~@6 g4 ~@7, c5 ~@3 e5@2 ~@2 e5@2 ~@2 e5@2 ~@6 e5@2 ~@2", // C C5 G E5 G
  AK: "[c5,e5]@2 ~@2 [a4,c5,e5]@2 ~@2 [a4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [g4,c5] ~@3 [g4,c5,e5]@2 ~@2, a4 ~@15 e5@2 ~@6", // C Am C C5 C
  AL: "[a4,c5] ~@3 [c5,f5]@2 ~@2 [c5,f5]@2 ~@2 [c5,e5]@2 ~@2 [c5,e5]@2 ~@2 [a4,c5,e5]@2 ~@2, f5@2 ~@2 a4 ~@3 a4 ~@3 a4 ~@3 a4 ~@7", // Am F5 C Am
  AM: "[a4,c5] ~@3 [a4,c5] ~@3 [a4,c5,f5]@2 ~@2 [a4,d5,f5]@2 ~@2 [a4,f5]@2 ~@2 [a4,c5] ~@3, f5@2 ~@2 f5@2 ~@10 c5 ~@3 f5@2 ~@2", // Am F Dm Am
  AN: "[b4,f5] ~ [g4,b4,d5,f5] ~ [g4,b4,f5] ~ [g4,b4,d5,f5] ~ [g4,f5] ~ [b4,d5,f5] ~, [g4,d5] ~@7 d5 ~@7 [b4,d5] ~@3 g4 ~@3", // Bdim G7 Bdim G5 Bm
  AO: "[g4,b4,d#5] ~ [g4,b4,d#5] ~ [g4,b4,d#5] ~ [g4,b4,d#5]@5 ~", // Gaug
  AP: "[e4,c5] ~@3 [e4,g4] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5]@2 ~@2 [e4,g#4,c5]@2 ~@2 [e4,c5]@2 ~@2, g4@2 ~@2 c5@2 ~@14 a4 ~@3", // C Em C Eaug C
  AQ: "[e4,g4,c5] ~@3 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [g4,c5]@2 ~@2, ~@20 e4 ~@3", // C C5
  AR: "[f4,a4] ~@3 [f4,a4] ~@3 [f4,a4,c5] ~@3 a4@4 [e4,g4]@4 f4@4, c5@2 ~@2 c5@2 ~@4 c4@9 ~ d4@2 ~@2, ~@4 f4 ~@3", // F Em
  AS: "[e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4] ~@3 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [g4,c5]@2 ~@2, ~@8 c5@2 ~@10 e4 ~@3", // C Em C C5
  AT: "[f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,c5]@2 ~@2 [f4,a4,c5]@3 ~ [e4,g4,c5]@2 ~@2 [f4,c5]@2 ~@2, ~@8 a4 ~@11 d4 ~@3", // F F5 F C F5
  AU: "[d4,f4,g4,b4] ~@3 [d4,g4,b4]@2 ~@2 [d4,b4]@2 ~@2 [d4,f4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2, ~@8 [f4,g4] ~@7 f4 ~@7", // G7 G G7 G Fsus2
  AV: "[f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4,c5]@2 ~@2 [f4,c5] ~@3 [f4,a4,c5] ~@3, c5 ~@3 c5 ~@3 a4 ~@3", // F F5 F
  AW: "[e4,g4,a#4] ~@3 [e4,c5]@2 ~@2 [e4,a#4,c5]@2 ~@2 [e4,g4,a#4] ~@3 [e4,g4,a#4,c5] ~@3 [e4,g4,a#4,c5] ~@3, c5@2 ~@2 [g4,a#4] ~@3 g4 ~@3 c5@2 ~@10", // Edim C C7 Edim C7 Gm
  AX: "a5 c5 f5 a5 c5 f5 a5 c5 f5 ~ c5 f5, ~@9 a5@2 ~", AY: "b5 d5 g5 b5 d5 g5 b5 d5 g5 ~ d5 g5, ~@9 b5@2 ~",
  AZ: "[~@2 e5@2 g5@2 c6@2 e5@2 g5@2 ~@2 e5@2 g5@2 e5@2 a5@2 ~@2 [a#5,c6]@7 ~@5 [a#5,d6]@3 ~ [a5,c6]@3 ~ [g5,a#5]@2 ~@2, c6@2 ~@4 c6@5 e5@6 ~@7]/2", // A#sus2 A# Am Gm
  BA: "a5 c5 f5 a5 c5 f5 a5 ~ f5 a5 c5 f5, ~@7 c5@2 ~@3",
  BB: "b5 d5 g5 ~@2 g5 ~@2 g5 ~ d5 g5, ~@3 b5@2 ~ b5@2 ~ b5@2 ~, ~@4 d5@2 ~ d5@2 ~@3",
  BC: "~ e5 g5 c6 e5 g5 c6 e5 g5 ~ e5 g5, c6@2 ~@7 c6@2 ~",
  BD: "a#5@2 e5@2 g5@2 a#5@2 e5@4 [a#5,d6]@3 ~ [a5,c6]@2 ~@2 [g5,a#5]@2 ~@2", // A# Am Gm
  BE: "c6 e5 g5 ~ e5 g5 b5 e5 g5 b5 e5 g5, ~@6 c6@4 ~@2 c6 ~@11",
  BF: "a5 ~ e5 ~ c5 e5 g5 c5 e5 ~ c5 e5, ~ c5@2 a5@2 ~@4 g5@2 ~",
  BG: "~@4 c5@2 f5@2 ~@2 f5@2 e5@2 ~@2 c5@2 e5@2 c5@3 ~, f5 ~@5, ~ a4@3 c5@2 ~ a4@5", BH: "d5@8 c5@7 ~ b4@8",
  BI: "g4 b4 d5 g5 b4 d5 g5 b5 d5 g5 b5 ~", BJ: "[g5,b5,d#6]@3 d#5 b4 g4",
  BK: "~@4 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5]@2 ~@2 [e4,g#4,c5]@2 ~@2 [e4,c5]@2 ~@2, ~@20 a4 ~@3", // C Eaug C
  BL: "f4@2 c5 ~ [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3, a4 ~@3 c5@2 ~@6 c5@2 ~@10", // F
  BM: "[f4,c5]@2 ~@2 [f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5]@2 ~@2 [e4,g4,c5] ~@3 [d4,f4] ~@3, a4 ~@3 c5@2 ~@14 c5@2 ~@2", // F5 F C Dm
  BN: "[d4,g4,b4]@2 ~@2 [g4,b4]@2 ~@2 [d4,g4] ~@3 [d4,g4,b4]@2 ~@2 [g4,b4]@2 ~@2 [d4,g4] ~@3, c5, ~@4 d4 ~@3 b4@2 ~@6 d4 ~@3 b4@2 ~@2", // G G5 G G5
  BO: "[e4,g4] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,c5]@2 ~@2 [e4,g4,c5] ~@3, c5@2 ~@10 c5@2 ~@2 g4 ~@7", // Em C Em C
  BP: "[f4,a4] ~@3 [f4,a4,c5] ~@3 [f4,a4] ~@3 [f4,a4,c5]@3 ~ [e4,g4,c5]@2 ~@2 [d4,f4,c5]@2 ~@2, c5 ~@3 c5 ~@7", // F C Dm7
  BQ: "[d4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4] ~@3 [g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,g4] ~@3, ~@8 b4@2 ~@2 d4 ~@7 b4@2 ~@2", // G G5 G G5
  BR: "[[e4,g4,c5]@18 ~@5 [a3,f4]@14 [g3,e4]@11]/2", // C Dm C
  BS: "[~@2 f3@9 ~@21 g4@9 ~@2 [c4,e4]@23 ~@6, ~@2 d4@18 e3@17 ~@35, ~@17 c3@11 e4@12 ~@32, ~@23 g3@42 ~@7, ~@25 c4@14 ~@2 a#3@24 ~@7]/3", // C
})).s("gm_piano").gain(0.41).pan(0.8)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A B C@2 D@2 E@2 F@2 E@2 G@2 H I J K L@2 M N O@2 G@2 P@4 Q@2 D@2 R@3 K S@5 T U@2 V T W@2 V X@3 Y@2 Z@2 AA@4 AB@4 E@2
  D@2 AC@3 AD@5 V T AE@2 AF T AE@2 V AG@3 AH@2 AI@2 E@2 D@2 E@2 D@2 E@2 AJ@2 AK@2 J K AL@2 AM@5 ~
>`.pickRestart({
  A: "~@12 [g4,b4]@2 ~@5 [g4,b4]@2 ~@3", B: "[a4,c5]@3 ~@5 [a4,c5]@2 ~@2 [b4,d5]@2 ~@6 [b4,d5]@2 ~@2",
  C: "[[g4,c5,e5]@47 ~]/2", D: "[[c5,f5]@17 ~ [f5,a5]@2 [e5,g5]@2 [d5,f5]@2, a4]/2", E: "[g4,c5,e5]/2",
  F: "[[a4,c5,f5]@9 [f5,a5] [e5,g5] [d5,f5]]/2", G: "[[c5,f5]@17 ~ [f5,a5]@2 [e5,g5]@2 [d5,f5]@2, a4@43 ~@5]/2",
  H: "~ e5@15 d5@4 e5@4, [g4,c5]@23 ~", I: "[g4,b4,d5,f5]@23 ~", J: "[g4,c5,e5,g5]", K: "[a4,c5,f5,a5]@23 ~",
  L: "[[c5,e5,g5]@24 [d5,g5]@23 ~, g4@15 ~]/2", M: "[g4,c5,e5]@23 ~", N: "[g4,d5,g5]@11 ~",
  O: "[[c5,e5]@47 ~, g4@7 ~]/2", // C
  P: "[~ e5@45 ~ [c5,f5]@36 ~ [f5,a5]@4 [e5,g5]@4 [d5,f5]@4, [g4,c5]@44 ~@3 a4@42 ~@7]/4", // F5 F Em Dm C5
  Q: "[~ e5@46 ~, [g4,c5]@47 ~]/2", R: "[~@4 d5 e5 f5@4 e5 f5 [c5,e5,g5]@6, [c5,e5]@17 ~@7 [b4,d5]@22 ~@26, ~ g4@71]/3",
  S: "[[c5,e5,g5]@23 ~ [d5,g5]@23 ~@25 a#4@23 ~ [a4,f5]@24, g4@73 ~@47, ~@24 c5@35 ~, ~@48 e5@49 ~@23]/5", // C G5 Dm
  T: "[b4,d5,g5]", U: "[g4@25 a#4@21 ~@2, [c5,e5]]/2", V: "[a4,c5,f5]",
  W: "[~@20 a4@4 a#4@23 ~, e5@47 ~, g4@5 ~@7, ~ c5@47]/2",
  X: "[[b4,d5]@12 c5@5 ~ b4@5 ~ a4@6 g4@6, g5@71 ~, ~@24 e5@47 ~, ~@48 c5@23 ~]/3", // Bm
  Y: "[f5 e5 d5 c5, a4@23 ~, c5 f5]/2", Z: "[d5@6 d#5@5 ~, [b4,g5]@15 ~]/2",
  AA: "[[g4,e5]@48 f5@35 ~ [f5,a5]@4 [e5,g5]@4 [d5,f5]@4, c5@83 ~@13, ~ a4]/4", // C F Em Dm
  AB: "[~ e5@47 f5@35 ~ [f5,a5]@4 [e5,g5]@4 [d5,f5]@4, g4 a4, ~ c5@82 ~@13]/4", // F Em Dm
  AC: "[~ [c5,e5]@23 [b4,d5,g5]@24 [c5,e5]@24, g4]/3", // C G C
  AD: "[~@12 a5@12 [e5,g5]@23 ~ [b4,d5,g5]@24 ~@24 a#4@23 ~, c5@46 ~@26 [c5,e5]@47 ~, [a4,f5] g4@4]/5", // Em G C Dm
  AE: "[g4@14 ~@2 g4@3 ~ a4@4 a#4@23 ~, [c5,e5]@47 ~]/2", AF: "~ a4@23, [c5,f5]@23 ~",
  AG: "[[b4,d5]@22 ~@2 c5@10 ~@2 b4@10 ~@2 a4@13 g4@11, g5@35 ~, ~@24 e5@47 ~, ~@48 c5@23 ~]/3", // Bm
  AH: "[f5 e5 f5@2, [a4,c5], ~@24 d5@13 ~@11]/2", AI: "[d5@6 d#5@5 ~, [b4,g5]@11 ~]/2",
  AJ: "[[c5,f5]@9 [f5,a5] [e5,g5] f5, a4, ~@22 d5 ~]/2", // F5 F Em
  AK: "[e5@16 d5@4 e5@4 f5@15 ~ e5@4 f5@3 ~, g4, c5@10 ~@2 [b4,d5]@11 ~]/2", AL: "[[c5,e5]@23 ~ d5@24, [g4,g5]@47 ~]/2",
  AM: "[[g4,c5,e5]@22 ~ f5@15 [g4,e5]@16 [f4,d5]@11 ~@14 c4@31 ~@10, ~@22 a4@16 ~@27 [e4,c5]@45 ~@10, ~@78 g4@31 ~@11]/5", // C Dm C
})).s("gm_rock_organ").gain(0.36).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A B A@3 B A@3 B A B A@3 B A B A B A B A B A B A B A B A@5 B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A@3 B A B A B A@3 B A@5 B A B A B A B A B A B A B A B A B A B@2 ~@5
>`.pickRestart({
  A: "x ~@4 x", B: "x",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct("<~@2 A@19 B A@19 B A@14 C D A@35 B A@18 ~@6>".pickRestart({
  A: "~ x", B: "~ x!5", C: "~@3 x ~ x", D: "x!6",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x ~ x!3 ~ x ~ x ~ x ~]!91 [x!6] [x ~ x!3 ~ x ~ x ~ x ~]!18 x ~@5>").gain(0.26)

// drums · crash
// … 5 more lines

More by The Spotnicks