Strudelify
Never Knew Love Like This Before cover art

1980

Never Knew Love Like This Before

Stephanie Mills

KeyB majorTempo111 bpm
0:00/0:00
// Never Knew Love Like This Before — Stephanie Mills
// 111 bpm, 4/4, key B major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 98 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(111/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@7 A B C D E F G H@2 I J K L M N O@2 P Q K L M N O R S T U V W X U Y Z AA AB@2 B AC AD L M N AE AF AG AC AD L M AH
  AE@2 AI AJ AD L M N AE AK S AL U V AM AN AO AP AM AN AO AQ AM AR AS AT AU AV AS AW AM AA U Y AX AV U AY ~@2
>`.pickRestart({
  A: "~@16 e2@6 ~@2 f#2@7 ~", B: "b2@6 ~@2 b2@5 ~@3 b2@2 ~@2 b2@6 ~@2 b2@4", C: "e3@6 ~@2 e3@5 ~@3 e3@2 ~@2 e3@8 b2@4",
  D: "a#2@5 ~@3 a#2@6 ~@2 a#2@2 ~@2 a#2@5 ~@3 a#2@4", E: "d#3@3 ~ d#3@2 ~@2 d#3 ~ d#3@3 ~ d#3@2",
  F: "g#2@6 ~@2 g#2@6 ~@2 g#2@2 ~@2 g#2@5 ~@3 g#2@4", G: "c#3@6 ~@2 c#3@6 ~@2 c#3@3 ~ c#3@4 ~@4 c#3@4",
  H: "f#2@6 ~@2 f#2@5 ~@3 f#2@2 ~@2 f#2@5 ~@3 f#2@4", I: "b2@4 ~@4 b2@5 ~@3 b2@2 ~@2 b2@5 ~@3 b2@4",
  J: "e3@5 ~@3 e3@5 ~@3 e3@2 ~@2 e3@6 ~@2 g#3@2 b2@2", K: "a#2@6 ~@2 a#2@5 ~@3 a#2@2 ~@2 a#2@2 ~@2 a#2@2 ~@2 a#2@4",
  L: "d#3@6 ~@2 d#3@5 ~@3 d#3 ~@3 d#3@7 ~ f#2@4", M: "g#2@6 ~@2 g#2@6 ~@2 g#2 ~@3 g#2@6 ~@2 g#2@4",
  N: "c#3@6 ~@2 c#3@5 ~@3 c#3 ~@3 c#3@5 ~@3 c#3@4", O: "f#2@5 ~@3 f#2@5 ~@3 f#2@2 ~@2 f#2@5 ~@3 f#2@4",
  P: "b2@5 ~@3 b2@5 ~@3 b2 ~@3 b2@2 ~@4 b2@6", Q: "e3@4 ~@4 e3@6 ~@2 e3 ~@3 e3@7 ~ g#2@4",
  R: "f#2@5 ~@3 f#2@5 ~@3 f#2 ~@3 c#3@8 d#3@4", S: "e3@3 ~@5 e3@5 ~@3 e3@8 ~@4 c#3@2 d#3@2", T: "d#3 ~ d#3 g#2@4 ~",
  U: "c#3@5 ~@3 c#3@5 ~@3 c#3@9 ~@3 f#3@2 e3@2", V: "d#3@2 ~@2 d#3@3 ~@5 d#3@5 ~@3 c#3@3 ~ d#3@6 ~@2",
  W: "e3@5 ~@3 e3@5 ~@3 e3@9 ~@3 c#3 ~ d#3 ~", X: "d#3@5 ~@3 d#3@4 g#2@12 ~@8",
  Y: "d#3@2 ~@2 d#3@3 ~@5 d#3@7 ~ c#3@4 d#3@5 ~@3", Z: "e3@4 ~@4 e3@4 ~@4 e3@8 ~@4 c#3@2 d#3 ~",
  AA: "d#3 ~ d#3 ~ d#3@2 g#2@8 ~@2", AB: "[c#3@8 ~@4 c#3@13 ~@3 f#2@21 ~@15]/2",
  AC: "e3@6 ~@2 e3@5 ~@3 e3 ~@3 e3@8 g#2@4", AD: "a#2@6 ~@2 a#2@6 ~@2 a#2 ~@3 a#2@6 ~@2 a#2@4",
  AE: "f#2@6 ~@2 f#2@5 ~@3 f#2 ~@3 f#2@5 ~@3 f#2@4", AF: "f#2@6 ~@2 f#2@6 ~@2 f#2 ~@3 f#2@3 ~@5 f#2@4",
  AG: "b2@5 ~@3 b2@5 ~@3 b2 ~@3 b2@6 ~@2 b2@4", AH: "c#3@5 ~@3 c#3@7 ~ c#3 ~@3 c#3@5 ~@3 c#3@4",
  AI: "b2@4 ~@4 b2@5 ~@3 b2 ~@3 b2@4 ~@4 b2@4", AJ: "e3@4 ~@4 e3@3 ~@5 e3 ~@11 e2@4, ~@20 e3@11 ~",
  AK: "f#2@4 ~@4 f#2@4 ~@4 f#2@2 ~@2 c#3@7 ~ d#3@4", AL: "d#3 ~@3 d#3 ~@3 d#3 ~@3 g#2@17 ~@3",
  AM: "e3@5 ~@3 e3@5 ~@3 e3@8 ~@4 c#3@2 d#3@2", AN: "d#3 ~@3 d#3 ~@3 d#3@3 ~ g#2@15 ~@5",
  AO: "c#3@2 ~@2 c#3@2 ~@2 c#3@3 ~@3 f#3 e3", AP: "d#3 ~@3 d#3 ~@3 d#3@8 ~@4 c#3@3 ~ d#3@6 ~@2",
  AQ: "d#3 ~@3 d#3@2 ~@6 d#3@5 ~@3 c#3@3 ~ d#3@6 ~@2", AR: "d#3 ~@3 d#3 ~@3 d#3@4 g#2@14 ~@6",
  AS: "c#3@5 ~@3 c#3@4 ~@4 c#3@12 f#3@2 e3@2", AT: "d#3 ~@3 d#3@2 ~@6 d#3@7 ~ c#3@2 ~@2 d#3@7 ~",
  AU: "e3@3 ~@5 e3@4 ~@4 e3@8 ~@4 c#3@2 d#3@2", AV: "d#3 ~@3 d#3 ~@3 d#3@4 g#2@18 ~@2",
  AW: "d#3@2 ~@2 d#3 ~@3 d#3 ~@3 d#3@5 ~@3 c#3@3 ~ d#3@6 ~@2", AX: "e3@4 ~@4 e3@5 ~@3 e3@11 ~ c#3@2 d#3@2",
  AY: "d#3 ~@3 d#3@2 ~@6 d#3@7 ~ c#3@4 d#3@3 ~@5",
})).s("gm_acoustic_bass").gain(0.52)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@30 A B C D E F G H I J I H K@2 ~@22 A B C D E F G H I J G H I J G H I J G H I J G H I J ~@6
>`.pickRestart({
  A: "[g#4,b4,e5] ~@3 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~ [g#4,b4,e5] ~@2 [g#4,b4,e5] ~ [g#4,b4,e5] ~@16", // E
  B: "[g#4,b4,e5] ~@3 [g#4,b4,e5] ~@3 [g#4,b4,e5]!2 ~@3 [g#4,b4,e5] ~ [g#4,e5] ~@8 [f#4,b4]@5 ~@3, ~@15 b4@2 ~@15", // E C#m B5
  C: "[g#4,b4]@7 ~@25", D: "[a#4,c#5]@10 ~@2 [b4,d#5]@15 ~@5", E: "[b4,e5]@7 ~", F: "[c#5,f#5] ~", G: "[g#4,b4]@11 ~@5",
  H: "[a#4,c#5]@11 ~ [b4,d#5]@17 ~@3", I: "[b4,e5]@25 ~@7", J: "[c#5,f#5]@13 ~@3",
  K: "[[c#5,f#5,g#5]@11 ~ [c#5,f5,g#5]@15 ~ [b4,e5,g#5]@28 ~@8]/2", // C#sus4 C# E
})).s("gm_synth_brass_1").gain(0.41)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@7 A B C D E F G H I B J D K F J@2 L B J D K F J@2 L M ~ M N O ~ M P Q ~@3 B J D K F J@2 L B J D K F J@2 L B J D K F
  J@2 L R ~ S T U ~ V T W ~ X T X ~ X Y X ~ X T X ~ X T X ~ X T ~@2
>`.pickRestart({
  A: "~@16 [g#4,b4,f#5]@5 ~@3 [g#4,b4,e5]@6 ~@2", B: "~@4 [d#4,f#4,b4] ~@5 [d#4,f#4,b4] ~@5 [d#4,f#4,b4] ~@15",
  C: "~@4 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@11", // E
  D: "~@4 [c#4,f#4,a#4] ~@5 [c#4,f#4,a#4] ~@5 [c#4,f#4,a#4] ~@15", // F#
  E: "~@4 [d#4,f#4,a#4] ~@5 [d#4,f#4,a#4] ~@5 [d#4,f#4,g#4,a#4] ~@15", // D#m
  F: "~@4 [d#4,g#4,b4] ~@5 [d#4,g#4,b4] ~@5 [d#4,g#4,b4] ~@15", // G#m
  G: "[e4,g#4]@3 ~@3 [e4,g#4] ~@5 [e4,g#4] ~@19, b3@5 ~@27", // E
  H: "~@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~ [b3,e4,g#4] ~@13", // E
  I: "~@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~@9 [b3,e4,g#4] ~ [b3,e4,g#4] ~@9", // E
  J: "~@4 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@15", // E
  K: "~@4 [d#4,f#4,a#4] ~@5 [d#4,f#4,a#4] ~@5 [d#4,f#4,a#4] ~@15", // D#m
  L: "~@4 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~ [e4,g#4,b4] ~@13", // E
  M: "~@4 g#4 ~@3 f#4@2 ~@10 g#4 ~ f#4@2 ~@4 f#4 ~ f#4 ~", N: "~@12 f#4 ~ g#4 ~ f#4 ~@15",
  O: "~@4 g#4 ~@3 f#4 ~@11 g#4 ~ g#4 ~@5 f#4 ~ g#4 ~", P: "~@16 f#4 ~ g#4@3 ~@11",
  Q: "~@4 g#4 ~@3 f#4@2 ~@10 g#4 ~@3 g#4 ~@3 f#4 ~ g#4 ~", R: "~@4 g#4 ~@3 f#4@3 ~@9 g#4 ~@3 g#4@2 ~@2 f#4 ~ f#4 ~",
  S: "~@4 g#4 ~@3 f#4@3 ~@5 g#4 ~@3 g#4 ~@3 g#4@2 ~@2 f#4 ~ f#4 ~", T: "~@14 d#4 ~ f#4 ~ g#4@4 ~@10",
  U: "~@4 g#4 ~@3 f#4@3 ~@7 g#4 ~@5 g#4@3 ~ f#4 ~ f#4 ~", V: "~@4 g#4 ~@3 f#4@5 ~@7 g#4 ~@3 g#4@3 ~ f#4 ~ f#4 ~",
  W: "~@4 g#4 ~@3 f#4@4 ~@6 g#4@3 ~@3 g#4@3 ~ f#4 ~ f#4 ~", X: "~@4 g#4 ~@3 f#4@6 ~@6 g#4 ~@3 g#4@3 ~ f#4 ~ f#4 ~",
  Y: "~@14 d#4 ~ f#4 ~ g#4@5 ~@9",
})).s("gm_electric_guitar_muted").gain(0.38)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note("<A B C D@7 E@8 F@6 G@8 H@8 I@3 J@8 K@3 L@8 M@8 N@24 O@4>".pickRestart({
  A: "[f#4,b4,d#5]@17 ~@11 f#5@4, b3, ~@17 [b4,d#5]@15, ~@11 e5@5", // B
  B: "b4@3 [b4,e5,g#5] [b4,e5,g#5]@4, e4, [d#5,f#5] ~", C: "[f#4,a#4,c#5]@4 ~@3 e5, a#3, ~ [f#4,a#4,c#5], ~@11 d#5@5",
  D: "[~@8 f#5@8 d#4@8 ~@8 g#4@3 g#4@16 ~@16 c#4@2 ~@16 c#5@16 [e4,g#4,b4]@17 [b4,e5,g#5]@15 [e5,g#5,b5]@16 ~@8 e5@8 [f#4,b4,d#5]@16 ~@11 f#5@5 b4@12 [b4,e5,g#5]@3 ~ [b4,e5,g#5]@11, [d#4,a#4,c#5,g#5]@16 [f#4,a#4,d#5]@19 f#4@24 f#4@12 ~@30 f#4@32 ~@16 [g#4,b4,f#5]@16 ~@16 [f#4,b4,d#5]@16 ~@27, ~@24 [d#4,c#5]@11 d#4@36 ~@153, ~@32 b4@35 [e4,b4]@34 ~@86 e5@10 [d#5,f#5]@15 ~@12, ~@51 g#4@18 [c#4,g#4]@32 ~@123]/7", // E B E D#sus4 D#m G#m7 B D#7 …
  E: "[~@5 [f#4,a#4,c#5]@16 ~@12 e5@4 ~@8 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 b4@32 ~@28 e6@35 ~ [f#4,b4,d#5]@16 ~@12 f#5@4 [b4,d#5,f#5]@12 [b4,e5,g#5] ~@3 [b4,e5,g#5]@11, ~@21 [f#4,a#4,c#5]@16 [a#4,c#5,g#5]@16 [f#4,a#4,d#5]@16 ~@32 [c#4,e4,g#4]@52 b5@43 ~@60, ~@27 d#5@10 ~@96 b4@63 ~@17 [f#4,b4,d#5]@16 ~@27, ~@137 e5@59 ~@23 e5@10 ~@27, ~@73 g#5@25 ~@30]/8", // F# G#m7 B E F# A#m7 D#m C#m …
  F: "[~@5 [f#4,a#4,c#5]@15 ~@9 d#5@7 ~@9 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 [c#4,e4,g#4,b4]@31 ~@33 b5@16 [e5,g#5,b5]@11, ~@21 [f#4,a#4,c#5]@15 ~ [a#4,c#5,g#5]@16 [f#4,a#4,d#5]@16 ~@64 [e4,g#4,b4]@48 ~@11, ~@154 e5@27 ~@11]/6", // F# G#m7 C#m7 E F# A#m7 D#m E
  G: "[~@5 [f#4,b4,d#5]@16 ~@11 f#5@5 b4@12 [b4,e5,g#5]@3 ~ [b4,e5,g#5]@16 [f#4,a#4,c#5]@15 ~@12 e5@5 ~@8 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 [c#4,e4,g#4,b4]@31 ~ [g#4,b4]@20 [g#4,b4,e5]@12 [e5,g#5,b5]@27, ~@21 [f#4,b4,d#5]@16 ~@48 [f#4,a#4,c#5]@16 [a#4,c#5,g#5]@16 [f#4,a#4,d#5]@16 ~@64 e4@33 ~@26, ~@27 e5@10 [d#5,f#5]@15 ~@38 d#5@11 ~@155]/8", // B E F# G#m7 C#m7 G#m E B …
  H: "[~@5 [d#4,g#4,b4]@32 [c#4,f#4,a#4]@12 [d#4,g#4,b4]@20 [e4,g#4,b4]@16 [b4,e5,g#5,b5]@16 [c#4,f#4,a#4]@32 [d#4,g#4,b4]@32 [c#4,f#4,a#4]@12 [d#4,g#4,b4]@20 [e4,g#4,b4]@16 [b4,e5,g#5,b5]@16 [c#4,f#4,a#4]@27]/8", // G#m F# G#m E F# G#m F# G#m …
  I: "[~@5 [d#4,g#4,b4]@16 [d#5,g#5,b5]@15 ~ [c#4,f#4,a#4]@12 [d#4,g#4,b4]@20 [c#4,f#4,g#4]@12 [c#4,f4,g#4]@15]/3", // G#m F# G#m C#sus4 C#
  J: "[~@37 [f#4,b4,d#5]@16 ~@12 f#5@4 b4@12 [b4,e5,g#5]@4 [b4,e5,g#5]@16 [f#4,a#4,c#5]@16 ~@8 d#5@8 ~@8 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 [c#4,e4,g#4,b4]@31 ~ [e4,g#4,b4]@16 [e5,g#5,b5]@11, ~ [b3,e4,g#4]@52 [f#4,b4,d#5]@16 ~@48 [f#4,a#4,c#5]@17 ~@15 [f#4,a#4,d#5]@16 ~@91, ~@59 e5@10 [d#5,f#5]@16 ~@48 [a#4,c#5,g#5]@17 ~@106]/8", // B E F# G#m7 C#m7 E B F# …
  K: "[~@5 [b5,e6,g#6]@32 [f#4,b4,d#5]@16 ~@11 f#5@5 b4@12 [b4,e5,g#5]@3 ~ [b4,e5,g#5]@11, ~@53 [f#4,b4,d#5]@16 ~@27, ~@59 e5@10 [d#5,f#5]@15 ~@12]/3", // E B E B D#m
  L: "[~@5 [f#4,a#4,c#5]@16 ~@8 d#5@8 ~@8 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 [c#4,e4,g#4,b4]@31 ~@49 g#6@16 [f#4,b4,d#5]@16 ~@11 f#5@5 b4@12 [b4,e5,g#5]@3 ~ [b4,e5,g#5]@11, ~@21 [f#4,a#4,c#5]@16 [a#4,c#5,g#5]@16 [f#4,a#4,d#5]@16 ~@64 [e4,g#4,b4]@63 ~@17 [f#4,b4,d#5]@16 ~@27, ~@153 e5@43 ~@23 e5@10 [d#5,f#5]@15 ~@12, ~@161 b5@35 ~@60]/8", // F# G#m7 C#m7 B E F# A#m7 D#m …
  M: "[~@5 [f#4,a#4,c#5]@16 ~@8 d#5@8 ~@8 f#5@8 ~@8 c#5@8 [d#4,f#4,g#4,b4]@32 [c#4,e4,g#4,b4]@16 [b4,e5,g#5]@16 [g#4,b4]@24 [g#4,b4,e5]@8 ~@24 [c#4,f#4,a#4]@8 [d#4,g#4,b4]@32 [c#4,f#4,a#4]@12 [d#4,g#4,b4]@15, ~@21 [f#4,a#4,c#5]@16 [a#4,c#5,g#5]@16 [f#4,a#4,d#5]@16 ~@64 e4@32 [e5,g#5,b5]@32 ~@59]/8", // F# G#m7 C#m7 E G#m E F# G#m …
  N: "[~@5 [e4,g#4,b4]@32 [c#4,f#4,a#4]@32 [d#4,g#4,b4]@32 [c#4,f#4,a#4]@12 [d#4,g#4,b4]@20 [e4,g#4,b4]@32 [c#4,f#4,a#4]@32 [d#4,g#4,b4]@32 [c#4,f#4,a#4]@12 [d#4,g#4,b4]@15]/8", // E F# G#m F# G#m E F# G#m …
  O: "[~@5 [e4,g#4,b4]@32 [c#4,f#4,a#4]@64 ~@27]/4", // E F#
})).s("gm_epiano2").gain(0.47)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@8 A B@8 C@2 D@6 E@7 ~@12 F G@8 H I@7 J@7 ~@30>".pickRestart({
  A: "~@31 [g#4,b4,e5]", // E
  B: "[~@31 c#5@32 ~@64 [e5,g#5]@32 ~@32 e5@32 [f#4,d#5]@32 [g#4,e5], ~@31 f#4@96 ~@32 g#4@64 ~@33, ~@31 a#4@64 b4@161, ~@63 d#5@64 ~@129]/8", // E D#m C#m
  C: "[~@31 [f#4,a#4,c#5]@33]/2", // F#
  D: "[~@63 [e5,g#5]@32 ~@32 e5@32 [f#4,d#5]@32 [g#4,e5], d#5@64 ~@31 g#4@64 ~@33, ~@31 b4@161]/6", // E D#m C#m
  E: "[~@31 c#5@32 ~@64 g#5@32 g#4@64 ~, ~@31 f#4@96 ~@97, ~@31 a#4@64 b4@127 ~@2, ~@63 d#5@64 e5@96 ~]/7",
  F: "[f#4,b4,d#5]@31 [g#4,e5]", // B C#m
  G: "[~@31 c#5@33 ~@63 [e5,g#5]@32 ~@32 e5@32 [f#4,d#5]@32 [g#4,e5], ~@31 f#4@97 ~@31 g#4@64 ~@33, ~@31 a#4@64 b4@161, ~ d#5 ~@2]/8", // E D#m C#m
  H: "~@31 c#5",
  I: "[~@95 [e5,g#5]@32 ~@32 e5@31 ~ [f#4,d#5]@32 [g#4,e5], f#4@97 ~@31 g#4@63 ~@33, a#4@9 b4@23, ~@31 d#5@64 ~@129]/7", // E D#m C#m
  J: "[~@31 c#5@32 ~@64 g#5@32 ~ g#4@64, ~@31 f#4@96 ~@97, ~@31 a#4@64 b4@127 ~@2, ~@63 d#5@64 e5@96 ~]/7",
})).s("gm_string_ensemble_1").gain(0.2)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@14 A B ~@5 C@2 D E F@6 G@3 H@2 I@3 J K@2 L@2 ~@5 M@2 N ~@5 O@3 P@8 Q@4 R S@3 T@5 U@3 V@4 R W X@2 Y@2 Z AA ~@2
>`.pickRestart({
  A: "[e5,e6]@23 ~@2 [c#5,c#6]@2 [b4,b5]@2 [c#5,c#6]@2 ~, ~@23 d#5@2 ~@7, ~@12 d#6 ~@3", // E C# B C#
  B: "[d#5,d#6]@7 [b4,b5]@8 [g#4,g#5]@8 [e4,e5]@8 ~", // D# B G# E
  C: "[~@31 [e5,e6]@25 [d#5,d#6]@2 [c#5,c#6]@2 [b4,b5]@2 [c#5,c#6]@2]/2", // E D# C# B C#
  D: "[d#5,d#6]@8 [b4,b5]@7 [g#4,g#5]@8 ~ [e4,e5]@8", E: "[b3,b4]@12 [f#4,f#5]@4 [b4,b5]@5 [a#4,a#5]@6 ~ [g#4,g#5]@4",
  F: "[[f#4,f#5]@16 [g#4,g#5]@47 [c#5,c#6]@21 [a#4,a#5]@4 [g#4,g#5]@4 [f#4,f#5]@3 [f#4,f#5]@4 ~ [b4,b5]@4 [g#4,g#5]@3 [f#4,f#5]@8 ~ [d#5,d#6]@3 [c#5,c#6]@4 [e4,e5]@9 f#4@8 g#4@3 b3@15 ~ [e4,e5]@2 [f#4,f#5]@2 [g#4,g#5]@2 ~@3 [f#4,f#5]@2 [g#4,g#5]@2 [a#4,a#5]@3 ~ [g#4,g#5]@2 ~ [b4,b5]@2 ~@4 [b4,b5]@2 [c#5,c#6]@2 ~@3, ~@89 [a#4,a#5] ~@2 [a#4,a#5] ~@3]/6", // F# G# C# A# G# F# B G# …
  G: "[~ [c#5,c#6]@2 [d#5,d#6]@3 ~ [c#5,c#6]@2 [d#5,d#6]@2 [e5,e6]@2 ~@4 [e5,e6]@2 [f#5,f#6]@12 [d#5,d#6]@25 [b4,b5]@2 [c#5,c#6]@2 ~ [e5,e6]@2 [f#5,f#6]@32 ~, [b4,b5] ~@7 [d#5,d#6] ~@21 [d#5,d#6] ~@17]/3", // C# D# C# D# E F# D# B …
  H: "[[g#5,g#6]@24 ~ [e5,e6]@2 [d#5,d#6] ~@2 [d#5,d#6] [c#5,c#6]@9 [a#5,a#6]@7 ~ [f#5,f#6]@15 ~, ~@24 [f#5,f#6]@2 ~@3 [e5,e6]@2 ~@33]/2", // G# E D# C# A# F# E
  I: "[[f#5,f#6]@20 ~@4 [g#5,g#6]@2 [f#5,f#6]@2 ~ [d#5,d#6]@2 ~ c#5@16 [f#5,f#6]@8 [b4,b5]@7 [g#5,g#6]@25 [b4,b5]@8, ~@28 [e5,e6]@2 ~ c#6@16 ~@49]/3", // F# G# F# D# F# B G# B …
  J: "[a#5,a#6]@31 ~", // A#
  K: "[[b5,b6]@17 [a#5,a#6]@3 ~ [a#5,a#6]@2 [g#5,g#6]@2 [f#5,f#6]@2 [e5,e6]@2 [d#5,d#6]@2 [c#5,c#6]@31 ~@2, ~@10 [b5,b6] ~@21]/2", // B A# G# F# E D# C# B
  L: "[[f#5,f#6]@11 [f5,f6]@11 ~@5 [e5,e6]@24 ~@6 [c#4,c#5]@2 ~@2 [e4,e5]@2 ~, ~@28 [b3,b4] ~ [d#4,d#5] ~]/2", // F# F E C# E B D#
  M: "[~@16 e5@12 [d#5,d#6] [c#5,c#6] [b4,b5] [c#5,c#6], ~@31 e6@25 ~@8]/2", // D# C# B C#
  N: "[d#5,d#6]@7 [b4,b5]@8 ~ [g#4,g#5]@7 ~ e4@8, ~@23 e5@8 ~", // D# B G#
  O: "[~@16 [d#4,d#5]@15 [e4,e5]@24 ~@2 [c#4,c#5]@2 [b3,b4]@2 [c#4,c#5]@2 [d#4,d#5]@8 [b3,b4]@8 [g#3,g#4]@9 [e3,e4]@8, ~@28 [d#4,d#5] ~@19]/3", // D# E C# B C# D# B G# …
  P: "[[d#3,d#4]@11 [f#3,f#4]@4 ~ [b3,b4]@4 [a#3,a#4]@7 [g#3,g#4]@4 [f#3,f#4]@16 [g#3,g#4]@48 [c#4,c#5]@21 [a#3,a#4]@4 [g#3,g#4]@4 [f#3,f#4]@3 [f#3,f#4]@4 ~ [b3,b4]@4 [g#3,g#4]@4 [f#3,f#4]@8 [d#4,d#5]@3 [c#4,c#5]@4 [e3,e4]@8 [f#3,f#4]@4 [g#3,g#4]@4 [b2,b3]@13 ~@7 [e3,e4]@2 [f#3,f#4]@3 [g#3,g#4]@2 ~@2 [f#3,f#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 ~@3 [a#3,a#4]@2 [b3,b4]@2 ~@4 [b3,b4]@2 [c#4,c#5]@2 ~@2 [b3,b4]@2 [c#4,c#5]@2 ~ [d#4,d#5]@2 ~@3 [d#4,d#5]@2 ~ [e4,e5]@2 ~@2 [d#4,d#5]@2 ~ [f#4,f#5]@12 ~, ~@104 [g#3,g#4] ~@3 [a#3,a#4] ~@7 [c#4,c#5] ~@4 [e4,e5] ~@6]/8", // D# F# B A# G# F# G# C# …
  Q: "[[d#4,d#5]@10 ~@5 [e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 [b3,b4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [e4,e5]@2 [f#4,f#5]@28 ~@4 [g#4,g#5]@25 ~ [e4,e5]@2 ~ [e4,e5]@2 [d#4,d#5] [c#4,c#5]@8 [a#4,a#5]@8 [f#4,f#5]@13 ~@4, ~@88 [f#4,f#5]@2 ~ [d#4,d#5]@2 ~@35]/4", // D# E F# G# A# B C# D# …
  R: "[f#4,f#5]@18 ~@7 [f#4,f#5]@2 [e4,e5]@2 [d#4,d#5]@2 ~, ~@12 [g#4,g#5] ~@3", // F# E D# G#
  S: "[[c#4,c#5]@15 [f#4,f#5]@8 [b3,b4]@8 [g#4,g#5]@25 [b3,b4]@7 [a#4,a#5]@31 ~@2]/3", // C# F# B G# B A#
  T: "[~@11 [e3,e4]@2 [d#3,d#4]@2 [e3,e4]@2 ~ [f#3,f#4]@2 ~ [a#3,a#4]@2 [b3,b4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [e4,e5]@2 [f#4,f#5]@32 [g#4,g#5]@25 ~ [e4,e5] [d#4,d#5]@2 ~ [d#4,d#5]@2 [c#4,c#5]@9 [a#4,a#5]@7 [f#4,f#5]@14 ~@2 [f#4,f#5]@22 ~@3 [g#4,g#5]@2 [f#4,f#5]@2 [e4,e5]@2 [d#4,d#5]@2, ~@10 [g#3,g#4] ~@33 [f#4,f#5] ~ [e4,e5] ~@33]/5", // E D# E F# A# B C# D# …
  U: "[[c#4,c#5]@16 [f#4,f#5]@8 [b3,b4]@7 [g#4,g#5]@24 ~ [b3,b4]@7 [a#4,a#5]@31 ~@2]/3", // C# F# B G# B A#
  V: "[~@12 [e3,e4]@2 ~ [e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 [b3,b4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [e4,e5]@2 [f#4,f#5]@32 [g#4,g#5]@25 ~ [e4,e5] [d#4,d#5]@2 ~ [d#4,d#5]@2 [c#4,c#5]@8 [a#4,a#5]@8 [f#4,f#5]@15 ~@2, ~@7 [d#3,d#4] ~@36 [f#4,f#5] ~ [e4,e5] ~@17]/4", // E F# G# A# B C# D# E …
  W: "[c#4,c#5]@15 [f#4,f#5]@8 [b3,b4]@8 ~", X: "[[g#4,g#5]@24 [b3,b4]@7 [a#4,a#5]@32 ~]/2",
  Y: "[~@12 [e3,e4]@2 ~ [e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 [b3,b4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [e4,e5]@2 [f#4,f#5]@33, ~@7 [d#3,d#4] ~@24]/2", // E F# G# A# B C# D# E …
  Z: "[g#4,g#5]@24 ~ [e4,e5]@2 ~ [f#4,f#5]@2 ~ [d#4,d#5], ~@24 [f#4,f#5]@2 ~ [d#4,d#5]@2 ~ [e4,e5]@2", // G# E F# D# F# D# E
  AA: "[c#4,c#5]@7 ~ [a#4,a#5]@8 [f#4,f#5]@12 ~@4", // C# A# F#
})).s("gm_synth_strings_1").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@7 [~@2 x!2] [x!2]!34 [x ~@2 x ~@3 x] x [x!2]!52 ~@2>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@8 A@34 B C A@28 D A@11 E A@11 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~@4 x ~@3 x ~@2 x!2 ~@3", D: "~@4 x ~@2 x ~@2 x ~ x ~@3",
  E: "~@4 x ~@2 x ~@4 x ~@3",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@43 [~@7 x] ~@54>").gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<~@8 [x!8]!88 ~@2>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@17 A ~@5 A ~@8 B ~ B ~ B ~ B ~ B ~ C D ~@7 A ~@7 A ~@8 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "x ~@2 x ~@3 x", D: "~ x ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@7 A ~@7 A ~@6 B A ~@11 A ~@22 B A ~@7 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@23 B C@11 D A@23 B C@12 E C@14 F ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "x!16", D: "x!5 ~@7 x!3 ~", E: "x!12 ~ x!3", F: "x!15 ~",
})).gain(0.36)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@8
  [~@3 x ~@7 x ~@4]!23
  [~@3 x ~@5 x ~@6]
  ~@12
  [~@3 x ~@7 x ~@4]!23
  [~@3 x ~@5 x ~@6]
  ~@30
>`).gain(0.21)

stack(
  bass, synth_brass_1, electric_guitar_muted, epiano2, string_ensemble_1, synth_strings_1, kick, snare, low_tom, hihat,
  open_hat, crash, tambourine, tambourine_soft
)