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, A@4 for four bars: 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 K@2 P@2 Q R N S T U V@5 W@3 X Y Z@2 AA AB AC@2 AD AE AF AG AH AI
  AJ AK AL AG AM AE AN AO Q AE@3 AF AG AP@4 AE AQ@2 AR AD AS@8 AT@6 AU@2 AV@2 AW@2 AX@2 AV@2 AU@2 AY@2 AU@4 AV@2 AY@2
  AU@5 AZ BA AV@2 BB BC AU@2 X BD@2 BE@3 BF@2 BG@2 L AG BH BI BJ@3 BK BL@3 BM BN@2 AB BO@6 BP BQ@2 BR BS@2 BT BU@3 BV@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 ~@2 a1@2 ~@2 a1@10 ~@3 a1@2 ~@2]/7",
  P: "[~@2 e2@10 ~@3 e2@2 ~@2 e2@10 ~@3]/2", Q: "e2 ~ a1@5 ~", R: "~ a1@2 ~@2 a1@10 ~", S: "~@3 a1@2 ~@2 a1@9",
  T: "~@2 a1 ~ a1@4", U: "~@4 a1@2 ~@3 a1@7",
  V: "[~@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",
  W: "[~@2 d2@5 ~@3 d2@2 ~@2 a1@10 ~@3 a1@2 ~@2 a1@10 ~@3 a1@2 ~@2]/3", X: "b1@11 ~@3 b1@2", Y: "~@3 b1@12 ~",
  Z: "[~ b1@3 ~@2 e2@15 b1@5 ~ e2@2 ~@3]/2", AA: "e2@6 ~@5 e2@3 ~@2", AB: "e2@7 ~",
  AC: "[~@2 e2@3 ~@3 e2@15 ~@5 e2@4]/2", AD: "~@3 a1@10 ~@3", AE: "a1 ~ a1@5 ~", AF: "a1@2 ~@2 d2@9 ~@3",
  AG: "d2@2 ~@2 d2@9 ~@3", AH: "d2@2 ~@2 g2@9 ~@3", AI: "g2 ~ g2@5 ~", AJ: "g2@2 ~@2 c2@9 ~@3", AK: "c2@2 ~@2 c2@9 ~@3",
  AL: "c2 ~ d2@5 ~", AM: "d2 ~ a1@5 ~", AN: "a1 ~ e2@5 ~", AO: "e2 ~ e2@5 ~",
  AP: "[d2@2 ~@2 e2@9 ~@2 e2@2 ~@3 e2@9 ~@2 e2@2 ~@3 a1@9 ~@2 a1@2 ~@2 a1@10 ~@3]/4",
  AQ: "[a1@2 ~ a1@9 ~@3 a1@2 ~@2 a1@10 ~@3]/2", AR: "a1@2 ~@2 a1@9 ~@2 a1",
  AS: "[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@10 ~@2 a1@2 ~@2 b1@10 ~@2 b1@2 ~@2 b1@12 ~]/8",
  AT: "[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",
  AU: "a1@9 ~@3 a1@2 ~@2", AV: "d2@9 ~@3 d2@2 ~@2", AW: "g2@5 ~ g2 ~", AX: "c2@5 ~ c2 ~", AY: "e2@9 ~@3 e2@2 ~@2",
  AZ: "a1@12 a1 ~@3", BA: "a1 ~@3 a1@5 ~@3 a1@2 ~@2", BB: "d2@12 d2 ~@3", BC: "d2 ~@3 d2@5 ~@3 d2@2 ~@2",
  BD: "[~@2 b1@11 ~@2 b1@3 ~@3 e2@11]/2", BE: "[~@4 e2 ~@4 e2@14 ~@3 e2@2 ~@3 e2@14 ~@3]/3",
  BF: "[e2@4 ~@3 e2@16 ~@4 e2@4 ~]/2", BG: "~ a1@5 ~ a1", BH: "~ d2@2 ~@2 g2@11", BI: "~@3 g2@3 ~ g2@9",
  BJ: "[~@5 g2@3 ~@2 c2@11 ~@3 c2@3 ~@2 c2@12 ~@3 c2@3 ~]/3", BK: "~ d2@12 ~@3",
  BL: "[~ d2@3 ~@2 d2@13 ~@3 d2@3 ~@2 a1@13 ~@4 a1@3 ~]/3", BM: "~ a1@7", BN: "[~@3 a1@3 ~@3 e2@14 ~@3 e2@3 ~@3]/2",
  BO: "[~ 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", BP: "~@3 d2@13",
  BQ: "[~@4 d2@3 ~@3 d2@14 ~@3 d2@3 ~@2]/2", BR: "~ e2@14 ~", BS: "[~@2 e2@3 ~@3 e2@15 ~@3 e2@3 ~@3]/2", BT: "a1@7 ~",
  BU: "[~ a1@3 ~@3 a1@13 ~@5 a1 ~@4 a1@13 ~@5]/3", BV: "[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 C S@2 T U V W X@2 Y@2 Z AA@2 AB AC AD AE@2 AF AA AG@2
  AH@2 AI AJ@4 AK@5 AL@8 AM@2 AN AO AP AQ AR AS AN AO AT AU AV AW AX AU AX AY AO AZ AW@2 AU@2 BA BB BC BD@2 BE BF BG@2
  BH BI BJ BK BL@6 BM BN BO@7 BP@4 BQ@3 BR@7 BS@2 BT BU@3 BV@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]@4 ~@5 [a3,d4,f4]@5 ~, ~@21 d3@9 ~@2]/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: "[c4 e4 ~@6 c4 e4 d4@2 ~@2 f4@2, ~@4 [a3,c4,e4]@15 ~ a3@12, ~@5 f4@2 ~, ~@3 d4]/2", T: "a4 ~ [a3,d4,f4]@6",
  U: "f4 a4 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@2, ~ g2", V: "~ [b3,d4,f4,g4] ~ [b3,d4,f4,g4], ~ g2", W: "~ [g3,c4,e4]@3",
  X: "[e4 g4 [g3,c4,e4]@8 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2, ~@3 d3]/2", // C Dm
  Y: "[~ [a3,d4,f4]@4 [a3,c4,e4] ~ [a3,c4,e4], ~@3 a2]/2", Z: "~ [a3,c4,e4] ~ [a3,c4,e4], ~ a2",
  AA: "~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4], ~ e3", AB: "~ a3 ~ c4, ~ e4@3, ~ c4@2 ~, ~ a3", AC: "e4 ~ [a3,c4,e4]@6",
  AD: "c4 e4 a3@2 ~@2 c4@2, ~ e4@3, ~ c4@2 ~, ~ a3",
  AE: "[e4 ~ [c#4,e4,g4,a4]@8 d4@2 ~@2 f4@2, ~@5 a3@3, ~@5 f4@2 ~, ~@3 d4]/2", // A7
  AF: "a4 ~ [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2, ~ d3", // Dm
  AG: "[~@3 [b3,d4,e4,g#4]@17 a3@4 ~@4 c4@4, ~@5 e4@3, ~@5 c4@2 ~, ~@3 a3]/2", // E7
  AH: "[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
  AI: "~@3 [c4,e4,g4,a4]@4 ~@4 [c4,e4,g4,a4]@4 ~, ~@7 a2@8 ~", // Am7
  AJ: "[~@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
  AK: "[~@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
  AL: "[~ 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
  AM: "[a3,c4,e4]@6 c4 e4", AN: "d4@2 ~@2 f4@2 a4 ~, a3@7 ~, f4 ~, ~@2 d4@5 ~",
  AO: "[a3,d4,f4] ~ [a3,d4,f4] ~, ~ d3@2 ~", AP: "[g3,b3,d4]", AQ: "[b3,d4,f4,g4]", AR: "[g3,c4,e4]@6 e4 g4",
  AS: "[g3,c4,e4] ~ [g3,c4,e4] ~, ~ c3@2 ~", AT: "[a3,c4,e4]", AU: "[a3,c4,e4] ~ [a3,c4,e4] ~, ~ a2@2 ~",
  AV: "[b3,d4,e4,g#4]", AW: "[b3,d4,e4,g#4]@6 g#4 b4", AX: "a3@2 ~@2 c4@2 e4 ~, e4@3 ~, c4 ~, ~@2 a3@5 ~",
  AY: "[c#4,e4,g4,a4]", AZ: "[a3,d4,f4]", BA: "[c4,e4,f#4,a4]@6 c4 e4",
  BB: "~@4 c4@2 e4 ~, [e4,g4,a4]@7 ~, c4 ~, ~ a3@2 ~", BC: "~@4 c4@2 e4 ~, [e4,f#4,a4]@7 ~, c4 ~, ~ a3@2 ~",
  BD: "[~ [c#4,e4,g4,a4]@29 ~@2]/2", BE: "[a3,d4,f4]@6 f4 a4", BF: "[b3,d4,f4,a4]@6 f4 a4",
  BG: "[~@20 a4@4 f4@4 d4@3 ~, [a3,d4,f4]@23 ~@9]/2", BH: "[c4,e4,g4,a4]",
  BI: "[c4,e4,f#4,a4] ~ [c4,e4,f#4,a4] ~, ~ a2@2 ~", BJ: "b3@4 ~@5 d#4@4 f#4@3, f#3@15 ~, d#4@9 ~@7, ~@4 b3@11 ~",
  BK: "~@2 b3@4 ~@5 d#4@5, ~ [a3,f#4]@7, ~@2 d#4@9 ~@5, ~@3 b3@5", // D
  BL: "[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
  BM: "~@2 [a3,c4,e4]@4 ~@4 [a3,c4,e4]@5 ~, ~@3 a2@4 ~", BN: "~@2 [a3,c4,e4]@13 c4",
  BO: "[~ 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
  BP: "[~ 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
  BQ: "[~@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
  BR: "[[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
  BS: "[~ 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
  BT: "~@3 [a3,d4,f4]@3 ~@2, d3@11 ~@5", // Dm
  BU: "[~ 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
  BV: "[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 D E M N H I O P K C Q L R D S T M U G V H W I X J P K Y Z D F H AA AB AC C D E@22 AD
  AE@2 AF AE@3 AF AE@5 D E G X AG T AH AI@10 AJ AI@19 AJ AI@3 AJ Q AK E AL AM ~ B AN AO@2 AE D AP U H X C AQ F W C AK G
  AR AB B AS AG T AT A D H C AK G AR AB B AS AG ~@3
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@5 x ~@8", C: "~@3 x", D: "~@3 x ~@12", E: "x!2 ~@2", F: "~ x ~@4 x ~@9", G: "~@3 x ~@4 x ~@7",
  H: "~@5 x ~@4 x ~@5", I: "~@7 x ~@4 x ~@3", J: "~@9 x ~@3 x ~@2", K: "~@11 x ~@3 x", L: "~ x ~@12 x ~",
  M: "~ x ~ x ~@4", N: "~ x!2 ~", O: "x ~@8 x ~@4 x ~", P: "~@10 x ~@4 x", Q: "x ~@12 x ~@2", R: "~@2 x ~@12 x",
  S: "x ~@3 x ~@10 x", T: "~@5 x ~@10", U: "~@3 x ~@3 x ~@8", V: "~@5 x ~@3 x ~@6", W: "~@6 x ~@4 x ~@4",
  X: "~@8 x ~@4 x ~@2", Y: "~ x ~ x", Z: "x ~@6 x", AA: "x ~@10 x ~@4", AB: "x", AC: "~ x ~@2 x ~@3",
  AD: "~ x ~ x ~@11 x", AE: "~@3 x ~@11 x", AF: "~@3 x ~@3 x ~@7 x", AG: "~@15 x", AH: "~@9 x ~@6", AI: "x ~@2 x",
  AJ: "x!2 ~ x", AK: "~ x ~@6", AL: "~@4 x ~@4 x ~@4 x ~", AM: "~@9 x ~@5 x", AN: "~@11 x ~@4", AO: "~ x ~@5 x",
  AP: "~ x ~@3 x ~@10", AQ: "~ x ~@14", AR: "~@5 x ~@2", AS: "~@4 x ~@2 x", AT: "~@3 x ~@2 x ~",
})).gain(0.28)

// drums · rim
const rim = s("rim").struct(`<
  A ~ B C D E ~@24 C ~ B C F G ~ H I B D J K L A G ~ H M N D O J P K C L ~ A@2 G ~ Q H I M B N D O J P L ~ Q N L ~ D
  L@22 ~ L@2 C@11 L A ~ I P ~ I J@35 P C A ~ B C ~ B K@2 C L A ~ H B O L ~ H D F ~ B C ~ I K ~ H J G ~ D F ~ B C ~@6
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@11 x ~@4", D: "~@3 x ~@4", E: "~ x ~@11 x ~@2", F: "~@13 x ~@2", G: "~@15 x",
  H: "~ x ~@14", I: "~ x ~@6", J: "~ x", K: "~@5 x ~@2", L: "~@3 x", M: "~@3 x ~@12", N: "~@5 x ~@10", 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 J F G H I J F G K I J L M N K F I G J O P M N H F I G J Q R M N S T J U V@2 W X D H Q@2 Y Q@15
  Y Q@2 Z N@4 AA N@3 AA N@4 J T AB AC AD D AE AF Q@28 AF Q@4 AF F U T AG AD B AH AI M@2 N H I J AJ AK AL U@3 W AH AD B V
  AH AM AD AN W AC AD B AO AH AM B V W AM AP ~@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: "~@2 x ~@3 x ~@4 x ~@3 x", H: "~@3 x ~@4 x ~@3 x ~@3", I: "~ x ~@3 x ~@4 x ~@3 x ~",
  J: "~@3 x ~@3 x ~@4 x ~@3", K: "~ x!3", L: "x ~@4 x ~@3 x ~ x ~@2 x ~", M: "~ x ~ x ~ x ~ x",
  N: "~@3 x ~@3 x ~@3 x ~@3 x", O: "x", P: "~@5 x ~@3 x ~@4 x ~", Q: "x!4", R: "~ x ~@3 x ~@3 x ~@3 x ~@2",
  S: "~@2 x ~ x ~ x!2", T: "x ~@4 x ~@3 x ~@4 x ~", U: "~ x ~@4 x ~@4 x ~@4", V: "x ~@4 x ~@5 x ~@4",
  W: "~ x ~@4 x ~@5 x ~@3", X: "~@2 x ~@5 x ~@6 x", Y: "x!3 ~ x ~ x ~", Z: "x ~ x ~ x!2 ~@2",
  AA: "~ x ~ x ~@3 x ~@3 x ~@3 x", AB: "~@3 x ~@4 x ~@4 x ~@2", AC: "~@2 x ~@5 x ~@4 x ~@2", AD: "~@3 x ~@5 x ~@5 x",
  AE: "~@2 x ~@6 x ~@6", AF: "x ~ x ~ x ~ x!2", AG: "~@4 x ~@4 x ~@4 x ~", AH: "~ x ~@5 x ~@5 x ~@2",
  AI: "~@4 x ~@6 x ~@4", AJ: "~ x ~@3 x ~@4 x ~@4 x", AK: "~@4 x ~@3 x ~@4 x ~@2", AL: "~@2 x ~@4 x ~@4 x ~@3",
  AM: "~ x ~@2 x ~@2 x", AN: "~@5 x ~@5 x ~@4", AO: "x ~@2 x ~@2 x ~", AP: "~@3 x ~@12",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@66 A ~@8 B ~@25 C ~@16 A ~@13 B ~@7 B ~@11 B ~@8 C ~@6 D ~@32>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x", D: "~ 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)