Strudelify
Those Were the Days cover art

Those Were the Days 2018

Those Were the Days

Mary Hopkins

KeyA minorTempo127 bpm
0:00/0:00
// Those Were the Days — Mary Hopkins
// 127 bpm, 2/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 34, 4/4 at bar 59, 2/4 at bar 80, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 201 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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: edit a riff to change every repeat.

// bass · fretless bass
const bass = note(`<
  ~@6 A@3 B@7 C@6 D@4 E@5 F@2 G@2 H I J@5 K L M N O@7 P Q R@2 S T N U V W X@5 Y@3 Z AA AB@2 AC AD AE@2 AF AG AH AI AJ AK
  AL AM AN AI AO AP AQ AR S AP AG@2 AS AI AT@4 AU AV@2 AW AX AY@8 AZ@6 BA@2 BB BC BD@2 BE BF BC@2 BA BG BH@2 BG@3 BA BB
  BC BH@2 BA BG BA BG BA BI BJ BC@2 BK BL BA@2 BM BN@2 BO@3 BP@2 BQ@2 L BR BS BT BU@3 BV BW@3 BX BY@2 AD BZ@6 CA CB@2 CC
  CD@2 CE CF@3 CG@3
>`.pickRestart({
  A: "[~@14 a2@2 ~@3 a2@2 ~@4 a2@6 ~@5 a2@2 ~@4 a2@2 ~@4, ~@8 a1@19 ~@4 a1@17]/3",
  B: "[a2@5 ~@5 a2@2 ~@4 a2@3 ~@3 a2@6 ~@6 a2@2 ~@4 a2@2 ~@4 a2@5 ~@5 a2@2 ~@3 a2@2 ~@4 a2@5 ~@6 a2@2 ~@3 a2@2 ~@4 a2@6 ~@6 d3@2 ~@4 d3@2 ~@3, ~@5 a1@19 ~@5 a1@19 ~@3 a1@17 ~@4 a1@19 ~@4 d2@17]/7",
  C: "[~ d3@5 ~@5 d3@2 ~@3 d3@2 ~@4 d3@7 ~@6 d3@2 ~@4 d3@2 ~@4 d3@5 ~@5 d3@2 ~@4 d3@2 ~@3 d3@5 ~@5 a2@2 ~@5 a2@3 ~@4 a2@4, ~@6 d2@19 ~@4 d2@19 ~@4 d2@17 ~@4 a1@21 ~@2]/6",
  D: "[~@8 a2@2 ~@4 a2@2 ~@3 a2@5 ~@7 b2@2 ~@3 b2@2 ~@3 b2@5 ~@6 b2@2 ~@4 b2@3 ~@3, ~@2 a1@18 ~@4 b1@19 ~@4 b1@17]/4",
  E: "[~ b2@7 ~@9 e3@4 ~@6 e3@3 ~@4 e3@6 ~@5 e3@2 ~@3 e3@2 ~@4 e3@6 e2@15 ~@3, ~@4 e2@14 ~@2 e2@9 ~@11]/5",
  F: "[~ e2@4 ~@2 e2@16 ~@5 e2@4]/2", G: "[~@2 a1@10 ~@3 a1@3 ~@2 a1@11 ~]/2", H: "~ a1 ~ d2@5", I: "~@2 d2 ~ d2@4",
  J: "[~@5 d2@3 ~@2 g2@10 ~@3 g2@3 ~ g2@10 ~@4 g2@3 ~ c2@11 ~@3 c2@2 ~@2 c2@10 ~@3 c2@3 ~]/5", K: "~ d2@11 ~@2 d2@2",
  L: "~@3 d2@10 ~@3", M: "d2@3 ~@2 a1@11", N: "~ a1 ~ a1@5",
  O: "[~@4 a1@2 ~@2 e2@11 ~@3 e2@2 ~@2 e2@11 ~@3 e2@2 ~@2 a1@10 ~@3 a1@3 ~@2 a1@10 ~@3 a1@2 ~@2 a1@10 ~@3 a1@2 ~ a1@10 ~@3 a1@2 ~@2]/7",
  P: "d2@10 ~@3 d2@2 ~", Q: "~ d2@10 ~@3 d2@2", R: "[~@2 e2@10 ~@3 e2@2 ~@2 e2@10 ~@3]/2", S: "e2 ~ a1@5 ~",
  T: "~ a1@2 ~@2 a1@10 ~", U: "~@3 a1@2 ~@2 a1@9", V: "~@2 a1 ~ a1@4", W: "~@4 a1@2 ~@3 a1@7",
  X: "[~@6 a1 ~@3 a1@11 ~@2 a1 ~@3 d2@10 ~@3 d2@2 ~@2 d2@10 ~@3 d2@2 ~@2 d2@12 a1@4 ~ d2 ~]/5",
  Y: "[~@2 d2@5 ~@3 d2@2 ~@2 a1@10 ~@3 a1@2 ~@2 a1@10 ~@3 a1@2 ~@2]/3", Z: "b1@11 ~@3 b1@2", AA: "~@3 b1@12 ~",
  AB: "[~ b1@3 ~@2 e2@15 b1@5 ~ e2@2 ~@3]/2", AC: "e2@6 ~@5 e2@3 ~@2", AD: "e2@7 ~",
  AE: "[~@2 e2@3 ~@3 e2@15 ~@5 e2@4]/2", AF: "~@3 a1@10 ~@3", AG: "a1 ~ a1@5 ~", AH: "a1@2 ~@2 d2@9 ~@3",
  AI: "d2@2 ~@2 d2@9 ~@3", AJ: "d2@2 ~@2 g2@9 ~@3", AK: "g2 ~ g2@5 ~", AL: "g2@2 ~@2 c2@9 ~@3", AM: "c2@2 ~@2 c2@9 ~@3",
  AN: "c2 ~ d2@5 ~", AO: "d2 ~ a1@5 ~", AP: "a1@2 ~@2 a1@9 ~@3", AQ: "a1 ~ e2@5 ~", AR: "e2 ~ e2@5 ~",
  AS: "a1 ~ d2@5 ~", AT: "[d2@2 ~@2 e2@9 ~@2 e2@2 ~@3 e2@9 ~@2 e2@2 ~@3 a1@9 ~@2 a1@2 ~@3 a1@10 ~@2]/4",
  AU: "a1@2 ~ a1@10 ~@3", AV: "[a1@2 ~ a1@9 ~@3 a1@2 ~@2 a1@10 ~@3]/2", AW: "a1@2 ~@2 a1@9 ~@2 a1", AX: "~@3 a1@11 ~@2",
  AY: "[a1 ~@2 d2@9 ~@3 d2@2 ~@2 d2@9 ~@3 d2@2 ~@2 d2@11 ~ a1@4 d2 ~@3 d2@5 ~@3 d2@2 ~@2 a1@10 ~@2 a1@2 ~@2 a1@9 ~@3 a1@2 ~@2 b1@10 ~@2 b1@2 ~@2 b1@10 ~@3]/8",
  AZ: "[b1@3 ~@2 e2@14 e2 ~@4 e2@2 ~@3 e2@7 ~@4 e2@2 ~@3 e2@14 ~@4 e2@3 ~@3 e2@15 ~@5 e2@4 ~@3]/6",
  BA: "a1@9 ~@3 a1@2 ~@2", BB: "d2@5 ~ d2 ~", BC: "d2@9 ~@3 d2@2 ~@2", BD: "g2@5 ~ g2 ~", BE: "c2@5 ~ c2 ~",
  BF: "c2@9 ~@3 c2@2 ~@2", BG: "a1@5 ~ a1 ~", BH: "e2@9 ~@3 e2@2 ~@2", BI: "a1@12 a1 ~@3",
  BJ: "a1 ~@3 a1@5 ~@3 a1@2 ~@2", BK: "d2@12 d2 ~@3", BL: "d2 ~@3 d2@5 ~@3 d2@2 ~@2", BM: "b1@11 ~@2 b1@2 ~",
  BN: "[~@2 b1@11 ~@2 b1@3 ~@3 e2@11]/2", BO: "[~@4 e2 ~@4 e2@14 ~@3 e2@2 ~@3 e2@14 ~@3]/3",
  BP: "[e2@4 ~@3 e2@16 ~@4 e2@4 ~]/2", BQ: "~ a1@5 ~ a1", BR: "d2@2 ~@2 d2@11 ~", BS: "~ d2@2 ~@2 g2@11",
  BT: "~@3 g2@3 ~ g2@9", BU: "[~@5 g2@3 ~@2 c2@11 ~@3 c2@3 ~@2 c2@12 ~@3 c2@3 ~]/3", BV: "~ d2@12 ~@3",
  BW: "[~ d2@3 ~@2 d2@13 ~@3 d2@3 ~@2 a1@13 ~@4 a1@3 ~]/3", BX: "~ a1@7", BY: "[~@3 a1@3 ~@3 e2@14 ~@3 e2@3 ~@3]/2",
  BZ: "[~ e2@3 ~@3 a1@14 ~@3 a1@3 ~@3 a1@14 ~@3 a1@3 ~@3 a1@14 ~@3 a1@3 ~@3 a1@14 ~@3 a1@3]/6", CA: "~@3 d2@13",
  CB: "[~@4 d2@3 ~@3 d2@14 ~@3 d2@3 ~@2]/2", CC: "~ e2@14 ~", CD: "[~@2 e2@3 ~@3 e2@14 ~@4 e2@3 ~@3]/2", CE: "a1@7 ~",
  CF: "[~ a1@3 ~@3 a1@13 ~@5 a1 ~@4 a1@13 ~@5]/3", CG: "[a1 ~@4 a1@35 ~@8]/3",
})).s("gm_fretless_bass").gain(0.24)

// chords · piano · "Accoustic Grand Piano"
const piano = note(`<
  ~@29 A@2 B@2 C D@5 E@3 F G H I@8 J@2 K L@2 M@6 N@2 O@5 P Q@4 R@3 S T U V W X Y Z@2 AA@2 AB AC@2 AD AE AF AG@2 AH AC
  AI@2 AJ@2 AK AL@4 AM@5 AN@8 AO@2 AP AQ AR AS AT AU AP AQ AV AW AX AY AZ AW AZ BA AQ BB AY@2 AW@2 BC BD BE BF@2 BG BH
  BI@2 BJ BK BL BM BN@6 BO BP BQ@7 BR@4 BS@3 BT@7 BU@2 BV BW@3 BX@5 ~@2
>`.pickRestart({
  A: "[~@7 [c4,d4,e4,g#4]@3 ~@3 [c4,d4,e4,g#4]@3, ~@5 e3@3]/2", // Caug
  B: "[~@7 e4@7 ~@14 b4@4, ~@7 [b3,d4]@23 ~@2, ~@7 g#4@14 g#4@10 ~, ~@14 e4@17 ~]/2", C: "~@3 [a3,c4,e4]@13",
  D: "[c4@2 e4@2 [a3,c4,e4]@14 c4@2 e4@2 d4@4 ~@5 f4@4 a4@3 ~@2 d4@4 ~@5 f4@4 a4@3 ~@2 g3@4 ~@4 b3@5 d4@3 ~ [b3,d4,f4,g4]@5, ~@22 a3@15 ~@3 a3@15 ~@3 b3@8 ~@14, ~@22 f4@9 ~@9 f4@9 ~@13 g3@11 ~@7, ~@26 d4@11 ~@7 d4@11 ~@3 d4@13 ~@9]/5", // Am G7
  E: "[~@4 [b3,d4,f4,g4]@5 ~@4 [g3,c4,e4]@18 [g3,c4,e4]@4 ~@5 [g3,c4,e4]@5 ~@3, g2@9 ~@26 c3@9 ~@4]/3", // G7 C
  F: "~ [a3,d4,f4]@4 ~@5 [a3,d4,f4]@5 ~, ~@5 d3@9 ~@2", G: "~@3 [a3,d4,f4]@4 ~@5 [a3,d4,f4]@4, ~@7 d3@9",
  H: "~@5 [a3,c4,e4]@11", // Am
  I: "[~@2 c4@2 e4@2 [a3,c4,e4]@14 c4@2 e4@2 [b3,d4,e4,g#4]@14 g#4@2 b4@2 e4@4 ~@5 g#4@4 b4@3 ~@2 [a3,c4,e4]@13 c4@2 ~ e4@2 [a3,c4,e4]@13 c4@2 e4@2 [a3,c4,e4]@12 c4@2 ~ e4 ~@9 c#4@4 e4@2 ~@2, ~@42 [b3,d4]@15 ~@54 c#4@9 ~@8, ~@42 g#4@9 ~@65 a3@9 ~@3, ~@46 e4@11 ~@54 [e4,g4,a4]@14 ~@3]/8", // Am E7 Am Bm A7
  J: "[~ [a3,d4,f4]@12 f4@2 a4@2 [a3,d4,f4]@5 ~@4 [a3,d4,f4]@5 ~, ~@11 d3@4 ~]/2", // Dm
  K: "~@2 [b3,d4,e4,g#4]@4 ~@5 [b3,d4,e4,g#4]@5, ~@3 e3@4 ~", L: "[~@3 [b3,d4,e4,g#4]@17 [a3,c4,e4]@12]/2",
  M: "[~ c4@2 e4@2 [a3,c4,e4]@13 c4@2 e4@2 [c4,e4,f#4,a4]@4 ~@4 [c4,e4,f#4,a4]@5 ~@4 [c4,e4,g4,a4]@13 c4@2 e4@2 ~@8 c4@5 e4@2 ~@2 [c#4,e4,g4,a4]@21 e4@2, ~@13 a2@4 ~@11 [e4,f#4,a4]@7 ~@13, ~@7 c4 ~@4, ~@20 a3@3 ~@9]/6", // Am F#m7b5 Am7 A7 F#m7
  N: "[~@2 c#4@5 a3@4 [a3,d4,f4]@17 [b3,d4,f4,a4]@4]/2", // Dm Bm7b5
  O: "[~@4 [b3,d4,f4,a4]@5 ~@25 a4@4 f4@5 d4@3 [c4,e4,g4,a4]@5 ~@4 [c4,e4,g4,a4]@5 ~@3 [c4,e4,f#4,a4]@5 ~@4 [c4,e4,f#4,a4]@5 ~@3, d3@8 ~@5 [a3,d4,f4]@24 ~@14 a2@8 ~@9 a2@8 ~@4]/5", // Bm7b5 Am7 F#m7b5 Dm
  P: "[f#3,b3,d#4]@5 ~@4 [f#3,b3,d#4]@5 ~@2, ~@5 b2@9 ~@2", // B
  Q: "[~@2 b3@5 ~@5 d#4@5 f#4@3 ~@2 [e4,g#4,b4]@17 ~@2 e4@6 ~@6 g#4@6 b4@2 ~@3, ~@2 [a3,f#4]@16 ~@4 e2@37 ~@5, ~@2 d#4@10 ~@27 b4@20 ~@5, ~@7 b3@12 ~@21 g#4@13 ~@11, ~@12 e4@3 ~]/4", // E D
  R: "[e4@6 ~@12 c5@4 ~@2 [b3,d4,e4,g#4]@7 ~@6 [b3,d4,e4,g#4]@8 ~@3, [c4,d4]@20 ~@11 e3@13 ~@4, g#4@4 g#4@3 ~@9, ~@3 e4@7 ~@14]/3", // E7 Csus2
  S: "~ [a3,c4,e4]@3", T: "c4 e4 [a3,c4,e4]@6", U: "c4 e4 d4@2 ~@2 f4@2, ~ a3@3, ~ f4@2 ~, ~ d4",
  V: "a4 ~ [a3,d4,f4]@6", W: "f4 a4 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@2, ~ g2", X: "~ [b3,d4,f4,g4] ~ [b3,d4,f4,g4], ~ g2",
  Y: "~ [g3,c4,e4]@3", Z: "[e4 g4 [g3,c4,e4]@8 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2, ~@3 d3]/2",
  AA: "[~ [a3,d4,f4]@4 [a3,c4,e4] ~ [a3,c4,e4], ~@3 a2]/2", AB: "~ [a3,c4,e4] ~ [a3,c4,e4], ~ a2",
  AC: "~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4], ~ e3", AD: "~ a3 ~ c4, ~ e4@3, ~ c4@2 ~, ~ a3", AE: "e4 ~ [a3,c4,e4]@6",
  AF: "c4 e4 a3@2 ~@2 c4@2, ~ e4@3, ~ c4@2 ~, ~ a3",
  AG: "[e4 ~ [c#4,e4,g4,a4]@8 d4@2 ~@2 f4@2, ~@5 a3@3, ~@5 f4@2 ~, ~@3 d4]/2", // A7
  AH: "a4 ~ [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2, ~ d3", AI: "[~ [b3,d4,e4,g#4]@4 a3 ~ c4, ~@5 e4@3, ~@5 c4@2 ~, ~@3 a3]/2",
  AJ: "[e4@2 ~ a3@4 ~@4 c4@4 e4@2 ~@2 [c4,e4,f#4,a4]@4 ~@4 [c4,e4,f#4,a4]@4 ~, ~@3 e4@12 ~@17, ~@3 c4@8 ~@21, ~@7 a3@10 ~@6 a2@8 ~]/2", // F#m7b5
  AK: "~@3 [c4,e4,g4,a4]@4 ~@4 [c4,e4,g4,a4]@4 ~, ~@7 a2@8 ~", // Am7
  AL: "[~@11 c4@4 e4@2 ~@2 e4@20 e4@4 c#4@4 a3@3 ~ [a3,d4,f4]@4 ~@4 [a3,d4,f4]@4 ~, ~@3 [e4,f#4,a4]@14 ~@47, ~@3 c4@8 ~@8 [c#4,g4,a4]@23 ~@22, ~@7 a3@8 ~@40 d3@8 ~]/4", // Dm F#m7 A7
  AM: "[~@3 [b3,d4,f4,a4]@16 [d4,f4,a4]@14 ~ d4@4 ~@5 f4@4 a4@2 ~@2 [c4,e4,g4,a4]@16 [c4,e4,f#4,a4]@12 c4, ~@19 d2@28 ~@33, ~@33 a4@14 ~@33, ~@33 f4@10 ~@37, ~@39 d4@9 ~@32]/5", // Bm7b5 Dm Am7 F#m7b5
  AN: "[~ e4@2 [b3,d#4,f#4]@12 d#4@2 f#4@2 [a3,b3,d#4,f#4]@18 ~@24 b4@6 g#4@5 e4@5 e4@6 ~@12 c5@4 ~@2 [b3,d4,e4,g#4]@27, ~@37 [g#3,b3,e4]@29 ~@11 [c4,d4]@20 ~@31, ~@77 g#4@12 g#4@9 ~@30, ~@83 e4@14 ~@31]/8", // B B7 E7 E Csus2
  AO: "[a3,c4,e4]@6 c4 e4", AP: "d4@2 ~@2 f4@2 a4 ~, a3@7 ~, f4 ~, ~@2 d4@5 ~",
  AQ: "[a3,d4,f4] ~ [a3,d4,f4] ~, ~ d3@2 ~", AR: "[g3,b3,d4]", AS: "[b3,d4,f4,g4]", AT: "[g3,c4,e4]@6 e4 g4",
  AU: "[g3,c4,e4] ~ [g3,c4,e4] ~, ~ c3@2 ~", AV: "[a3,c4,e4]", AW: "[a3,c4,e4] ~ [a3,c4,e4] ~, ~ a2@2 ~",
  AX: "[b3,d4,e4,g#4]", AY: "[b3,d4,e4,g#4]@6 g#4 b4", AZ: "a3@2 ~@2 c4@2 e4 ~, e4@3 ~, c4 ~, ~@2 a3@5 ~",
  BA: "[c#4,e4,g4,a4]", BB: "[a3,d4,f4]", BC: "[c4,e4,f#4,a4]@6 c4 e4",
  BD: "~@4 c4@2 e4 ~, [e4,g4,a4]@7 ~, c4 ~, ~ a3@2 ~", BE: "~@4 c4@2 e4 ~, [e4,f#4,a4]@7 ~, c4 ~, ~ a3@2 ~",
  BF: "[~ [c#4,e4,g4,a4]@29 ~@2]/2", BG: "[a3,d4,f4]@6 f4 a4", BH: "[b3,d4,f4,a4]@6 f4 a4",
  BI: "[~@20 a4@4 f4@4 d4@3 ~, [a3,d4,f4]@23 ~@9]/2", BJ: "[c4,e4,g4,a4]",
  BK: "[c4,e4,f#4,a4] ~ [c4,e4,f#4,a4] ~, ~ a2@2 ~", BL: "b3@4 ~@5 d#4@4 f#4@3, f#3@15 ~, d#4@9 ~@7, ~@4 b3@11 ~",
  BM: "~@2 b3@4 ~@5 d#4@5, ~ [a3,f#4]@7, ~@2 d#4@9 ~@5, ~@3 b3@5", // D
  BN: "[f#4@3 ~@38 g#4@4 ~@2 [c4,d4,e4,g#4]@24 e4@6 ~@14 b4@4 ~, ~@4 [g#4,b4]@32 ~@35 g#4@13 g#4@10 ~@2, ~@4 e4@26 e4@15 ~@26 [b3,d4]@23 ~@2, ~@4 e3@20 ~ e3@21 ~@31 e4@16 ~@3, ~@20 e2@23 ~@53]/6", // Caug G#m Bm
  BO: "~@2 [a3,c4,e4]@4 ~@4 [a3,c4,e4]@5 ~, ~@3 a2@4 ~", BP: "~@2 [a3,c4,e4]@13 c4",
  BQ: "[~ e4@2 d4@4 ~@4 f4@4 a4@2 ~@3 d4@4 ~@4 f4@5 a4@3 ~ [g3,b3,d4]@18 ~@14 d4@3 ~@2 c4@5 ~@9 g4@3 ~@2 [g3,c4,e4]@19, ~@3 a3@15 ~@2 a3@15 ~@20 b3@10 b3@7 ~@7 c4@12 ~@21, ~@3 f4@8 ~@9 f4@8 ~@32 g3@9 ~@5 g3@16 ~@22, ~@7 d4@10 ~@7 d4@11 ~@20 [d4,f4,g4]@16 ~@3 e4@10 e4@7 ~@21]/7", // G C G7
  BR: "[~ d4@5 ~@6 f4@5 a4@3 ~@2 [a3,d4,f4]@21 a3@6 ~@5 c4@6 e4@3 ~, ~ a3@18 ~@30 a3@13 ~@2, ~ f4@11 ~@31 e4@17 ~@4, ~@6 d4@13 ~@24 c4@11 ~@10]/4", // Dm
  BS: "[~@2 [a3,c4,e4]@17 c4@3 e4@3 ~@11 [b3,d4,e4,g#4]@6 ~@6, ~@25 [b3,d4,e4,g#4]@8 ~@15, ~@30 e3@11 ~@7]/3", // Am E7
  BT: "[[b3,d4,e4,g#4]@17 g#4@3 b4@3 [a3,c4,e4]@23 [a3,c4,e4]@23 a3@6 ~@11 e4@3 ~@3 [c#4,e4,g4,a4]@18 c#4@2, ~@69 e4@17 ~@26, ~@69 c4@12 c4@8 ~@23, ~@75 a3@14 ~@23]/7", // E7 Am A7
  BU: "[~ e4@2 d4@6 ~@11 a4@3 ~@3 [a3,d4,f4]@6, ~@3 a3@20 ~@9, ~@3 f4@12 f4@8 ~@9, ~@9 d4@14 ~@9]/2", // Dm
  BV: "~@3 [a3,d4,f4]@3 ~@2, d3@11 ~@5", // Dm
  BW: "[~ e4@6 ~@6 g#4@6 b4@3 ~@2 e4@6 ~@6 g#4@6 b4@3 ~@3, ~ [b3,d4]@20 ~@3 [b3,d4]@20 ~@4, ~ g#4@12 ~@11 g#4@12 ~@12, ~@7 e4@14 ~@9 e4@14 ~@4]/3", // Bm
  BX: "[a3@5 ~@6 c4@6 e4@3 ~@3 [a3,c4,e4]@23 [a3,c4,e4,a4]@23 ~@11, e4@17 ~@63, c4@11 ~@69, ~@5 a3@14 ~@61]/5", // Am
})).s("gm_piano").gain(0.24)

// chords · piano · "Seq by Darla"
const piano_2 = note("<~@6 A@6 B@4 C@6 D@8 ~@171>".pickRestart({
  A: "[~@8 c4@6 ~@11 c4@6 ~@17 c4@5 ~@17 c4@6 ~@12 f#3@6 c4@2, ~@8 a2@23 a2@22 a2@24 a2@19, ~@14 e3@17 ~@5 e3@17 ~@5 e3@18 ~@6 e3@14, ~@19 a3@11 ~ c4@8 ~@3 f#3@11 c4@8 ~@3 g3@13 ~@19]/6",
  B: "[~@30 g3@5 ~@6 g3@6 ~@12 d4@5, ~@3 a2@44 ~@17, ~@8 e3@21 ~@6 e3@12 d3@17, ~@11 g3@8 e4@28 f4@9 ~@8, ~@13 c#4@34 ~@6 a3@11]/4",
  C: "[~ f4@5 ~@16 f4@7 ~@28 d4@5 ~@6 d4@5 ~@19 c4@4, ~@6 d3@23 d3@43 ~ a2@23, ~@11 a3@19 ~@5 a3@22 ~@6 a3@10 ~@5 e3@18, ~@16 b3@13 ~@9 d4@9 a4@26 ~@23, ~@41 f4@32 ~@12 g3@11]/6",
  D: "[~@19 c4@5 ~@17 d#4@5 ~@19 d#4@7 ~@37 e4@5 ~@6 e4@6 ~@2, ~@2 a2@22 b2@22 ~ b2@25 ~@14 e4@12 b4@28 ~@2, ~@8 e3@16 ~@12 b3@10 ~@12 a3@14 ~@9 b3@27 ~@6 b3@12 ~@2, ~@14 f#3@10 ~@7 f#3@16 ~@5 f#3@20 e3@54 ~@2, ~@91 g#4@35 ~@2]/8",
})).s("gm_piano").gain(0.2)

// chords · string ensemble 1 · "String Ensemble"
const string_ensemble_1 = note("<~@6 A@6 B@4 C@6 D@8 ~@165 E@2 F@2 ~@2>".pickRestart({
  A: "[~@8 [a3,c4,e4]@23 [c4,e4,f#4,a4]@22 [c4,e4,g4,a4]@24 [c4,e4,f#4,a4]@19]/6", // Am F#m7b5 Am7 F#m7b5
  B: "[~@3 [c#4,e4,g4,a4]@44 [a3,d4,f4]@17]/4", C: "[~@6 [b3,d4,f4,a4]@23 [a3,d4,f4]@43 ~ [c4,e4,g4,a4]@23]/6",
  D: "[~@2 [c4,e4,f#4,a4]@22 [f#3,b3,d#4]@22 ~ [a3,b3,d#4,f#4]@25 [g#3,b3,e4]@54 ~@2]/8", E: "[~@5 [e5,c6]@10 ~]/2",
  F: "[~ [e5,c6]@20 ~@11]/2", // C
})).s("gm_string_ensemble_1").gain(0.16)

// drums · kick
const kick = s("bd").struct(`<
  ~@29 A ~ B C D E F G H I J K C L M E N O H P Q R K C S L T M U V N W O X H Y P Z J AA K AB AC D F H AD AE AF C M E@22
  AG AH@2 AI AH@3 AI AH@5 M AJ G Z AK V AL AM@10 AN AM@19 AN AM@3 AN S D E AO AP ~ AQ AR AS@2 AH AT AU W H Z C AV F Y C
  D AW AX AE B AY AK V AZ BA M BB C AV G AX AE B AY AK ~@3
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@5 x ~@8", C: "~@3 x", D: "~ x ~@6", E: "x!2 ~@2", F: "~ x ~@4 x ~@9", G: "~@3 x ~@4 x ~@7",
  H: "~@5 x ~@4 x ~@5", I: "~@7 x ~@3 x ~@4", J: "~@9 x ~@3 x ~@2", K: "~@11 x ~@3 x", L: "~ x ~@12 x ~",
  M: "~@3 x ~@12", N: "~ x ~ x ~@4", O: "~ x!2 ~", P: "~@7 x ~@4 x ~@3", Q: "x ~@8 x ~@4 x ~", R: "~@10 x ~@4 x",
  S: "x ~@12 x ~@2", T: "~@2 x ~@12 x", U: "x ~@3 x ~@10 x", V: "~@5 x ~@10", W: "~@3 x ~@3 x ~@8",
  X: "~@5 x ~@3 x ~@6", Y: "~@6 x ~@4 x ~@4", Z: "~@8 x ~@4 x ~@2", AA: "~@5 x ~ x", AB: "~ x ~ x", AC: "x ~@6 x",
  AD: "x ~@10 x ~@4", AE: "x", AF: "~ x ~@2 x ~@3", AG: "~ x ~ x ~@11 x", AH: "~@3 x ~@11 x", AI: "~@3 x ~@3 x ~@7 x",
  AJ: "x ~@4 x ~@10", AK: "~@15 x", AL: "~@9 x ~@6", AM: "x ~@2 x", AN: "x!2 ~ x", AO: "~@4 x ~@4 x ~@4 x ~",
  AP: "~@9 x ~@5 x", AQ: "x ~@6 x ~@8", AR: "~@11 x ~@4", AS: "~ x ~@5 x", AT: "~ x ~@2", AU: "~ x ~@3 x ~@10",
  AV: "~ x ~@14", AW: "~@3 x ~@5 x ~@6", AX: "~@5 x ~@2", AY: "~@4 x ~@2 x", AZ: "~@3 x ~@2 x ~", BA: "~@13 x ~@2",
  BB: "~@2 x ~@2 x ~@2",
})).gain(0.28)

// drums · rim
const rim = s("rim").struct(`<
  A ~ B C D E ~@24 F ~ G C H I ~ J K B D L F M H I ~ J N G D O L P F C M ~ A@2 I ~ Q J K N B G D O L P M ~ Q G M ~ G
  M@22 ~ C@13 M A ~ K P ~ K L@35 P C A ~ B F ~ B F@2 C M A ~ J B O M ~ J D H ~ B C ~ K P ~ J L I ~ D H ~ B C ~@6
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@11 x ~@4", D: "~@3 x ~@4", E: "~ x ~@11 x ~@2", F: "~@5 x ~@2", G: "~@5 x ~@10",
  H: "~@13 x ~@2", I: "~@15 x", J: "~ x ~@14", K: "~ x ~@6", L: "~ x", M: "~@3 x", N: "~@3 x ~@12", O: "~@7 x ~@8",
  P: "~@9 x ~@6", Q: "x",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@57 [~@10 x ~@2 x ~@2] ~@43 [~@3 x] ~@94 [~ x ~@6] [~@9 x ~@6] ~@3>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@29 A B C D E F G H I E F J H I K F J L I K M N O P Q R J K S T U O P Q I J K V W U O X Y Z AA AB AC AD AE D H AF@2
  AG AF@15 AG AF@2 AH O@4 AI O@3 AI O@4 K Y AJ AK AL D AM AN AF@28 AN AF@4 AN F AO AP AQ AR B AS AT U@2 O P I K AU L Z
  AV AA@2 AV AW AX B AC AY AZ AR BA AV AK AL B AD AY BB B AC BC AZ BD ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@2 x ~@2 x ~@2", C: "~ x ~@5 x ~@6 x ~", D: "~@5 x ~@6 x ~@3", E: "~@2 x ~@4 x ~@3 x ~@4",
  F: "x ~@3 x ~@4 x ~@3 x ~@2", G: "~ x ~@4 x ~@3 x ~@4 x", H: "~@3 x ~@4 x ~@3 x ~@3", I: "~ x ~@3 x ~@4 x ~@3 x ~",
  J: "~@2 x ~@3 x ~@4 x ~@3 x", K: "~@3 x ~@3 x ~@4 x ~@3", L: "~@4 x ~@3 x ~@4 x ~@2", M: "x ~@4 x ~@3 x ~ x ~@2 x ~",
  N: "~@2 x ~@3 x ~@3 x ~@4 x", O: "~@3 x ~@3 x ~@3 x ~@3 x", P: "~ x!3", Q: "x ~@4 x ~@3 x ~@3 x ~@2",
  R: "~ x ~@4 x ~@3 x ~@3 x ~", S: "x", T: "~@5 x ~@3 x ~@4 x ~", U: "~ x ~ x ~ x ~ x", V: "x ~@3 x ~@3 x ~@4 x ~@2",
  W: "~ x ~@3 x ~@3 x ~@3 x ~@2", X: "~@2 x ~ x ~ x!2", Y: "x ~@4 x ~@3 x ~@4 x ~", Z: "~@2 x ~@4 x ~@4 x ~@3",
  AA: "~ x ~@4 x ~@4 x ~@4", AB: "x ~@4 x ~@4 x ~@5", AC: "x ~@4 x ~@5 x ~@4", AD: "x ~@2 x ~@2 x ~",
  AE: "~@2 x ~@5 x ~@6 x", AF: "x!4", AG: "x!3 ~ x ~ x ~", AH: "x ~ x ~ x!2 ~@2", AI: "~ x ~ x ~@3 x ~@3 x ~@3 x",
  AJ: "~@3 x ~@4 x ~@4 x ~@2", AK: "~@2 x ~@5 x ~@4 x ~@2", AL: "~@3 x ~@5 x ~@5 x", AM: "~@2 x ~@6 x ~@6",
  AN: "x ~ x ~ x ~ x!2", AO: "~@2 x ~@3 x ~@4 x ~@4", AP: "x ~@3 x ~@4 x ~@4 x ~", AQ: "~@4 x ~@4 x ~@4 x ~",
  AR: "~@4 x ~@4 x ~@5 x", AS: "x ~@6 x ~@5 x ~@2", AT: "~@4 x ~@6 x ~@4", AU: "~ x ~@3 x ~@4 x ~@4 x",
  AV: "~ x ~@4 x ~@5 x ~@3", AW: "~@2 x ~@4 x ~@5 x ~@2", AX: "~@3 x ~@5 x ~@4 x ~", AY: "~ x ~@5 x ~@5 x ~@2",
  AZ: "~ x ~@2 x ~@2 x", BA: "~@5 x ~@5 x ~@4", BB: "~@3 x ~@4 x ~@5 x ~", BC: "~ x ~@5 x ~@4 x ~@3", BD: "~@3 x ~@12",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@66 A ~@8 B ~@25 C ~@16 D ~@13 B ~@7 B ~@11 B ~@8 C ~@6 E ~@32>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x", D: "~@11 x ~@4", E: "~ x ~@14",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@58 [~ x ~@14] ~@142>").gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@58 A ~@43 B ~@42 C ~@49 D ~@5>".pickRestart({
  A: "~@5 x ~@10", B: "~@3 x ~@12", C: "x", D: "~@7 x ~@8",
})).gain(0.28)

stack(bass, piano, piano_2, string_ensemble_1, kick, rim, snare, hihat, open_hat, high_tom, crash)