Strudelify

Summer Nights

Marianne Faithfull

KeyD majorTempo118 bpm
0:00/0:00
// Summer Nights — Marianne Faithfull
// 118 bpm, 4/4, key D major. 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 88, 4/4 at bar 90, 2/4 at bar 93, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · epiano1 · "tk1"
const epiano1 = note(`<
  A@2 B C@3 D E F G H I@2 J K L ~ M N M N O P Q R S T U V W X Y@2 Z AA Q AB M AC AD AE AF AG AH AI AJ@2 AK AL AM AN AO@2
  AP AQ@2 AR@4 AS AT@2 AU@2 AV AW@6 AX@2 AY AZ BA BB BC BD BE@2 BF BG@6 BH@6 BI@6
>`.pickRestart({
  A: "[~@14 [d2,d3]@6 ~@6 [d2,d3]@5 [g2,g3]@6 ~@6 [g2,g3]@4 [a2,a3]@6 ~@6 [a2,a3]@4 ~]/2", // D G A
  B: "[g2,g3]@4 [a2,a3]@8 [g2,g3]@4 [d2,d3]@4 ~@9 [d2,d3]@3", // G A G D
  C: "[~ [g2,g3]@6 ~@6 [g2,g3]@4 [a2,a3]@6 ~@7 [a2,a3]@4 [g2,g3]@4 [a2,a3]@8 [g2,g3]@4 ~ [d2,d3]@4 ~@8 [d2,d3]@4 [g2,g3]@4 ~@8 [g2,g3]@4 ~ [a2,a3]@4 ~@8]/3", // G A G A G D G A
  D: "[a2,a3]@4 [g2,g3]@4 [a2,a3]@8 [g2,g3]@4 ~ [d2,d3]@4 ~@7", E: "~ [d2,d3]@4 [g2,g3]@4 ~@9 [g2,g3]@4 [a2,a3]@4 ~@6",
  F: "~@2 [a2,a3]@4 ~ [g2,g3]@4 [a2,a3]@8 [g2,g3]@4 [d2,d3]@4 ~@5", // A G A G D
  G: "~@3 d3@4 ~ g2@4 ~@8 [g2,g3]@4 [a2,a3]@4 ~@4, ~@3 d2@2 ~@2 g3@4 ~@21", // G A
  H: "~@4 [a2,a3]@4 ~ b3@4 b2@4 [c#2,c#3]@4 [d#2,d#3]@4 [e2,e3]@4 ~@3, ~@9 b2@2 ~@2 b1@2 ~@17", // A C# D# E
  I: "[~@6 [e2,e3]@4 [a2,a3]@4 ~@8 [a2,a3]@4 e3@4 [f#2,f#3]@4 ~ [g#2,g#3]@4 a3@8 [a2,a3]@4 [b2,b3]@4 [c#3,c#4]@5 [d3,d4]@4, ~@26 e2@2 ~@11 a2@4 ~@21]/2", // E A F# G# A B C# D
  J: "~@4 f#3@2 ~@2 d3@4 ~@12 g2@3 ~@5, ~ [a3,d4]@2 g2@2 [b3,d4]@2 ~, ~@16 g3@7 ~@9", // D5 Bm
  K: "~ c#4@4 ~@4 [f#3,b3,d#4]@16 ~@7", L: "~@2 e3 ~@3 [b3,e4]@5 ~@7 c#4@4 ~@5 [f#3,d4]@5, ~@3 g3 ~@5 a3 ~@6",
  M: "~@2 [f#3,a3,d4] ~@3 [g3,b3,d4] ~", N: "~@8 [g3,b3,d4]@4 ~@4 [g3,a3,c#4]@4 [g3,a3,c#4]@3 ~@5 [f#3,a3,d4]@4",
  O: "~@4 [f#3,a3,d4] ~@3 [f#3,a3,d4]@3 ~@9 [g3,b3,d4]@4 [g3,b3,d4]@4 ~@4", // D G
  P: "~@8 [g3,a3,c#4]@5 ~@11 [g3,b3,d4]@4 ~@4", Q: "~@8 [f#3,a3,d4]@5 ~@11 [g3,b3,d4]@4 ~@4",
  R: "~@4 [g3,a3]@2 ~@6 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@5 ~@3 [g3,b3] ~@3, ~@4 c#4@4 ~@19 d4@3 ~@2", // Gsus2 G
  S: "[f#3,a3,d4] ~ [f#3,a3,d4] ~@3 [g3,b3,d4] ~", // D G
  T: "~@4 [g3,a3,c#4]@4 ~@4 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@5 ~@3 [b3,d4]@2 ~@2, ~@28 g3 ~@3", // A7 G Bm
  U: "[f#3,a3,d4]@3 ~@5 [f#3,a3,d4]@5 ~@11 [g3,b3,d4]@4 ~@4", // D G
  V: "~@4 [g3,a3,c#4]@3 ~@5 [g3,a3,c#4]@2 ~@2 [f#3,b3,d#4]@2 ~@2 [f#3,b3,d#4]@6 ~@2 [f#3,b3,d#4]@3 ~", // A7 B
  W: "~@8 [g#3,b3,e4]@5 ~@11 [c#4,e4]@4 ~@4, ~@12 a3 ~@3", // E C#m
  X: "[g#3,b3,d4]@3 ~ [g#3,b3,e4]@3 ~ [g#3,b3,d4]@2 ~@2 [g3,a3,c#4,e4]@5 ~@3 [g3,a3,c#4,e4]@3 ~ [g3,a3,c#4]@2 ~@2 [g3,a3,c#4,e4,e5]@3 ~, ~@5 c#5 [e4,d5] ~", // G#dim E G#dim A7 E7
  Y: "[[f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@4 d4@2 ~@2 [g4,b4,d5]@6 ~@2 [b4,d5]@4 ~@4 [a4,c#5]@4 [g4,a4,c#5]@3 ~@5 [b4,d#5]@8 ~@4 [b4,d#5]@4 f#4@3 ~, ~@24 g4@2 ~@2 g4@8 ~@8 f#4@12 ~@4 b3 ~@3]/2", // D G Bm A A7 B
  Z: "[b4,e5]@3 ~@5 [b4,e5]@4 ~@4 a4@3 ~ a4@3 ~ [g4,a4]@3 ~@5, g4@3 ~ g4 ~ g4@6 ~@4, ~@4 c#5@3 ~", // E5 Gsus2
  AA: "[f#4,a4,d5]@5 ~@27", AB: "~@4 [g3,b3,d4]@2 ~@2 [g3,c#4]@2 a3 ~@3 [f#3,a3,d4]@2, ~@16 a3@3 ~@13",
  AC: "~@7 [g3,b3,d4]@3 ~@5 [g3,a3,c#4]@3 ~ [g3,a3,c#4]@3 ~@5 [f#3,a3,d4]@3 ~@2", // G A7 D
  AD: "~@3 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~@9 [g3,b3,d4] ~@2 [g3,b3,d4]@4 ~@6", // D G
  AE: "~@6 [a3,c#4,e4]@5 ~@11 [g3,b3,d4]@7 ~@3", AF: "~@6 [f#3,a3,d4]@5 ~@11 [g3,b3,d4]@4 ~@6",
  AG: "~ [g3,a3]@2 ~@6 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@5 ~@3 [g3,b3] ~@3 [f#3,a3]@3, ~ c#4@4 ~@19 d4@3 ~ d4@4", // Gsus2 G F#m
  AH: "~@5 [f#3,a3,d4]@4 ~@11 [g3,b3,d4]@4 ~@8", // D G
  AI: "[g3,a3,c#4]@4 ~@4 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@5 ~@3 g3 ~@3 f#3@2 ~@2, ~@23 [b3,d4]@2 ~@2 [a3,d4]@3 ~@2", // A7 G Bm D5
  AJ: "[~@4 [f#3,a3,d4]@5 ~@11 [g3,b3,d4]@4 ~@7 [g3,a3,c#4]@3 ~@5 [f#3,b3,d#4]@6 ~@2 [f#3,b3,d#4]@6 ~@2 [f#3,b3,d#4]@3 ~@6]/2", // D G A7 B
  AK: "~@3 [g#3,b3,e4]@5 ~@10 [c#4,e4]@4 ~@4 [g#3,b3,d4]@3 ~ [g#3,b3,e4]@2, ~@9 a3 ~@6", // E C#m G#dim E
  AL: "~@2 [g#3,b3,d4]@2 ~@2 [g3,a3,c#4,e4]@5 ~@3 [g3,a3,c#4,e4]@3 ~ [g3,a3,c#4,e4]@2 ~@2 [g3,a3,c#4,e4,e5]@3 ~ [f#4,a4,d5]@5 ~, ~@7 c#5@2 d5@2 ~@5", // G#dim A7 D
  AM: "~@2 [f#4,a4,d5]@3 d4@2 ~@2 [g4,b4,d5]@5 ~@3 [b4,d5]@4 ~@4 [a4,c#5]@4 [g4,a4,c#5]@3, ~@17 g4@2 ~@2 g4@8 ~@3", // D G Bm A A7
  AN: "~@5 [b4,d#5]@8 ~@4 [b4,d#5]@4 f#4@3 ~ [b4,e5]@3 ~@4, ~@5 f#4@12 ~@8 g4@6 ~", // B E5
  AO: "[~ [g4,b4]@3 ~@4 a4@3 ~ a4@3 ~ [g4,a4]@3 ~@5 [c5,d5,f5]@32 ~@8, e5@4 g4@11 ~@49, ~@8 c#5@11 ~@45]/2", // G Gsus2 Dm7
  AP: "[g3,d#4] ~@3 [g#3,c4,d#4] ~@3, a#3 ~@15", // Cm G#
  AQ: "[[g#3,c4,d#4]@3 ~@4 [g#3,a#3,d4]@3 ~ [g#3,a#3,d4]@3 ~@5 [g3,a#3,d#4]@3 ~ [g3,a#3,d#4]@4 ~@4 [g3,a#3,d#4]@4 ~@12 [g#3,c4,d#4]@4 ~@11 [g#3,c4,d#4]@2]/2", // G# A#7 D# G#
  AR: "[~@6 [g#3,a#3,d4]@3 ~ [g#3,a#3,d4]@4 ~@4 [g3,d#4]@2 ~@2 [a#3,d#4] ~@3 [g3,a#3,d#4]@2 ~@2 [g3,a#3,d#4]@5 ~@6 [g#3,c4,d#4] ~@4 [g#3,c4,d#4]@4 ~@12 d4@4 ~@11 [g#3,c4,d#4]@4 ~@12 [g3,a#3]@5 ~@10 [g#3,c4,d#4]@3 ~@9 [a#3,d4,f4]@3 ~@5, ~@18 a#3 ~@3 g3@2 ~@37 [a#3,f4]@5 ~@27 d#4@3 ~@32]/4", // A#7 Cm D#5 D# G# Gm G# A# …
  AS: "[g#3,c4,d#4]@4 ~@4 [g#3,d#4]@4 ~@3 [g#3,c4,d#4]@3 ~ [g3,a#3,d#4]@4 ~@4 [g3,a#3,d#4]@4 ~, ~@7 c4@5 ~@20", // G# G#5 G# D#
  AT: "[~@11 [g#3,c4,d#4]@3 ~@8 [a#3,d4,f4]@3 ~@5 [g#3,c4,d#4]@5 ~@3 [g#3,c4,d#4]@4 ~@4 [g#3,c4,d#4]@3 ~ a#3@3 ~@5 [g3,a#3,d#4]@5 ~, ~@49 [g3,d#4]@4 ~@11]/2", // G# A# G# D# Cm
  AU: "[~@9 [g#3,c4,d#4]@3 ~@9 [a#3,d4]@3 ~@5 c4@7 [c4,e4,g4]@6 ~@2 [c4,e4,g4]@4 ~@8 [a3,c4,f4]@4 ~@4, ~@20 f4@2 ~@6 [e4,g4]@7 ~@29]/2", // G# A# C F Em
  AV: "~@7 [a#3,d4,f4]@4 ~@4 [a3,c4,d#4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4] ~@3 [a#3,d4]@5, ~@23 d#4@2 ~ f4@2 ~@4", // A# Adim F Am A#
  AW: "[~@7 c5@3 [a#3,d4,f4,d5]@3 ~ [g4,a#4,d#5]@5 ~@3 [a#3,d#4,a#4,d#5]@4 g4@2 ~@2 [g#4,c5,d#5]@4 ~@3 [c4,g#4,c5,d#5]@4 g#4@3 ~ [g#4,a#4,d5]@3 ~ [g#4,a#4,d5]@4 d4 ~@3 g4@11 [g4,e5]@4 c4 ~@3 [g#4,c5,d#5,f5]@4 ~@4 [g#4,c5,d#5,f5]@3 g#4@3 ~ [g#4,a#4,d5]@3 ~ [g#4,d5]@3 ~@5 g#4 ~@3 [f#4,b4,d#5]@30 ~@9 [g#4,b4,e5]@5 ~@2 b3 ~@3 a4 ~@3 [a3,a4]@7 ~ c#4@4 ~@3 [e4,a4,c#5,e5]@4 [c#4,a4]@3 ~ [b3,b4,d#5]@3 ~ [b4,d#5]@4, ~@2 [a#3,d4,f4]@3 ~ [a#3,d4,f4]@2 ~@48 c4@11 ~@86 e4@15 ~@16 [d#4,a4]@8, ~@3 a#4@5 ~@14 g4@2 ~@32 c5@8 ~@4 c5@3 ~@24 a#4@5 ~@61 [c#5,e5]@4 ~@27, ~@57 e5@8 ~@96 c#4@2 ~@29]/6", // A# D# D#5 G# A#7 C Fm7 A#7 …
  AX: "[b3@3 [g#4,b4,e5]@3 ~ [g#4,b4,e5]@4 ~@4 [b3,g#4,b4,e5]@4 ~@11 [e4,a4,c#5,e5]@5 ~@11 [c#4,c#5,e5]@3 a4@3 ~ [d#4,a4,b4,d#5]@3 ~ [a4,b4,d#5]@3 ~ b3 ~@2, ~@15 e4@9 ~@6 [a3,c#4]@2 ~@14 [e4,a4]@2 ~@5 b3 ~@10]/2", // E A C#m B7 A A5
  AY: "~ [b4,d#5]@3 ~ e3@4 ~@9 [e2,e3]@4 [a2,a3]@5 ~@5, ~ a4 ~@2 [g#4,b4]@13 ~@15, ~@4 e2@5 ~@23", // B E A G#m
  AZ: "~@4 [a2,a3]@4 [d2,d3]@6 ~@8 [d2,d3]@4 ~ [g2,g3]@5", BA: "~@9 [g2,g3]@5 [a2,a3]@5 ~@9 [a2,a3]@4",
  BB: "[g2,g3]@6 ~ [a2,a3]@7 [g2,g3]@5 [d2,d3]@5 ~@8", BC: "[d2,d3]@4 ~ [g2,g3]@5 ~@9 [g2,g3]@4 [a2,a3]@5 ~@4",
  BD: "~@4 [a2,a3]@4 ~ [g2,g3]@7 [a2,a3]@6 [g2,g3]@5 [d2,d3]@4 ~", // A G A G D
  BE: "[~@8 [d2,d3]@4 [g2,g3]@5 ~@8 [g2,g3]@5 [a2,a3]@5 ~@8 [a2,a3]@4 [b2,b3]@8 c#2@5 d#2@4]/2", // D G A B
  BF: "~@4 [g#4,b4]@2 ~@2 [b4,e5]@4 e2@4 [a4,c#5,e5] ~@12 a2@3, e2@9 ~@7 a2@10 ~@6, ~@4 e5 ~@3 g#4@9 ~@4 [a4,c#5,e5]@11", // G#m E5 A
  BG: "[~ e2@5 ~@4 f#2@4 ~ g#2@5 [a2,a4]@4 ~ [a2,a4]@6 [b2,b4]@6 [c#3,c#5]@6 [f#4,a4,d5]@12 ~@2 [f#4,a4,d5]@5 ~@2 [a4,d5]@7 [g4,d5]@28 ~@6 [a4,c#5]@26 ~@6 [f#4,b4,d#5]@46 ~@9, ~@6 [g#4,b4,e5]@10 ~@4 [g4,c#5]@12 ~@11 d3@28 g2@34 a2@32 b2@52 ~@3, ~@64 f#4@3 ~@4 b4@25 ~@9 g4@23 ~@64]/6", // A B C# D D5 G5 A B …
  BH: "[~@21 [g4,b4,d5]@46 ~@12 [a2,g4,a4,c#5,e5]@90 ~@23, ~@10 e3@29 ~@57, ~@20 e5@47 ~@125]/6", // G A7
  BI: "[[a4,d5]@26 ~@16 [f#4,a4,d5]@17 ~@7 [g4,b4,d5]@17 ~@5 [g4,b4,d5]@17 ~@9 [d2,d3,f#4,a4,d5]@53 ~@6 [d2,d3,f#4,a4,d5]@6 ~@13, [d2,d3]@67 ~@125, f#4@29 ~@37 g2@48 ~@78]/6", // D5 D G D
})).s("gm_epiano1").gain(0.36).pan(0.4)

// bass · fretless bass · "tk2"
const bass = note(`<
  ~@12 A B C D@2 E F G H I J K L M N O P Q R S T U V W X Y@7 Z AA AB AC@2 AD AE AF@2 AG AH AI AJ AK AL AM AN@3 AO AP@4
  AQ AR AS AT AU AV AW ~@20 AX@6
>`.pickRestart({
  A: "~@15 a1@4 b1@4 c#2@4 d2@5", B: "~@12 g2@7 ~ g2@4 g#2@4 ~ a2@3", C: "~ a2@3 ~@5 b2@8 a2@4 g2@4 f#2@4 ~ e2@2",
  D: "[~@2 e2@3 ~@5 a2@9 g2@4 f#2@4 e2@4 d2@4 ~@4 a1@3 ~ a1@4 b1@3 ~ b1@4 ~ c#2@3 ~ c#2@4]/2",
  E: "d2@3 ~ d2@3 ~@5 d2@4 g2@2 ~@2 g2@4 ~@4 g2@4", F: "e2@3 ~ e2@3 ~@5 e2@4 a2@4 a1@4 b1@4 c#2@4",
  G: "d2@3 ~ d2@3 ~@5 d2@4 g2@3 ~ g2@2 ~@6 g2@4", H: "e2@3 ~ e2@3 ~@5 e2@4 a2@7 ~@5 a2@4",
  I: "d2@4 ~@2 d2@2 g2@3 ~@3 g2@2", J: "a2@5 ~@7 a2@4 g2@7 ~@5 g2@4", K: "d2@6 ~@6 d2@4 g2@5 ~@7 g2@4",
  L: "a2@3 ~@3 a2@2 g2@4 ~@2 g2 ~", M: "d2@5 ~@7 d2@4 g2@4 ~@8 g2@4", N: "a2 ~@2 a2 g2 ~@2 g2",
  O: "d2 ~@2 d2 g2 ~@2 g2", P: "a2@2 ~@4 a2@2 b2 ~ b2@2 a2@2 b2@2", Q: "e2@6 ~@6 e2@4 a2@5 ~@7 a2@4",
  R: "b2 e2 b2 a2@2 a1 b1 c#2", S: "d2@3 ~ d2@3 ~@9 g2@4 ~@4 g2@4 g#2@4", T: "a2@3 ~ a2@3 ~@5 b2@8 a2@4 g2@4 f#2@4",
  U: "e2@3 ~ e2@3 ~@5 a2@8 b2@4 a2@5 ~@3", V: "d2@6 ~@2 a1@3 ~ a1@4 b1@2 ~@2 b1@4 c#2@3 ~ c#2@4",
  W: "~ d2@3 ~ d2@3 ~@4 d2@4 g2@3 ~ g2@3 ~@5 g2@4", X: "e2@3 ~ e2@2 ~@6 e2@4 a2@4 b2@4 a2@2 ~@2 a2@4",
  Y: "[d2@3 ~ d2@2 ~@6 d2@4 g2@2 ~@2 g2@2 ~@5 g2@4 e2@2 ~@2 e2@2 ~@6 e2@3 ~ a2@4 b2@4 a2@2 ~@2 a2@4 d2@6 ~@6 d2@4 g2@5 ~@6 g2@4 a2@4 ~@8 a2@4 g2@4 ~@8 g2@3 ~ d2@6 ~@6 d2@4 g2@5 ~@6 g2@4 a2@6 ~@6 a2@4 g2@8 ~@4 g2@2 ~@2 d2@5 ~@6 d2@4 g2@4 ~@8 g2@4 a2@4]/7",
  Z: "~@2 a2 g2 ~@2 g2 d2", AA: "~@7 d2@4 g2@4 ~@8 g2@4 a2@4 ~", AB: "~@7 a2@4 b2@2 ~@2 b2@4 a2@3 ~ b2@4 e2@5",
  AC: "[~@6 e2@4 a2@5 ~@7 a2@4 b2@4 e2@4 b2@4 a2@7 ~ a1@4 b1@4 c#2@4 d2@3 d2@3]/2",
  AD: "~@9 g2@4 ~@4 g2@4 g#2@4 a2@3 ~ a2@3", AE: "~@5 b2@8 a2@4 g2@3 f#2@4 e2@3 ~ e2@3 ~",
  AF: "[~@4 a2@8 b2@4 a2@5 ~@3 a#2@31 ~ d#2@3 ~ d#2@3 ~]/2", AG: "~@4 d#2@4 g#2@3 ~ g#2@3 ~@4 g#2@4 f2@3 ~ f2@3 ~@2",
  AH: "~@3 f2@4 a#1@6 ~@6 a#1@4 d#2@3 ~ d#2@3 ~@2", AI: "~@3 d#2@4 g#2@3 ~ g#2@4 ~@3 g#2@4 f2@3 ~ f2@3 ~@3",
  AJ: "~ f2@2 a#1@5 ~@3 d#2@3 ~@2", AK: "~@2 d#2@3 g#2@5 ~@7 g#2@4 a#2@5 ~@6", AL: "~ a#2@4 g#2@5 ~@7 g#2@4 d#2@6 ~@5",
  AM: "d#2@4 g#2@5 ~@7 g#2@4 a#2@4 ~@8",
  AN: "[a#2@4 g#2@5 ~@6 g#2@4 d#2@5 ~@7 d#2@4 g#2@4 ~@7 g#2@4 a#2@4 ~@8 a#2@4 g#2@4 ~@8 g#2@3 d#2@5 ~@7 d#2@3]/3",
  AO: "~ g#2@4 ~@8 g#2@4 a#2@5 ~@6 a#2@4",
  AP: "[c3@3 ~ c3@4 a#2@4 g2@4 f2@5 ~@6 f2@4 a#1@6 ~@6 a#1@4 f2@6 ~@5 f2@4 a#1@5 ~@7 c#2@2 d2@2 d#2@5 ~@6 d#2@4 g#2@7 ~@5 g#2@4 a#2@6 ~@7 b2@2 c3@3 ~, ~@121 a#2@2 ~@5]/4",
  AQ: "c3@4 a#2@4 g2@4 f2@5 ~@6 f2@4 a#2@5", AR: "~@3 a#1@8 b1@6 ~ b1@6 ~@2 b1@5 ~",
  AS: "~@2 b1@6 ~@2 e2@3 ~ e2@3 ~@4 e2@4 a2@3 ~ a2@3", AT: "~@5 a2@3 f#2@2 ~@2 f#2@3 ~@5 f#2@4 b2@2 ~@2 b2@3 ~",
  AU: "~@3 b2@4 e2@3 ~ e2@3 ~@5 e2@3 a2@3 ~ a2@3 ~@3", AV: "~@2 a2@3 ~ f#2@2 ~@2 f#2@2 ~@5 f#2@4 b2@2 ~@2 b2@2 ~@5",
  AW: "~ b2@3 ~@28", AX: "[d2@65 ~ g2@48 d2@51 ~@8 d2@7 ~@12]/6",
})).s("gm_fretless_bass").gain(0.31)

// other · rock organ · "tk3"
const rock_organ = note(`<
  ~@19 A B C D E F G H I D J K ~@3 L M N ~ O@5 P Q R S T U ~@5 V W X Y Z AA AB AC AD AE AF@3 ~@2 AG AH AI AJ ~@3 AK ~@19
  AL@5
>`.pickRestart({
  A: "~@8 [a5,a6] ~@3 [a5,a6] ~@3 [b5,b6]@7 ~ b6 ~@3 [b5,b6] ~@3", // A B
  B: "[b5,b6]@6 ~@2 b6 ~@3 [b5,b6] ~@3 [a5,a6]@4 b6@4 [a5,a6]@4 [f#5,f#6]@4", // B A F#
  C: "~@8 [a5,f#6]@5 ~@11 [b5,d6,g6]@4 ~@4, ~@8 d6@3 ~@21", D: "~@4 e6 ~@3 [c#6,e6,a6]@4 ~@20",
  E: "~@4 [d6,f#6] ~@3 [a5,d6,f#6]@4 ~@12 [b5,d6,g6]@4 ~@4", F: "~@4 e6 ~@3 [c#6,e6,a6]@5 ~@19",
  G: "~@4 [d6,f#6] ~@3 [a5,d6,f#6]@5 ~@7 d6 ~@3 [b5,d6,g6]@4 ~@4", H: "~@4 [c#6,e6] ~@3 [c#6,e6,a6]@4 ~@20",
  I: "~@4 d6 ~@3 [a5,d6,f#6]@4 ~@8 [b5,d6] ~@3 [b5,d6,g6]@3 ~@5", J: "~@8 g#5@2 ~@2 g#5@4 a5@2 ~@2 a5 ~@3 a5@3 ~@5",
  K: "~@8 g#5 ~@3 g#5@4 a5 ~@3 a5 ~@3 a5@2 ~@6", L: "~@8 a5 ~@3 a5@4 b5@2 ~@2 b5@4 c#6@2 ~@2 c#6@4",
  M: "d6@4 ~@4 a6@2 ~@2 a6@2 ~@2 b6@7 ~ b6 ~@3 b6 ~@3", N: "b6@6 ~@2 b6 ~@3 b6@2 ~@2 a6@4 b6@4 a6@4 f#6@4",
  O: "[~@31 a5@6 ~@2 a5 ~@3 a5@4 b5@5 ~@3 b5 ~@2 b5@4 c#6@5 ~@3 c#6 ~@3 c#6@4 b5@3 ~ c#6@4 b5@4 c#6@4 a5@4 ~@4 a5 ~@3 a5@4 b5@4 ~@3 b5 ~@3 b5@3 ~ c#6@5 ~@3 c#6 ~@3 c#6@4 b5@4 c#6@4 b5@4 c#6@4 a5@3]/5",
  P: "~@5 a5 ~@3 a5@4 b5@4 ~@3 b5 ~@3 b5@4 c#6@4", Q: "~@4 c#6 ~@3 c#6@4 b5@4 c#6@4 b5@3 ~ c#6@3 ~ a5@4",
  R: "~@4 a5 ~@2 a5@4 b5@4 ~@4 b5 ~@3 b5@3 ~ c#6@4 ~", S: "~@3 c#6 ~@3 c#6@4 d#6@15 ~ e6@3 e6 ~",
  T: "~@2 e6@4 c#6@16 ~@4 e6 ~@3 e6 ~", U: "~@2 e6@4 c#6@19 ~ d6@5 ~", V: "~@31 a#5",
  W: "~@3 a#5@4 c6@5 ~@3 c6 ~@2 c6 ~@3 c6@5 ~@3 c6 ~", X: "~@2 c6@4 a#5@4 c6@4 a#5@4 d#6@4 g5 ~ g5 ~ g5@2 ~@2 g5@2",
  Y: "~@6 g#5 g#5@2 g#5@2 ~@2 g#5@4 ~@4 a#5 ~ a#5 ~ a#5@2 ~@2 a#5@3",
  Z: "~@5 g#5 ~ g#5 ~ g#5@2 ~@2 g#5@4 ~@4 g5 ~ g5@2 g5 ~@3 g5@3",
  AA: "~@4 g#5 ~@3 g#5@2 ~@2 g#5@3 ~@5 a#5 ~@3 a#5@2 ~@2 a#5@3 ~",
  AB: "~@4 g#5 ~@2 g#5@2 ~@2 g#5@3 ~@5 g5 ~ g5 ~ g5@2 ~@2 g5@3 ~@2",
  AC: "~@3 g#5 ~@3 g#5@2 ~@2 g#5@3 ~@4 a#5 ~ a#5 ~ a#5 ~@3 a#5@3 ~@3",
  AD: "~@2 g#5 ~ g#5 ~ g#5@2 ~@2 g#5@3 ~@5 g5 ~ g5!2 ~@3 g5@3 ~@4",
  AE: "~ g#5 ~ g#5 ~ g#5 ~@3 g#5@3 ~@5 a#5 ~ a#5 ~ a#5 ~@3 a#5@3 ~@4",
  AF: "[~ c6@12 ~@3 f6@2 ~@2 f6@8 d6@10 ~ d6 ~@3 d6@4 f6 ~@3 f6@7 ~ d6@19 d#6@5 ~@13]/3", AG: "~@19 d#6@7 c#6@6",
  AH: "~@2 b5@9 ~@6 b5 ~@3 b5@4 c#6@3 ~@4", AI: "~ c#6@2 ~@2 c#6 ~@2 c#6@5 ~@3 c#6 ~@3 c#6@4 b5@4 c#6@4",
  AJ: "b5@2 ~ e6@5 ~@24", AK: "~@7 c#6",
  AL: "[~@3 g4@2 a4 c5 [d5,e5] f5 [g5,a5] b5 [f#6,a6]@20 ~@2 [g5,b5]@40 ~@9 [a5,d6]@54 ~@5 [d5,f#5,a5,d6,f#6,a6]@9 ~@10, ~@2 [e4,f4]@2 ~ b4@2 ~@4 d6@36 ~@113]/5", // Dsus2 Gsus2 F#m G D5 D Fmaj7
})).s("gm_rock_organ").gain(0.31).pan(0.8)

// other · rock organ · "tk3" · soft notes
const rock_organ_soft = note("<~@19 A B C D E D F G H D ~@30 I J@2 ~@13 K L M N O P@2 ~@13 Q R ~ S@3>".pickRestart({
  A: "~@24 b5 ~@7", B: "~@8 b5 ~@11 b5@4 ~@8", C: "~@4 [a5,d6,f#6] ~@15 [b5,d6,g6] ~@11", D: "~@4 [c#6,a6] ~@27",
  E: "~@4 a5 ~@15 [b5,d6,g6] ~@11", F: "~@4 a5 ~@15 [b5,g6] ~@11", G: "~@4 a6 ~@27", H: "~@4 [a5,f#6] ~@15 g6 ~@11",
  I: "~@6 g#5 ~@15 a#5 ~@9", J: "~@5 g#5 ~@26", K: "~@8 [f#5,a5]@6 ~@8 [f#5,a5]@5 [g5,b5]@5",
  L: "~@9 [g5,b5]@5 [a5,c#6]@5 ~@9 a5@4", M: "~ [g5,b5]@6 [a5,c#6]@7 [g5,b5]@5 [f#5,a5]@5 ~@8",
  N: "[f#5,a5]@5 [g5,b5]@4 ~@10 [g5,b5]@4 [a5,c#6]@5 ~@4", // F#m G A
  O: "~@4 [a5,c#6]@5 [g5,b5]@6 ~ [a5,c#6]@6 [g5,b5]@5 [f#5,a5]@4 ~", // A G A G F#m
  P: "[~@8 [f#5,a5]@4 [g5,b5]@4 ~@9 [g5,b5]@5 a5@6 g5@6 ~ a5@4 [f#5,d#6]@17, ~@30 c#6@17 ~@17]/2", // F#m G D#m
  Q: "~@15 b3, ~@14 g3 ~, ~@29 a3@2 ~", R: "c4 d4@2 ~@8 c6 ~@20", S: "[~@18 f#5@53 ~@25]/3",
})).s("gm_rock_organ").gain(0.13).pan(0.8)

// other · trombone · "tk6"
const trombone = note(`<
  ~@16 A B C ~@2 D E F G F H I J K@2 ~@6 L@2 M@5 N O@2 P Q ~@3 R S T ~ U V W X Y Z AA AB AC@3 ~@5 AD AE@2 ~@21 AF AG@4
>`.pickRestart({
  A: "~@7 a2@2 ~@2 a2@5 b2@2 ~ b2@4 ~ c#3@2 ~@2 c#3@4", B: "d3@4 ~@4 a3 ~@3 a3@4 b3@7 ~ b3@2 ~@2 b3 ~@3",
  C: "b3@6 ~@2 b3 ~@3 b3@2 ~@2 a3@4 b3@4 a3@4 f#3@4", D: "d2@2 ~@4 d2@2 g2@2 ~@4 g2 ~",
  E: "a2@4 ~@8 a2 ~@3 g2@6 a2@6 g2@4", F: "d2@2 ~@6 g2@2 ~@4 g2 ~", G: "a2@3 ~@9 a2@2 ~@2 g2@6 a2@6 g2@4",
  H: "a2@2 ~@4 a2 ~ g2@3 a2@3 g2@2", I: "d2@2 ~@6 g2 ~@5 g2 ~", J: "a2@3 ~@3 a2@2 b2@7 ~",
  K: "~@8 e3 ~@3 e3@4 c#3@2 ~@2 c#3@2 ~@2 c#3@3 ~@5",
  L: "[~@8 [a2,a3] ~@3 [a2,a3]@2 ~@2 [b2,b3]@6 ~ b2 b3 ~@2 [b2,b3] ~@3 [b2,b3]@7 ~ [b2,b3] ~@3 [b2,b3] ~@3 [a2,a3]@4 [b2,b3]@4 a3@4 [d3,d4]@5]/2", // A B A B D
  M: "[~@11 d3@4 g3@5 ~@6 g3@4 a3@4 ~@8 a3@4 g3@6 a3@5 ~ g3@4 d3@6 ~@6 d3@4 g3@4 ~@7 g3@4 a3@5 ~@7 a3@4 g3@6 a3@4 g3@5 ~ d3@5 ~@7 d3@4 g3@4 ~@7 g3@4 a3@4]/5",
  N: "~@8 a3@4 g3@6 a3@4 g3@5 ~ d3@4", O: "[~@7 d3@4 g3@4 ~@8 g3@4 a3@4 g3@4 a3@4 f#3@19 ~ e3 ~@2 e3 ~]/2",
  P: "~@2 e3@4 c#3@15 ~@5 e3 ~@3 e3 ~", Q: "~@2 e3@4 c#3@19 d3@6 ~", R: "c4@7 ~ c4@7 ~ a#3@7 ~@9",
  S: "[a#2,a#3] ~@3 [a#2,a#3]@4 [c3,c4]@5 ~@3 [c3,c4] ~@2 [c3,c4] ~@3 [c3,c4]@6 ~@2 [c3,c4]", // A# C
  T: "~@3 [c3,c4]@4 a#3@3 ~ [c3,c4]@4 [a#2,a#3]@4 [d#3,d#4]@5 ~@8", U: "~@22 g3 ~ g3 ~ g3 ~@3 g3@2",
  V: "~@6 g#3!2 ~ g#3 ~@4 g#3@3 ~@4 a#3 ~ a#3 ~ a#3 ~@3 a#3@3",
  W: "~@5 g#3 ~ g#3 ~ g#3 ~@3 g#3@4 ~@4 g3 ~ g3 ~ g3 ~@3 g3@2 ~",
  X: "g3 ~@3 g#3 ~ g#3 ~ g#3 ~@3 g#3@2 ~@6 a#3 ~ a#3 ~ a#3 ~@3 a#3@2 ~@2",
  Y: "~@4 g#3!2 ~ g#3 ~@3 g#3@3 ~@5 g3 ~ g3 ~ g3 ~@3 g3@2 ~@3",
  Z: "~@3 g#3 ~ g#3 ~ g#3 ~@3 g#3@2 ~@5 a#3 ~ a#3 ~ a#3 ~@3 a#3@3 ~@3",
  AA: "~@2 g#3 ~ g#3 ~ g#3 ~@3 g#3@3 ~@5 g3 ~ g3!2 ~@4 g3@3 ~@3",
  AB: "~ g#3 ~ g#3 ~ g#3 ~@3 g#3@2 ~@6 a#3 ~ a#3 ~ a#3 ~@3 a#3@3 ~@4",
  AC: "[~ c4@15 f4@2 ~@2 f4@8 d4@15 ~@4 f4 ~@3 f4@8 d4@19 d#4@6 ~@12]/3", AD: "~@15 b3 ~@3 b3@4 c#4@6 ~ c#4 ~",
  AE: "[~@2 c#4 ~@3 c#4@6 ~ c#4 ~@3 c#4@4 b3@4 c#4@4 b3@8 e4@7 ~@20]/2",
  AF: "~@11 [f#4,a4]@8 ~@3 [f#4,a4]@10, ~@5 d2@11", // F#m
  AG: "[~@2 g1@18 ~@5 [g4,b4]@7 ~@5 [g4,b4]@13 [a4,d5]@52 ~@7 [d2,f#4,a4,d5]@8 ~@11, ~ [g4,b4]@15 ~@8 g1@26 d2@55 ~@23]/4", // G D5 D G
})).s("gm_trombone").gain(0.29).pan(0)

// other · trombone · "tk6" · soft notes
const trombone_soft = note("<~@23 A ~ B ~ C D ~@9 E ~@15 F ~@20 G H I J K L@2 ~@16 M@3>".pickRestart({
  A: "~@3 d2 ~@4", B: "~@6 d2 ~@9", C: "~@12 d2 ~@19", D: "~@3 f#2@3 ~@10", E: "~@23 a2@4 ~@5", F: "~@7 a#2@4 ~@21",
  G: "~@8 [f#3,a3]@6 ~@8 [f#3,a3]@5 [g3,b3]@5", H: "~@9 [g3,b3]@5 [a3,c#4]@6 ~@8 [a3,c#4]@4",
  I: "[g3,b3]@7 [a3,c#4]@7 [g3,b3]@5 [f#3,a3]@4 ~@9", J: "[f#3,a3]@5 [g3,b3]@5 ~@9 [g3,b3]@4 [a3,c#4]@4 ~@5",
  K: "~@4 [a3,c#4]@5 [g3,b3]@6 ~ [a3,c#4]@6 [g3,b3]@4 ~ [f#3,a3]@4 ~", // A G A G F#m
  L: "[~@8 [f#3,a3]@4 [g3,b3]@4 ~@10 b3@4 a3@6 g3@6 ~ [a3,c#4]@4 [f#3,d#4]@17, ~@25 g3@5 c#4@10 ~@24]/2", // F#m G A D#m
  M: "[~@9 f#4@26 ~@13]/3",
})).s("gm_trombone").gain(0.18).pan(0)

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