Strudelify

Sorvolando Eilat

Fiorella Mannoia

KeyB minorTempo94 bpm
0:00/0:00
// Sorvolando Eilat — Fiorella Mannoia
// 94 bpm, 4/4, key B minor. 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 94 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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
const bass = note(`<
  ~@8 A B C D E F G H G I J K C L E M N O P Q N O P R S T U V W X Y Z E M AA AB AA AB N AC AD AE AD AF AD AG AH AI N O P
  Q N O P R N AJ P AK N O P AL N AJ N AJ N AJ N AJ S AM AN AO S AM AP V AQ@2 AR@4
>`.pickRestart({
  A: "~@9 g1@8 ~ g1@4 ~@26", B: "~@9 f#1@6 ~@3 f#1@4 ~@26", C: "~@9 g1@7 ~@2 g1@4 ~@26",
  D: "~@9 f#1@7 ~@2 f#1@5 ~@19 f#1@6", E: "e1@8 ~ e1@38 ~", F: "f#1@7 ~@2 f#1@5 ~@10 f#1@23 ~",
  G: "b0@7 ~@2 b0@3 ~@6 b0@5 ~ e1@24", H: "f#1@5 ~@4 f#1@3 ~@6 f#1@6 ~@6 e2@3 f#2 ~@2 f#2@5 ~@7",
  I: "f#1@5 ~@4 f#1@3 ~@6 f#1@6 ~@6 e2@3 f#2 ~@2 f#2@12", J: "g1@7 ~@2 g1@3 ~@6 g1@23 ~@7",
  K: "~@9 f#1@4 ~@5 f#1@5 ~@25", L: "~@9 f#1@8 ~ f#1@4 ~@14 d1@3 f#1@3 g1@3 f#1@3",
  M: "~@9 c#2@3 f#2@3 b2@3 e3@6 a2@22 ~@2, f#1", N: "b0@8 ~ b0@4 ~@5 b0@4 ~@2 f#1@17 ~ f#1 ~@2 f#1@2 ~",
  O: "e1@6 ~@3 e1@2 ~@7 e1@9 a1@2 ~ b1@2 ~ f#2@2 ~ e2@3 e2@3 d2@5 ~",
  P: "b1@7 ~@2 b1@2 ~@7 b1@4 ~@2 f#1@18 ~@3 f#1 ~@2",
  Q: "e1@3 ~@6 e1@2 ~@7 e1@4 ~@2 b1@2 ~ a1@2 ~ d2@2 ~ f#2@2 ~ e2@6 ~@6", R: "e1@3 ~@6 e1@2 ~@7 e1@18 d2@2 ~ e2@9",
  S: "b1@23 ~ a1@23 ~", T: "g1@24 f#1@23 ~", U: "e1@23 ~ f#1@24", V: "g1", W: "~@9 g1@7 ~@2 g1@5 ~@25",
  X: "~@9 f#1@8 ~ f#1@5 ~@25", Y: "~@9 g1@8 ~ g1@5 ~@25", Z: "~@9 f#1@7 ~@2 f#1@6 ~@12 c#2@6 g1@6",
  AA: "b1@8 ~ b1@3 ~@6 b1@4 ~@2 e1@19 ~@5", AB: "f#1@8 ~ f#1@4 ~@5 f#1@9 c#2@2 ~ f#2@2 ~ a2@2 ~ f#2@10 ~@2",
  AC: "e1@6 ~@3 e1@2 ~@16 a2@3 d3@3 g3@3 f#3@3 d3@3 a2@6, ~@6 e1@5 ~@5", AD: "d2@9 a2@15 a1@9 e2@14 ~",
  AE: "e1@3 b1@3 g2@6 d2 e2 a2 e2", AF: "e1@3 b1@3 g2@3 a1 d2 g2 f#2 d2 b1 e2", AG: "e1@3 b1@3 g2@6 d2 e2@3",
  AH: "f#1@3 c#2@3 f#2@6 f#1@4", AI: "g1@9 d2@8 ~ g2@6 a1@24", AJ: "e1@6 ~@3 e1@2 ~@7 e1@18 d2@12",
  AK: "e1@3 ~@6 e1@2 ~@7 e1@6 b1@3 f#2@3 d3@3 b2@14 ~", AL: "e1@3 ~@6 e1@2 ~@7 e1@6 d3@3 e3@3 d1@3 e1@3 f#1@6 a1@5 ~",
  AM: "g1@23 ~ f#1@23 ~", AN: "e1@23 ~ d2@15 a1@3 d2@3 a1@3",
  AO: "c#2@9 d2@3 e2@3 f2@5 ~ f#2@5 ~ c#2@2 ~ f#1@6 c#2@3 f#2@9", AP: "e1 f#1", AQ: "[a1@95 ~]/2", AR: "[b1@25 ~@7]/4",
})).s("gm_electric_bass_finger").gain(0.64)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@2 B C D@2 E@2 ~@24 F G H I ~@36 J K L@3 M@2 N O@2 B P Q R S T U@2 V@3 ~
>`.pickRestart({
  A: "[~@15 d4@7 ~@8 f#3@2 ~ f#3@6 ~@15 f#3 ~@2 f#3@6 ~@21 a4@12, b3@14 ~@10 c#4@15 e4@8 ~ d4@15 f#4@7 ~@2 e4@24, ~@9 f#3@18 ~@15 f#3@11 ~@13 f#3@30]/2",
  B: "g4@22 ~@2 f#4@15 c#4@8 ~", C: "e4@9 ~@7",
  D: "[~@9 d4@15 ~@9 e4@22 ~@2 d4@3 ~@3 d4@9 e4@9 a4@9 e4@6, b3@24 c#4@23 ~@13 f#4@11 ~@25]/2",
  E: "[~@3 d4@3 b3@2 c#4@3 ~@5 b3@15 ~, f#4@8 ~@3 e4@5 ~@16, ~@43 a3@15 ~@38]/2",
  F: "~@11 f#3@5, d4@11 ~ c#4@11 ~, ~@9 f#3@22 ~@17", G: "~@9 e3@15 ~@9 d3@14 ~, b3@24 a3@23 ~",
  H: "~@9 g3@13 ~@2 e4@8 ~@2 d4@14, d4@23 ~ a3@23 ~", I: "[f#3,b3]@41 ~@7",
  J: "c#4@3 d4@4 ~@2 d4@4 ~@2 d4@4 ~@5 c#4@3 d4@3 d4@3 d4@6 d4@4 ~@5",
  K: "c#4@3 d4@4 ~@2 d4@3 ~@3 d4@5 ~@4 [e4,f4]@3 d4@2 ~ [e4,f4]@2 d4@2 ~@2 [e4,f4]@3 d4@2 b3@2 ~@2 b3@3", // Fmaj7
  L: "[b3@3 d4@2 ~ d4@2 ~ d4@4 ~@8 c#3@3 d3@3 b2@3 c#3@2 d3@2 f#3@2 f#3@3 a3@2 ~ a3@3 ~@2 d4@2 ~@2 d4@3 e4@3 d4@2 ~ e4@6 g4@2 ~ g4@18 b3@2 ~ d4@2 ~ e4@8 ~ f4@2 e4@2 d4@2 b3@3 d4@3 ~ f#4@4 ~ d5@2 ~ d5@3 e5@2 ~ d5@2 ~ e5@8 ~@2 g5@2, ~@45 b3@4 ~@95]/3",
  M: "[f#5@2 ~ d5@3 e5@2 ~ b4@3 d5@3 b4@3 c#5@2 ~ d5@2 ~ c#5@2 ~ a4@3 e4@4 ~@2 d4@3 ~@3 d4@3 c#4@5 ~@4 b3@3 ~@3 a3@3 b3@5 ~@16 e4@3 f#4@3 e4@3 d4@3]/2",
  N: "~ b3@6 d4@2 ~ e4@2 d4@5 ~@8 f#4@3 a4@8 f#4@2 e4@2 d4@8, a3 ~@11 e4 ~@11",
  O: "[[a3,b3]@2 ~@13 d4@7 ~@8 f#3@2 ~ f#3@6 ~@15 f#3 ~@2 f#3@6 ~@21 a4@12, ~@2 b3@22 c#4@15 e4@8 ~ d4@15 f#4@7 ~@2 e4@24, ~@9 f#3@18 ~@15 f#3@11 ~@13 f#3@30]/2", // Asus2
  P: "e4@27 ~@3 d4@3 b3@3 a#3@2 ~ c#4@3 d4@4 ~@2",
  Q: "~@7 c#5@2 ~ e5@3 c#5@2 d5@3 b3@5 ~@3 b4@7 ~@5 b4@4 [c#4,a4]@5 ~, ~ b3@8 d4@10 ~@5 a4@3 ~@6 e4@10 ~@5, ~@25 c#4@13 ~@10", // F#m
  R: "[d4,a4]@8 ~ d4@4 f#4@5 d4@6 ~@18 e4@6, ~@3 e4@2 ~, ~@33 a4@13 ~@2", // D5
  S: "~@9 d4@8 b3@7 ~ f#5@6 ~@2 [e4,e5]@9 a3@6, f#4@23 ~ c#4@18 ~@6, ~@12 f5 ~@11", T: "~ a3 ~ b3@42 ~@3",
  U: "[a3 ~ b3@62 ~@30 a4 ~]/2", V: "[b4@109 ~@35]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.72).pan(0.6)

// other · lead 3 calliope
const lead_3_calliope = note("<~@4 A B C D ~@6 E@2 F@3 ~@2 G@3 H@2 ~@41 I J@4 ~@12 A B K L@6 ~>".pickRestart({
  A: "b5@3 a5", B: "f#5@35 a5@13", C: "d5@8 c#5@3 e5@3 d5@2", D: "b4@47 ~", E: "[b5@7 a5]/2", F: "[f#5@8 ~]/3",
  G: "[~@24 [a4,a5]@9 [f#4,f#5]@8 ~ [b4,b5]@17 ~ a4@6 [f#4,f#5]@54 [e4,e5]@12 [d4,d5]@12, ~@41 a#5@2 ~@16 a5@7 ~@54 d#5@2 ~@22]/3", // A F# B F# E D
  H: "[[b3,b4]@73 ~@23]/2", I: "~@15 f#5@2 ~ g5@3 d6@3 ~@3 d5@3 e5@3 b5@3 ~@3 a4@3 b4@3 f#5@3",
  J: "[b4@36 e5@3 d5@3 e5@2 ~ f#5@147]/4", K: "d5@8 c#5@3 e5@3 a4@2", L: "[b4@283 ~@5]/6",
})).s("gm_lead_3_calliope").gain(0.39)

// other · string ensemble 2
const string_ensemble_2 = note("<~@6 A@2 ~@56 B@4 ~@26>".pickRestart({
  A: "[~@45 [b3,c#4,d4]@49 ~@2]/2", B: "[b3@13 f#4@10 e4@12 f#4@49 ~@10 b3@13 f#4@11 a4@12 e4@12 d4@43 ~@7]/4",
})).s("gm_string_ensemble_2").gain(0.63).pan(0.4)

// other · string ensemble 2
const string_ensemble_2_2 = note("<~@18 A@4 B@2 C D@8 ~@3 E@4 ~ F@5 G@2 ~@46>".pickRestart({
  A: "[~@46 [c#4,e4]@49 [d4,f#4]@48 [c#4,e4]@49]/4", B: "[[d4,f#4]@47 [c#4,e4]@48 ~]/2", C: "[b4,b5]",
  D: "[~@22 [a4,a5]@25 [f#4,f#5]@94 ~@2 [b4,b5,b6]@72 [a4,a5,a6]@24 [f#4,f#5]@145, ~@239 f#6@92 ~@53]/8", // A F# B A F#
  E: "[[d4,f#4]@46 [c#4,e4]@29 ~@19 [d4,f#4]@46 [c#4,e4]@34 ~@18, b3@75 ~@19 b3@80 ~@18]/4", // D C#m D C#m
  F: "[~@47 [b4,b5,b6]@72 [a4,a5,a6]@24 [f#4,f#5,f#6]@93 ~@4]/5", G: "[[f#5,f#6]@71 [a5,a6]@25]/2",
})).s("gm_string_ensemble_2").gain(0.32).pan(0.6)

// other · string ensemble 2
const string_ensemble_2_3 = note("<~@46 A B ~@7 C D@4 E@20 F@2 ~@12>".pickRestart({
  A: "b3@12 f#4@11 a4@13 e4@11 ~", B: "d4@47 ~", C: "~@35 [c#5,c#6]@13", D: "[[b4,b5]@72 [a4,a5]@23 [f#4,f#5]@97]/4",
  E: "[[b4,b5]@71 [a4,a5]@24 [f#4,f#5]@97]/4", F: "[[b4,b5]@3 ~]/2",
})).s("gm_string_ensemble_2").gain(0.4).pan(0.9)

// chords · epiano2
const epiano2 = note(`<
  A B C D E B F G H I J I K L M I N O P@3 I K L Q R Q S T U T R V W X Y Z O AA O AB AC AD O AE L AF AG AH AI AH AJ@2
  AK@2 AL AM AN AM AO AM AN AM AO AM AN AM AO AM AN AM AO AM AN AM AO AM AN AM AO A B C D E B F G AP@2 AQ@3 ~
>`.pickRestart({
  A: "[b3,d4,f#4] [a2,b3,c#4,f#4]", B: "[g2,b3,d4,f#4] [f#2,a3,b3,e4]", C: "[e2,b3,d4,g4] [d2,a3,c#4,f#4]",
  D: "[c#2,g3,b3,e4]@27 [f#2,a3,d4]@2 ~@7 [f#2,a3,a#3,d4]@12, ~@27 a#3 ~@20", E: "[b2,b3,d4,f#4] [a2,b3,c#4,f#4]",
  F: "[e2,d4,f#4,g4] [f#2,a3,b3,e4]", G: "[b2,a3,d4,f#4]@47 ~", H: "[g2,b3,d4,f#4]", I: "[f#2,a3,b3,e4]",
  J: "[g2,a3,d4,f#4]", K: "[a3,d4,f#4]", L: "[f#2,a3,b3,e4]@23 ~", M: "[b2,a3,d4,f#4]@12 [e2,b3,d4,f#4,g4]@11 ~",
  N: "[b2,a3,d4,f#4]@23 ~ [e2,b3,d4,f#4,g4]@23 ~", O: "[f#2,a3,b3,e4]@15 ~",
  P: "[~@2 [g2,a3,d4,f#4], [g2,b3,d4,f#4]@48 [f#2,a3,b3,e4,e5]@48 f#5@19 ~@29, ~@36 [a4,a5]@48 [a4,a5]@31 ~@29]/3", // D Gmaj7 F#m7 A
  Q: "[b2,a3,d4,f#4]@23 ~ [f#2,a3,b3,e4]@24", R: "[e2,a3,d4,f#4]@47 ~", S: "[e2,a3,d4,f#4]@23 ~",
  T: "[b2,a3,d4,f#4]@24 [f#2,a3,b3,e4]@23 ~", U: "[e2,a3,d4,f#4]", V: "~@9 f#3@13 ~@11 f#3@13 ~@2, d4@23 ~ c#4@22 ~@2",
  W: "~@3 e3@5 ~@3 d3@5, b3@23 ~ a3@24", X: "~@9 g3@15 e4@7 ~@2 d4@13 ~@2, d4@23 ~ a3@23 ~", Y: "[f#3,b3]",
  Z: "[g2,a3,d4,f#4]@23 ~", AA: "[g2,a3,d4,f#4]@47 ~", AB: "[e2,b3,d4,f#4]@23 ~",
  AC: "[f#2,a3,b3,e4]@7 ~@2 [f#2,a3,b3,e4]@2 ~@7 [f#2,a3,b3,e4]@27 ~@3", AD: "[b2,a3,d4,f#4]@24 [e2,f#3,d4]@23 ~",
  AE: "[b2,a3]@24 [e2,f#3,d4]@23 ~, [d4,f#4]@5 ~@7", AF: "[b2,a3,d4,f#4]@11 ~ [f#2,a3,b3,e4]@12",
  AG: "[e2,f#3,g3,d4]@11 ~", AH: "~@3 a4@5 ~@3 a4@5, [d3,a3,d4,f#4] [a2,a3,c#4,e4]", AI: "[e2,a3,d4,g4]",
  AJ: "[~@19 a4@5 ~@3 a4@5, [e2,g4]@11 [b4,b5]@3 [a4,a5]@2 [d3,a3,d4,f#4]@8 [a2,a3,c#4,e4]@8, [a3,d4]@27 [d5,d6]@46 ~@23, ~@18 [g5,g6]@55 ~@23, ~@21 [f#5,f#6]@52 ~@23]/2", // Em B A D A D5 D G …
  AK: "[a3 [f#2,a3,b3,c#4,e4], [e2,d4,g4]]/2", AL: "[g2,b3,d4,f#4] [a2,a3,c#4,e4]", AM: "[b2,a3,d4,f#4] [f#2,a3,b3,e4]",
  AN: "[e2,f#3,g3,d4]", AO: "[e2,f#3,g3,d4]@23 ~", AP: "[a2,g3,b3,c#4,f#4]/2", AQ: "[[b2,a3,d4,f#4]@113 ~@31]/3",
})).s("gm_epiano2").gain(0.56)

// chords · marimba · E5
const marimba = note("<~@64 [~@6 [b4,e5]@3 ~@9 [b4,e5]@3 ~@9 [b4,e5]@2 ~@10 [b4,e5]@3 ~@3]!16 ~@14>")
  .s("gm_marimba").gain(0.56).pan(0.3)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@4 B@4 C@5 D E@4 C@5 D F G H G F G H G I@3 J@7 E@4 K G L@2 M@2 L@2 N@2 F G H G F G H G F G H G F G H G F G H G F G H
  G A@4 O@3 P@6 ~
>`.pickRestart({
  A: "[[b2,d4]@23 [a2,c#4]@24 ~ [g3,f#4]@23 ~ a3@22 [e2,b3,d4,g4]@26 [d2,a3,c#4]@23 [c#2,g3,b3]@24 [f#2,a3,a#3,d4]@24 ~, b3@71 [f#2,b3,c#4,e4]@23 ~@98, f#3@47 [g2,d4]@25 ~@22 f#4@48 ~ e4@48 ~]/4", // Bm A Gmaj7 Em7 Dmaj7 C#m7b5 D F#sus4 …
  B: "[[b2,d4]@23 [a2,c#4]@24 [g2,d4]@24 [f#2,a3,b3,c#4,e4]@23 [e2,b3,d4,f#4]@24 ~ [f#2,a3,c#4]@23 ~ b2@48 ~, [b3,f#4]@71 ~@47 e4@24 [b3,d4,f#4]@49 ~]/4", // Bm A G5 F#m7 Bm F#m B5 Bm
  C: "[[g2,b3,d4,f#4]@47 ~@96 [f#2,b3]@48 ~ [g3,a3]@48, a3@95 [g2,d4,f#4]@48 ~@48 [e2,b3,d4,f#4]@48 ~, ~@47 [f#2,c#4,e4]@49 a3@95 ~@49, ~@24 b3@47 [c#4,e4]@25 ~@24]/5", // Gmaj7 B5 Gsus2 Gmaj7 Bm F#7 C#m
  D: "[f#2,a3,b3,c#4,e4]", // F#m7
  E: "[[b2,a3,d4,f#4]@24 [e2,f#3,g3,b3,d4]@23 [f#2,c#4,e4]@48 [b2,d4,f#4]@25 [e2,f#3,g3,b3,d4]@23 [f#2,a3,c#4,e4]@46 ~@3, ~@47 a3@73 ~@72]/4", // Bm7 Em7 F#7 Bm Em7 F#m7
  F: "[b2,c#4,d4,f#4]@23 ~ [f#2,b3]@24, a3, ~@23 [c#4,e4]@23 ~@2", G: "[e2,f#3,g3,b3,d4]",
  H: "[b2,c#4,d4,f#4]@23 [f#2,b3,c#4,e4]@25, a3@23 ~", // Bm F#sus4
  I: "[[b2,b3,d4]@23 ~ a2@22 ~@49 [g3,b3]@24 ~ a3@22 ~@2, f#4@59 e4@23 d4@37 ~@25, ~@23 c#4@23 g2@25 [f#2,a3]@24 ~@24 [f#2,c#4,e4]@25, ~@47 b3@25 ~@22 e2@25 ~@25]/3", // Bm G F#m F#7
  J: "[[g2,b3]@47 ~ g2@46 ~ [f#2,c#4]@48 [g2,d4,f#4]@48 [f#2,c#4,e4]@48 ~ [e2,f#3,g3,b3]@47 ~ [a3,b3,c#4]@47 ~, [d4,f#4]@94 e4@49 ~@96 d4@47 ~@2 d#4@2 ~@46, ~@48 [a3,b3]@190 ~@49 [f#2,e4]@48 ~]/7", // G F#5 Gmaj7 F#7 Em A D Asus2 …
  K: "[b2,c#4,d4,f#4]@23 ~ [f#2,b3]@24, a3, ~@23 [c#4,e4]@25", // Bm B5 C#m
  L: "[[d3,d4,f#4]@23 [a2,b3,c#4,e4]@23 ~ [e2,a3,b3,g4]@49, a3@46 [d4,f#4]@49 ~]/2", // D A Em D
  M: "[[d3,d4,f#4]@23 ~ b3@22 ~ [e2,a3,b3,g4]@49, a3@46 [d4,f#4]@49 ~, ~@23 [a2,c#4,e4]@24 ~@49]/2", // D Em D A
  N: "[[f#2,a3,c#4,e4]@48 [g2,b3,d4]@23 ~ [a2,a3,c#4,e4]@24, f#4@95 ~]/2", // F#m7 G A
  O: "[[b2,d4]@23 [a2,c#4]@24 [g2,d4]@24 [f#2,a3,b3,c#4,e4]@23 [e2,b3,d4,f#4]@24 ~ [f#2,a3,c#4]@24 ~, [b3,f#4]@71 ~@47 e4@24 ~@2]/3", // Bm A G5 F#m7 Bm F#m B5
  P: "[[g2,b3,d4]@48 [a2,g3,c#4]@101 [b2,d4]@126 ~@13, f#4@139 ~@5, ~@24 b3@113 ~@7]/6", // G A7 Bm
})).s("gm_synth_strings_1").gain(0.32)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@17 A ~@13 A B C B ~@20 D ~@24 E@3 F E@3 ~@7>".pickRestart({
  A: "~@3 x", B: "~@7 x ~@6 x ~", C: "~@20 x!2 ~@20 x ~@5", D: "~@7 x", E: "~@7 x ~@4 x ~ x ~",
  F: "~@7 x ~@2 x ~ x ~ x ~",
})).gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A@13 B A@9 B A@8 ~@4 A@5 B A@5 B A@7 B ~@38>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@8",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@13 A ~@3 B ~@5 A ~@7 C D@3 ~@6 A ~@5 E ~@7 F ~@15 C ~@7 G H@3 I H@3 ~@7
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~@11 x ~@4", C: "~@10 x!2 ~@4", D: "~ x ~ x", E: "~@7 x", F: "~@12 x!2 ~@2",
  G: "~@9 x ~@2 x ~@3", H: "~@4 x ~@2 x ~@4 x ~@3", I: "~@4 x ~@2 x ~ x ~@2 x ~@3",
})).gain(0.56)

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

// drums · high tom
const high_tom = s("ht").struct("<~@17 A ~@37 A ~@15 B ~@7 C ~@14>".pickRestart({
  A: "~@5 x ~@2", B: "~@9 x ~@6", C: "~@3 x ~@4",
})).gain(0.56)

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

// drums · ride
const ride = s("rd").struct("<~@8 A@16 B A@7 ~@3 C A@19 D A@24 ~@7 E F G ~@4>".pickRestart({
  A: "x!8", B: "~ x!7", C: "~@6 x!2 ~ x!2 ~ x!2 ~@7 x ~@8 x ~ x!3 ~ x ~@11", D: "x!5 ~@3",
  E: "~@29 x ~ x!2 ~ x!3 ~ x!2 ~ x!2 ~ x ~ x!2",
  F: "~ x ~ x!2 ~ x ~ x!2 ~@9 x ~ x!2 ~ x ~ x!3 ~ x!2 ~ x!2 ~ x!3 ~ x!2 ~ x!2 ~ x!2",
  G: "~ x ~ x!2 ~ x!2 ~ x ~ x!2 ~@35",
// … 57 more lines

More by Fiorella Mannoia