Strudelify

Il mio amore per te

Ramazzotti

KeyD majorTempo125 bpm
0:00/0:00
// Il mio amore per te — Ramazzotti
// 125 bpm, 4/4, key D 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 134 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30, guitar program 28.
setcpm(125/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.

// other · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@89
  [a1@5 ~@2 f#2 a2 ~ a2 ~@3 b2@2]
  [~@8 f#2@7 ~]
  ~@2
  [a1@5 ~@2 f#2 a2 ~ a2 ~@3 b2@2]
  [~@8 f#2@7 ~]
  ~@39
>`).s("gm_lead_8_bass_lead").gain(0.61).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  A B C D@2 E F G H B F D@2 B F D I B F D@2 B J D K L M N O P Q R@2 B F P S B F P T B F D@2 B F U V W X L Y B J D Z L M
  N O P AA J AB B F P S B F P T B J P D L P AC AD B F D@2 B F D@2 AE AF AG AH AE AF AG AI B F D@2 B F D@2 B F P S B F P
  T B J P D L P D AJ B F D AK B F D AL AM@4 ~
>`.pickRestart({
  A: "~@10 d1 ~ d2@2 d1 ~", B: "d1!8", C: "a1!5 g1!2 f#1", D: "g1!8", E: "d1!7 g1", F: "a1!7 g1",
  G: "g1 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2", H: "g1@2 g1@2 g1@2 g1@2 g1@2 b1 ~ d2@3 ~", I: "g1!4 d2@2 b1 a1",
  J: "a1!8", K: "g1@2 g2@2 g1@2 a1@2 b1!2 d2@2 e2@2 a1@2", L: "b1!8", M: "a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 a1@2 f#1 a1",
  N: "g1@2 g1@2 g1@2 g1 ~ g1@2 g1@2 g1@2 g1@2", O: "f#1!8", P: "e1!8", Q: "e1!5 f#1 g1 a1", R: "[a1!7 a2@2 a2!6 g1]/2",
  S: "g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1 ~ g1 ~", T: "g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 b1 d2 a1@2",
  U: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 g1 ~ d2@2", V: "g2 f#2 e2 d2 b1 a1 g1 f#1",
  W: "d1@2 d1@2 d1 ~ d1@2 d1@2 d1@2 d1@2 d1@2", X: "a1!7 g#1", Y: "g1@2 g1@2 g1 ~ g1@2 g1 ~ g1@2 g1 ~ g1 ~",
  Z: "g1@3 a1 b1 d2 c#2 a1", AA: "e1!6 f#1 g1", AB: "a1!2 d2@2 a2@4", AC: "g1!7 d2",
  AD: "g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 a2@3 ~", AE: "a1@5 ~@2 f#1 a1 ~ a1 ~@3 b1@2", AF: "~ f#1", AG: "g1@15 ~",
  AH: "~ g2 f#2@2 e2@2 d2@2 b1@2 a1@2 g1@4", AI: "~ d2 g2!5 ~", AJ: "g1 b1 d2 e2 f#2 b1 d2 g1",
  AK: "g1@2 g1@2 g1@2 g1@2 g1 b1 d2 b1 e2 b1 g1 b1", AL: "g1!4 a1 g1 f#1@2", AM: "[d1@63 ~]/4",
})).s("gm_electric_bass_finger").gain(0.7)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A@8 B ~@15 C D E F G@2 H I J@12 K@2 L@2 ~@8 C D E F G@2 H I J@12 M@2 N@2 J@4 O@4 ~@8 J@20 M@2 N@2 J@4 O@4 P@5
>`.pickRestart({
  A: "[~@2 [a3,d4]@3 [a3,d4]@2 [a3,d4]@3 a3@3 g3@5 [g3,d4]@3 [g3,d4]@2 [g3,d4]@3 [g3,d4]@6, ~@5 d4@3 ~@8]/4", // D5 G5
  B: "d3@7 ~", C: "~@2 f#3 a3 b3 ~ a3 b3 ~@2 b3 ~@3 f#3 a3", D: "~@2 e3 g3 a3 ~ g3 a3 ~@2 a3 ~@3 e3 g3",
  E: "~@2 d3 g3 a3 ~@2 a3 ~@2 a3 ~@3 g3 a3", F: "~@2 e3!2 a3 ~@2 a3 ~@2 e3 ~@3 e3 ~",
  G: "~@2 e3 g3 a3 ~@2 a3 ~@2 a3 ~@3 g3 a3", H: "~@2 e3 g3 a3 ~@2 a3 ~ d3 e3 ~@5",
  I: "~@2 e3 g3 a3 ~@2 a3 ~ d3 e3 ~@3 [a3,e4]!2", // A5
  J: "[[a3,d4]@2 [a3,d4]@3 [a3,d4] ~@4 [a3,d4]@3 [a3,d4] a3@2 ~@2 [g3,d4]@3 [g3,d4]@2 [g3,d4]@3 [g3,d4]@3 [d4,g4]!3, d3@8 e3@8 d3@13 ~@3, ~@6 [a3,d4]@3 ~@5 d4@3 ~@15]/4", // D5 G5 D5
  K: "[[a3,d4]@2 [a3,d4]@3 [a3,d4] ~@4 [a3,d4]@3 [a3,d4] [a3,d4]@2, d3 e3, ~@6 [a3,d4]@3 ~@7]/2", // D5
  L: "[[d3,g3], d4 ~@15]/2", // G5
  M: "[~ [b3,f#4]!2 [b3,f#4]@2 ~@5 [b3,e4] [b3,e4]@2 [b3,e4] [b3,e4]@2, b2 e3, ~@5 [b3,f#4]@5 ~@6]/2", // B5 E5 B5
  N: "[~@8 [d4,a4]!8, g3@6 g3@7 ~ g3@18, ~@2 [d4,a4]@3 [d4,a4]@3 ~@8]/2", // D5
  O: "[[a3,d4]@2 [a3,d4]@3 [a3,d4] ~@4 [a3,d4]@3 [a3,d4] a3@2 ~@2 [g3,d4]@3 [g3,d4]@2 [g3,d4] [g3,d4]@2 ~@6, d3@8 e3@8 d3@13 ~@3, ~@6 [a3,d4]@3 ~@5 d4@3 ~@15]/4", // D5 G5 D5
  P: "[[d3,a3]@33 ~@7]/5", // D5
})).s("gm_distortion_guitar").gain(0.1).pan(0.1)

// other · distortion guitar
const distortion_guitar_2 = note(`<
  ~ A@2 B@2 A@2 B@2 ~@26 B@2 ~@2 B@2 ~@2 B@2 ~@4 C@4 D@3 ~@11 B@2 ~@2 B@2 ~@2 B@2 ~@6 B@2 ~@2 B@2 ~@10 B@2 ~@2 B@2 ~@2
  B@2 ~@2 B@2 ~@2 B@2 ~@6 B@2 ~@2 B@2 ~@5
>`.pickRestart({
  A: "[~@2 d3@21 ~@9]/2", B: "[~@2 d3@25 ~@5]/2",
  C: "[~ a3 c#4 d4@2 d4 c#4 d4@2 a3 c#4 d4@2 e4@2 d4@2 a3 c#4 d4@2 d4 c#4 d4@2 a3 c#4 d4@2 a3 b3 a3]/4",
  D: "[~ a3 c#4 d4@2 d4 c#4 d4@2 a3 c#4 d4@2 e4@2 d4@5 ~@4]/3",
})).s("gm_distortion_guitar").gain(0.07).pan(0.9)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@17 A@8 ~@10 B ~@3 B ~@9 C@2 D@4 ~@12 B ~@3 B ~@3 B ~@13 E@8 ~@10 B ~@3 B ~@3 B ~@18
>`.pickRestart({
  A: "[~@3 d4@2 ~@6 d4@2 ~@6 d4@2 ~@9 d4@2, ~@2 a3@16 a3@16 a3@16 a3@13 ~, ~@4 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@11 ~, ~@5 d4@2 d4@4 ~@2 d4@2 d4@4 ~@2 d4@2 d4@4 d4@3 ~@2, ~@58 e4@5 ~]/4",
  B: "~@6 d4@9 ~, ~@2 a3@13 ~, ~@4 c#4@11 ~", C: "[~@3 d4@2 ~ c#4@4 ~@6]/2",
  D: "[~@3 d4@2 ~@10 a3@2 ~@2 d4@2 ~ c#4@4 ~@6, ~ a3@8 a3@4 a3@2 ~@17, ~@2 c#4@4 ~ d4@4 d4@8 ~@13, ~@5 c#4@4 ~@7, ~@7 b3@8 ~]/4",
  E: "[~@54 d4@7 ~@3, ~@2 e3@8 e3@28 d4@4 e4@19 ~@3, ~@4 a3@8 a3@8 a3@8 a3@24 b3@9 ~@3, ~@6 b3@8 b3@8 b3@8 b3@6 b3@10 d4@4 g3@11 ~@3, ~@18 d3@8 d3@8 d3@27 ~@3]/4",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.9)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@49 A@4 B@4 ~@77>".pickRestart({
  A: "[~@5 d4@2 ~@8 d4@4 ~@3 c#4@4 ~@6, ~ a3@8 a3@8 ~@15, ~@2 c#4@4 ~ d4@4 d4@4 ~@6 d4@2 ~@9, ~@5 c#4@4 ~@7, ~@13 e4@16 ~@3]/4",
  B: "[~@5 d4@2 ~@8 d4@16 ~, ~ a3@8 a3@16 ~@7, ~@2 c#4@4 ~ d4@4 d4@4 ~@17, ~@5 c#4@8 ~@3, ~@13 e4@16 ~@3]/4",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.9)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@2 B C@3 B C@3 B C@3 B C@3 B C@3 B D@2 E@2 F G@6 B C@3 B C@3 B C@3 B H@8 I@2 E@2 F G@6 B C@3 B C@3 B J@3 K C@3 B C@3
  B D@2 ~@6 L@2 M B C@3 B C@3 B C@3 B C@3 B J@3 K C@3 B C@3 B D@2 ~@5
>`.pickRestart({
  A: "[~@14 [a3,d4,f#4] d4 d4@4 [f#3,a3,d4]@6 [f#3,a3,d4]@4 [f#3,a3,d4]@2, ~@15 f#4@8 ~@9, ~@15 a3@5 ~@12, ~@16 d3@7 ~@9]/2", // D
  B: "[a3,c#4,e4]@2 [a3,c#4,e4]@3 a3@2 [a3,d4], ~@5 [c#4,e4]@3", // A D5 C#m
  C: "[d4@2 [a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4]@3 [g3,a3,d4]@3 [g3,a3,d4]@2 d4 d4@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 [f#3,a3,d4], g3@7 ~@23 g3@8 ~@10, ~@5 a3 ~@2, ~@16 d3@3 ~@5]/3", // D5 Gsus2 D
  D: "[d4@2 [a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4]@3 [g3,a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4], g3@7 ~@25]/2", // D5 Gsus2
  E: "[[b3,f#4]@2 [b3,f#4]@3 [b3,f#4]@2 ~ [a3,e4]@2 [a3,e4]@3 [a3,e4]@2 [a3,e4], ~@7 [b3,f#4]@9]/2", // B5 A5 B5
  F: "[b3,d4]@2 [b3,d4]@3 [b3,d4]@3", // Bm
  G: "[[b3,d4]@2 [b3,d4]@4 b3@2 [b3,a4,d5]@2 [b3,a4,d5]@3 [b3,a4,d5]@2 [b3,a4,d5]@3 [b3,a4,d5]@3 [b3,a4,d5]@2 [a4,d5] [a4,d5,e5]@2 [a4,d5,e5]@3 [a4,d5,e5]@2 [a4,d5,e5]@3 [a4,d5,e5]@3 [a4,d5,e5]@2 ~ d4@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 [f#3,a3,d4], ~@12 d4@19 ~@15 b3@17 ~@15 [a4,d5,e5]@8 ~@10, ~@40 d3@3 ~@5]/6", // Bm Bm7 D5 Asus4 D Asus4
  H: "[d4@2 [a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4]@3 [g3,a3,d4]@3 [g3,a3,d4]@2 d4 d4@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 ~ c#4@2 [a3,c#4,e4]@3 [a3,c#4,e4]@2 d4 d4@2 [b3,d4]@3 [f#3,b3,d4]@2 d4@3 [g3,a3,d4]@3 [g3,a3,d4]@2 d4 d4@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 ~ c#4@2 [a3,c#4,e4]@3 [a3,c#4,e4]@2 [a3,d4], g3@7 ~@23 g3@16 a3@6 ~@10 a3@17 ~@15 g3@16 a3@6 ~@12, ~@30 a3@6 ~@10 [f#3,d4]@17 ~ f#3@10 ~@4 b3@17 ~ d3@15 ~@17, ~@32 d3@15 ~@47 a3@6 ~@10 [f#3,d4]@17 ~]/8", // D5 Gsus2 D A Bm Gsus2 D A …
  I: "[d4@2 [a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4]@3 [g3,a3,d4]@3 [g3,a3,d4] [g3,a3,d4]@2, g3@5 ~@11]/2", // D5 Gsus2
  J: "[d4@2 [a3,d4]@3 [g3,a3,d4]@2 [g3,a3,d4]@3 [g3,a3,d4]@3 [g3,a3,d4]@2 d4 d4@2 [f#3,b3,d4]@3 [f#3,b3,d4]@2 [f#3,b3,d4], g3@7 ~@23 [g3,a3]@8 ~@10, ~@16 b2@3 ~@5]/3", // D5 Gsus2 Bm Gsus2
  K: "[a3,b3,e4]@2 [a3,b3,e4]@3 a3@2 [a3,d4], ~@5 [b3,e4]@3", // Asus2 D5 E5
  L: "[d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~", // G5
  M: "d4@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 [f#3,a3,d4], d3@3 ~@5", // D
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.1)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@18 A@3 B C D@2 ~@8 E F@2 G E H@3 I J K@2 E F@2 L ~ M N@2 O P Q R S@2 I T U@2 V@2 E F@2 G E H@3 W@2 X Y Z AA AB@2 AC
  AD AE@2 AF AG AH@2 ~@8 AI@4 AJ@2 AK@2 E AL AM@2 E AN AO@2 W@2 X Y AP AQ AR@2 AS AT@3 AU AV AW@6 ~
>`.pickRestart({
  A: "[~@15 a4@31 ~@2]/3", B: "e4@7 ~ d4@7 ~", C: "e4@7 ~ f#4@7 ~", D: "[a3@15 ~]/2", E: "a5 d6",
  F: "[e6@6 b5@5 c#6@4 d6@16 ~]/2", G: "b5@5 a5@9 ~@2", H: "[e6@6 b5@9 d6@16 d5@6 ~ b4@9 ~]/3", I: "d5",
  J: "b4@4 a4@5 b4@2 ~ c#5@2 a4@2", K: "[d5@31 ~]/2", L: "~@4 a4@3 ~@2 a4@4 ~@3", M: "d4@8 e4@5 d4@2 ~",
  N: "[~@4 d4@27 ~]/2", O: "~@4 d4@3 ~@9", P: "d4@9 ~@7", Q: "b3@13 ~@3", R: "~@4 c#4@2 d4@2 ~ e4@3 ~@4",
  S: "[f#5@15 e5@11 f#5@2 a5@4]/2", T: "a5", U: "[f#4@6 g4@6 d5@13 ~@7]/2", V: "[g4@3 a4@3 e5@8 ~@2]/2",
  W: "[f#5@8 d6@7 e6@7 b5@6 c#6@4]/2", X: "a5@6 a6@9 ~", Y: "~@3 f#6@2 d6@4 b5@6 ~, ~ g6 ~@6", Z: "d6@15 ~",
  AA: "e6@7 b5@9", AB: "[a5@22 ~@2 e6@2 ~ f#6@3 ~@2]/2", AC: "d4@15 ~", AD: "e4", AE: "[d5@29 ~@3]/2", AF: "d4",
  AG: "a4", AH: "[g4@9 ~@7]/2",
  AI: "[d5@2 c#5@2 b4@2 ~@3 g4@2 f#4@2 ~ d4@4 c#4@2 b3@2 a3@8 ~@2 d5@2 c#5@2 b4@2 ~@3 g4@2 f#4@2 d4@4 c#4@2 b3@2 a3@9 ~@2, a4@63 ~]/4",
  AJ: "[d5@2 c#5@2 b4@2 ~@3 g4@2 f#4@2 ~ d4@4 c#4@2 b3@2 a3@8 ~@2, a4]/2",
  AK: "[~@6 a4@4 g4@2 f#4@2 d4@7 ~@3 e4@2 f#4 g4 ~ b4 c#5 d5, d5@29 ~@3, ~@24 d4 ~@3 a4@2 ~@2]/2",
  AL: "e6@3 b5@3 c#6@2", AM: "[a5@15 ~]/2", AN: "e6@6 b5@9 ~", AO: "[~@23 d5@4 ~ e5@4, a5@25 ~@7]/2", AP: "c#5@15 ~",
  AQ: "b4@7 ~", AR: "[a4@19 ~ d5@3 ~ e5@2 ~ f#5@2 ~@3]/2", AS: "a4 d5", AT: "[e5@2 a5@3 d5@10 ~]/3",
  AU: "d5@6 c#5@3 d5@6 ~", AV: "e5@3 a4@4 ~", AW: "[b4@30 ~ d6@61 ~@4]/6",
})).s("gm_string_ensemble_1").gain(0.63).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<A@8 B ~@52 C@2 D@2 ~@69>".pickRestart({
  A: "[~@10 d5 ~ a5@8 d5@14 e5@2 d5@2 e5@2 d5@2 d5 ~ a5@8 d5@14 e5@2 d5@2 e5@2 d5@2 d5 ~ a5@8 d5@14 e5@2 d5@2 e5@2 d5@2 d5 ~ a5@8 d5@12]/8",
  B: "~ e5 d5 e5 d5 ~@3", C: "[f#4@3 g4@3 d5@9 ~]/2", D: "[g4@3 a4@3 d5@9 ~]/2",
})).s("gm_lead_2_sawtooth").gain(0.53).pan(0.6)

// chords · pad warm
const pad_warm = note(`<
  ~@25 A B@3 C@2 D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 ~@6 G H A B@3 C@2 D@2 E@2 F@2 E@2 F@2 E@2 F@2 I@2 J@2 E@2 F@2 E@2
  F@2 ~@8 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 I@2 J@2 E@2 F@2 E@2 F@2 ~@5
>`.pickRestart({
  A: "[b4,f#5]", B: "[e5 d5 e5, a4]/3", C: "[[a4,d5]@31 ~]/2", D: "[[a4,e5]@31 ~]/2", E: "[d5 e5, a4]/2", F: "[g4,d5]",
  G: "b4@13 ~@3", H: "~@2 c#5 d5 ~ e5@2 ~", I: "[d5@15 e5@16 ~, b4 ~@31]/2", J: "[[g4,a4,d5]@15 ~]/2",
})).s("gm_pad_warm").gain(0.4).pan(0)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note(`<
  ~@45 A B A@2 ~@32 C D C@3 D C@2 ~@6 E@2 C D C@3 D C@2 ~@16 C D C@3 D C@2 ~@5
>`.pickRestart({
  A: "d6 d5 d6 d5 d6 d5 d6 d5 d6 d5 d6 d5 d6 d5 d6 d5", B: "e6 a5 e6 a5 e6 a5 e6 a5 e6 a5 b5 a5 b5 a5 b5 a5",
  C: "d6 d5 a5 d5 d6 d5 a5 d5 d6 d5 a5 d5 d6 d5 a5 d5", D: "e6 e5 a5 e5 e6 e5 a5 e5 e6 e5 a5 e5 e6 e5 a5 e5",
  E: "d6 d5 g5 d5 d6 d5 g5 d5 d6 d5 g5 d5 d6 d5 g5 d5",
})).s("gm_lead_2_sawtooth").gain(0.36).pan(1)

// drums · kick
const kick = s("bd").struct("<A B@87 C D@6 ~@2 B@27 E B@3 C ~@5>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@6 x ~@2 x ~@5", C: "x ~@4 x ~ x", D: "x ~@3 x!2 ~@2", E: "x ~@6 x!2 ~ x ~ x ~ x ~",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@48 [~@15 x] ~@4 [~@3 x ~ x ~@2] [~@6 x ~@8 x] ~@79>").gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D B C B C B C B C B C B C B C B C E F E F@3 E F B C B
  C B C B G B C B C B C B C B C B C B C B H B C B C B C B I F@3 J F@2 K L B C B C B C B C B C B C B C B C B C B C B C B
  M B C B N B C B O ~@5
>`.pickRestart({
  A: "~@3 x", B: "~@4 x ~@2 x ~ x ~@2 x ~@3", C: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", D: "~@4 x ~@2 x!6 ~@3",
  E: "~@4 x ~@2 x ~@2 x ~ x ~@3", F: "~ x ~ x", G: "~@3 x!2 ~@3 x ~ x ~ x ~@2 x", H: "~@4 x ~@2 x!3 ~@2 x ~@2 x",
  I: "~@2 x!6", J: "~@4 x ~@4 x ~ x ~ x ~ x", K: "~@6 x ~@5 x ~@2 x", L: "~ x ~@2 x ~ x ~ x ~ x!2 ~ x ~@2",
  M: "~@3 x ~@3 x ~ x ~@2 x ~@2 x", N: "~@4 x ~@2 x ~@8", O: "~@4 x!3 ~",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~ A@87 ~@7 B C A@7 D A@19 E A@3 ~@6>".pickRestart({
  A: "x!5 ~ x!2", B: "x!2 ~ x!3 ~ x", C: "x!7 ~", D: "x!2 ~@2 x ~ x!2", E: "x!4 ~@4",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@48 A ~@39 B ~@7 C ~@7 D ~@23 E ~@5>".pickRestart({
  A: "~@5 x ~@2", B: "~@2 x!6", C: "x!8", D: "~ x ~@6", E: "~ x!6 ~",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 A ~@31 B ~@23 C ~@7 D ~@7 A ~@15 A ~@7 E ~@5>".pickRestart({
  A: "~@9 x ~@6", B: "~@9 x ~ x ~@4", C: "~@2 x!6", D: "x!8", E: "~ x!6 ~",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~ A@87 ~@4 B ~@2 C D A@7 E A@19 ~ A@3 ~@6>".pickRestart({
  A: "~@5 x ~@2", B: "~@8 x!8", C: "~@3 x", D: "~@7 x", E: "~@2 x ~@2 x ~@2",
})).gain(0.72)

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

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

More by Ramazzotti