Strudelify

Stasera mi butto

Roberts

KeyC majorTempo64 bpm
0:00/0:00
// Stasera mi butto — Roberts
// 64 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 67 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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 · "FINGERDBAS"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P I Q R S T U I V W X Y Z AA M AB AC AD I AE AF AG M N O P I Q R S T U I V W X Y Z AA
  M AB AC AD I AE A B C D AH ~
>`.pickRestart({
  A: "c2@10 g1 c2", B: "a#1@21 ~ a#1@2", C: "a1@17 ~ a1@6", D: "g1@12 g2@11 ~", E: "c1@19 ~ g1@2 c2@2",
  F: "a#1@19 ~@3 a#1@2", G: "a1@9 ~ a1 c2", H: "g#1@15 ~ g#1 ~ g#1@6", I: "e1@9 ~ e1@2 a1@8 g1@2 a1@2",
  J: "d1@4 ~ d1 d2@5 d1", K: "g1@2 g2 g1", L: "c2", M: "c1@10 g1 c2", N: "a#1@9 ~ a#1 ~ a#1@12", O: "a1@7 g1 a1 f1@3",
  P: "g#1@9 ~ g#1 ~ g#1@11 ~", Q: "d1@10 d2@2 g1@9 ~ g1@2", R: "c1@3 c2 c1 d1 f1@4 f2 f1",
  S: "c2@7 ~ c2@2 b1@2 a#1@6 c1@6", T: "f1@9 ~ f1 ~ f1@8 c1@2 d1@2", U: "f1@7 ~@3 f1 ~ f1@9 ~ f1@2",
  V: "c2 c1 c2 c1 c2 c1", W: "f1@8 ~@2 f1 ~ f1@8 c1@2 d1@2", X: "f1@9 ~ f1 ~ f1@8 f2@2 f1@2", Y: "e1@4 e2 e1 a1@3 g1@3",
  Z: "d1@3 d2@3 g1@4 d1 g1", AA: "c1@2 ~", AB: "a#1@10 g2 a#1", AC: "a1@19 ~ a1 ~ a1@2", AD: "g#1@19 ~ g#1@4",
  AE: "d2@3 d1@3 g1@4 g2 g1", AF: "c2@9 ~ c2@2 f1@7 ~ f1@2 g1@2", AG: "c2 ~@3", AH: "c1",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D ~@8 E@2 F@4 G H I@2 J K L@2 M N@2 O P@3 Q R S T E@2 F@4 G U V@2 W X Y@2 M Z@2 AA@4 Q AB A B C AC@3
>`.pickRestart({
  A: "[c2,c3,c4,d4,g4]", B: "[c4,d4]@35 ~@9 g4@4, [a#1,a#2], g4@11 ~, ~@3 c4, ~@5 d4",
  C: "~@11 [c4,c5], [a2,a3,g4], c4@11 ~, ~@3 [f4,f5], ~@5 [e4,e5]", D: "c4@23 ~ b3@23 ~, [g2,f3,a3]@23 ~",
  E: "[~@32 d5@4 ~@4 g4@8 ~@4 g5@39 ~@5, ~@28 g4@8 c5@55 ~@5]/2",
  F: "[~@24 g#4@20 ~@4 g4@11 ~ e4@11 ~ f4@22 ~@2, ~@4 g5@40 a4@44 ~@6 b3@25 [b3,c4]@26 ~@47, ~@8 a5@80 ~@30 a2@27 ~@47, ~@12 c5@28 c5@48 ~@7 d4@26 ~@21 [d3,a3]@27 ~@23, ~@16 c6@72 ~@55 c4@45 ~@4]/4", // Cmaj7 D5
  G: "c3@12 ~@8 c4@4 c5 ~@3 [f4,c5]@4 ~@12 c4@4, c2@3 f2@2 f2, c4@20 ~@5 a4@23, g4@16 g4@8 g4@3 ~@5 [f4,c5]@16, ~ c3 ~ f3", // F5
  H: "~@16 [c4,g4]@7 ~ [c2,c3,a#3,d4,f4]@12 [c2,c3,c4,e4,g4]@12, c2@23 ~@25, g4 ~@2, c3@8 c3@15 ~@25, d4 e4@22 ~@25", // C5 A# C
  I: "[~@72 a4@23 ~, [f2,c4,g4]@95 ~, a4@36 a4@32 c5@27 ~, ~@20 c5@24 c5@16 f4@35 ~, ~@28 f5@67 ~]/2", // Fsus2
  J: "e3@11 ~@5 g5@4 [d5,g5]@4 [a2,c5,g5]@24, [b3,d4,g4]@25 ~@23", // G5 Am7 G
  K: "~@5 c3, [c2,a#3,d4,f4] [f4,a#4,d5], c3@17 ~@3 c3@12 c3@8 ~@8, ~ [c4,e4,g4] c2 [c2,g4,c5,e5]", // A# C
  L: "[f3@16 [f3,f4]@4 [f3,d4]@4 [a3,c4] ~@3 c3@4 [d4,f4]@4 c4 ~@7 [d4,a#4]@4 f3@16 ~@16 [f4,c5]@4 f4@4 f3@8, f2@12 c4@4 f3 c4@4 c5@3, c3@3 ~@2 f3 c3@6, [a3,c4]@20 a#3@3 ~@9 a#3@3 ~@9 f4@30 f2@22, ~@8 a4@5 a4@3]/2", // F Dm Am Dm Gm F5 Am
  M: "e3@3 ~@2 g4 ~@4 c4@2, [e2,b3]@3 c4@2 ~, g4@5 ~ [a2,e4]@6, d4@16 d4@9 ~@11 a3@8 ~@4, ~@12 e3@13 ~@23", // E5 A5
  N: "[d3@10 ~@2 d3@12 [f3,a3,e4]@12 [f3,a3,d4]@10 ~@3 c4@36 ~@11, [a3,c4,f4]@24 g2@21 ~ c3@38 ~@12, ~@47 [c2,e3]@37 ~@12, ~@4 g3@3 ~]/2", // Fmaj7 Dm F C
  O: "~@21 e6@19 ~@4 d5@4, ~@2 c4@5 c6 d6 g6 d6@10 ~@4, ~@6 g4@35 ~@7, ~ c5@4 ~, ~@12 g5@29 ~@7",
  P: "[~@8 c5@30 ~@10 a4@12 a4@12 [a4,c5]@22 ~@34 d6@15 ~, ~ d5@37 ~@6 c4@50 ~@2 [g#4,d5]@47 ~, ~@48 g5@46 ~@30 g6@19 ~, ~@48 c5@24 ~@23 [c5,f5]@47 ~@2, ~@30 f5@17 ~@25]/3", // Am G#dim F5
  Q: "[b4,d5,g5] [a2,a3,c4,e4]", // G Am
  R: "~@5 c4 ~@3 d3@3, [d2,f4]@25 ~@23, c4@5 ~ [g2,b3,f4]@6, a3@16 a3@9 ~@23, ~@12 d3@13 ~@23", // Dm G7
  S: "~@23 g3@2 a3@2 c4@5 ~@8 [g3,c4]@8, [c2,c4,e4]@3 ~ c4 ~, g3@16 g3@7 f2@25, ~@12 c3@7 ~ c3@5 ~@7 f3@16, ~@3 c3", // C5 C
  T: "[c2,c3,e3,g3,c4]@17 ~@31", // C
  U: "~@16 [c4,g4]@7 ~ [c2,c3,a#3,d4,f4]@10 ~@2 [c2,c3,c4,e4,g4]@10 ~@2, c2@23 ~@25, g4 ~@2, c3@8 c3@15 ~@25, d4 e4@22 ~@25", // C5 A# C
  V: "[~@72 a4@23 ~, [f2,g4]@95 ~, a4@36 a4@32 c5@27 ~, ~@20 c5@24 c5@16 f4@35 ~, ~@28 f5@67 ~]/2", // Fsus2
  W: "e3@11 ~@5 g5@4 [d5,g5]@2 ~@2 [a2,c5,g5]@23 ~, [b3,d4,g4]@11 ~@13", // G5 Am7 G
  X: "[a#3,d4,f4]@5 ~ [c4,e4,g4]@4 ~@2 [c2,f4,a#4,d5]@4 ~@4 c3@3 ~, c2@11 ~@7 [c2,g4,c5,e5]@5 ~, c3@17 ~@3 c3@12 c3@8 ~@8", // A# C A# C
  Y: "[f3@16 [f3,f4]@4 [f3,d4]@4 [a3,c4] ~@3 c3@4 [d4,f4]@4 c4 ~@7 [d4,a#4]@4 f3@16 ~@16 [f4,c5]@4 f4@4 f3@8, f2@12 c4@4 f3 c4@4 c5@3, [a3,c4]@20 a#3@3 ~@9 a#3@3 ~@5 f3@8 c3@48, ~@22 f4@15 f2@11, ~@8 a4@5 a4@3]/2", // F Dm Am Dm Gm F5 Am
  Z: "[d3@12 d3@12 [f3,a3,e4]@12 [f3,a3,d4]@10 ~@3 c4@36 ~@11, [a3,c4,f4]@24 g2@21 ~ c3@38 ~@12, ~@47 [c2,e3]@37 ~@12, ~@4 g3@3 ~]/2", // Fmaj7 Dm F C
  AA: "[~@44 d5@4 ~@8 c5@30 ~@10 a4@12 a4@12 c5@23 ~@33 d6@16, ~@4 c4@12 d6@2 g6@2 d6 e6@28 d5@37 ~@10 c5@24 a4@52 g6@20, ~@3 g4@40 ~@3 c4@26 [g#4,d5]@24, ~@8 c5@6 c6@72 ~@22 f5@35 [c5,f5]@49, ~@6 g5@37 ~@5 g5@48]/4", // G#dim F5
  AB: "~@20 c4@4 ~@12 d3@11 ~, [d2,f4]@25 ~@23, c4@5 ~ [g2,b3,f4]@6, a3@16 a3@9 ~@23, ~@12 d3@13 ~@23", // Dm G7
  AC: "[c4@23 ~ b3@23 ~@2 c4@48 ~@47, [g2,f3,a3]@46 ~ e3@50 ~@47, ~@48 g3@49 ~@47]/3", // Dm
})).s("gm_piano").gain(0.36)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@14 A ~ B@2 C D E F@2 G H I J K L@2 M N@2 O ~@2 P ~@2 A ~ B@2 C D E F@2 Q H I J K L@2 R S@3 ~@5 T@2 ~
>`.pickRestart({
  A: "g4@43 ~@5", B: "[~@45 e3@28 ~@23]/2", C: "~@24 g2@19 ~@5", D: "~@23 d4", E: "~@3 c4 ~@8",
  F: "[~@16 f4@8 f4@8 [f3,f4]@8 f3@8 ~@8 f3@8 f3@8 f3@8 f3@4 f3@11 ~, ~@12 c3@83 ~, ~@4 f3@4 ~@2 f4@3 f4@2 ~@9, ~@6 f3 ~@5]/2", // F
  G: "~@11 e3@13 ~@12 e3@12", H: "~@17 c3@3 ~@28", I: "~@32 f3@4 a3 ~@11", J: "~@7 f4 ~@2 f4@2, ~@3 f3@2 ~, ~@7 g4@5",
  K: "~@11 a3, ~@17 e3@7", L: "[~@15 g2@13 ~@4]/2", M: "~@10 d5@30 d5 ~@7", N: "[~@4 e5@34 ~@2 f3@53 ~@3]/2",
  O: "~@32 g#5@15 ~", P: "~@23 f3@9 ~@12 a3@4", Q: "~@11 e3@11 ~@14 e3@11 ~", R: "~@5 d5@15 d5@2 ~@2",
  S: "[~@2 e5@17 ~@45 g#5@8, ~@5 f3@12 ~]/3", T: "[~@23 c3@25, ~@15 c2@17]/2",
})).s("gm_piano").gain(0.15)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~ A B C@2 ~@16 D@2 E@2 F@2 G@3 ~@16 D@2 E@2 F@2 G@3 ~@6 A B C@2 ~@2>".pickRestart({
  A: "~ d4 e4 ~ d4 e4, g3@17 ~@7 g3@20 ~@4", B: "~@2 e4 ~ d4 e4, g3@21 ~@3 g3@22 ~@2, ~@4 d4@7 ~@13",
  C: "[~@8 d4@8 e4@8 ~@8 d4@8 e4@4 ~@5 [a3,c4]@45 ~@2, g3@21 ~@3 g3@22 ~ [g2,f3]@47 ~@2]/2", // Am G7
  D: "[~@8 f3@4 ~@20 f3@4 g3@4 f3@4 ~@12 f3@4 g3@4 ~@16 f3@4 g3@4 f3@4 c4@3 ~, f2@21 ~@3 f2@22 ~@2 f2@21 ~@3 f2@21 ~@3, ~@4 c3@17 ~@7 c3@18 ~@6 c3@18 ~@6 c3@17 ~@3, ~@12 g3@7 ~ c4@12 ~@12 c4@13 ~@11 c4@12 ~@16, ~@8 f3@5 ~@19 f3@6 ~@10]/2",
  E: "[g3@4 ~@8 g3@4 b3@4 g3@3 ~ c4@4 ~@4 a3@8 c4@3 ~@5 [d4,f4]@11 ~ [c4,e4,g4]@9 ~@3 [d4,f4,a#4]@11 ~ [c4,e4,g4]@11 ~, e2 ~@3, b3@8 e3@12 ~@3 e3@4 ~ e3@14 ~@5 a#3@10 ~@39, ~@4 b2@17 ~@3 a2@21 ~@2 c3@14 ~@35]/2", // Dm C A# C
  F: "[~@8 f3@4 g3@4 ~@16 f3@4 g3@4 ~@16 f3@4 g3@4 ~@16 f3@4 g3@4 ~@4 c4@3 ~, f2@20 c4@12 ~@8 f3@12 c3@16 c4@10 ~@10 f3@7 ~, ~@4 c3@18 ~@2 f2@20 c4@10 ~ c4@2 ~@7 f3@9 ~@3 c3@17 ~@3, ~@16 f3@12 c3@18 ~@2 f2@22 ~@2 f2@21 ~@3]/2",
  G: "[~@16 g3@4 b3@3 ~ c4@8 ~@4 a3@8 ~@5 f4@16 ~@7 e4@11 ~ d4@7 ~@6 c4@26 ~@21, e2@25 ~@44 g2@26 ~ g3@27 ~@21, [g3,b3]@12 e3@19 ~ e3@12 ~@3 [d3,a3]@20 ~@3 f3@22 ~@2 c3@29 ~@21, ~@7 b2@15 ~@2 a2@18 ~@6 c4@17 ~@6 a3@20 ~@4 e3@27 ~@22]/3", // G D5
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~ A@4 ~@14 B C@5 D@2 E@2 F ~@14 B C@5 G@2 E@2 F ~@6 H@4 ~@2>".pickRestart({
  A: "[[c3,c4,d4,g4]@47 [a#1,a#2,c4,d4,g4]@48 ~ g4@24 f4@23 ~ c4@24 ~@24, ~@95 [a2,a3,c4]@48 [g2,f3]@47 ~@2]/4", // Csus2 Gm Am G7
  B: "~@35 c3@12 ~, [e3,g3]@23 [f2,a3]@25, ~ c4@3, ~ f3", // Em F
  C: "[[c3,g3,c4,e4]@24 [d4,f4,a#4]@11 [e4,g4,c5]@12 ~@72 [a4,c5]@20 ~@5 [d4,b4]@23 [e4,c5]@19 ~@6 f4@11 ~ [c4,e4,g4]@11 [f4,a#4,d5]@12 [g4,c5,e5]@13, ~@24 c3@23 [f3,f4]@96 e3@24 a3@23 ~ c3@49, ~@47 [a4,c5]@69 ~@28 g4@42 ~@5 [a#3,d4]@12 ~@37, ~@95 f5@44 ~@101]/5", // C A# C Am G C A# C …
  D: "[[f3,f5]@47 ~ [f3,f4]@48, [a4,c5]@47 ~]/2", // F Am
  E: "[[e3,d4,b4]@23 ~ e4@22 ~ [d3,f4]@25 ~@12 b3@11 ~, g4@47 c4@35 ~@14, ~@23 [a2,c5]@24 ~@25 [g2,d4,g4]@24]/2", // E7 Dm Am G5
  F: "[c3,e4]@25 ~@23", G: "[~ f3@47 [f3,f4]@48, [a4,c5]@47 ~, f5@23 ~@25]/2",
  H: "[[c3,c4,d4,g4]@45 ~@2 [a#1,a#2,c4,d4,g4]@48 ~ g4@24 f4@23 ~ c4@24 ~@24, ~@95 [a2,a3,c4]@48 [g2,f3]@47 ~@2]/4", // Csus2 Gm Am G7
})).s("gm_string_ensemble_1").gain(0.34).pan(0.4)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~@4 A ~@14 B ~@7 C@2 D ~@14 B ~@7 C@2 D ~@9 A ~@2>".pickRestart({
  A: "~@23 b3@23 ~@2", B: "c3 ~, c2@3 ~@5", C: "[~@47 a4@23 ~@26]/2", D: "c4@25 ~@23",
})).s("gm_string_ensemble_1").gain(0.14).pan(0.4)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<~@5 A@7 B C@8 D@4 E@2 F@7 G@4 H@8 I@4 E@2 J@7 K@2 ~@6>".pickRestart({
  A: "[c4@47 [a#3,d4]@47 ~ g4@24 ~@24 [g#3,d4]@46 ~@2 [d4,g4]@24 ~@24 [d3,f4]@48 c4@24 b3@25, [g3,e4]@95 c4@95 ~@25 c4@72 ~@49, ~@95 a3@46 ~@49 [e3,b3]@25 [a2,e4]@25 ~@47 [g2,f3]@48 ~, ~@119 f4@70 ~@39 a3@83 ~@25]/7", // A# G#dim G5 Dm C E5 A5 G7
  B: "c3 ~",
  C: "[[c3,c4]@48 [a#2,a#3,d4]@47 g4@24 ~@24 [g#2,g#3,d4]@48 [e3,b3,d4,g4]@23 ~ [c4,e4,a4]@22 ~ [c4,d4,f4,a4]@24 ~ c4@11 ~ b3@12 [c3,c4,e4]@23 [c3,a3,c4,f4]@24 ~ [c3,g3,c4,e4]@22 ~@2 [a#3,c4,f4]@12 ~ [e4,g4]@11 ~, [g3,e4]@95 c4@95 ~@168 d4@12 ~@14, ~@95 [a2,a3]@49 ~@70 a2@19 ~@5 d3@20 ~@5 [g2,d4]@25 ~@71 [c3,g3]@22 ~@3, ~@119 f4@73 ~@71 g4@46 ~@75]/8", // C A# G#dim Em7 Am Dm7 C F …
  D: "[g4@23 ~@24 c5@47 [e3,b3,d4,g4]@24 ~ [a2,a3,c4]@23 ~ [a#3,d4,f4]@11 ~ [c4,e4,g4]@12 [f4,a#4,d5]@11 ~ [g4,c5,e5]@12 ~, [f3,a4]@94 ~@49 c3@34 ~@2 c3@7 ~@6, ~@23 f4@71 ~@24 e4@23 ~@51]/4", // Em7 Am A# C A# C F
  E: "[g4@23 f4@24 g4@24 f4@24 [e3,b3,d4,g4], [c4,a4]@95 ~]/2", // Em7 F
  F: "[~@23 [a3,c4,e4]@23 [d3,c4,d4,f4,a4]@24 c4@13 b3@12 [c3,g3,d4,e4]@26 ~@22 d4@24 c4@23 ~ [a#2,a#3,d4]@47 ~ g4@19 ~@4 f4@23 ~@2 [g#2,g#3,c4,d4,f4]@47 [e3,b3,d4,g4]@2, ~@22 a2@24 ~@24 [g2,a3,f4]@25 ~@48 [c3,g3,e4]@49 ~@46 a2@47 ~@51, ~@239 [a3,c4]@47 ~@50]/7", // Am Dm7 C A# Dm7b5 Em7 Dm C …
  G: "[~@47 d3@24 ~@12 b3@8 ~@4 [g3,e4]@23 [a3,f4]@24 ~ g3@6 ~@43, ~@22 c4@61 ~@109, ~@22 [a2,e4]@25 f4@47 ~@48 e4@7 ~@43, ~@35 a3@58 ~@2 [c3,c4]@54 ~@43, ~@71 g2@25 ~@96]/4", // C Dm A5 C
  H: "[[c3,c4]@48 [a#2,a#3,d4]@46 ~ g4@24 ~@24 [g#2,g#3,d4]@48 [e3,b3,d4,g4]@23 ~ [c4,e4,a4]@22 ~ [c4,d4,f4,a4]@24 ~ c4@11 ~ b3@10 ~@2 [c3,c4,e4]@23 [c3,a3,c4,f4]@24 ~ [c3,g3,c4,e4]@23 ~ [a#3,c4,f4]@12 ~ [e4,g4]@8 ~@4, [g3,e4]@95 c4@95 ~@168 d4@12 ~@14, ~@95 [a2,a3]@49 ~@70 a2@19 ~@5 d3@20 ~@5 [g2,d4]@25 ~@71 [c3,g3]@22 ~@3, ~@119 f4@72 ~@72 g4@46 ~@75]/8", // C A# G#dim Em7 Am Dm7 C F …
  I: "[g4@23 ~@24 c5@46 ~ [e3,b3,d4,g4]@24 ~ [a2,a3,c4]@23 ~ [a#3,d4,f4]@12 [c4,e4,g4]@12 [f4,a#4,d5]@11 ~ [c3,g4,c5,e5]@7 ~@6, [f3,a4]@93 ~@50 c3@34 ~@15, ~@23 f4@69 ~@26 e4@23 ~@51]/4", // Em7 Am A# C A# C F
  J: "[~@23 [a3,c4,e4]@23 [d3,c4,d4,f4,a4]@24 c4@13 b3@11 ~ [c3,g3,d4,e4]@26 ~@22 d4@24 c4@23 ~ [a#2,a#3,d4]@47 ~ g4@19 ~@4 f4@23 ~@2 [g#2,g#3,c4,d4,f4]@47 [e3,b3,d4,g4]@2, ~@22 a2@24 ~@24 [g2,a3,f4]@25 ~@48 [c3,g3,e4]@49 ~@46 a2@48 ~@50, ~@239 [a3,c4]@47 ~@50]/7", // Am Dm7 C A# Dm7b5 Em7 Dm C …
  K: "[~@47 d3@24 ~@12 b3@8 ~@5, ~@22 c4@61 ~@13, ~@22 [a2,e4]@25 f4@47 ~@2, ~@35 a3@58 ~@3, ~@71 g2@25]/2", // A5
})).s("gm_pad_warm").gain(0.24)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@37 A B@2 C D E F@2 G H ~@2 I J ~@16>".pickRestart({
  A: "e3@2 g3 ~ a3 ~ d4@2 g3 ~ a3@2 c4 d4@2 c4@2 g4@2 d4@3 g4 ~ a4 ~ c5 d5@2 g5@2 f5@2 ~@3 d5 ~ a4 ~@2 c5@2 g4 ~@2 f4 ~, ~@20 e5 ~@3",
  B: "[e4@8 e5@2 ~@6 d5@2 ~@6 c5@3 ~@5 g5@25 ~@2 f5@3 e5@2 ~ d5@2 ~ c5@2 ~@2 e5@3 ~ a4@2 ~ c5@10 ~@7]/2",
  C: "~@4 f4 ~ g4@2 a4@2 c5@2 b4@2 a4@2 g4@2 ~ a4@2 ~@2 f4@2 ~@3 f4@2 ~ f4@2 ~@3 d4@2 e4@2 f4@2 ~@6, ~@11 g4 ~@3 e4 ~@8",
  D: "d4 ~ g#4 ~ f4@2 g4@2 g#4 ~ c5@2 f4@2 g4@2 ~@2 c5 ~ d5 ~ f5 ~ g5 ~ g#5 ~ c6 ~ d6 ~ f6@2 g6 ~@2 g#6@6 ~ g6@2 f6@2, ~@18 g6 ~@5",
  E: "~ e6@5 ~@2 b6@2 ~@7 e6 ~ b5 ~@4 d6@2 e6@2 c6@8 ~@12, ~@4 d6 ~@7",
  F: "[~@12 g5@6 ~@2 g5@3 ~ g5@8 b5@8 d6@7 c6@14 ~@10 g5 ~ g5 e5 ~ d5 ~@3 g5@2 ~ d5 e5@2 ~ c5 ~ a4@2 g4@2 ~ c5@2, ~@12 f5 ~@59 a5@2 ~@12 d5@2 ~@8]/2",
  G: "~ g4@2 e4@2 d4 ~@2 g4@2 e4@2 c4@3 ~@9 e4 ~ c4@2 d4 ~ e4@2 g4@2 a4 ~ c5 ~ d5 ~ e5@2 g5@2 a5@2 c6 ~, a4 ~@23",
  H: "~ a5@14 ~@33",
  I: "~@12 e4 ~ c4@2 d4 ~ e4@2 g4@2 a4 c5@2 a4@2 g4@2 a4 ~ c5@2 d5 ~@2 e5@2 g5 ~ a5 ~ c6 ~ a5 ~ g5 ~",
  J: "~ a5@21 ~@26",
})).s("gm_synth_brass_2").gain(0.41)

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

// drums · rim
const rim = s("rim").struct("<~@5 A@7 ~ A@7 ~@10 A@7 ~ A@7 ~@10 A@6 ~@6>".pickRestart({
  A: "~ x ~ x",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct("<A B@3 ~@16 C B@3 D B@3 E ~@16 C B@3 D B@3 E ~@6 A B@3 ~@3>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x!2 ~@2 x ~@2 x ~ x ~@2", D: "~ x ~ x ~@3 x!5", E: "~@3 x ~@3 x ~@4",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<A ~@19 B ~@3 C ~@3 D ~@16 B ~@3 C ~@3 D ~@13>".pickRestart({
  A: "~@11 x", B: "~@10 x ~@12 x", C: "~@7 x!5", D: "~@2 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A C D E F G H I J ~ K L M N O P G Q R S T U V W X Y Z AA F AB AC AD AE AF ~ K L M N O P G Q R S T U V W X Y Z AA
  F AB AC AD AE A B A C ~@2
>`.pickRestart({
  A: "~ x!11", B: "x ~ x ~ x ~ x ~ x!5 ~ x ~@3 x ~ x ~ x ~", C: "~ x!3", D: "x!2 ~ x!4 ~ x!4", E: "x!2 ~ x!7 ~@2",
  F: "x ~ x!10", G: "x!11 ~", H: "x!8 ~ x!3", I: "x!4 ~ x!2 ~ x!3 ~", J: "x!8 ~@4", K: "x!7 ~ x!4", L: "x!4 ~ x!6 ~",
  M: "x ~ x!2 ~ x!7", N: "x!7 ~@3 x!2", O: "x!8 ~ x!2 ~", P: "x ~ x!9 ~", Q: "x!12", R: "x ~@2 x!10 ~@2 x!4 ~ x!3 ~",
  S: "x!23 ~", T: "x ~ x!22", U: "~@3 x!9", V: "x!2 ~ x!2 ~ x!2 ~ x!5 ~ x!4 ~ x!3 ~", W: "~@2 x!22",
  X: "x ~ x!17 ~ x!3 ~", Y: "x ~ x!5 ~ x ~@3 x!6 ~@6", Z: "~@14 x!2 ~ x ~@6", AA: "x ~@2 x!5 ~ x!3",
  AB: "x ~ x ~@3 x ~@3 x ~ x!5 ~ x ~@2 x!2 ~", AC: "x!7 ~ x!3 ~", AD: "x ~ x!5 ~ x!3 ~", AE: "x!10 ~ x",
  AF: "x ~ x!5 ~@3 x!2",
})).gain(0.19)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A B C ~ D E D ~ F G H D@2 C ~@2 I ~ J ~ K L M N D O C P Q R S T U F G H D@2 C ~@2 I ~ J ~ K L M N D O C P Q R S
  ~@6
>`.pickRestart({
  A: "~@2 x ~@4 x ~@4", B: "~ x ~@3 x", C: "~ x ~@10", D: "~@2 x", E: "~@4 x ~@2 x ~@4", F: "~@7 x ~@4", G: "~ x ~",
  H: "~ x ~@2 x ~@7", I: "~ x!2 ~@10 x!2 ~@4 x ~@4", J: "~ x ~@22", K: "~@2 x ~@2 x ~@2 x ~@5 x ~@9", L: "x!2 ~@22",
  M: "~ x ~@17 x ~@4", N: "~ x ~@5 x ~ x!3 ~@12", O: "~ x!2 ~@5 x ~@3", P: "~@4 x ~@3 x ~@8 x ~ x ~@4",
  Q: "~ x ~@12 x ~@9", R: "~ x ~@5 x ~@4", S: "~@5 x", T: "~ x ~@6 x ~@3", U: "x",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@19 B ~@7 C ~@16 B ~@7 C ~@6 D ~@6>".pickRestart({
  A: "~@5 x", B: "~@3 x!2 ~@4 x ~@11 x!2 ~", C: "~@11 x", D: "~@10 x!2",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ B ~ B ~ B ~ B C@2 ~ B ~ D B@3 ~ E@2 ~ F E ~ E C@2 ~@2 B@3 ~ D ~@2 B ~ D B@3 ~ E@2 ~ F E ~ E C@2 ~@2 B@3 ~@2 A
  ~ B ~@2
>`.pickRestart({
  A: "~@2 x", B: "~@11 x", C: "~@3 x", D: "~@7 x ~ x ~@2", E: "~@23 x", F: "x",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@20 A ~@7 A ~@16 A ~@7 A ~@13>".pickRestart({
  A: "~@5 x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A@3 ~@6 A@2 ~@3 A ~ A@3 ~@2 B A ~@2 C A@2 ~@3 A ~ D ~ A ~@3 A ~ A@3 ~@2 B A ~@2 C A@2 ~@3 A ~ A ~ A@3 ~
>`.pickRestart({
  A: "x", B: "x ~@3 x ~@2 x ~@4", C: "x!2", D: "x ~@4 x",
})).gain(0.25)

// drums · crash · soft notes
// … 47 more lines