Strudelify

The Things We Do for Love

10cc

KeyF♯ minorTempo111 bpm
0:00/0:00
// The Things We Do for Love — 10cc
// 111 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 90 bars on a 24-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: edit a riff to change every repeat.

// bass · electric bass finger · "thingswedo"
const bass = note(`<
  ~ A B A C D B E F G H I J K L M N G H I J K L M N O P Q R S T U V@5 W@4 X@2 Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM
  AN AO A B A C D B E F G H I J K L M@15 AP
>`.pickRestart({
  A: "a1@15 ~ a1@2 a2@2 b2@2 a2@2", B: "a1@15 ~ a1@7 ~", C: "a1@14 ~@2 a1@7 ~", D: "a1@15 ~ a1@2 a2@2 b2@2 a2 ~",
  E: "a1@15 ~ a1@6 ~@2", F: "a1@11 ~ a1@4 ~@2 a1@5 ~", G: "a#1@4 ~ a#1 a#2@2 a#1 ~@2 a#1",
  H: "f#2@9 ~ f#2@2 c#2@4 f#2@5 ~ f#2@2", I: "c#2@4 ~ c#2 c2@2 c3@3 c2", J: "d#2@9 ~ d#2@2 a#2@4 d#2@5 ~ d#2@2",
  K: "f#2@9 ~ f#2@2 f#1@4 f#2@5 ~ f#2@2", L: "f2@9 ~ f2@2 d#2@5 ~ d#2@6", M: "c#2@4 ~ c#2 g#1@2 ~ g#1@3", N: "c#2 ~@5",
  O: "c#2 a#1 g#1 a#1", P: "c#2@3 a#1@3 g#1@3 a#1@2 ~", Q: "d#2@8 ~@2 d#2@2 c#2@9 ~ c#2@2",
  R: "c2@9 ~ c2@2 g#1@2 ~@2 g#1@3 ~ g#1 ~ a1 ~", S: "a#1@8 ~@2 a#1@2 g#1@9 ~ g#1@2", T: "f#1@8 ~@2 f#1@2 g1@5 ~ g1@5 ~",
  U: "g#1@2 ~ g#1@2 ~ a1@2 ~ a1@2 ~",
  V: "[a#1@4 ~@2 a#1@4 ~@2 f#1@23 ~ a1@15 ~ a1@2 a2@2 b2@2 a2@2 a1@15 ~ a1@7 ~ a1@15 ~ a1@2 a2@2 b2@2 a2@2 a1@12]/5",
  W: "[~@4 a1@7 ~ a1@15 ~ a1@2 a2@2 b2@2 a2 ~ a1@15 ~ a1@7 ~ a1@15 ~ a1@6 ~@2 a1@11 ~]/4",
  X: "[a1@4 ~@2 a1@5 ~ a1@15 ~ a1@6 ~@2 a1@11 ~]/2", Y: "a1@4 ~@2 a1@5 ~ a#1@8 ~@2 a#1@2",
  Z: "a#2@4 a#1@2 ~@4 a#1@2 f#2@9 ~ f#2@2", AA: "c#2@4 f#2@5 ~ f#2@2 c#2@8 ~@2 c#2@2",
  AB: "c2@4 c3@6 c2@2 d#2@9 ~ d#2@2", AC: "a#2@4 d#2@5 ~ d#2@2 f#2@9 ~ f#2@2", AD: "f#1@4 f#2@5 ~ f#2@2 f2@9 ~ f2@2",
  AE: "d#2@5 ~ d#2@6 c#2@8 ~@2 c#2@2", AF: "g#1@2 ~ g#1@3 c#2@2 ~@4", AG: "~@2 c#2 a#1", AH: "g#1 a#1 c#2 a#1",
  AI: "g#1@3 a#1@2 ~ d#2@4 ~ d#2", AJ: "c#2@9 ~ c#2@2 c2@9 ~ c2@2", AK: "g#1@2 ~@2 g#1@3 ~ g#1 ~ a1 ~ a#1@8 ~@2 a#1@2",
  AL: "g#1@9 ~ g#1@2 f#1@8 ~@2 f#1@2", AM: "g1@5 ~ g1@5 ~ g#1@4 ~@2 g#1@4 ~@2", AN: "a1@2 ~ a1@2 ~ a#1@2 ~ a#1@2 ~",
  AO: "f#1", AP: "c#2 ~@7",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · piano
const piano = note(`<
  ~ A B C D E B F@2 G H I J K L M N G H O J K L M P Q R S T U V W X@7 Y@4 Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO
  AP AQ B C D E B F@2 G H O J K AR M@15 AS
>`.pickRestart({
  A: "a2@6 ~@5 b3, [g3,b3,d4,g4]@2 [d4,g4], ~@2 a2!2, ~@8 b3@3 ~, ~@4 g3!2", // G G5
  B: "a2@12 ~@8 a3@2 d4 ~, [a3,d4,f#4]@16 [d4,f#4]@7 ~, ~@12 a2@6 a2@5 ~, ~@4 a3 ~", // D
  C: "a2@12 ~@8 g3@2 a2 ~, [g3,a3,e4]@16 [a3,e4]@7 ~, b3 ~@5 a2@3 a2@2 ~, ~@4 g3 ~", // A7 A5
  D: "a2@12 ~@8 a3@2 a2 ~, [a3,d4,f#4]@16 [d4,f#4,a4]@7 ~, ~@6 a2@3 a2@2 ~, ~@4 a3 ~", // D
  E: "a2@12 ~@4 g3@4 g3@2 b3 ~, [g3,b3,d4,g4]@16 [b3,d4,g4]@7 ~, ~@12 a2@11 ~", F: "[[a2,g3,a3,c4,e4]@47 ~]/2",
  G: "[a#2,f3,a#3,c#4,f4]@2 ~@4 [f3,a#3,c#4,f4]@4 a#2@2 [f3,a#3,c#4,f4]@4 a#2@2 [f3,a#3,c#4,f4]@3 ~ a#2 ~", // A#m
  H: "[f#2,f#3,a#3,c#4,d#4]@2 ~@4 [f#3,a#3,c#4,d#4]@4 f#2@2 [f#3,a#3,c#4,d#4]@4 f#2@2 [f#3,a#3,c#4,d#4]@3 ~ f#2 ~", // D#m7
  I: "[c#2,f3,g#3,c#4]@3 ~@3 [f3,g#3,c#4]@3 ~ c#2 ~ [g#3,c4]@3 ~@3 [d#3,g#3,c4]@3 ~ c2 ~, ~@2 c2 ~, ~@12 d#3@5 ~@7", // C# G#
  J: "[d#2,d#3,g3,a#3]@2 ~@4 [d#3,g3,a#3]@4 d#2@2 [d#3,g3,a#3]@4 d#2@2 [d#3,g3,a#3,d#4]@4 d#2 ~", // D#
  K: "[f#2,c#3,f#3,a#3]@2 ~@4 [c#3,f#3,a#3,c#4]@4 f#2@2 [c#3,f#3,a#3,c#4]@4 f#2@2 [c#3,f#3,a#3,c#4]@3 ~ f#2 ~", // F#
  L: "[f3,a#3,c#4,f4]@5 ~ [f3,a#3,c#4,f4]@2 ~@2 f2 ~ [d#2,f#3,a#3,c#4,d#4]@6 [f#3,a#3,c#4,d#4]@3 ~ d#2 ~, f2 ~@3", // A#m D#m7
  M: "[f3,g#3,c#4]@5 ~ [f3,g#3,c#4]@2 ~@2 c#2 ~ [c#3,f#3,a#3]@5 ~ [c#3,f#3,a#3]@4 g#2 ~, c#2 ~ g#2 ~", // C# F#
  N: "[c#2,c#3,f3,g#3]@12 [c2,c3]@4 [c#2,c#3]@2 [g#1,g#2]@3 ~ [a1,a2]@2", // C# C C# G# A
  O: "[c#2,f3,g#3,c#4]@3 ~@3 [f3,g#3,c#4]@3 ~ c#2 ~ [d#3,g#3]@5 ~ [d#3,g#3,c4]@3 ~ c2 ~, ~@2 c2 ~, ~@4 c4 ~@3", // C# G#5 G#
  P: "[c#2,c#3,f3,g#3] ~@11", // C#
  Q: "[g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~, c#3 a#2 g#2 a#2", // C#
  R: "[g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~, c#3@6 a#2@6 g#2@5 ~ a#2@5 ~", // C#
  S: "[f#4,a#4,d#5]@5 ~ [f#4,a#4,d#5]@4 d#3@2 [f4,g#4,c#5]@6 [f4,g#4,c#5]@4 c#3 ~, d#3@4 ~@2 c#3@5 ~", // D#m C#
  T: "[d#4,g#4,c5]@6 [d#4,g#4,c5]@4 c3 ~ [d#4,g#4,c5]@2 ~@2 [d#4,g#4,c5]@4 [g#2,d#4,g#4,c5]@2 a2 ~, c3@5 ~ g#2@4 ~@2", // G#
  U: "[f4,a#4,c#5]@5 ~@5 a#2@2 [d#4,g#4,c5]@6 [d#4,g#4,c5]@4 g#2 ~, a#2@5 ~ g#2@5 ~, ~ [f4,a#4,c#5] ~@2", // A#m G# A#m
  V: "[c#4,f#4,a#4]@6 [c#4,f#4,a#4]@4 f#2 ~ [d#4,g4,a#4]@6 [d#4,g4,a#4]@5 ~, f#2@10 ~@2 g2@11 ~", // F# D#
  W: "[g#1,g#2,d#4,g#4,c5]@4 ~@2 [g#1,g#2,d#4,g#4,c5]@4 ~@2 [a1,a2,e4,a4,c5]@4 ~@2 [a2,e4,a4,c5]@5 ~, ~@6 a1 ~", // G# Am
  X: "[[a#1,a#2,f4,a#4,c#5]@4 ~@2 [a#1,a#2,f4,a#4,c#5]@6 [f#2,f#3,a3,c#4,e4]@23 ~ a2@12 ~@10 b3@2 a2@12 ~@8 a3@2 d4 ~ a2@12 ~@8 g3@2 a2 ~ a2@12 ~@8 a3@2 a2 ~ a2@12 ~@4 g3@4 g3@2 b3 ~ [a2,a3,d4,f#4]@12, ~@36 [g3,b3,d4,g4]@16 [d4,g4]@8 ~@16 [d4,f#4]@7 ~@41 [d4,f#4,a4]@7 ~@37, ~@48 a2@6 a2@6 ~@12 a2@6 a2@5 ~@13 a2@6 a2@4 ~@14 a2@6 a2@4 ~@14 a2@11 ~@13, ~@52 b3@6 ~@2 [a3,d4,f#4]@16 a3@4 ~@4 b3@2 ~@14 [a3,e4]@7 ~ [a3,d4,f#4]@16 a3@4 ~@20 [b3,d4,g4]@7 ~@13, ~@13 g3!2 ~@6 [g3,a3,e4]@4 g3 ~@7 [g3,b3,d4,g4]@4 ~@5]/7", // A#m F#m7 D G G5 D A5 D …
  Y: "[~@8 a3@2 d4 ~ [a2,g3,a3,c4,e4]@48 [a2,g3,a3,c4,e4]@20 ~@16, a2@6 a2@5 ~@85, ~@4 [d4,f#4]@7 ~@85, ~ a3 ~@22]/4", // Am7 D
  Z: "~@6 [a#2,f3,a#3,c#4,f4] ~@2 [f3,a#3,c#4,f4]@2 a#2", // A#m
  AA: "[f3,a#3,c#4,f4]@4 a#2@2 [f3,a#3,c#4,f4]@3 ~ a#2 ~ [f#2,f#3,a#3,c#4,d#4]@2 ~@4 [f#3,a#3,c#4,d#4]@4 f#2@2", // A#m D#m7
  AB: "[f#3,a#3,c#4,d#4]@4 f#2@2 [f#3,a#3,c#4,d#4]@3 ~ f#2 ~ [c#2,f3,g#3,c#4]@3 ~@3 [f3,g#3,c#4]@3 ~ c#2 ~", // D#m7 C#
  AC: "[d#3,g#3]@5 ~ [d#3,g#3,c4]@3 ~ c2 ~ [d#2,d#3,g3,a#3]@2 ~@4 [d#3,g3,a#3]@4 d#2@2, c2 ~@3, c4 ~@7", // G#5 G# D#
  AD: "[d#3,g3,a#3]@4 d#2@2 [d#3,g3,a#3,d#4]@4 d#2 ~ [f#2,c#3,f#3,a#3]@2 ~@4 [c#3,f#3,a#3,c#4]@4 f#2@2", // D# F#
  AE: "[c#3,f#3,a#3,c#4]@4 f#2@2 [c#3,f#3,a#3,c#4]@3 ~ f#2 ~ [f3,c#4]@5 ~ [f2,f3,a3,c4] ~@5", // F# C# F
  AF: "[d#2,f#3,a#3,c#4]@5 ~ [d#2,c4,d#4]@2 ~@4 [f3,g#3,c#4]@5 ~ [f3,g#3,c#4]@2 ~@2 c#2 ~, ~@6 g#3 ~@5 c#2@6 ~@6", // D#m7 Cm C#
  AG: "[c#3,f#3,a#3]@5 ~ [c#3,f#3,a#3]@4 g#2 ~ [c#2,c#3,f3,g#3]@2 ~@10, g#2 ~@3", // F# C#
  AH: "~@12 [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~, ~@2 c#3 a#2", // C#
  AI: "[g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~, g#2 a#2 c#3 a#2", // C#
  AJ: "[g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~ [f#4,a#4,d#5]@5 ~ [f#4,a#4,d#5]@4 d#3@2, g#2@5 ~ a#2@5 ~ d#3@8 ~@4", // C# D#m
  AK: "[f4,g#4,c#5]@6 [f4,g#4,c#5]@4 c#3 ~ [d#4,g#4,c5]@6 [d#4,g#4,c5]@4 c3 ~, c#3@5 ~ c3@5 ~", // C# G#
  AL: "[d#4,g#4,c5]@2 ~@2 [d#4,g#4,c5]@4 [g#2,d#4,g#4,c5]@2 a2 ~ [f4,a#4,c#5]@5 ~@5 a#2@2, g#2@4 ~@2 a#2@5 ~, ~@3 [f4,a#4,c#5]", // G# A#m
  AM: "[d#4,g#4,c5]@6 [d#4,g#4,c5]@4 g#2 ~ [c#4,f#4,a#4]@6 [c#4,f#4,a#4]@4 f#2 ~, g#2@5 ~ f#2@5 ~", // G# F#
  AN: "[d#4,g4,a#4]@6 [d#4,g4,a#4]@5 ~ [g#1,g#2,d#4,g#4,c5]@4 ~@2 [g#1,g#2,d#4,g#4,c5]@4 ~@2, g2@11 ~@13", // D# G#
  AO: "[a1,a2,e4,a4,c5]@4 ~@2 [a2,e4,a4,c5]@5 ~ [a#1,a#2,f4,a#4,c#5]@4 ~@2 [a#1,a#2,f4,a#4,c#5]@6, ~@2 a1 ~@5", // Am A#m
  AP: "[f#2,f#3,a3,c#4,e4]@23 ~", AQ: "a2@6 ~@4 g3 b3, [g3,b3,d4,g4]@2 [d4,g4], ~@2 a2!2, ~@8 b3@3 ~, ~@4 g3 ~",
  AR: "[f3,c#4]@5 ~ [f2,f3,a3,c4] ~@5 [d#2,f#3,a#3,c#4]@5 ~ [d#2,c4,d#4]@2 ~@4, ~@18 g#3 ~@5", // C# F D#m7 Cm
  AS: "[c#2,c#3,f3,g#3,c#4,f4] ~@7", // C#
})).s("gm_piano").gain(0.45)

// chords · drawbar organ · "organ"
const drawbar_organ = note("<~ A@2 B@4 C@2 ~@24 D@4 E@7 ~@16 A@2 B@4 C@2 ~@22>".pickRestart({
  A: "[[g4,b4,g5]@24 [a4,f#5]@23 ~, d5@47 ~]/2", // G D
  B: "[[g4,e5]@24 ~@18 [c2,d2] e2 [a2,b2,c3] [d3,e3] ~ [e4,f4,a#4,c#5] [b4,g5]@24 [a4,f#5]@23 ~, d5@44 ~@3 d5@48 ~, ~@24 [a4,f#5]@20 ~@3 g4@24 ~@25]/4", // C Csus2 Am Dsus2 A#m Em D
  C: "[[g4,a4,c5,e5]@15 ~, d#5 ~@47]/2", // Am7
  D: "[~@12 [g4,b4,d5,g5]@24 [a4,d5,f#5]@23 ~ [g4,e5]@23 ~ [a4,f#5]@12, ~@5 d5@3, ~@60 a4 ~@35]/4", // G D C D
  E: "[~@5 f2 [g2,a2] [b2,c3] [d3,e3,f3] [g3,a3] [b3,c4,d4] [e4,f4] [g4,b4,d5,g5]@24 [a4,d5,f#5]@23 ~ [g4,a4,c5,e5]@94 ~@14]/7", // Gsus2 Cmaj7 Dm Gsus2 Bm Fmaj7 G D …
})).s("gm_drawbar_organ").gain(0.17).pan(0.7)

// chords · drawbar organ · "organ" · soft notes · Fsus2 Cmaj7 Fsus2 Cmaj7
const drawbar_organ_soft = note(`<
  ~@4
  [~@19 [f2,g2] ~ f3 [g3,a3,b3,c4] d4]
  ~@58
  [~@19 [f2,g2] ~ f3 [g3,a3,b3,c4] d4]
  ~@26
>`).s("gm_drawbar_organ").gain(0.07).pan(0.7)

// chords · electric guitar clean · "strat gui"
const electric_guitar_clean = note(`<
  ~@9 A B C D B E F G A B C D B E F G ~@18 H I J K L M N O ~@17 A B C D B E F G@15
>`.pickRestart({
  A: "~@6 [a#3,c#4,f4]@2 ~@10 [a#3,c#4,f4] ~@5", B: "~@6 [f#3,a#3,c#4] ~@11 [f#3,a#3,c#4] ~@5",
  C: "~@6 [g#3,c#4,f4] ~@11 [g#3,c4,d#4] ~@5", D: "~@6 [g3,a#3,d#4] ~@11 [g3,a#3,d#4] ~@5",
  E: "~@6 [a#3,c#4,f4] ~@11 [f#3,a#3,d#4]@2 ~@4", F: "~@6 [f3,g#3,c#4] ~@11 [f#3,a#3,c#4] ~@5", G: "[f3,g#3,c#4] ~@23",
  H: "~@9 [a#3,c#4,f4] ~@2", I: "~@6 [a#3,c#4,f4] ~@11 [f#3,a#3,c#4] ~@5", J: "~@6 [f#3,a#3,c#4] ~@11 [g#3,c#4,f4] ~@5",
  K: "~@6 [g#3,c4,d#4] ~@11 [g3,a#3,d#4] ~@5", L: "~@6 [g3,a#3,d#4] ~@11 [f#3,a#3,c#4] ~@5",
  M: "~@6 [f#3,a#3,c#4] ~@11 [a#3,c#4,f4] ~@5", N: "~@6 [f#3,a#3,d#4]@2 ~@10 [f3,g#3,c#4] ~@5",
  O: "~@6 [f#3,a#3,c#4] ~@5 [f3,g#3,c#4] ~@11", // F# C#
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note("<~@25 A@2 B C D E F G ~@18 H@3 I@2 J K L M ~@14 N O@5 P@2 O@4 Q@2 P R>".pickRestart({
  A: "[[f3,g#3,c#4]@47 ~]/2", B: "[f#3,a#3,d#4]@11 ~ [f3,g#3,c#4]@11 ~", C: "[d#3,g#3,c4]@11 ~",
  D: "[f3,a#3,c#4]@12 [d#3,g#3,c4]@11 ~", E: "[c#3,f#3,a#3]@12 [d#3,g3,a#3]@11 ~, g#3 ~@23",
  F: "[d#3,g#3,c4]@12 [e3,a3,c4]@11 ~, a#3 ~@23", G: "[f3,a#3,c#4]@10 ~@2 [f#3,a3,c#4,e4]@7 ~@5",
  H: "[~@12 [f3,g#3,c#4]@47 ~ [f#3,a#3,d#4]@11 ~]/3", I: "[[f3,g#3,c#4]@11 ~ [d#3,g#3,c4]@22 ~@2 [f3,a#3,c#4]@12]/2",
  J: "[d#3,g#3,c4]@11 ~ [c#3,f#3,a#3]@12, ~@12 g#3 ~@11", K: "[d#3,g3,a#3]@11 ~ [d#3,g#3,c4]@12, ~@12 a#3 ~@11",
  L: "[e3,a3,c4]@11 ~ [f3,a#3,c#4]@10 ~@2", M: "[f#3,a3,c#4,e4]@7 ~@17", N: "[f3,g#3,c#4]@5 ~ [f#3,a#3,d#4]@5 ~",
  O: "[f3,g#3,c#4]@11 ~ [f#3,a#3,d#4]@11 ~", P: "[f3,g#3,c#4]@11 ~ [f#3,a#3,d#4]@10 ~@2",
  Q: "[f3,g#3,c#4]@10 ~@2 [f#3,a#3,d#4]@11 ~", R: "[f3,g#3,c#4] ~@7",
})).s("gm_string_ensemble_1").gain(0.12)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@6 B C D@7 C D@5 E D C B@6 E@2 F G@5 H I@2 J K I@4 J L J K I@5 J E C A@6 B C B@5 E@16 C
>`.pickRestart({
  A: "x ~@10 x", B: "x ~@4 x ~@2 x ~@3", C: "x", D: "x ~@2 x!2 ~", E: "x!2", F: "~ x", G: "~@5 x!2 ~@5",
  H: "~@5 x!2 ~@4 x", I: "~@2 x ~@3 x ~@4 x", J: "~ x ~ x ~@2", K: "~@6 x ~@4 x", L: "x ~@5 x ~@4 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ A@6 B C D@7 E D@7 E D@7 F E@7 F@3 G D@6 H B D@7 A@7 B C D@6 I@15 E>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@8 x!4", D: "~ x ~ x", E: "x", F: "~ x ~@2", G: "~@2 x!4 ~@3 x ~@2", H: "~ x!2 ~",
  I: "~@3 x ~@5 x ~ x",
})).gain(0.45)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@6 B ~@7 B ~@18 C D ~@23 A ~@22>".pickRestart({
  A: "x!8 ~@4", B: "~@8 x ~ x!2", C: "~@6 x!6", D: "x!2 ~@10",
})).gain(0.18)

// drums · clap
const clap = s("cp").struct("<~@74 [~@2 x!2 ~@8]!15 x>").gain(0.36)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~ A ~ A ~@8 B ~@7 B C ~@8 D ~ E ~ E ~ E ~@11 F ~@7 B ~ A ~ A ~ A ~@24
>`.pickRestart({
  A: "~@5 x", B: "~@11 x", C: "~@3 x", D: "~@5 x ~@6", E: "~ x ~", F: "~ x ~@2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!4] ~@8 [~ x!3] [x!4]!6 ~ [~ x!3] [x!4]!6 ~@66>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A ~ A ~ A ~@8 B C ~@6 B A ~@8 D ~ E ~ E ~ E ~@11 E ~@7 F ~ A ~ A ~ A ~@24
>`.pickRestart({
  A: "~@2 x", B: "~@5 x", C: "~@11 x", D: "~ x!2 ~@3", E: "~ x ~@4", F: "~@4 x!2",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~ A B A B A B C ~ D ~@7 D ~@7 D ~@6 B@2 D A D A D A E F E B ~@5 B ~ B ~@7 D A B A B A B C ~ D ~@21
>`.pickRestart({
  A: "x!2", B: "~ x", C: "x ~@2 x", D: "x", E: "~ x ~@2", F: "~ x!2 ~",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B A B A B C ~@17 D E@6 F G D A D A D A H B I G E@5 B F G E@7 ~ A B A B A B C ~ D E@20 ~
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x", C: "~ x!2 ~", D: "~ x!3", E: "x!4", F: "x!2 ~@2", G: "~@3 x", H: "x ~ x!2", I: "x",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@6 B ~@26 C@6 D ~ D ~@17 A@6 B ~@23>".pickRestart({
  A: "~ x", B: "~@3 x", C: "x", D: "~ x ~@2",
})).gain(0.45)

stack(
  bass, piano, drawbar_organ, drawbar_organ_soft, electric_guitar_clean, string_ensemble_1, kick, snare, snare_soft,
  clap, low_tom, hihat, mid_tom, crash, ride, tambourine
)

More by 10cc