Strudelify
Ancora in piedi cover art

Sopravvissuti e sopravviventi

Ancora in piedi

LIGABUE

KeyA majorTempo118 bpm
0:00/0:00
// Ancora in piedi — LIGABUE
// 118 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 123 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): ChitHeav.
setcpm(118/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.

// chords · piano
const piano = note("<~@46 A B C D ~@37 A B E F ~@32>".pickRestart({
  A: "[e3,d4,e4,g#4,b4]@3 [e3,d4,e4,g#4,b4] [e3,d4,e4,g#4,b4]@2 ~@4 [e3,d4,e4,g#4,b4]@5 ~", // E7
  B: "[a2,c#4,e4,g4,a4]@3 [a2,c#4,e4,g4,b4] [a2,c#4,e4,g4,b4]@3 ~@3 [a2,c#4,e4,g4,b4]@3 ~ d3@2", // A7
  C: "[d2,d3,d4,e4,a4,b4]@3 [d2,d3,d4,e4,a4,b4] [d2,d3,d4,e4,a4,b4]@2 ~@2 [e3,d4,g4,b4]@3 [a2,e3,a3,c#4,g4,b4]@4 ~, ~@4 [a2,a3] ~@3", // Dsus2 Em7 A7 A
  D: "[e2,d4,e4,g#4,b4]@2 ~ [e2,e3,d4,e4,g#4,b4] [e2,e3,d4,e4,g#4,b4]@2 ~ [b4,d5,e5,g#5] ~ [b4,d5,e5,g#5] [d5,e5]@2 [g4,d5,e5,g#5]@2 g#4 ~, ~@10 [a4,g#5] ~@5", // E7 Dsus2 E7 Amaj7
  E: "[d2,d3,d4,e4,a4,b4]@3 [d2,d3,d4,e4,a4,b4] [d2,d3,d4,e4,a4,b4]@2 ~@2 [e3,d4,e4,g4,a4]@3 [a2,e3,a3,c#4,g4,b4]@4 ~, ~@4 [a2,a3] ~@3", // Dsus2 Em7 A7 A
  F: "[e2,d4,e4,g#4,b4]@2 ~ [e2,e3,d4,e4,g#4,b4] [e2,e3,d4,e4,g#4,b4]@2 ~ [d#5,g#5] ~ [d5,g#5] ~ [b4,d5]@2 [a4,d5]@2 ~, ~@7 e5@2 ~@2 a#4 ~ e5 ~@2", // E7 G#5 Ddim Bm D5
})).s("gm_piano").gain(0.35).pan(0.3)

// bass · synth bass 2 · "Basso"
const bass = note(`<
  ~@13 A B C D E@3 D F G H I J K L M N O P O Q O P O Q R S T U R S T V W X Y Z R S T AA AB AC AD AC AE AF AG AH AI O P O
  Q O P O Q AJ AK AL AM AN AK ~@2 R S T AO R S T V W X Y AP R S T AQ ~ AB AR AD AR AE AS AT AH AI AU@2 ~@6 O P O Q O P O
  AV@2 AW
>`.pickRestart({
  A: "~@7 b1", B: "e2", C: "a1@13 ~ b1@2", D: "d2 a1", E: "[e1@13 ~ d2@15 ~ a1@4 d2@12 a1@2]/3", F: "e1@15 ~",
  G: "e1@2 ~@2 e1@3 ~ a1@3 ~ a1@3 ~", H: "d2@2 ~@2 d2@3 ~ d2@2 ~@2 d2@2 ~@2", I: "e1@3 ~ e1@3 ~ a1@2 ~@2 a1@2 ~@2",
  J: "d2@2 ~@2 d2@3 ~ d2@3 ~ d2@2 ~@2", K: "e1@2 ~@2 e1@2 ~@2 a1@2 ~@2 a1@3 ~", L: "d2@2 ~@2 d2@2 ~@2 d2@3 ~ d2@3 ~",
  M: "e1@3 ~ e1@2 ~@2 a1@3 ~ a1@2 ~@2", N: "d2@2 ~@2 d2@3 ~ a1@2 ~@2 a1@4", O: "e1@2 e1@2 e1@3 ~@3 b0@6",
  P: "d2@2 d2@2 d2@3 ~@2 d2@3 b1 ~ d2 e2", Q: "d2@2 d2@2 d2@3 ~@9", R: "e1@2 e1@2 e1@3 ~@3 e1@6",
  S: "a1@2 a1@2 a1@3 ~@3 a1@5 ~", T: "d2@2 d2@2 d2@3 ~@3 a1@5 ~", U: "e1@2 e1@2 e1@3 e2@9",
  V: "e1@2 e1@2 e1@3 ~@3 a1@5 ~", W: "e1@3 e1 e1@3 ~@3 e1@6", X: "a1@3 a1 a1@3 ~@3 a1@5 ~",
  Y: "d2@3 d2 d2@3 ~@3 a1@5 ~", Z: "e1@2 e1@7 ~ d2@6", AA: "e1!4 ~@4", AB: "~@3 d2", AC: "e1 ~ e1@4 ~@4 a1@5 ~",
  AD: "d2@2 d2@2 d2@2 ~ d2 ~@2 d2 ~ d2@2 e2@2", AE: "d2@2 d2@2 d2@3 d2@2 ~ d2 ~ d2@2 e2@2", AF: "e1@2 e1@3 ~@5 a1@5 ~",
  AG: "d2@2 d2@2 d2@2 ~ d2 ~@2 d2@2 d2@2 d2 ~", AH: "e1@2 e1@3 ~@3 a1@2 a1@4 ~@2",
  AI: "d2@2 d2 ~ d2@2 ~ d2 a1 ~ a1 ~ a1@4", AJ: "b1@5 ~ b1@9 ~", AK: "d2@4 ~@2 d2@9 ~", AL: "a1@4 ~@2 a1@9 ~",
  AM: "e1@2 b1 g#2@5", AN: "b1@4 ~@2 b1@7 ~@3", AO: "e1@2 e1@2 e1@3 e2 ~ e2 e2@2 d2@3 ~",
  AP: "e1@2 e1@3 ~ e2@4 e2@2 d2@4", AQ: "~ b1 a1 e1 ~@4", AR: "e1 ~ e1@3 ~@3 a1@2 a1@5 ~",
  AS: "e1@2 e1@3 ~@3 a1@2 a1@5 ~", AT: "d2@2 d2@2 d2@2 ~ d2 ~@2 d2@2 d2@2 e2 ~", AU: "e1/2", AV: "d2!6 ~@2",
  AW: "e1 ~@3",
})).s("gm_synth_bass_2").gain(0.72)

// chords · distortion guitar · "ChitHeav"
const distortion_guitar = note(`<
  A@3 B@3 ~ C@4 D@2 E F G ~ H@3 I J K L M N O N P Q R S T U V S V W X Y Z AA AB Y AC AD AE AF AG AH AI AJ AK AL AM AN AO
  AP AQ AR AO AP AS R S T U V S V W AT AU AV@2 AW AX AY AZ X Y Z AA AB Y AC AD AE BA BB AH AI AJ AK BC BD@2 BE AO AP AQ
  AR AO AP AS BF@8 BG S T U V S V BH@2 BI
>`.pickRestart({
  A: "[~@10 a2@2 d3@2 ~@2 e2@25 ~ a2@2 d3@2 e3@2, ~@14 e3@25 ~@9]/3", B: "[~ d4 f#4 a4 g#4 g#4@2 e4@17, f#3@7 ~@17]/3",
  C: "[~@10 e2@2 g2@2 e2@26 ~@2 a4@2 d5@2 e5@16 d5 c#5]/4", D: "[d5@2 c#5@4 a4@24 [g4,g#4] [f4,f#4]]/2",
  E: "[d#4,e4] d4 ~@7 [b3,c#4] [e4,a4]@2 g#4@2 e4@2", F: "b3@7 d5", G: "g5@2 e5@2 f#5@2 d5@7 [a4,b4,c5] g4 ~",
  H: "[~@14 [d3,a3]@16 [a2,a3]@4 [d3,a3]@12 b3 a3]/3", I: "e4@6 b3 a3 d4@6 b3 a3", J: "e4@2 d4@5 ~",
  K: "[e3,b3,g#4,b4] [a3,c#4,e4,a4], e4@3 ~@5", L: "[d3,d4,e4,a4], a3@7 ~", M: "[e3,b3,e4,g#4,b4] [a3,c#4,e4,a4]",
  N: "[d3,a3,d4,e4,a4]@15 ~", O: "[e3,b3,e4] [a3,c#4,e4,a4], [g#4,b4]@7 ~@9",
  P: "[e3,b3,e4,g#4,b4]@7 ~ [a3,c#4,e4,a4]@8", Q: "[d3,a3,d4,e4,a4] [a2,a3,c#4,e4,a4]",
  R: "e4@2 b3@2 e4@2 b3 ~ f#4@2 b3 a4@2 ~ g#4@2, ~@7 b3@2 ~@4 b3@2 ~",
  S: "[d3,a3]@4 [d3,a3]@2 b2!2 g#3 d3!2 a2 b2 e3@3", // D5
  T: "b3@2 b3 ~@3 b3 ~@4 a4@2 ~ g#4 a3, e4@3 b3@3 ~ b3@2 ~ b3@2 ~ b3@2 ~, ~@4 e4@4 f#4@5 ~@3",
  U: "[d3,a3]@4 [d3,a3]@2 a2!2 g#3 d3!2 a2 e3@4", // D5
  V: "b3@2 b3@2 ~@2 b3 ~@4 a4@2 ~ g#4 a3, e4@4 e4@3 b3@2 ~ b3@2 ~ b3@2 ~, ~@8 f#4@5 ~@3",
  W: "[d3,a3]@2 a2@2 [d3,a3]@2 a2!2 g#3 d3!2 a2 e3@4", X: "e2@6 e3@4 e2@5 ~", Y: "a2@3 a3@2 a2@3", Z: "d3@4 a2 a2@3",
  AA: "e3@6 e4@2 e4@2 e4@3 d4 [b3,c4] [f3,g3,a3]", AB: "e2@5 ~ e3@4 e2@6, e3 ~@15", AC: "d3@5 ~ d3@2 a2@7 ~",
  AD: "g3 f#3 e3 d3 b2@3 a2 b2 e3@7", AE: "e3@2 ~ e3 [e3,e4]@2 [d4,g4]@4 e4@6, ~ e4 ~@6",
  AF: "a3@2 ~@2 e4@2 [d4,g4]@4 e4@3 [c4,d4] [g3,a3,b3] [c3,d3,e3,f3], ~ e4 ~@6, ~@3 a3@3 ~@10", AG: "a3@3 a3 a3@4 a3@8",
  AH: "d3 e3 a3 b3 d4@2 a4@4 d4@2 d4@4", AI: "e2@2 e2@2 e2@3 ~@3 e2@6", AJ: "a2@2 a2@2 a2@3 ~@3 a2@6",
  AK: "d3@2 d3@2 d3@3 ~@3 a2@5 ~", AL: "e2!4 ~@4", AM: "~@12 [d3,d4]@2 [a2,b2,c3,a3,b3,c4] [e2,f2,g2,e3,f3,g3]",
  AN: "[d2,d3] ~ e3@2 g#3@4 ~@4 c#4@4, e2 ~ a3 ~, ~@10 a2@5 ~", AO: "~ a3 d4 a3@2 a3!2 b3, d3@3 ~",
  AP: "~@4 g#3@4 a3@4 c#4@3 ~, e2@8 a2@7 ~, ~@2 e3@5 ~@9", AQ: "~ a4 f#4 d4@2 [d4,f#4] [a3,a4] b3, d3@9 ~ d3@6",
  AR: "~ e3 g#3@2 ~@2 c#4@2, e2 ~ a3 ~, ~@10 a2@5 ~", AS: "~ a3 d4 a3 c#4 a3@3, d3 a2", AT: "a2@5 ~ a2@9 ~",
  AU: "d3@3 d3@5", AV: "[a2@3 a2@6 f#4 a4 g#4 e4@4]/2", AW: "b2@6 b2@9 ~, f#4 ~", AX: "d3@6 d3@9 ~",
  AY: "a2@2 a2@2 a2 ~ a2@2 a2@2 a2@2 a2@3 ~", AZ: "a2@2 a2@2 a2 ~ a2@2 a2@2 e4@2 e4@4",
  BA: "a3@2 ~@2 e4@2 [d4,g4]@4 e4@3 [c4,d4] [g3,a3,b3] [d3,e3,f3], ~ e4 ~@6, ~@3 a3@3 ~@10", // G5 Csus2 G Dm
  BB: "a3@3 a3 a3@4 a3@8, c3 ~@15", BC: "a3 g3 e3 d3 b2 a2 e2@2 ~@8",
  BD: "[~@10 d4@2 g4@16 [d3,d4]@2 [a2,b2,c3,a3,b3,c4] [f2,g2,f3,g3]]/2", // D Am Fsus2
  BE: "[d2,d3,e3] ~ e3@2 g#3@4 ~@4 c#4@4, e2 ~ a3 ~, ~@10 a2@5 ~", // Dsus2
  BF: "[b3@34 b4@6 b4@3 b4@3 b4@2 b4@8 b4@3 a4 g#4@2 e4@24 g#6@6 e5@22 d6@9 ~ [a5,b5,c6] [d5,e5,f5,g5] [f4,g4,a4,b4,c5] [b3,c4,d4,e4], e2@15 ~@17, e3@3 ~@5]/8", // Am Em7 F Cmaj7
  BG: "e4@2 b3@2 e4@2 b3 ~ f#4@2 b3 a4@2 ~ g#4@2, a3 ~@6 b3@2 ~@4 b3@2 ~",
  BH: "[a3,d4,a4]@2 [a3,d4,a4]@2 [a3,c#4,a4]@2 [a3,d4,a4]@2 [a3,d4,a4]@2 [a3,c#4,a4]@3 ~@3", BI: "[e2,b2,e3,b3,e4] ~@3",
})).s("gm_distortion_guitar").gain(0.3).pan(0.1)

// chords · acoustic guitar steel · "ChitAcco" · E5 D E5
const acoustic_guitar_steel = note("<~@109 [[e3,b3]@7 ~ [e3,b3]@7 ~] [[d3,f#3]] [[e3,b3]@7 ~ [e3,b3]@8] d3 ~@10>")
  .s("gm_acoustic_guitar_steel").gain(0.45).pan(0)

// chords · acoustic guitar steel · "ChitAcco" · A D5 E A Bm7
const acoustic_guitar_steel_2 = note(`<
  ~@109
  [~ g#4@7 [c#4,e4,a4]@7 ~, e4@7 ~@9]
  [~ e4@15, [a3,d4]@15 ~]
  [[e4,g#4]@7 ~ [c#4,e4,a4]@5 ~@3]
  [[a3,b3,d4,f#4]]
  ~@10
>`).s("gm_acoustic_guitar_steel").gain(0.45).pan(0.8)

// other · distortion guitar · "ChitHeav"
const distortion_guitar_2 = note("<~@45 [e2@7 ~@9] ~@28 [e3@15 ~] ~@11 [e2@7 ~@9] ~@36>")
  .s("gm_distortion_guitar").gain(0.25).pan(0.8)

// chords · rock organ · "Organo"
const rock_organ = note(`<
  ~@29 A B C D E D E D F ~@11 G H I J K L M N O P O N O Q R S T U T V T F W@2 X@2 Y Z AA AB D AC AD AE D AC AD AF ~@3 G
  AG I AH K ~ L M N O P O N AI AJ ~@7 A AK AL AM AN AM AN AO AP AQ AR
>`.pickRestart({
  A: "~@14 [g3,a3,b3,c4,d4] [e4,f4,g4,a4,b4]", B: "[g#4,b4,e5]@15 ~, c5 ~@15",
  C: "[e4,d5]@13 ~ [a3,b3,c4,c#4,d4] [e4,f4,f#4,g4], a4 ~", D: "[g#4,b4,e5]",
  E: "[e4,a4,d5]@14 [g3,a3,b3,c4,d4] [e4,f4,g4,a4,b4]", F: "[e4,a4,d5]", G: "~@10 d4 ~ d4@2 d#4 [e4,f4,g4,a4]",
  H: "[b4,c5,d5] ~@3 e5@4 b4@2 e5@2 d5 [f4,g4,a4,b4,c5] [c4,d4,e4] [g3,a3,b3], e5@3 ~@13", // Bm F C G
  I: "[a4,e5]@3 ~ [a4,e5]@4 [e4,b4]@2 e5@2 d5 [g4,a4,b4,c5] [d4,e4,f4] [a3,b3,c4], ~@10 a4 ~@5", // A5 E5 Cmaj7 Dm Am
  J: "[f#4,a4,e5]@4 [f#4,a4,e5]@4 [a4,b4]@2 [f#4,e5]@2 d5 [a4,b4,c5] [d4,e4,f4,g4] c4, g3 ~@9 a4 ~@5", // F#m7 Asus2 F#7 Am Em7
  K: "[b4,d5,e5]@3 [g4,a4,b4,c5] [d4,e4,f4] [a3,b3,c4] g3 ~@9", // E7 Cmaj7 Dm Am
  L: "~@10 [c4,d4,e4] [f4,g4,a4] [b4,c5,d5] [b4,c5] [e4,f4,g4,a4] [g3,a3,b3,c4,d4]", // C F Bm Cmaj7 Fmaj7 G
  M: "[g#4,b4,e5] [a4,c#5,e5], [d3,e3,f3] ~@15", // E A Dm
  N: "[a4,d5,f#5,a5]@4 [b4,e5,f#5,b5]@3 [a4,d5,f#5,a5] ~@2 [a4,d5,f#5,a5]@2 [a4,a5]@2 [b4,b5]@2, ~@12 [d5,f#5] ~ [e5,f#5] ~", // D Bsus4 D A B D Esus2
  O: "[g#4,b4,e5] [a4,c#5,e5]", // E A
  P: "[a4,d5,f#5]@2 [d5,e5,a5]@2 [a4,d5,f#5] ~@2 [a4,d5,f#5] ~@2 [a4,d5,f#5]@2 [d5,e5,a5]@2 [a4,d5,f#5] ~", // D Dsus2 D Dsus2 D
  Q: "[a4,d5,f#5]@4 [b4,d5,f#5]@4 [a4,c#5,e5] ~ [a4,c#5,e5] ~ [d6,d#6] ~@2 b5, ~@12 e6@3 ~", // D Bm A D#maj7
  R: "[g#4,b4,e5]@15 ~, e6@5 ~@3", S: "[e4,d5]@13 ~ [a3,b3,c4,c#4] [d4,e4,f4,f#4,g4], a4 ~", T: "[g#4,b4,e5]@15 ~",
  U: "[e4,d5]@12 ~@2 [g3,a3,b3,c4,d4] [e4,f4,g4,a4,b4], a4 ~", // E7 G Em
  V: "[e4,d5]@13 ~ [g3,a3,b3,c4,d4] [e4,f4,g4,a4,b4], a4 ~", W: "[f#4,d5]",
  X: "[a4@11 ~ b4@4, e5, b4@3 ~, ~@11 g#4@5]/2", Y: "[f#4,b4,d5]", Z: "[f#4,a4,d5]@14 [b3,c4,c#4,d4] [e4,f4,g4,a4,b4]",
  AA: "[a4,b4,d5,e5]@2 [a4,b4,e5] ~ [a4,c#5,e5] ~ [a4,b4,d5,e5] ~ [a4,b4,e5] ~ [a4,c#5,e5]@4 ~@2, c5 ~ d5@2 ~@4 d5@2 ~@6", // Asus4 Asus2 A Asus4 Asus2 A
  AB: "[a4,b4,d5,e5] ~ [a4,b4,d5,e5] ~ [a4,c#5,e5] ~ [a4,b4,d5,e5] ~ [a4,b4,d5,e5] ~ [a4,c#5,e5]@4 ~@2", // Asus4 A Asus4 A
  AC: "[e4,a4,c#5]", AD: "[f#4,a4] [e4,c#5]", AE: "[e4,g#4,b4]", AF: "[e4,g#4,b4]@4 e5@2 ~ e5!2 e5@7",
  AG: "[b4,c5,d5] ~@3 e5@4 b4@2 e5@2 d5 [g4,a4,b4,c5] [c4,d4,e4,f4] [g3,a3,b3], e5@3 ~@13", // Bm Cmaj7 Dm7 G
  AH: "[f#4,a4,e5]@4 [f#4,a4,e5]@4 [a4,b4]@2 [f#4,e5]@3 [a4,b4,c5,d5] [d4,e4,f4,g4] c4, g3 ~@9 a4 ~@5", // F#m7 Asus2 F#7 D7 Em7
  AI: "[g#4,b4,e5]@4 [g#4,b4,e5]@3 ~ [a4,c#5,e5]@4 [a4,c#5,e5]@2 ~@2", // E A
  AJ: "[a4,d5,f#5]@4 [b4,d5,f#5]@4 [a4,c#5,e5] ~ [a4,c#5] ~ a5 ~@3, ~@5 f#5 ~@2", // D Bm A
  AK: "g#4@7 ~ f#4@2 ~ a4@2 ~ g#4@2, [b4,e5], c5 ~@15", AL: "[e4,a4,d5]@12 ~@2 [a3,b3,c4,c#4] [d4,e4,f4,f#4,g4]",
  AM: "~@11 a4@2 ~ g#4@2, [b4,e5], g#4@7 ~, ~@8 f#4@5 ~@3", AN: "[e4,a4,d5]@12 ~@2 [g3,a3,b3,c4] [d4,e4,f4,g4,a4,b4]",
  AO: "g#4@7 ~@4 a4@2 ~ g#4 ~, [b4,e5], ~@8 f#4@5 ~@3", // E5
  AP: "[a4,b4,d5,e5]@2 [a4,b4,e5] ~ [a4,c#5,e5] ~ [a4,b4,d5,e5] ~ [a4,b4,e5] ~ [a4,c#5,e5]@3 ~@3, ~ d5 ~@2 d5 ~@3", // Asus4 Asus2 A Asus4 Asus2 A
  AQ: "[a4,b4,d5,e5] ~ [a4,b4,d5,e5] ~ [a4,c#5,e5] ~ [a4,b4,d5,e5] ~ [a4,b4,d5,e5] ~ [a4,c#5,e5]@3 ~ [d3,e3,f3,g3] [a3,b3,c4,d4,e4,f4,g4]", // Asus4 A Asus4 A Em7 Am7
  AR: "[g#4,b4,e5] ~@3, [a4,c5,d5] ~@15", // E D7
})).s("gm_rock_organ").gain(0.35).pan(1)

// other · overdriven guitar · "ChitDist"
const overdriven_guitar = note("<~@15 A@3 ~@105>".pickRestart({
  A: "[~@14 b4@4 f#4@4 e4@4 a4@4 g#4@4 e4@11 [c4,d4] [a3,b3] [f3,g3]]/3", // Csus2 Asus2 Fsus2
})).s("gm_overdriven_guitar").gain(0.3).pan(0.9)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@105 [x!4]!8 ~@10>").gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@105 [~@6 x ~@2 x!3 ~ x!3] [~@6 x!2 ~ x!3 ~@4]!6 [~@6 x!2 ~ x!2 ~@5] ~@10>")
  .gain(0.16)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@30 A@3 B A@3 C A D@2 E A D@2 F A D@2 E A D E G ~@17 A D@3 A D ~@2 A D@6 F A D@2 E A D E G ~@28
>`.pickRestart({
  A: "~ x!7", B: "~ x!6 ~", C: "~ x ~ x!2 ~@3", D: "x!8", E: "x!7 ~", F: "x!4 ~@4", G: "x",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@37 A ~@24 A ~@7 B ~@33 A ~@18>".pickRestart({
  A: "~@7 x", B: "~@14 x!2",
})).gain(0.48)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@33 A ~@3 B ~@3 A ~@3 C ~@3 A ~@2 A ~@10 D@3 E F D@2 G ~@15 C ~@3 A ~@2 A ~@19 D@3 H F D E ~@3
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@4 x!2 ~@2", D: "~ x!7", E: "~ x!6 ~", F: "~ x ~ x!5", G: "~ x!4 ~@3", H: "~ x!3 ~@4",
})).gain(0.32)

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

// … 15 more lines

More by LIGABUE