Strudelify

You Light Up My Life

Debby Boone

KeyE♭ majorTempo30 bpm
0:00/0:00
// You Light Up My Life — Debby Boone
// 30 bpm, 3/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: pitch bends are ignored
// note: Full arrangement: all 37 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(30/3)

// 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 · electric bass finger · "Bass"
const bass = note("<A B@4 C D@3 E F G@4 H I@4 J K@4 L@5 ~@7>".pickRestart({
  A: "~@13 bb1@3",
  B: "[~@6 bb1@6 ~@5 bb1@6 ~@6 bb1@6 ~@3 f2@2 bb1@6 ~@5 eb2@6 ~@4 eb2@2 ab1@6 ~@3 g1@2 f1@6 ~@4 f1@2 g1@6 ~@3 g1@2 c2@6 ~@4 c2@2 f2@6 ~@3 c2@2 f2@6 ~@2, ~@25 bb1 ~@38]/4",
  C: "~@3 bb1@6 ~@4 bb1@2 eb2@6 ~@3 eb2@2 ab2@6, ~ a1 ~@14",
  D: "[~@4 g2@2 f2@6 ~@3 f2@2 g1@6 ~@4 db2@2 g1@6 ~@3 g1@2 bb1@6 ~@5 bb1@3 ~ c2@3 ~ d2@3 ~ eb2@6 ~@3 bb1@2 eb2@6 ~@4 bb1@2 eb2@6 ~ bb1@2 ~, ~@25 f2 ~@22]/3",
  E: "~ eb2@3 ~ f2@3 ~ g2@3 ~ c2@6 ~@3 g1@2 c2@3 ~ d2@3 ~", F: "e2@3 f2@6 ~@4 c2@2 f2@6 ~@3 f2@2 bb1@6",
  G: "[~@4 f1@2 bb1@6 ~@3 bb1@2 eb2@6 ~@4 d2@2 c2@6 ~@3 g2@2 f2@6 ~@5 bb1@6 ~@6 bb1@6 ~@3 bb1@2 eb2@6 ~@4 eb2@2 ab1@6 ~@3 g1@2 f1@6 ~@4 f1@2 g1@6 ~@3 g1@2 c2@6 ~@2, ~@25 f2 ~@38]/4",
  H: "~@3 f2@6 ~@4 c2@2 f2@6 ~@3 a1@2 bb1@6, ~ c2 ~@14",
  I: "[~@4 bb1@2 eb2@6 ~@3 eb2@2 ab2@6 ~@4 g2@2 f2@6 ~@3 f2@2 g1@6 ~@5 g1@6 ~@4 g1@2 bb1@6 ~@3 f2@2 bb1@3 ~ c2@3 ~ d2@3 ~ eb2@6 ~@3 bb1@2 eb2@6 ~@4 bb1@2 eb2@6 ~ bb1@2 ~@2 eb2@3 ~ f2@3 ~, ~@25 db2 ~@38]/4",
  J: "g2@3 c2@6 ~@4 g1@2 c2@3 ~ d2@3 ~ e2@3 f2@6",
  K: "[~@4 c2@2 f2@6 ~@3 f2@2 bb1@6 ~@4 f1@2 bb1@6 ~@3 bb1@2 g1@6 ~@4 g1 g1@10 ~@2 c2@6 ~@3 c2@2 f2@6 ~@4 f2@2 bb1@6 ~@3 bb1@2 g1@6 ~@4 g1@2 c2@6 ~@3 c2@2 f2@6 ~@2]/4",
  L: "[~@3 bb1@6 ~@4 bb1@2 bb1@7 ~@4 bb1@2 bb1@10 ~@2 bb1@3 ab2@5 eb2@5 ~ bb1@5 ab1@19 ab1@22 ~ eb2@59, ~ f2 ~@78]/5",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · piano
const piano = note("<~@2 A@2 B C D E F G H@2 I@2 J K L M@2 N O P Q@2 R@4 S@2 ~@7>".pickRestart({
  A: "[~@8 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [d4,f4,g4,bb4]@3 ~ [d4,f4,g4,bb4]@3 [d4,f4,g4,bb4]@3]/2", // Bbm Eb Ab Fm Gm7
  B: "~ [e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~ [f4,ab4,c5]@3 [f4,ab4,c5]@3 ~ [eb4,g4,bb4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~", // C7 Fm Eb F7
  C: "[c4,eb4,f4,a4]@3 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@2", // F7 Bbm Eb Ab
  D: "~@2 [eb4,g4,bb4]@3 ~ [f4,ab4,c5]@3 ~ [f4,ab4,c5]@3 [f4,ab4,c5]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3", // Eb Fm G
  E: "[d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [bb3,d4,f4,ab4]@3 ~ [bb3,d4,f4,ab4]@3 ~ [bb3,db4,f4,ab4]@3 bb3@2 d4@2 f4@3 ~ ab4@3 ~ [b5,c6,d6,eb6]", // G Bb7 Bbm7
  F: "[a5,bb5,c6,db6] [g5,ab5,bb5,b5] [f5,gb5,ab5,a5] [eb5,e5,gb5,g5] [db5,d5,e5,f5] [b4,c5,d5,eb5] [a4,bb4,c5,db5] [gb4,g4,ab4,a4,bb4,b4] [e4,f4,g4,ab4] [d4,eb4,f4,gb4] [eb3,g3,bb3,d4]@10 ~@2 db4@2 eb4@2 [g4,bb4]@6, ~@10 [db4,e4] ~@21", // Ebmaj7 Gm Dbm
  G: "~ [db4,eb4,g4,bb4]@6 ~@2 db4 eb4 g4 bb4 ~@2 [bb4,c5]@3 ~@6 [e4,g4,bb4,c5]@6 ~@2, ~@13 e4@3 ~@16, ~@14 g4@3 ~@15", // Eb7 Bbsus2 C7
  H: "[~@3 f4@3 ~ ab4@3 ~ c5@3 ~ f4@2 ~ c5@2 eb5@3 ~@9 ab4@3 ~@3 [d4,f4,ab4,bb4]@6 ~@5 eb4@2 g4@2 bb4@3 ~ [f4,bb4,d5]@3 eb4@3 ~, ~@17 ab4@3 ~@6 bb3@4 f4@6 ~@28, ~@14 d4@3 ~@15]/2", // Bb7 Bb
  I: "[g4@3 ~ c5@3 ~ f4@2 ab4@2 c5@3 [f4,ab4,c5]@3 ~ f4@2 ab4@2 bb4@2 d5@2 [d4,f4,ab4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 [c4,eb4,ab4]@3]/2", // Fm Bb7 Bbm Eb Ab
  J: "~ [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [d4,f4,g4,bb4]@3 [d4,f4,g4,bb4]@3 ~ [d4,f4,g4,bb4]@3 ~ [e4,g4,bb4,c5]@3 ~ [e4,g4,bb4,c5]@3 ~", // Fm Gm7 C7
  K: "[e4,g4,bb4,c5]@3 [f4,ab4,c5]@3 ~ [f4,ab4,c5]@3 ~ [eb4,g4,bb4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@2", // C7 Fm Eb F7 Bbm
  L: "~@2 [db4,f4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 [eb4,g4,bb4]@3 ~ [c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 ~ [eb4,g4,bb4]@3 ~ [f4,ab4,c5]@3", // Bbm Eb Ab Eb Fm
  M: "[[f4,ab4,c5]@3 ~ [f4,ab4,c5]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@3 ~ [bb3,d4,f4,ab4]@3 ~ [bb3,d4,f4,ab4]@3 ~ [bb3,db4,f4,ab4]@3 bb3@2 d4@2 f4@3 ~ ab4@3 ~ [b5,c6,d6,eb6] [a5,bb5,c6,db6] [g5,ab5,bb5,b5] [f5,gb5,ab5,a5] [eb5,e5,gb5,g5] [c5,db5,d5,eb5,e5,f5] [bb4,b4,db5,d5] [ab4,a4,b4,c5] [gb4,g4,a4,bb4] [e4,f4,g4,ab4]]/2", // Fm G Bb7 Bbm7
  N: "[d4,eb4,f4,gb4] [eb3,g3,bb3,d4]@10 ~@2 db4@2 ~ [g4,bb4]@6 ~@2 [db4,eb4,g4,bb4]@6 ~@2, ~ [db4,e4] ~@13 eb4@3 ~@14", // Ebmaj7 Gm Eb7 Dbm
  O: "db4 eb4 g4 bb4 ~@2 c5@3 ~@6 [e4,g4,bb4,c5]@6 ~@5 f4@3 ~ ab4@2, ~@3 e4@2 bb4@3 ~@24, ~@4 g4@3 ~@25", // C7
  P: "~@2 c5@3 ~@2 ab4@2 c5@2 eb5@3 ~@9 ab4@3 ~@2 [d4,f4,ab4,bb4]@4, ~@6 f4@3 ~@8 bb3@4 f4@6 ~@5, ~@19 d4@6 ~@7", // Bb7
  Q: "[~@8 b3@2 d4@2 g4@3 [d4,g4,b4]@3 ~ [g4,b4,d5]@10 ~@2 eb4@2 ~ c5@2 g4@3 ~@7 f4@3 ~ [f4,c5]@3 ~ [eb4,eb5]@3 [g4,g5]@3 ~ [bb4,bb5]@3, ~@33 g4@3 ~@6 f4@2 c5@3 ~@17, ~@43 a4@2 a4@5 a4@4 ~@10]/2", // G F5 Eb G Bb
  R: "[~ [g4,b4,d5]@10 ~ eb4@3 ~ g4@3 ~ c5@3 ~ f4@2 a4@2 c5@3 [f4,a4,c5]@3 ~ eb4@2 g4@2 bb4@2 eb5@2 g5@2 bb5@2 f5 ~ c5 ~ ab4 ~ f4 ~@2 c4 ~ ab3@2 [d4,f4,bb4]@9 ~@6 [c4,eb4]@3 ~@2 [bb3,eb4,g4]@4 ~ [bb3,d4,f4]@4 ~@2 [ab3,c4,eb4]@12 ~@7 ab3@4 ~@3 eb4@5 ~@6, ~@75 ab4@9 ~@30 c4@5 ~@9]/4", // G F Bb Cm Eb Bb Ab
  S: "[~ [g3,bb3,eb4]@12 ~@3]/2", // Eb
})).s("gm_piano").gain(0.31).pan(0.7)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note("<A@4 B C D@2 E F G H I@2 J K L@4 M@8 N@8 ~>".pickRestart({
  A: "[~@27 db4@10 ~ [f3,bb3,db4]@10 ~ [f3,bb3,db4]@10 ~@2 [f3,bb3,db4]@10 ~ bb3@2 db4@2 f4@2 db4@2 f4@2 db4@2 g3@2 bb3@2 ~ bb3@2 eb4@2 bb3@2 bb3@2 c4@2 eb4@2 c4@2 eb4@2 c4@2 ~ c4@2 f4@2 c4@2 f4@2 c4@2 g3@2 bb3@2 d4@2 f4@2 d4@2, ~@26 f3@10 ~@52 eb4@3 ~@16 ab3@3 ~@18]/4", // Bbm
  B: "~ g3@2 bb3@2 c4@2 e4@2 c4@2 bb3@2 ab3@2 c4@2 eb4@2 ~ bb3@2 g3@2 a3@2 c4@2 eb4@2 f4@2, bb3@2 ~@17 eb4@3 ~@10",
  C: "eb4@2 c4@2 bb3@2 db4@2 ~ db4@2 f4@2 db4@2 g3@2 bb3@2 eb4@2 bb3@2 eb4@2 bb3@2 ~ c4@2 eb4@2, ~@8 f4@3 ~@16 ab3@3 ~@2",
  D: "[c4@2 bb3@2 g3@2 ab3@2 c4@2 f4@2 c4@2 f4@2 ~ g3@2 b3@3 ~ g3@2 c4@2 g3@2 g3@2 b3@2 d4@2 ~ d4@2 b3@2 ab3@2 bb3@2 d4@2 eb4@2 c4@2 ab3@2 ab3@2 bb3@2 d4@3 f4@3 ~@2, ~@16 c4@2 ~@17 b3@3 ~@26]/2",
  E: "~@3 [g3,bb3,eb4]@3 ~ [g3,bb3,eb4]@3 ~@4 [eb3,g3,bb3,d4]@3 ~ [eb3,g3,bb3,d4]@3 ~@5 [eb3,g3,bb3,db4]@3 ~ [eb3,g3,bb3,db4]@2", // Eb Ebmaj7 Eb7
  F: "~@5 [g3,bb3,db4,eb4]@3 ~ [g3,bb3,db4,eb4]@3 ~@5 [g3,bb3,c4,e4]@3 [g3,bb3,c4,e4]@3 ~@5 [g3,bb3,c4,e4]@3 ~", // Eb7 C7
  G: "[g3,bb3,c4,e4]@3 ~@5 [ab3,c4,f4]@3 [ab3,c4,f4]@3 ~@5 [ab3,c4,eb4,f4]@3 ~ [ab3,c4,eb4,f4]@3 ~@4 [ab3,bb3,d4,f4]@2", // C7 Fm Fm7 Bb7
  H: "~@2 [ab3,bb3,d4,f4]@3 ~@5 [ab3,bb3,d4,f4]@3 ~ [ab3,bb3,d4,f4]@3 ~@4 [g3,bb3,eb4]@3 ~ [f3,bb3,d4]@3 ~@4", // Bb7 Eb Bb
  I: "[~ [g3,c4,eb4]@3 [g3,c4,eb4]@3 ~@5 [ab3,c4,f4]@3 ~ [ab3,c4,f4]@3 ~@5 [ab3,bb3,d4,f4]@3 [ab3,bb3,d4,f4]@3 ~ bb3@2 db4@2 f4@2 db4@2 f4@2 db4@2 ~ bb3@2 eb4@2 bb3@2 eb4@2 bb3@2 bb3@2 c4@2 eb4@2 c4@2 eb4@2, ~@43 g3@3 ~@18]/2", // Cm Fm Bb7
  J: "~ ab3@2 c4@2 f4@2 c4@2 f4@2 c4@2 g3@2 bb3@2 d4@2 ~ d4@2 bb3@2 g3@2 bb3@2 c4@2 e4@2, c4@2 ~@17 f4@3 ~@10",
  K: "c4@2 bb3@2 ab3@2 c4@2 eb4 eb4@2 bb3@2 g3@2 a3@2 c4@2 eb4@2 f4@2 eb4@2 c4@2 ~ db4@2 f4@2, ~@27 bb3@3 ~@2",
  L: "[db4@2 f4@2 db4@2 g3@2 bb3@2 eb4@2 bb3@2 eb4@2 ~ ab3@2 c4@2 eb4@2 ~@2 bb3@2 g3@2 ab3@2 c4@2 f4@2 ~ f4@2 c4@2 g3@2 b3@3 ~ g3@2 c4@2 g3@2 g3@2 b3@2 ~ b3@2 d4@2 b3@2 ab3@2 bb3@2 d4@2 ~@2 c4@2 ab3@2 ~ bb3@2 d4@3 ~ f4@3 ~@5 [g3,bb3,eb4]@3 ~ [g3,bb3]@3 ~@4 [eb3,g3,bb3,d4]@3 ~ [eb3,g3,bb3,d4]@3 ~@5 [eb3,g3,bb3,db4]@3 [eb3,g3,bb3,db4]@3 ~@5 [g3,bb3,db4,eb4]@3 ~, ~@16 bb3@2 ~@5 eb4@46 eb4@21 ~@4 eb4@30 ~@4, ~@35 c4@3 ~@18 d4@3 ~@16 ab3@3 ~@50]/4", // Eb Gm Ebmaj7 Eb7
  M: "[[g3,bb3,db4]@3 ~@5 [g3,bb3,c4,e4]@3 [g3,bb3,c4,e4]@3 ~@5 [g3,bb3,c4,e4]@3 ~ [g3,bb3,c4,e4]@3 ~@4 [ab3,c4,f4]@3 ~ [ab3,c4,f4]@3 ~@5 [ab3,c4,eb4,f4]@3 ~ [ab3,c4,f4]@3 ~@4 [ab3,bb3,d4,f4]@3 ~ [ab3,bb3,d4,f4]@3 ~@5 [ab3,bb3,d4,f4]@3 [ab3,bb3,d4,f4]@3 ~@5 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~@5 [g3,b3,d4]@3 [g3,b3,d4]@3 ~@5 [eb3,g3,c4]@3 ~ [eb3,g3,c4]@3 ~@4 [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~@5 [g3,bb3,eb4]@3 ~ [g3,bb3]@3 ~@4 [b3,d4,g4]@3 ~ [b3,d4,g4]@3 ~@5 [eb3,g3,c4]@3 [eb3,g3,c4]@3 ~@5 [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~@5 [g3,bb3,eb4]@3 [g3,bb3]@3 ~@6 [ab3,c4,f4]@4 [ab3,c4,f4]@4 ~@5 [f3,bb3,d4]@4 ~ [f3,bb3,d4]@4 ~ [c4,eb4,ab4]@6 [bb3,g4]@5 [bb3,d4,f4]@5 ~@16 c4@3 ~@4 c4@4 ~@7 eb4@3, eb4@42 ~@4 eb4@76 ~@4 eb4@42 ~@3 eb4@32 ~@6 eb4@17 eb4@6 eb4@14 eb4@7 ~@3, ~@220 ab3@5 ~@14 ab3@6 ~@11, ~@223 c4@5 ~ c4@5 ~@16 c4@6]/8", // Gdim C7 Fm Fm7 Fm Bb7 G Cm …
  N: "[~ c4@3 ~ [g3,bb3]@22 ~@229, ~@5 eb4@251]/8", // Gm
})).s("gm_acoustic_guitar_steel").gain(0.21)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@7 A@7 B C@4 D@5 E@6 ~@7>".pickRestart({
  A: "[~@26 f5@2 ~@2 d6 bb2@3 eb3@4 g3@4 ~@4 eb3@4 ~@4 bb2@3 db3@4 ~@8 eb4@2 g4@2 bb4@2 ~@3 c4@2 ~@2 g4@2 bb4@2 ~@9 g4@4 ~@8 f4@4 eb3@2 ~@3 c4@2 ~@12 ab4@4 ~@3 f3@4 ab3@4 eb4@8 d4@3 ~@8 g4@4 ~@4 f3@7 ~@10 bb5@2 [f3,bb3,db4]@11 [bb3,eb4,g4]@11 ~ [ab3,c4,eb4]@10, ~@19 ab3@2 d4@2 ab4@2 d5@2 ~ ab5@2 ~ bb3@23 ~@11 bb3@34 ~@4 ab3@4 ~@6 f3@2 ~@11 bb3@3 f4@4 ~@2 d3@4 ~@17 [eb3,eb4]@11 ~ c3@8 ~@3 bb2@4 [f3,d5]@4 ab5@4 ~@33, ~@20 bb3@2 f4@2 bb4@2 ~@3 bb5@2 [eb5,eb6]@11 [d5,d6]@11 ~ [db5,db6]@23 ~@3 e4@19 ~@6 c4@4 ~@2 [eb4,c5,c6]@11 ~@6 d4@4 ~@2 bb2@4 ~@24 c4@4 ~@2 f4@11 ~@2 d3@4 f5@4 ~@35, ~@42 bb2@4 ~@15 eb3@15 [c3,c6]@23 [c3,f3,ab4,ab5]@11 ~@4 ab3@19 ~ [bb3,ab4,ab5]@11 [g3,bb4,bb5]@11 ~@4 g3@4 ~@4 ab3@23 ~@33, ~@44 d3@4 ~@2 g3@15 ~@27 c5@2 bb4@4 ~@24 [bb4,bb5]@11 ~@23 [c5,c6]@23 bb4@11 ~@34]/7", // Bbm Eb Ab Eb Dm Eb D Db …
  B: "~ [ab3,c4,f4]@11 [g3,bb3,d4,f4]@11 ~ [g3,bb3,c4,e4]@8", // Fm Gm7 C7
  C: "[~@3 [ab3,c4,f4]@8 [g3,bb3,eb4]@4 [a3,c4,eb4,f4]@11 [db4,f4]@11 ~ [eb4,g4]@11 [ab3,c4]@8 [g3,bb3]@3 [ab3,c4,f4]@11 ~ g3@11 g4@11 ~@4 d4@4 ~@14 bb4@2 bb2@3 eb3@4 g3@3, ~@26 bb3@23 eb4@11 ~@12 [b3,d4]@23 [ab3,f4]@11 ab3@4 d4@4 ab4@4 ~@10, ~@97 bb3@4 ~@7 bb3@4 f4@4 ~@2 [bb3,eb5,eb6]@10]/4", // Fm Eb F7 Db Eb Ab Gm Fm …
  D: "[~@5 eb3@4 ~@3 bb2@4 db3@4 ~@8 eb4@2 ~ bb4@2 ~@4 c4@2 ~@2 g4@2 bb4@2 ~@9 g4@4 ~@8 f4@4 ~ f3@2 ~@2 c4@2 ~@12 ab4@3 ~@4 f3@4 ab3@4 g4@11 [d4,d6]@11 ~ [g3,eb4,eb6]@11 [f4,a4,a5]@11 ~ [bb3,eb4,g4,bb5]@10, ~ [d5,d6]@11 [db5,db6]@23 ~@15 c5@2 bb4@4 ~@25 [bb4,bb5]@11 ~@68, ~ bb2@4 ~@15 eb3@15 [c3,c6]@23 [c3,f3,ab4,ab5]@11 ~ eb3@4 ~@13 d4@4 ~ bb2@4 ~@64, ~@3 d3@4 ~@2 g3@15 bb3@34 ~@4 ab3@4 ~@7 ab3@19 [bb3,ab4,ab5]@11 ~ b3@23 c4@23 ~@10, ~@30 g4@2 ~@7 e4@19 ~@6 c4@4 ~@2 [eb4,c5,c6]@11 ~@4 bb3@3 f4@4 ~@2 d3@4 ~@62]/5", // D Cm F Eb D Db Bb C …
  E: "[~ [b3,d4]@11 eb4@11 ~ [f4,a4,a6]@11 [bb3,eb4,g4,g6]@12 [c4,ab4,ab6]@13 [bb3,d4,f6]@15 [c4,ab4,ab6]@5 [g4,g6]@5 [d4,f4,f6]@6 [c4,ab4]@41 [bb3,g4]@59 ~, ~ [g4,g6]@23 ~@23 f4@28 eb4@11 ~@5 [eb4,eb6]@100 ~, ~@12 c4@23 ~@45 bb3@11 ~@101]/6", // Bm F Eb Fm Bb Fm G Dm …
})).s("gm_string_ensemble_2").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~@2 A B C D E A B C D E A B C D E A F C D E A B C G H I J ~@8>".pickRestart({
  A: "~@6 x ~ x ~@9 x!2 ~@9 x ~ x", B: "~@8 x ~ x ~@9 x ~ x ~@8 x", C: "~ x ~@9 x ~ x ~@8 x ~ x ~@7",
  D: "~@2 x!2 ~@9 x ~ x ~@8 x ~ x ~@5", E: "~@4 x ~ x ~@8 x ~ x ~@9 x ~ x ~@2", F: "~@8 x ~ x ~@11 x ~@8 x",
  G: "~@2 x!2 ~@11 x ~@12 x ~@3", H: "~@11 x ~@15 x ~@4", I: "~@7 x ~@8", J: "~@5 x ~@26",
})).gain(0.37)

// drums · rim
const rim = s("rim").struct("<~@8 A B C D E ~@5 F B C D E A B G ~@11>".pickRestart({
  A: "~@7 x ~@10 x ~@10 x ~@2", B: "~@9 x ~@10 x ~@11", C: "x ~@10 x ~@11 x ~@8", D: "~@2 x ~@10 x ~@11 x ~@6",
  E: "~@4 x ~@11 x ~@10 x ~@4", F: "~@29 x ~@2", G: "x",
})).gain(0.37)

// drums · low tom
const low_tom = s("lt").struct("<~@12 [~@29 x ~@2] ~@24>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B C D E F B C D E F B C D E F B C D E F B C G H I ~@9>".pickRestart({
  A: "~@12 x ~@3 x ~@6 x ~@3 x ~@4", B: "~@3 x ~@3 x ~@6 x ~@3 x ~@7 x ~@2 x ~@2",
  C: "~@5 x ~@3 x ~@6 x ~@3 x ~@7 x ~@3", D: "x ~@6 x ~@3 x ~@7 x ~@3 x ~@6 x ~",
  E: "~@2 x ~@7 x ~@2 x ~@7 x ~@3 x ~@6", F: "x ~@3 x ~@7 x ~@3 x ~@6 x ~@3 x ~@4", G: "x ~@6 x ~@3 x ~@8 x ~@3 x ~@7",
  H: "~ x ~@4 x ~@9 x ~@5 x ~@9", I: "~ x ~@6 x ~@13 x ~@6 x ~@2",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 [~@7 x] ~@24>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@18 [~@18 x!4 ~@10] ~@7 [~@11 x ~@5 x ~@4 x ~@9] ~@10>").gain(0.37)

// drums · high tom
const high_tom = s("ht").struct("<~@12 [~@27 x ~@4] ~@24>").gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@4 A ~@5 B ~@3 C ~@3 D ~ E ~@8>".pickRestart({
  A: "~@31 x", B: "~@11 x ~@4", C: "~ x ~@2", D: "~@7 x", E: "~@5 x ~@26",
})).gain(0.37)

// drums · ride
const ride = s("rd").struct("<A B C D E F B G D E F B C D E F B C H E F B I D E J ~@11>".pickRestart({
  A: "~@13 x ~@2", B: "~@6 x ~@10 x ~@11 x ~@2", C: "~@8 x ~@10 x ~@11 x", D: "~@5 x ~@5 x ~@4",
  E: "~ x ~@11 x ~@10 x ~@7", F: "~@3 x ~@11 x ~@10 x ~@5", G: "~@8 x ~@10 x ~@9 x!3", H: "~@5 x ~@10",
  I: "~@19 x ~@11 x", J: "~@3 x ~@11 x ~@16",
})).gain(0.46)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@7 [~@27 x!2 ~@3] ~@29>").gain(0.14)

stack(
  bass, piano, acoustic_guitar_steel, string_ensemble_2, kick, rim, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride, ride_soft
)