Strudelify

At Midnight (My Love Will Lift You Up)

Rufus

KeyD minorTempo120 bpm
0:00/0:00
// At Midnight (My Love Will Lift You Up) — Rufus
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 30, 4/4 at bar 31, 2/4 at bar 34, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A@3 B C B C B C B C B C B C B C B D@2 E F G H I J@2 K L M N O P O Q R S T U@2 V W@3 X@3 O P O P O P O Y@2 Z AA@2
  AB@2 AC@2 AD AE AF AE AG AH AG AI@5 AJ@2 AK@3 AL@2 AM AN AO@2 AP@2 AQ AL@2 AR AS AT AU AT AV AW AX AY AZ BA BB@2 BC@2
  BD BE@2 AT BF AT BG AT BH BI AT BJ AT BK AT BL AT BM@2 AX ~
>`.pickRestart({
  A: "[~@8 g1@13 ~ a1@16 ~@2 d2 f2@3 a1 ~ c2 ~]/3", B: "d2 ~ f2 d2 ~ c2 ~ c2 d2 f2@3 a1 ~ c2 ~",
  C: "d2 ~ f2 d2 ~ d2 ~@2 d2 f2@3 a1 ~ c2 ~", D: "[d2 ~ f2 d2 ~ d2 ~ g1@7 g2@7 ~ g2 d2 g1@5 ~ f2@2]/2",
  E: "~@2 f2 ~ f2 g2@3 g1@5 ~ g1 d2", F: "g2@3 g1@2 f2@2 g1", G: "f2@3 ~ f2 ~ g1@6 ~@2 g1 d2, ~@5 g2@2 ~@9",
  H: "g2@5 ~ g1@8 f2@2", I: "~@2 f2 ~ f2 g2@2 ~ g1@5 ~ g1 d2", J: "[g2@5 ~ g1@8 f2@5 ~ f2 ~@3 g1 c2@3 c2 f2@3]/2",
  K: "~@4 d2 ~ f2 ~ d2 ~ c2 d2 f2 f1@3", L: "a1 ~ c2 ~ d2 ~ f2 d2 ~@4 f2 f1@2 ~",
  M: "a1 ~ c2 ~ d2 ~ f2 d2 ~ c2 ~ c2 f2 f1@3", N: "a1 ~ c2 ~ d2 ~ f2 d2 ~@4 d2 f2@3",
  O: "a1 ~ c2 ~ d2 ~ f2 d2 ~ c2 ~ c2 d2 f2@3", P: "a1 ~ c2 ~ d2 ~ f2 d2 ~ d2 ~@2 d2 f2@3",
  Q: "a1 ~ c2 ~ d2 ~ f2 d2 ~ d2 bb1@5 ~", R: "bb1@4 a1@4 a1@2 d2@5 ~", S: "d2@3 d2 d3@2 d2 ~ d2@2 bb1@5 ~",
  T: "bb1@4 a1@6 d2@5 ~", U: "[d2@6 a2@2 d2@3 ~ bb1@8 a1@4 a1@2 d2@5 ~]/2", V: "d2@4 d3@2 d2@3 ~ d2@2 bb1@3 ~",
  W: "[bb1@4 a1@3 ~ a1@2 d2@32 ~@6]/3", X: "[~@12 g1@13 ~ a1@16 ~@2 d2 f2@3]/3",
  Y: "[a1 ~ c2 ~ d2 ~ f2 d2 ~ d2 ~ g1@7 g2@7 ~ g2 d2 g1@4]/2", Z: "~@2 f2@3 ~ f2 ~ f2 g2@3 g1@4",
  AA: "[~@2 g1 d2 g2@6 g1@4 f2@4 g1@2 f2@3 ~ f2 ~ g1@6, ~@25 g2@2 ~@5]/2",
  AB: "[~@2 g1 d2 g2@5 ~ g1@8 f2@3 ~ f2 ~ f2 g2@2 ~ g1@4]/2", AC: "[~@2 g1 d2 g2@5 ~ g1@8 f2@5 ~ f2 ~@3 g1 c2@3]/2",
  AD: "c2 f2@3 ~@4 d2 ~ f2 ~ d2 ~ c2 d2", AE: "f2 f1@3 a1 ~ c2 ~ d2 ~ f2 d2 ~@4",
  AF: "f2 f1@2 ~ a1 ~ c2 ~ d2 ~ f2 d2 ~ c2 ~ c2", AG: "d2 f2@3 a1 ~ c2 ~ d2 ~ f2 d2 ~ c2 ~ c2",
  AH: "d2 f2@3 a1 ~ c2 ~ d2 ~ f2 d2 ~ d2 ~@2",
  AI: "[d2 f2@3 a1 ~ c2 ~ d2 ~ f2 d2 ~ d2 bb1@5 ~ bb1@4 a1@4 a1@2 d2@5 ~ d2@3 d2 d3@2 d2 ~ d2@2 bb1@5 ~ bb1@4 a1@6 d2@5 ~ d2@6 a2@2 d2@3 ~]/5",
  AJ: "[bb1@8 a1@4 a1@2 d2@5 ~ d2@4 d3@2 d2@3 ~ d2@2]/2", AK: "[bb1@3 ~ bb1@4 a1@3 ~ a1@2 d2@32 ~@2]/3",
  AL: "[bb1@4 bb2@3 bb1 a1 ~ a1@2 a2@2 d2@4 d2@2 d3@3 d2 d3@2 d2@2 d3@4]/2",
  AM: "bb1@4 bb2@3 bb1 [ab1,a1] ~ a1@2 a2@2 d2@2", AN: "~@2 d2@2 e2@2 f2@2 g2@2 f2@2 e2 ~ d2@2",
  AO: "[bb1@4 bb2@3 bb1 a1 ~ a1@2 a2@2 d2@4 d3@2 d2@3 d2 d3@2 d2@2 d3@2 d2 ~]/2",
  AP: "[bb1@4 bb2@3 bb1 bb2@2 a1@2 a2@2 d2@4 d3@4 d2@2 d3@3 d2 e3@3 d2]/2", AQ: "f3@3 d2 e3@2 d2 ~ d3@2 d2 ~ d3@4",
  AR: "bb1@2 bb2@2 a1 a2@2 d2", AS: "~ d2 e2 f2 e2 d2 e2 d2", AT: "bb1@4 bb2@3 bb1 a1 ~ a1@2 a2@2 d2@2",
  AU: "~ d2 d3 d2 d3 d2 d3@2", AV: "~@2 d2@2 d3@3 d2 f3@2 d2 g3@2 d2 a3@2",
  AW: "d2 f3@2 d2 d3@2 d2 d3@2 d2 d3@2 d2@2 c3@2", AX: "bb1@4 bb2@4 a1 ~ a1@2 a2@2 d2@2",
  AY: "~@2 d2@2 d3@3 d2 d3@2 d2@2 d3@4", AZ: "bb1@4 bb2@4 a1 ~ a1@3 ~ a1@2",
  BA: "f3@2 e3@2 d3@2 g3@2 f3@2 e3@2 d3@2 c3 ~",
  BB: "[bb1@4 bb2@3 bb1 a1 ~ a1@2 a2@2 d2@4 d2@3 ~ d2@4 d3@2 d2@2 d3@2]/2",
  BC: "[bb1@4 bb2@3 bb1 a1 ~ a1@2 a2@2 d2@4 d2@2 e2@3 ~ f2@3 ~ g2@3 ~]/2", BD: "a2@3 ~ g2@4 f2@4 d2@4",
  BE: "[bb1@4 bb2@4 a1 ~ a1@2 a2@2 d2@4 d2@2 d3@3 d2 d3@2 d2@2 d3@4]/2", BF: "~@2 d2@2 f2@2 e2@2 d2@2 f2@2 e2@2 bb1 ~",
  BG: "~@2 d2 ~ d2@2 ~ d2 d3@2 d2@2 d3@2 d2 ~", BH: "~@2 d2@2 d3@3 d2 d3 ~ d3@2 a2 d3 a2@2, ~@14 b2 ~",
  BI: "d2@4 d3@3 d2 d3@2 d2@2 d3@4", BJ: "~@2 d2@2 d3@3 d2 ~@2 d2@2 f3@2 d3@2, ~@2 d3 ~",
  BK: "~@2 d2@2 f2@2 d2@2 g2@2 d2@2 f2@2 d2 ~", BL: "~@2 d2@2 d3@3 d2 d3@2 d2@2 d3 c3 d3@2",
  BM: "[~@2 d2@2 e2@4 f2@4 e2@2 d2@4 d2@2 e2@3 ~@3 d2@2 e2@2 ~@2, ~@6 f2 ~]/2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · trumpet
const trumpet = note(`<
  A B C ~@17 D E@3 D F G@3 ~@7 H@5 I@4 J K ~@10 L M N@2 L O P@2 ~@8 Q@2 R@2 S@2 T@3 ~@36 U@2 V@2 W@2 X@3 Y ~
>`.pickRestart({
  A: "~@8 d5 a4 e5 a4 d5 c5 a4 g4", B: "c5 a4 g4 f4 g4 f4 d4 c4 f4 d4 c4 a3 d4 c4 a3 g3", C: "c4 a3 g3 f3 g3 f3 ~@10",
  D: "~@12 [f4,a4]@3 ~", // F
  E: "[[e4,g4]@3 ~ [e4,g4] ~ [e4,g4]@3 ~ [d4,f4] ~ [d4,f4]@7 ~@5 [f4,a4]@3 ~ [f4,a4] ~ [e4,g4]@4 ~@2 [d4,f4] ~ [d4,f4]@9 ~]/3", // Em Dm F Em Dm
  F: "[e4,g4]@3 ~ [e4,g4] ~ [e4,g4]@3 ~ [d4,f4] ~ [d4,f4]@4", // Em Dm
  G: "[~@2 [d4,f4] ~ [d4,f4] ~ [e4,g4] ~ [f4,a4]@3 ~ [f4,a4] ~ [e4,g4]@5 [e4,g4] ~@2 [d4,f4]@13 ~@13]/3", // Dm Em F Em Dm
  H: "[~@12 d5@8 c5@6 a4@18 c5@8 a4@6 g4@17 ~ a4@4]/5",
  I: "[~@4 g4@5 ~ g4@14 f4@2 ~@2 [f3,d5]@8 g3@6 d3@17 ~ d5 a4 e5 a4, ~@18 a4@11 ~@3]/4", // Dm
  J: "d5 c5 a4 g4 c5 a4 g4 f4 g4 f4 d4 c4 f4 d4 c4 a3", K: "d4 c4 a3 g3 c4 a3 g3 f3 g3 f3 ~@6",
  L: "[f4,a4]@3 ~ [e4,g4]@3 ~ [e4,g4] ~ [e4,g4]@3 ~ [d4,f4] ~", M: "[d4,f4]@7 ~@5 [f4,a4]@3 ~",
  N: "[[f4,a4] ~ [e4,g4]@4 ~@2 [d4,f4] ~ [d4,f4]@9 ~@13]/2", O: "[d4,f4]@5 ~ [d4,f4] ~ [d4,f4] ~ [e4,g4] ~ [f4,a4]@3 ~",
  P: "[[f4,a4] ~ [e4,g4]@5 [e4,g4] ~@2 [d4,f4]@13 ~@9]/2", Q: "[f3@4 g3@3 a3@9]/2", R: "[f3@4 e3@3 d3@9]/2",
  S: "[[f3,a3]@4 [e3,g3]@3 a3@9]/2", T: "[f3@8 e3@6 d3@29 ~@5]/3", U: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@6 [d4,f4,a4]@17 ~]/2",
  V: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [a3,d4,f4]@15 ~@3, ~@8 f4 ~@23]/2", // Dm C Dm
  W: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d4,f4,a4]@17 ~]/2", X: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@4 ~@2 [a3,d4,f4]@32 ~@2]/3",
  Y: "[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d4,f4,a4] ~", // Dm C Dm
})).s("gm_trumpet").gain(0.64)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  A@5 B C D E B C F E B C D E B C F G H I J K@3 L@2 M N O P Q R S T@5 U@5 V@3 Q R S W Q R S X@2 Y@2 Z@2 AA@2 AB AC AD AE
  AF AG AH AI AJ@3 AK@2 AL@2 AM@3 AN@2 AO@2 AP@2 AQ@3 AN@2 AO@2 AP@2 AQ@3 AN@2 AO@2 AP@2 AQ@3 AR@2 AO@2 AP@2 AQ@3 AN@2
  AO@2 AP@2 AQ@3 AS@2
>`.pickRestart({
  A: "[~@19 f4 g4 ~@2 c4 f4 ~ c4 ~@2 c4 ~ g3 c4 ~ g3 f3 g3 f3 ~@2 [g2,d3,f3,b3,d4,g4]@13 ~ [a3,c4,e4,g4,a4,c5]@17 ~ f3 f2@2 ~ a2 ~ [c3,a3,c4,d4,f4] ~, ~@4 [d2,a2,d3]@15 ~@8 a2@7 ~@6, ~@8 a3@19 a3@3 a3@3 a3@13 ~@26 [a3,c4,d4,f4]@5 ~@3, ~@8 d4@14 d4@3 d4@3 d4@8 ~@44, ~@8 d5 a4 e5 a4 d5 c5 a4 g4 c5 a4 g4@2 ~ f4@3 ~@56]/5", // G7 Am7 Dm7 D5 Dm7
  B: "d3 ~ f3 d3 ~ c3 ~ d3 f3 f2@2 ~ a2 ~ [c3,a3,c4,d4,f4] ~, ~@8 [a3,c4,d4,f4]@5 ~@3", // Dm7
  C: "d3 ~ f3 d3 ~@4 f3 f2@3 a2 ~ [c3,a3,c4,d4,f4] ~, ~@8 [a3,c4,d4,f4]@5 ~@3", // Dm7
  D: "d3 ~ f3 d3 ~ c3 ~ d3 f3 f2@3 a2 ~ [c3,a3,c4,d4,f4] ~, ~@8 [a3,c4,d4,f4]@5 ~@3", // Dm7
  E: "d3 ~ f3 d3 ~@4 f3 f2@2 ~ a2 ~ [c3,a3,c4,d4,f4] ~, ~@8 [a3,c4,d4,f4]@5 ~@3", // Dm7
  F: "d3 ~ f3 d3 ~ c3 ~ d3 f3 f2@3 a2 ~ [c3,a3,c4,d4,f4] ~, ~@2 [a3,c4,d4,f4] ~", // Dm7
  G: "d3 ~ f3 d3 ~@3 [g2,d3,f3,b3,d4]@7 [f3,b3,d4]!2", // G7 Bdim
  H: "[f3,b3,d4] ~ [f3,b3,d4] ~ [g2,d3] ~ [g2,d3,f3,b3,d4]@7 ~ [f2,f3,a3,c4]@2", // Bdim G5 G7 F
  I: "~@2 [f2,f3,a3,c4] ~ [f2,f3,a3,c4] [g2,g3,b3,d4] ~@2 [g2,d3,f3,b3,d4]@6 [f3,b3,d4] [g2,d3]", // F G G7 Bdim G5
  J: "[f3,b3,d4] ~ [f3,b3,d4]@2 ~@2 [f2,f3,a3,c4]@7 ~ [f2,f3,a3,c4]@2", // Bdim F
  K: "[~@2 [f2,f3,a3,c4] ~ [f2,f3,a3,c4]!2 ~ [g2,d3,g3,b3,d4]@7 [f3,b3,d4] b2 [f3,b3,d4] ~ [f3,b3,d4] ~@3 [g2,d3,f3,b3,d4]@7 ~ [f2,f3,a3,c4]@4 [f3,a3,c4] ~ [f3,a3,c4] [g2,g3,b3,d4] ~@2 [g2,d3,f3,b3,d4]@6 [f3,b3,d4] [g2,a2,d3], ~@15 [g2,d3]@2 ~@31]/3", // F G Bdim G7 F G G7 Bdim …
  L: "[[f3,b3,d4] ~ [f3,b3,d4] ~ [f3,d4] ~ [g2,d3,f3,b3,d4]@7 ~ [f3,a3,c4]@4 c3@2 [f3,a3,c4] ~@3 [g3,c4,e4]@4 [g3,d4,f4]@2 ~@2, ~@14 f2@7 ~@11]/2", // Bdim Dm G7 F C G7
  M: "~@4 d3 ~ f3 ~ d3 ~ c3 d3 f3 f2@3, ~ [a3,c4] ~@2", // Am
  N: "a2 ~ c3 ~ [d3,a3,c4,d4,f4] ~ f3 [d3,a3,c4,d4,f4] ~@4 f3 f2@2 ~, ~@3 [d3,a3,c4,d4,f4]", // Dm7
  O: "a2 ~ c3 ~ d3 ~ f3 d3 ~ [c3,d3,a3,c4,d4,f4] ~ c3 [f3,d4] f2@3, ~@3 [d3,a3,c4,f4]", // Dm7 Dm Dm7
  P: "a2 ~ c3 ~ d3 ~ f3 d3 ~@4 f3 f2@2 ~, ~@3 [a3,c4,d4,f4]", // Dm7
  Q: "a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~ c3 ~ d3 f3 f2@2 ~, ~@3 [a3,c4,d4,f4]", // Dm7
  R: "a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@4 f3 f2@3, ~@3 [a3,c4,d4,f4]", // Dm7
  S: "a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~ c3 ~ d3 f3 f2@3, ~@3 [a3,c4,d4,f4]", // Dm7
  T: "[a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@2 [bb2,f3,bb3,d4,f4,a4]@9 ~ [a2,e3,a3,c4,e4,g4]@5 ~ [d3,a3,d4,f4]@17 ~ [bb2,bb3,d4,f4,a4]@8 [c4,e4,g4]@5 ~ [a3,d4,f4]@14 ~@4 [bb2,f3,bb3,d4,f4,a4]@4]/5", // Dm7 Bbmaj7 Am7 Dm Bbmaj7 C Dm Bbmaj7
  U: "[~@4 [a3,c4,e4,g4]@5 ~ [a3,d4,f4]@14 ~@4 [bb2,f3,bb3,d4,f4,a4]@8 [c4,e4,g4]@4 ~@20 d5 a4 e5 a4 d5 c5 a4 g4 c5 a4 g4 f4 g4 f4 d4 c4 f4 d4 c4 a3, ~@42 [d3,f3,a3,c4,e4,g4]@25 ~@13]/5", // Am7 Dm Bbmaj7 C Dm7
  V: "[d4 c4 a3 g3 c4 a3 g3 f3 g3 f3 ~@2 [g2,d3,f3,b3,d4,g4]@13 ~ [a3,c4,e4,g4,a4,c5]@17 ~ f3 f2@2 ~, ~@13 a2@7 ~@2 [a3,c4,d4,f4]@2]/3", // G7 Am7 Dm7
  W: "a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@4 f3 f2@2 ~, ~@3 [a3,c4,d4,f4]", // Dm7
  X: "[a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@3 [g2,d3,f3,b3,d4]@7 [f3,b3,d4]!3 ~ [f3,b3,d4] ~ [g2,d3] ~ [g2,d3,f3,b3,d4]@6]/2", // Dm7 G7 Bdim G5 G7
  Y: "[~@2 [f2,f3,a3,c4]@3 ~ [f2,f3,a3,c4] ~ [f2,f3,a3,c4] [g2,g3,b3,d4] ~@2 [g2,d3,f3,b3,d4]@6 [f3,b3,d4] [g2,d3] [f3,b3,d4] ~ [f3,b3,d4]@2 ~@2 [f2,f3,a3,c4]@6]/2", // F G G7 Bdim G5 Bdim F
  Z: "[~@2 [f2,f3,a3,c4]@3 ~ [f2,f3,a3,c4] ~ [f2,f3,a3,c4]!2 ~ [g2,d3,g3,b3,d4]@7 [f3,b3,d4] b2 [f3,b3,d4] ~ [f3,b3,d4] ~@3 [g2,d3,f3,b3,d4]@6, ~@19 [g2,d3]@2 ~@11]/2", // F G Bdim G7 G5
  AA: "[~@2 [f2,f3,a3,c4]@4 [f3,a3,c4] ~ [f3,a3,c4] [g2,g3,b3,d4] ~@2 [g2,d3,f3,b3,d4]@6 [f3,b3,d4] [g2,a2,d3] [f3,b3,d4] ~ [f3,b3,d4] ~ [f3,d4] ~ [g2,d3,f3,b3,d4]@6]/2", // F G G7 Bdim Gsus2 Bdim Dm G7
  AB: "~@2 [f3,a3,c4]@4 c3@2 [f3,a3,c4] ~@3 [g3,c4,e4]@4, ~@2 f2@7 ~@7", // F C
  AC: "[g3,d4,f4]@2 ~@6 d3 ~ f3 ~ d3 ~ c3 d3, ~@2 [a3,c4] ~", // G7 Am
  AD: "f3 f2@3 a2 ~ c3 ~ [d3,a3,c4,d4,f4] ~ f3 [d3,a3,c4,d4,f4] ~@4", // Dm7
  AE: "f3 f2@2 ~ a2 ~ c3 ~ d3 ~ f3 d3 ~ [c3,d3,a3,c4,d4,f4] ~ c3, [d3,a3,c4,d4,f4] ~@3", // Dm7
  AF: "[f3,d4] f2@3 a2 ~ c3 ~ d3 ~ f3 d3 ~@4, [d3,a3,c4,f4]@5 ~@11", // Dm Dm7
  AG: "f3 f2@2 ~ a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~ c3 ~ d3, [a3,c4,d4,f4]@5 ~@11", // Dm7
  AH: "f3 f2@2 ~ a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@4, [a3,c4,d4,f4]@5 ~@11", // Dm7
  AI: "f3 f2@3 a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~ c3 ~ d3, [a3,c4,d4,f4]@5 ~@11", // Dm7
  AJ: "[f3 f2@3 a2 ~ [c3,a3,c4,d4,f4] ~ d3 ~ f3 d3 ~@2 [bb2,f3,bb3,d4,f4,a4]@9 ~ [a2,e3,a3,c4,e4,g4]@5 ~ [d3,a3,d4,f4]@17 ~, [a3,c4,d4,f4]@5 ~@43]/3", // Dm7 Bbmaj7 Am7 Dm Dm7
  AK: "[[bb2,bb3,d4,f4,a4]@8 [c4,e4,g4]@5 ~ [a3,d4,f4]@14 ~@4]/2", // Bbmaj7 C Dm
  AL: "[[bb2,f3,bb3,d4,f4,a4]@7 ~ [a3,c4,e4,g4]@5 ~ [a3,d4,f4]@14 ~@4]/2", // Bbmaj7 Am7 Dm
  AM: "[[bb2,f3,bb3,d4,f4,a4]@8 [c4,e4,g4]@4 ~@2 [d3,f3,a3,c4,e4,g4]@25 ~@9]/3", // Bbmaj7 C Dm7
  AN: "[[d4,f4,a4]@4 [d4,f4,a4]@4 [a2,c4,e4,g4] ~ [a2,c4,e4,g4]@4 [d4,f4,a4]@6 f4@2 ~@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2, [bb2,bb3]@4 ~@3 [d3,a3]@4 f4 ~@4, ~@20 [d4,a4]@3 [d3,a3]@5 [d3,a3]@4]/2", // Dm Am7 Dm Bb D5
  AO: "[[d4,f4,a4]@4 [d4,f4,a4]@4 [c4,e4,g4] ~ [c4,e4,g4]@4 d3@4 ~@2 [d4,f4,a4]@2 [d4,f4,a4]!2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2, ~@7 [d4,f4,a4]@3 ~@6, ~@9 d3@7]/2", // Dm C Dm
  AP: "[[d4,f4,a4]@4 [d4,f4,a4]@4 [c4,e4,g4] ~ [c4,e4,g4]@4 [d4,f4,a4]@4 [d4,f4,a4]@2 ~ [d3,a3]@2 [d3,a3] ~@4 [d4,f4,a4]@4, bb2@4 ~@3 [d3,a3]@3 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@2, ~@13 [d3,a3]@3]/2", // Dm C Dm D5 Dm D5 Dm D5
  AQ: "[[d4,f4,a4]@4 [d4,f4,a4]@4 [a2,c4,e4,g4] ~ [a2,c4,e4,g4]@4 [d4,f4,a4]@6 ~@4 c4@2 c4@6 ~@10 a3@4 ~@2, [bb2,bb3]@8 ~@6 [d3,a3]@9 d3@3 a4@8 d3@12 ~@2, ~@10 d4@13 ~, ~@10 f4@7 a3@2 a3@2 ~@3, ~@10 a4@2 a3@4 c4@2 [c4,f4,a4]@2 [c4,f4,a4]@3 ~]/3", // Dm Am7 Dm Bb D5 F
  AR: "[[d4,f4,a4]@4 [d4,f4,a4]@4 [a2,c4,e4,g4] ~ [a2,c4,e4,g4]@4 [d4,f4,a4]@6 f4@2 [d6,f6,g6,c7]!2 [d4,f4,a4,d6,f6,g6,c7]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2, [bb2,bb3]@4 ~@3 [d3,a3]@4 f4 ~ [d6,f6,g6,c7]@3, ~@20 [d4,a4]@3 [d3,a3]@5 [d3,a3]@4]/2", // Dm Am7 Dm Dm7 Dm Bb D5 Dm7 …
  AS: "[[d4,f4,a4]@2 [d4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4] [d3,a3,a4]@3 ~@6, [bb2,f3,bb3]@4 a2@3 [d4,f4] ~@8]/2", // Dm C D5 Bb5 Dm
})).s("gm_piano").gain(0.26)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@2 A@2 B C D E D C D F D C D E D C D F G H I J K L@2 M N O P Q R S T U V@6 W@3 ~ X@3 S T U T S T U Y Z AA AB AC@2 AD
  AE AF AG AH AI AJ AK AL AM AN AO@2 AP@2 AQ@2 AR@2 ~ AS@6 AT AU@2 AS@6 AT AU@2 AS@6 AT AU@2 AS@6 AT AU@2 AS@6 AT AU@2
  ~@2
>`.pickRestart({
  A: "[~@8 [g3,b3,d4]@13 ~ [a2,a3]@10]/2", B: "~@8 f3 f2@3 a2 ~ [c3,c4,d4,f4] ~, ~@8 [c4,d4,f4]@5 ~@3",
  C: "d3 ~ f3 d3 ~ [c3,c4,d4,f4] ~ d3 f3 f2@3 a2 ~ [c3,c4,d4,f4] ~, ~@8 [c4,d4,f4]@5 ~@3", // Dm7
  D: "d3 ~ f3 d3 ~@4 f3 f2@3 a2 ~ [c3,c4,d4,f4] ~, ~@8 [c4,d4,f4]@5 ~@3", // Dm7
  E: "d3@2 f3 d3 ~ [c3,c4,d4,f4] ~ [d3,f3] f3 f2@3 a2 ~ [c3,c4,d4,f4] ~, ~@2 [c4,d4,f4] ~", // Dm7 Dm Dm7
  F: "d3 ~ f3 d3 ~ [c3,c4,d4,f4] ~ [d3,f3] f3 f2@3 a2 ~ [c3,c4,d4,f4] ~, ~@2 [c4,d4,f4] ~", // Dm7 Dm Dm7
  G: "d3 ~ f3 d3 ~@3 [g2,f3,b3,d4]@4 ~ [f3,b3,d4]@3 g2", // G7 Bdim
  H: "[f3,b3,d4] ~ [f3,b3,d4] ~@3 [g2,f3,b3,d4]@3 ~ [f3,b3,d4]@2 g2 ~ [f3,a3,c4]@2", // Bdim G7 Bdim F
  I: "~@2 [f3,a3,c4] ~ [f3,a3,c4] [f3,b3,d4] ~@2 [f3,b3,d4]@5 ~ [f3,b3,d4]!2", // F Bdim
  J: "g2 ~ [f3,b3,d4] ~@7 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2", // Bdim F
  K: "[f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [g2,f3,b3,d4]@8 ~ [g2,f3,b3,d4]", // F G7
  L: "[~@2 [f3,b3,d4] ~@3 [g2,f3,b3,d4]@7 ~ [f3,a3,c4]@4 f2 ~ [f3,a3,c4] [f3,b3,d4] ~@2 [g2,f3,b3,d4]@5 ~ [f3,b3,d4] g2]/2", // Bdim G7 F Bdim G7 Bdim
  M: "[f3,b3,d4] ~ [f3,b3,d4] ~@11 [f2,f3,a3,c4]@2", N: "~@2 [f2,f3,a3,c4] ~ [f2,f3,a3,c4] ~@3 f3 f2@3 f3 f2@2 a2",
  O: "a2 ~ c3 ~ [c4,f4]@5 ~@4 [c4,f4] ~@2", P: "[c4,f4] ~@3 [c4,f4]@2 ~ [c4,f4] ~@4 [c4,f4]@4",
  Q: "~@2 [c4,f4] ~@3 [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4]@4", R: "~@2 [c4,f4] ~@3 [c4,f4] ~@5 [c4,d4,f4]@4",
  S: "~@2 [c4,d4,f4] ~@6 [c4,d4,f4] ~@2 [c4,d4,f4]@4", T: "~@2 [c4,d4,f4] ~@9 [c4,d4,f4]@4",
  U: "~@2 [c4,d4,f4] ~@6 [c4,d4,f4] ~ f3 [c4,d4,f4]@4", // Dm7
  V: "[~@2 [c4,d4,f4] ~@9 [d4,f4,a4]@7 ~ [c4,e4,g4]@6 a3@6 ~@4 d4@2 [e4,f4]@2 f4@2 a3@2 [d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,f3,a3]@16 ~@2 [d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,f3,a3]@6, ~@13 [d3,f3]@9 ~@26, ~@34 a3@7 ~@55]/6", // Dm7 Dm C Fmaj7 Dm C Dm C …
  W: "[~@4 a3@7 ~ [d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,a3]@15 ~@7, ~@2 d3@9 ~@37]/3", // Dm C D5
  X: "[~@12 [g3,b3,d4]@13 ~ [a2,a3]@10 ~@8 [c4,d4,f4]@4]/3", Y: "~@2 [c4,d4,f4] ~@8 [g2,f3,b3,d4]@4 ~",
  Z: "[f3,b3,d4]@3 g2 [f3,b3,d4] ~ [f3,b3,d4] ~@3 [g2,f3,b3,d4]@3 ~ [f3,b3,d4]@2", // Bdim G7 Bdim
  AA: "g2 ~ [f3,a3,c4]@3 ~ [f3,a3,c4] ~ [f3,a3,c4] [f3,b3,d4] ~@2 [f3,b3,d4]@4", // F Bdim
  AB: "~@2 [f3,b3,d4]!2 g2 ~ [f3,b3,d4] ~@7 [f3,a3,c4] ~", // Bdim F
  AC: "[~ [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [f3,a3,c4] ~@2 [g2,f3,b3,d4]@8 ~ [g2,f3,b3,d4] ~@2 [f3,b3,d4] ~@3 [g2,f3,b3,d4]@6]/2", // F G7 Bdim G7
  AD: "~@2 [f3,a3,c4]@4 f2 ~ [f3,a3,c4] [f3,b3,d4] ~@2 [g2,f3,b3,d4]@4", // F Bdim G7
  AE: "~@2 [f3,b3,d4] g2 [f3,b3,d4] ~ [f3,b3,d4] ~@9", // Bdim
  AF: "~@2 [f2,f3,a3,c4]@3 ~ [f2,f3,a3,c4] ~ [f2,f3,a3,c4] ~@3 f3 f2@3", AG: "f3 f2@2 a2!2 ~ c3 ~ [c4,f4]@5 ~@3",
  AH: "~ [c4,f4] ~@2 [c4,f4] ~@3 [c4,f4]@2 ~ [c4,f4] ~@4", AI: "[c4,f4]@4 ~@2 [c4,f4] ~@3 [c4,f4] ~@2 [c4,f4] ~@2",
  AJ: "[c4,f4]@5 ~ [c4,f4] ~@3 [c4,f4] ~@5", AK: "[c4,d4,f4]@5 ~ [c4,d4,f4] ~@6 [c4,d4,f4] ~@2",
  AL: "[c4,d4,f4]@5 ~ [c4,d4,f4] ~@9", AM: "[c4,d4,f4]@5 ~ [c4,d4,f4] ~@6 [c4,d4,f4] ~ f3",
  AN: "[c4,d4,f4]@4 ~@2 [c4,d4,f4] ~@9", // Dm7
  AO: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@6 a3@6 ~@4 d4@2 [e4,f4]@2 f4@2 a3@2, ~@7 [d3,f3]@9, ~@22 a3@7 ~@3]/2", // Dm C Fmaj7 Dm
  AP: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,f3,a3]@16 ~@2]/2", // Dm C Dm
  AQ: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,f3,a3]@8 ~@2 a3@7 ~, ~@22 d3@9 ~]/2", // Dm C Dm
  AR: "[[d4,f4,a4]@7 ~ [c4,e4,g4]@5 ~ [d3,a3]@15 ~@3]/2", // Dm C D5
  AS: "[[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [g3,c4,e4]@3 ~ [g3,c4,e4] ~ [a3,d4,f4]@5 ~ [a3,d4,f4]@3 d3 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 ~@2, [bb2,f3]@7 ~ a2@4 ~@2 d3@6 ~@6 d3@5 ~]/2", // Dm C Dm Bb5
  AT: "[a3,d4,f4]@3 ~ [a3,d4,f4]@3 ~ [g3,c4,e4] ~ [g3,c4,e4]@2 ~@4, [bb2,f3]@7 ~@9", // Dm C Bb5
  AU: "[[d4,f4,a4]@4 [d4,f4,a4]@2 ~@2 [d4,f4,a4]@2 [d4,f4,a4]@2 ~@4 [d4,f4,a4]@2 ~@2 [d4,f4,a4]@2 ~@2 [d4,f4,a4]@2 ~@4 [d4,f4,a4] ~, d3@3 [d4,f4,a4] ~@2 [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4]!2 ~, ~@7 d3@6 d3@2 d3@4 d3@4 d3@4 d3@2 d3@2 ~]/2", // Dm
})).s("gm_acoustic_guitar_nylon").gain(0.39)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A B C D@15 E F G F H F G F I J K@2 L M@3 N O@2 P A P A P ~@2 Q R S T@4 M@3 U V W V X V W V Y Z D@2 AA AB@3 AC AD
  AE AD AE AD AE AF ~ AG AH AI AH AI AH AI AH AJ AK AH AI AH AI AH AI AH AJ AK AH AI AH AI AH AI AH AJ AK AH AI AH AI AH
  AI AH AJ AK AH AI AH AI AH AI AH AJ AK AH ~
>`.pickRestart({
  A: "~ x", B: "~@3 x ~@4", C: "~@2 x ~ x ~@2 x", D: "x ~@3 x ~@2 x", E: "x ~@3 x ~@2 x ~@7 x",
  F: "x ~ x ~@3 x ~@3 x ~@4 x", G: "x ~ x ~ x!2 ~@2 x ~@6 x", H: "x ~ x ~ x!2 ~ x ~@7 x",
  I: "x ~ x ~ x!2 ~ x ~ x ~@3 x ~ x", J: "x!3 ~@2 x!2 ~", K: "~@2 x ~@2 x!2 ~", L: "~@4 x ~@5 x!3 ~@3",
  M: "~ x!2 ~@3 x ~", N: "~@2 x ~ x ~@6 x ~@4", O: "x!2", P: "x ~@3 x!2 ~@2", Q: "~@3 x", R: "~@5 x ~@2", S: "~@2 x!2",
  T: "x!4", U: "~@2 x ~ x ~@3 x ~@2 x ~@4", V: "~@3 x!2 ~ x ~@3 x ~@3 x ~", W: "~@3 x!2 ~ x ~ x!2 ~@2 x ~@3",
  X: "~@3 x!2 ~ x ~ x!2 ~ x ~@4", Y: "~@3 x!2 ~ x ~ x!2 ~ x ~ x ~@2", Z: "~ x ~ x!2 ~ x ~ x ~@5 x ~",
  AA: "x ~@7 x ~@5 x!2", AB: "x ~@2 x!2 ~@3", AC: "x ~@5 x ~ x ~@6 x", AD: "x ~@6 x!2 ~ x ~@3 x ~",
  AE: "~@7 x!2 ~ x ~@3 x ~", AF: "x ~@6 x!2 ~ x ~ x ~ x ~", AG: "x!2 ~@2 x!2 ~@10", AH: "x ~@5 x!3 ~ x ~@3 x ~",
  AI: "~@3 x!3 ~ x", AJ: "~@3 x ~ x!2 ~", AK: "x ~@5 x!2 ~@8",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@4 B A@3 B A@7 C A@3 D A@3 E F G@2 H G@3 I ~@6 J ~@4 F G@3 K G@3 L G@3 M G@3 N O A@2 P A@3 Q A@6 R P S T@7 U V
  T@7 U W T@3 X T@3 Y R T@7 U V T@3 X T@3 Y R Z ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2 x ~@2 x ~@4 x ~@3", C: "~@5 x!2 ~@5 x ~@3", D: "~ x ~ x ~@2 x ~",
  E: "~@4 x!2 ~@2 x ~@3 x ~@3", F: "~ x", G: "x!2", H: "x!3 ~", I: "x ~@7 x!2 ~@6", J: "~ x ~ x!2 ~@3",
  K: "~@3 x ~@5 x!3 ~@4", L: "x ~@8 x!2 ~@5", M: "x ~@2 x ~ x ~@2", N: "x ~@7 x!2 ~@2 x ~@3", O: "x ~@2 x", P: "~ x!3",
  Q: "~@4 x ~@7 x!2 ~@2", R: "~@2 x ~@2 x!2 ~", S: "x ~@3 x ~@2 x ~ x ~ x ~@2 x!2", T: "x!4",
  U: "x ~@2 x!2 ~@5 x ~@2 x ~@2", V: "x ~@3 x!2 ~@2 x ~ x ~@2 x ~ x", W: "~@6 x ~@2 x!7", X: "~@3 x!5",
// … 88 more lines