Strudelify

Confessa

Celentano

KeyB minorTempo118 bpm
0:00/0:00
// Confessa — Celentano
// 118 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: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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.

// bass · fretless bass
const bass = note(`<
  ~@37 A@3 ~@4 B C D E F C G B H C I E B C I J B C D E F C G B H C I E B C I J ~@12 K L M N O L P Q R L C N S L C K@2 L
  M N O L P Q R L C N S L C K S L M N O L P T O L C N S U V S@2 W X N O Y Z AA S W X N AB AC AD AE@6
>`.pickRestart({
  A: "[~@14 f#3@29 ~@5]/3", B: "b1@15 ~", C: "g1@15 ~", D: "f#1@7 ~", E: "b1@5 f#2 e2 d2", F: "b1", G: "f#1", H: "b0",
  I: "f#1@15 ~", J: "b0@15 ~", K: "c1@15 ~", L: "g#1@15 ~", M: "g1@7 ~", N: "c2@5 g2 f2 d#2", O: "c2", P: "g1",
  Q: "c2@9 ~ c2@6", R: "c1", S: "c2@15 ~", T: "c2@9 ~ c3@6", U: "g#2@10 d#2 ~ g#2@4", V: "g2", W: "g#2@15 ~",
  X: "g2@15 ~", Y: "g#2 g#1", Z: "g1@12 ~@2 g1 ~", AA: "c2 d2 d#2 g2 c3@4", AB: "c2@3 c2", AC: "g#1@3 g#1",
  AD: "g1@8 ~ g1@7", AE: "[~ c1@84 ~@11]/6",
})).s("gm_fretless_bass").gain(0.72)

// other · electric guitar clean
const electric_guitar_clean = note("<~@68 A B C ~@49 D E F@4 G H@2 E G I@2 J@3 ~@21>".pickRestart({
  A: "b3@7 ~", B: "~@3 d4@5, f#4@3 ~", C: "e4", D: "~@6 g3@9 ~", E: "~@4 d#4@5 ~ d4@6",
  F: "[~@12 d3@6 ~@2 g#3@5 ~ g3@8 ~@8 g3@9 ~ d#4@6 d4@6]/4", G: "~@5 d3@3", H: "[~@4 g#3@6 g3@9 ~@7 g3@5 ~]/2",
  I: "[~@4 g#3@5 ~ g3@9 ~@7 g3@5 ~]/2", J: "[~@4 d#4@4 ~@2 d4@8 ~@14 c5@15 ~, ~@3 g5 ~@2, ~@14 d#5@7 ~@3]/3",
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A B C D@2 E F G ~@2 C H@2 ~ C H@2 I J K@2 L M K@2 N O P@2 N O Q@2 N O P@2 N O R@2 B O P@2 S O Q@2 N O P@2 N O T U
  N O P@2 N O Q@2 N O P@2 N O V W@2 X@2 Y@2 Z@4 ~@2 AA AB AC AD@2 AB AC AE@2 AB AC AD@2 AB AC AF AA AB AC AD@2 AB AC
  AE@2 AB AC AD@2 AB AC AF AA AB AC AD@2 AB AC AE@2 AB AC AD@2 AB AC AF AA AB AC AD@2 AB AC AE@2 AB AC AD@2 AB AC AG@5 ~
>`.pickRestart({
  A: "b2", B: "g2", C: "f#2", D: "[[b1,d3]@31 ~]/2", E: "[g2,e3]", F: "[f#2,c#3]", G: "[b1,b2]", H: "[b1@31 ~]/2",
  I: "~@7 d4@9, [g2,g3,b3]", J: "[f#2,e3,a#3,c#4]", K: "[b1,d3,f#3,b3]/2", L: "[g2,e3,g3,b3]", M: "[f#2,f#3,a#3,c#4]",
  N: "[g2,g3,b3]", O: "[f#2,e3,a#3]", P: "[[b1,d3,b3]@31 ~]/2", Q: "[b1,d3,b3]/2", R: "[b3 [b2,b3], [b1,d3]@31 ~]/2",
  S: "[g2,b3]", T: "[b2,d3,b3]", U: "[b2,f#3,b3]", V: "[b1,d3,b3]", W: "[g4 f#4, d4@31 ~]/2",
  X: "[[d4,a4] b4, f#4@31 ~]/2", Y: "[d4, g4 ~]/2", Z: "[[e4,f#4]@63 ~]/4", AA: "[c3,g3,c4]", AB: "[g#2,g#3,c4]",
  AC: "[g2,f3,b3]", AD: "[[c2,d#3,c4]@31 ~]/2", AE: "[c2,d#3,c4]/2", AF: "[c2,d#3,c4]",
  AG: "[~@2 [c3,g3]@75 ~@3, ~ c2@74 ~@5]/5", // C5
})).s("gm_synth_strings_1").gain(0.31)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note("<~@4 A B C ~@5 D E F G@2 H I G@2 ~@23 J K ~@3 K ~@29 L M N O@4 ~@71>".pickRestart({
  A: "d3@15 ~", B: "e3", C: "c#3", D: "[b2,d3,f#3]", E: "[g2,e3,b3]", F: "[e3,a#3]", G: "[[d3,f#3]@31 ~]/2",
  H: "[g2,g3,b3]", I: "[e3,a#3]@15 ~", J: "f#3", K: "g3", L: "e4", M: "b3@15 ~", N: "[e4,a4]", O: "[b4@63 ~]/4",
})).s("gm_synth_strings_1").gain(0.16)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A B@2 C@5 ~@16 D@2 E F@4 G H@2 I J K L M N ~@16 D@2 E O@4 P H@2 Q R S T U V ~@12 W X@2 W Y Z AA AB AC@2 AD AE AF@4
  W X@2 W Y Z AA AB AC@2 AD AE AG@4 W X@2 W Y Z AA AB AC@2 AD AE AF@4 W X@2 W Y Z AA AB AC@2 AH AE AI@3 AJ@5 ~
>`.pickRestart({
  A: "f#3", B: "[c#4@15 ~ a#3@16, e3]/2",
  C: "[d3 ~ d4@2 ~@3 f#3 c#4 b3, f#3@2 ~@2 [e3,e4]@3 f#4@2 ~, ~@8 b3@40 a#3@16 f#3@15 ~]/5", // E
  D: "[f#3@16 g3@15 ~, d3]/2", E: "[e3,a#3]", F: "[d3 ~ [f#3,d4]@2 d4@2 ~ f#3, f#3@2 ~@2 g3@3 ~, ~ b3@5 [a#3,e4]@2]/4",
  G: "[d4,f#4]@2 [f#3,d4] [d4,f#4], b3", H: "[d4,f#4,b4]/2", I: "[e4,c#5]", J: "[d4,f#4] [f#4,f#5], d5",
  K: "[f#4,d5,f#5]", L: "[g4,e5,g5] [b3,d4,b4]", M: "[c#4,e4,c#5]", N: "[f#4,b4] [d4,f#4], b3@15 ~",
  O: "[~@3 [a#3,e4], b3@3 ~, f#3 g3, ~ d4@2 ~]/4", P: "d4@7 ~ d4@4 [d4,f#4]@4, b3, f#3@3 ~", Q: "[e4,a#4,c#5]",
  R: "[d4,f#4] [f#4,f#5], d5@15 ~", S: "[f#4,b4,f#5]", T: "[g4,g5] [b3,d4], b4", U: "[c#4,e4,a#4]",
  V: "c#5 b4, [d4,f#4]", W: "[d#3,g3]", X: "[c4@15 ~ b3@16, g#3]/2", Y: "[c3,g3]", Z: "[g#3,c4]", AA: "[g#3,b3,d4]",
  AB: "~@2 d#4 [d#4,g4], c4, d#4@7 ~@9, ~ g3@11 ~@4", AC: "[d#4,g4,c5]/2", AD: "[f4,d5]", AE: "g4!2, [d#4,d#5]",
  AF: "[g4@4 ~@2 d#5 ~ [g#4,d#5]@6 d#5 ~ b4@6 d#5 ~ g4@8, g5 ~@3, d#5@11 ~@3 c5@16 d5@14 ~@2 c5@18, ~ c6 ~@6]/4", // G#5
  AG: "[g4@8 ~@4 d#5@2 ~@2 [g#4,d#5]@12 d#5@2 ~@2 b4@12 d#5@2 ~@2 g4@15 ~, g5 ~@3, d#5@11 ~@3 c5@16 d5@14 ~@2 c5@17 ~, ~ c6 ~@6]/4", // G#5
  AH: "[f4,b4,d5]", // Bdim
  AI: "[g4@8 ~@4 d#5@2 ~@2 [g#4,d#5]@12 d#5@2 ~@11 d#5@7, g5 ~ [f4,b4], d#5@11 ~@3 c5@16 d5@10 ~@8, ~ c6 ~@4]/3", // G#5 Fdim
  AJ: "[~@2 g4@73 ~@5, ~ c5@74 ~@5]/5",
})).s("gm_string_ensemble_2").gain(0.48).pan(0.6)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note(`<
  ~@6 A B C ~@29 D ~@37 E@6 F@4 ~@12 G ~@3 H I ~@10 G ~@3 H I ~@10 G ~@3 H I ~@15 J@5 ~
>`.pickRestart({
  A: "c#4", B: "~ d4", C: "f#3", D: "a#4",
  E: "[~@32 a4@15 ~ d5@8 e5@8 g4@16 [f#4,a4]@16, b4@32 ~@16 b4@31 ~@17, ~ d5@5 ~@2 d5@4, ~@2 f#5@5 ~@5]/6", // F#m
  F: "[[f#4,b4]@57 ~@7, e5@61 ~@3]/4", G: "b4", H: "f4@15 ~", I: "d#4", J: "[~ d#4@36 ~@3]/5",
})).s("gm_string_ensemble_2").gain(0.32).pan(0.6)

// other · piano
const piano = note("<~@88 A@4 B@3 C D@4 E@4 A@4 B@3 C D@4 E@4 A@4 B@3 C F@4 E@4 A@4 B@3 G F@4 H@6 ~@3>".pickRestart({
  A: "[c3@12 d#3@2 c3@14 d#3@2 d3@14 f3@2 d#3@17 ~]/4", B: "[c3@6 d#3 c3@7 d#3 d3@5 f3@3 g3]/3", C: "d#3@15 ~",
  D: "[[c3,d#4]@12 [g3,g4]@2 [d#3,d#4]@14 [g3,g4]@2 [f3,f4]@14 [g#3,g#4]@2 [g3,g4]@17 ~]/4", // Cm G D# G F G# G
  E: "[[c4,c5]@12 [d#4,d#5]@2 [c4,c5]@14 [d#4,d#5]@2 [d4,d5]@14 [d#4,d#5]@2 [c4,c5]@17 ~]/4", // C D# C D# D D# C
  F: "[[c3,d#4]@6 [g3,g4] [d#3,d#4]@7 [g3,g4] [f3,f4]@7 [g#3,g#4] [g3,g4]@8 ~]/4", G: "d#3@7 ~",
  H: "[[c4,c5]@12 [d#4,d#5]@2 [c4,c5]@14 [d#4,d#5]@2 [d4,d5]@10 ~ [d#4,d#5]@9 c4@31 ~@15, ~@50 c5@27 ~@19]/6", // C D# C D# D D#
})).s("gm_piano").gain(0.72).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A@2 B C@3 D E@3 F C@3 D E@3 F C@3 D E@3 F C@3 D E@3 F C@3 D G@3 H I@3 D J@3 H K@3 D L@3 F C@3 D E@3 F C@3 D M@2
  ~@11 N@2 O P@3 Q R@3 O S@3 T R@3 O P@3 Q R@3 O S@3 T R@3 O P@3 Q R@3 O U@3 T R@3 O P@3 Q R@3 O U@3 V@6 ~
>`.pickRestart({
  A: "[~@7 b3, b2 g2, ~ d3@3 ~ e3@3, ~ f#3 ~ g3, ~@12 b3@15 ~@5]/2", B: "c#3 ~@2 c#4, f#2, ~@4 g3@11 ~, ~ a#3",
  C: "[~@11 b3, b1@4 ~ d3@3 ~ e3@3, ~ d3@3 b2@4 g2@4, ~@8 f#3@15 ~ f#3@8 ~@8 g3@8, ~@12 b3@15 ~ b3@15 ~@5]/3",
  D: "~@3 c#4, f#2, ~ g3@2 ~, ~ a#3",
  E: "[~@11 b3, b1@16 ~@12 b3@15 ~@5, ~ d3@3 b2@4 g2@4, ~@2 f#3@3 d3@3 ~ e3@3, ~@12 b3@11 ~ f#3@8 ~@8 g3@8]/3",
  F: "~@3 c#4, f#2, ~@4 g3@11 ~, ~ a#3",
  G: "[~@11 b3, b1 ~@2, ~ d3@3 b2@3 b3@2 ~ g3@2, ~@2 f#3@3 d3@3 g2@3 ~, ~@12 b3@11 ~ f#3@8 ~@4 e3@12]/3",
  H: "~@3 c#4, f#2@3 ~, ~@4 g3@11 ~, ~ a#3",
  I: "[~@11 b3, b1@2 f#3@3 d3@3 g2@3 ~, ~ d3@3 b2@3 b3@3 g3@2, ~@3 b3@3 f#3@2 ~ e3@3]/3",
  J: "[~@11 b3, b1@12 b3@11 ~ f#3@8 ~@4 e3@12, ~ d3@3 b2@3 b3@3 g3@2, ~@2 f#3@3 d3@3 g2@3 ~]/3",
  K: "[~@11 b3, b1@3 b3@2 d3@3 g2@3 ~, ~ d3@3 b2@3 b3@3 g3@2, ~@8 f#3@15 ~ f#3@8 ~@4 e3@12]/3",
  L: "[~@11 b3, b1@12 b3@11 ~ f#3@8 ~@4 e3@12, ~ d3@3 b2@4 g2@4, ~@2 f#3@3 d3@3 ~@2 g3@2, ~@28 b3@15 ~@5]/3",
  M: "[~@12 b3@11 ~@9, b1 ~, ~ d3@3 ~@4, ~@2 f#3@3 ~@3]/2",
  N: "[~@7 c4, c3@3 c4@3 g#3@2, ~ d#3@3 g#2@3 ~, ~@2 g3@2 ~ f3@3]/2", O: "~@3 d4, g2@3 ~, ~@4 g#3@11 ~, ~ b3",
  P: "[~@11 c4, c2@3 c4@2 d#3@3 g#2@3 ~, ~ d#3@3 c3@3 c4@3 g#3@2, ~@8 g3@15 ~ g3@8 ~@4 f3@12]/3",
  Q: "~@3 d4, g2, ~ g#3@2 ~, ~ b3",
  R: "[~@11 c4, c2@12 c4@11 ~ g3@8 ~@4 f3@12, ~ d#3@3 c3@3 c4@3 g#3@2, ~@2 g3@3 d#3@3 g#2@3 ~]/3",
  S: "[~@11 c4, c2@12 c4@12 g3@8 ~@4 f3@11 ~, ~ d#3@3 c3@3 c4@3 g#3@2, ~@2 g3@3 d#3@3 g#2@3 ~]/3",
  T: "~@3 d#4, g2, ~ g#3@2 ~, ~ b3",
  U: "[~@11 c4, c2@3 c4@3 g3@2 ~ f3@3, ~ d#3@3 c3@3 c4@3 g#3@2, ~@2 g3@3 d#3@3 g#2@3 ~]/3",
  V: "[~@13 d#4@4 ~@31 g5@4 ~ [g5,c6]@30 ~@13, g2@17 c2@13 c4@12 ~@2 c5@9 ~@43, ~@4 g#3@8 ~@10 d#3@13 d#4@13 ~@48, ~@9 b3@9 ~@8 g3@12 ~ g4@11 ~@2 d#5@30 ~@14]/6", // C5
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(0.4)

// other · distortion guitar
const distortion_guitar = note(`<
  ~ A ~@86 B@4 C@3 D E@4 F@4 B@4 C@3 D E@4 F@4 G H@2 I@2 J@2 K@2 L@2 K@2 M@2 N B@4 C@3 O E@4 P@3 Q@3 ~@3
>`.pickRestart({
  A: "~@3 [f#4,b4]", B: "[c3@11 ~ d#3@2 c3@14 d#3@2 d3@13 ~ f3@2 d#3@17 ~]/4",
  C: "[c3@11 ~ d#3@2 c3@13 ~ d#3@2 d3@9 ~ f3@6 g3@2]/3", D: "d#3@7 ~",
  E: "[d#3@11 ~ g3@2 d#3@14 g3@2 f3@13 ~ g#3@2 g3@17 ~]/4", F: "[c3@11 ~ d#3@2 c3@13 ~ d#3@2 d3@13 ~ d#3@2 c3@17 ~]/4",
  G: "~ g3@7", H: "[d#4@3 d4@8 ~ d3@4]/2", I: "[g#3@3 g3@8 g3@5]/2", J: "[d#4@3 d4@8 d3@4 ~]/2",
  K: "[g#3@3 g3@7 ~ g3@5]/2", L: "[d#4@3 d4@8 d3@4 g3]/2", M: "[d#4@6 d4@17 ~ g5@4 d#5@4]/2", N: "c5", O: "d#3@13 ~@3",
  P: "[c4@11 ~ d#4@2 c4@14 d#4@2 d4@10 ~ d#4@7]/3", Q: "[~ c4@35 ~@12]/3",
})).s("gm_distortion_guitar").gain(0.63).pan(0.3)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<~ A B@2 ~@153>".pickRestart({
  A: "~@3 d4",
  B: "[f#4@2 ~ f#4 ~ [f#4,b4]@2 [a3,f#4]@2 [a3,f#4]@2 ~ f#4 ~ f#4 ~@5 c#4@10 ~@2, ~ b4 ~@4 [a3,d4]@4 ~@6]/2", // B5 D D5
})).s("gm_distortion_guitar").gain(0.31).pan(0.3)

// chords · epiano1
const epiano1 = note("<A B A C D ~@35 E F ~@34 G H I J K L J@3 M ~@71>".pickRestart({
  A: "[b3,d4,f#4]@2 ~@2 [b3,f#4]@2 ~@2 [b3,f#4]@2 ~@2 [b3,d4,f#4] ~@3, ~@4 d4 ~@3 d4 ~@7", // Bm B5 Bm
  B: "[b3,d4] ~@3 [b3,d4] ~@3 [b3,d4]@4 f#4 ~@3, f#4@2 ~@2 f#4@2 ~@2 g4@3 ~@5", // Bm
  C: "[b3,d4] ~@3 [b3,d4]@5 ~@3 f#4@2 ~@2, f#4@2 ~@2 g4@3 ~@5 d4 ~@3", D: "[d4,f#4] ~ f#4 ~@5",
  E: "f#5 ~ f#5 ~ f#5 ~ f#5 ~", F: "f#5 ~@7",
  G: "[d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,b4]@2 ~@2 [d4,b4]@2 ~@2, ~@8 g4 ~@3 g4 ~@3", // G
  H: "[d4,b4]@2 ~@2 [d4,f#4] ~@3 [d4,b4]@2 ~@2 [d4,f#4,b4]@2 ~@2, f#4 ~@3 b4@2 ~@2 f#4 ~@7", // G D G Bm
  I: "[d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,f#4,a4] ~, f#4 ~@3 f#4 ~@3 f#4 ~@7", // D5 D
  J: "[f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 [e4,f#4] ~@3, e4 ~ e4 ~ e4 ~ b4 ~", // B5 Esus2
  K: "[d4,g4,b4] ~@3 [d4,g4] ~@3 [d4,g4,b4]@2 ~@2 [d4,b4]@2 ~@2, ~@4 b4@2 ~@6 g4 ~@3", // G G5 G
  L: "[d4,e4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,e4,a4] ~, ~@4 e4 ~@3 e4 ~@7", // Dsus2 D5 Dsus2
  M: "[e4,c#5]@2 ~@2 [e4,c#5]@2 ~@2 [f#4,b4] ~@3 b4@2 ~@2, [f#4,b4] ~@3 [f#4,b4] ~@3 e4@2 ~@2 f#4 ~@3", // C#m B5
})).s("gm_epiano1").gain(0.39).pan(0.4)

// chords · epiano1 · soft notes · D C#m F#7 B5 F#7 Esus2
const epiano1_soft = note(`<
  ~@4
  [~@2 d4 ~ [d4,f#4] ~ [d4,f#4] ~]
  ~@80
  [~@8 c#5@2 ~@2 [e4,c#5] ~@3]
  [[e4,c#5]@2 ~@2 [e4,c#5]@2 ~@2 [e4,c#5]@2 ~@2 [e4,f#4,c#5] ~@3, [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 b4@2 ~@2]
  [[e4,f#4,c#5] ~@3 [e4,f#4,c#5] ~@3 [e4,f#4] ~@3 [e4,f#4] ~@3, b4 ~ b4 ~ b4 ~ b4 ~]
  ~@69
>`).s("gm_epiano1").gain(0.16).pan(0.4)

// other · pad sweep
const pad_sweep = note("<~@59 A B@2 C D@3 E F@3 G H@3 I J ~@6 K@6 ~@69>".pickRestart({
  A: "~@5 b4@11, ~ d5@5 ~@2", B: "[b6@31 ~]/2", C: "a#6@15 ~", D: "b6/3", E: "c#7@15 ~", F: "[d7@47 ~]/3", G: "c#7",
  H: "[b6@47 ~]/3", I: "b6", J: "c#7 b6", K: "[e5@16 ~@32 e5@45 ~@3, b4@47 ~ c#5@42 ~@6, ~ f#5@5]/6",
})).s("gm_pad_sweep").gain(0.24).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A ~@6 A ~@8 A ~@7 A B A C A B A@3 B A C A B A@3 B A C A B A@2 B@2 A C A B A@2 ~@12 A B A C A B A@2 B@2 A C A B A
  B A B A C A B A@2 B@2 A C A B A@3 B A C A B A@2 B@2 A C A B A@3 B A C A B A@2 B@2 A C A B A D ~ E ~@3
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "x ~@4 x ~@2", D: "~ x ~@14", E: "~@5 x ~@10",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@12 A ~@33 B ~@4 B@2 ~ B@3 ~ B@2 ~@2 B ~@4 B ~@2 B@2 ~@3 B ~@14 B ~@4 B ~@2 B@2 ~@3 C ~@2 B ~@4 B ~@2 B@2 ~@6 B ~@4 B
  ~@2 B@2 ~@6 B ~@4 B ~@2 B@2 ~@9
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@5 x ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@44 [~ x]!32 ~@12 [~ x]!62 [~@9 x ~@6] ~@6>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@59 A ~@43 B ~@15 C ~@15 D ~@16 E F ~@3>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@6 x!2", D: "~@4 x ~ x!2", E: "~@7 x ~@3 x ~@4", F: "x ~@4 x ~@10",
})).gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 A ~@43 B ~@15 B ~@15 C ~@16 D E ~@3>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@3 x", C: "~ x ~@2", D: "~@7 x ~@8", E: "x",
})).gain(0.48)
// … 37 more lines

More by Celentano