Strudelify

Sono uguale a te

Ron

KeyE majorTempo108 bpm
0:00/0:00
// Sono uguale a te — Ron
// 108 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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(`<
  ~@23 A B C D A E F G H I H I J K L M N M N M O P Q R S T U V U V U W X Y Z AA AB AC AD AC AE AF AG AH AI AJ AK AL@2 AM
  AN AM ~ AM ~ AM ~ AO@2 AP AQ AP AR AP ~@2 M N M N M O P Q R S T U V U V U W X Y Z AA AB AC AD AC AE AC AS AC AE AC AT
  AC AE AC AD AC AE AU
>`.pickRestart({
  A: "d1@2 d1 d1@2 d1!2 ~ d1 ~@7", B: "~@2 d1 ~@5 b1@3 ~ g1 ~ g1 a1", C: "d1@2 d1!2 ~ d1!2 ~ d1 ~@7",
  D: "~@6 e2@3 ~ b1 ~ a1 f#1 g1 a1", E: "~@6 d1 e1 g1 ~ f#1 ~@3 g1 g#1", F: "a1@2 a1 a1@2 a1!4 ~@5 e1 g1",
  G: "a1@2 a1 a1@2 a1!2 ~ a1 ~@6 a#1", H: "b1@3 b1@2 b1!2 f#1 g1 ~@7", I: "c#1@2 c#1 c#1@2 c#1!2 ~@3 c#1 ~@3 c#2 ~",
  J: "b1@3 b1@2 b1!2 f#1 g1 ~@3 g1 ~ f#1 e1", K: "d1@3 d1@2 d1!2 ~ d1 ~@5 e2@2",
  L: "~@2 b1 ~ a1 f#1 g1 g#1 ~@3 d#1 ~ d#1 ~@2", M: "e1@3 e1@2 e1!2 ~ e1 ~ a1 b1 e1@2 a1 e1",
  N: "c#1@3 c#1@2 c#1 c#2 ~ a1@3 a1@2 ~ a1 g#1", O: "c#1@3 c#1@2 c#1 c#2 ~ c#1@3 c#1 c#2 ~ c#1 ~",
  P: "d1@3 d1@2 d1 d2 ~ d1 ~ d1!2 d2@2 d1!2", Q: "f1@3 f1@2 f1 f2 ~ f1 ~ f1!2 f2@2 f1!2",
  R: "f#1@3 f#1@2 f#1 f#2 ~ f#1 ~@2 f#1 f#1@2 f#1!2", S: "d#1@2 d#1 d#1@2 d#1!4 ~ d#1 ~@3 d#1 ~",
  T: "e1@3 e1@2 e1!4 ~@3 e1 ~ e1!2", U: "f#1@3 f#1@2 f#1!2 ~ f#1 ~ b1 c#2 f#1@2 b1 f#1",
  V: "d#1@3 d#1@2 d#1 d#2 ~ b1@3 b1@2 ~ b1 a#1", W: "d#1@3 d#1@2 d#1 d#2 ~ d#1@3 d#1 d#2 ~ d#1 ~",
  X: "e1@3 e1@2 e1 e2 ~ e1 ~ e1!2 e2@2 e1!2", Y: "g1@3 g1@2 g1 g2 ~ g1 ~ g1!2 g2@2 g1!2",
  Z: "g#1@3 g#1@2 g#1 g#2 ~ g#1 ~@2 g#1 g#1@2 g#1!2", AA: "f1@2 f1 f1@2 f1!4 ~ f1 ~@3 f1 ~",
  AB: "f#1@3 f#1@2 f#1!4 ~@3 f#1 ~ f#1!2", AC: "g#1@3 g#1@2 g#1!2 ~ g#1 ~ g#1!2 g#1@2 g#1!2",
  AD: "f1@3 f1@2 f1!2 ~ c#1@2 c#1@2 c#2 ~ c#1@2", AE: "f1@3 f1@2 f1!2 ~ f1@3 f1@2 ~ f1!2",
  AF: "g#1@3 g#1@2 g#1 g#1@2 g#2@4 g#2@2 g#1 ~", AG: "f1@3 f1@2 f1!2 ~ f1@2 f1@2 c#2 ~ f1@2",
  AH: "d#1 ~ d#1 ~ d#1 ~ d#1 ~ d#1 ~ d#1 ~ d#1 ~ d#1 ~", AI: "c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~",
  AJ: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", AK: "d1",
  AL: "[d1@2 d1 d1@2 d1!4 ~@3 a1@10 a1 ~ g1 ~ g1 ~ g1 ~ g1!2]/2", AM: "d1@3 d1@2 d1!2 ~ d1 ~@7",
  AN: "~@2 e2@4 b1 ~ g1 ~ g1 ~ g1 ~ g1 a1", AO: "[c#1@31 ~]/2", AP: "b1@3 b1@2 b1!2 ~ g1 ~@7", AQ: "~@2 a1@11 ~ a1!2",
  AR: "~ c#2@7", AS: "f1@3 f1@2 f1!2 ~ f1@2 f1@2 f1 ~ f1@2", AT: "f1@3 f1@2 f1!2 ~ c#1@2 c#1@2 c#1 ~ c#1@2", AU: "g#1",
})).s("gm_fretless_bass").gain(0.61)

// chords · pad warm
const pad_warm = note(`<
  ~@6 A@6 B@2 C D C D C E@4 ~@20 F ~@10 G ~@10 H ~@8 A@6 I@2 J K J L J E@2 ~@5 F ~@10 G ~@22
>`.pickRestart({
  A: "[[f#3,a3] [g3,b3] [f#3,a3] [g3,b3] [f#3,a3] [g3,b3], d3]/6", B: "[[g3,a3,d4] [g3,a3,c#4], e3]/2",
  C: "[f#3,d4] [d3,g3], b3", D: "[e3,a3,c#4]", E: "[[f#3,a3] [g3,b3], [d3,d4]]/2", F: "f#4@3 e4@5", G: "g#4@3 f#4@5",
  H: "a#4@3 g#4@5", I: "[b3 a3, [c#3,g3,e4]]/2", J: "[b2,f#3,d4] [g2,d3,g3], b3", K: "d4 c#4, [a2,e3,a3]",
  L: "b3 a3, [c#3,g3,e4]", // C#dim
})).s("gm_pad_warm").gain(0.3)

// chords · piano
const piano = note(`<
  ~@23 A B A C D B E F G H I H A J K L M N M L O P Q R S T U V W V U X Y Z AA AB AC AD AE AF AG AH AI ~@23 L M N M L O P
  Q R S T U V W V U X Y Z AA AB AC AD AE AF AG AD AE AJ AK ~@9
>`.pickRestart({
  A: "[d3,f#3,a3]@3 [d3,g3,b3]@5", B: "[f#3,b3,d4]@3 [d3,g3,b3]@5",
  C: "[f#3,b3,d4]@6 [g3,b3]@4 ~@3 d5@3, ~@3 d3@5, ~@5 [d4,g4,b4]@3", D: "[d3,f#3,a3,d5]@3 [d3,g3,b3]@5",
  E: "[e3,a3,d4]@3 [e3,a3,c#4]@5", F: "[e3,a3,d4]@3 [e3,a3,d4]@3 [e3,a3,c#4]@10", G: "[b2,d3,f#3]@3 [d3,g3,b3]@5",
  H: "b3@3 a3@3 a3@2, [c#4,e4]", I: "[d3,f#3,a3]@3 [b2,d3,g3]@5", J: "[f#3,a3,d4]@3 [g3,b3,d4]@5",
  K: "[f#3,b3,d4]@3 [g3,b3,d4]@5", L: "[g#3,b3,e4]", M: "[e3,g#3,c#4]@3 a3@3 b3@2, ~@3 [e3,c#4]@5",
  N: "[e3,g#3,b3]@3 [e3,g#3,b3]@3 [e3,g#3,b3]@2", O: "[c#3,e3,g#3]@3 [e3,g#3,c#4]@5",
  P: "a3@2 a3 ~@3 [a3,d4,f#4]@2, d3@5 d3@3, [d4,f#4]@3 [a3,d4,f#4,a4]@3 ~@2", // D
  Q: "g#3@2 g#3 ~@4 f3, f3@5 f3@2 ~, [c#4,f4]@3 [g#3,c#4,f4,g#4]@3 [g#3,c#4,f4]@2", // C#
  R: "f#3@2 ~@5 f#3, [a3,c#4,f#4]@3 [a3,c#4,e4]@3 [a3,c#4,f#4]@2, ~@2 f#3@3 f#3@2 ~", // F#m A F#m
  S: "b3@2 ~@5 d#3, d#3@5 d#3@2 ~, d#4@3 [d#4,f#4,b4]@3 ~@2, ~ b3@2 [b3,d#4,f#4]", // B
  T: "g#3@2 g#3 ~@3 [g#3,b3,e4]@2, e3@5 e3@3, [b3,e4]@3 [g#3,b3,e4,g#4]@3 ~@2", U: "[a#3,c#4,f#4]",
  V: "[f#3,a#3,d#4]@3 b3@3 c#4@2, ~@3 [f#3,d#4]@5", W: "[f#3,a#3,c#4]@3 [f#3,a#3,c#4]@3 [f#3,a#3,c#4]@2",
  X: "[d#3,f#3,a#3]@3 [f#3,a#3,d#4]@5", Y: "b3@2 b3 ~@3 [b3,e4,g#4]@2, e3@5 e3@3, [e4,g#4]@3 [b3,e4,g#4,b4]@3 ~@2",
  Z: "a#3@2 a#3 ~@4 g3, g3@5 g3@2 ~, [d#4,g4]@3 [a#3,d#4,g4,a#4]@3 [a#3,d#4,g4]@2", // D#
  AA: "g#3@2 ~@5 g#3, [b3,d#4,g#4]@3 [b3,d#4,f#4]@3 [b3,d#4,g#4]@2, ~@2 g#3@3 g#3@2 ~", // G#m B G#m
  AB: "c#4@2 ~@5 f3, f3@5 f3@2 ~, f4@3 [f4,g#4,c#5]@3 ~@2, ~ c#4@2 [c#4,f4,g#4]", // C#
  AC: "a#3@2 a#3 ~@3 [a#3,c#4,f#4]@2, f#3@5 f#3@3, [c#4,f#4]@3 [a#3,c#4,f#4,a#4]@3 ~@2", // F# F#5 F#
  AD: "[c4,d#4,g#4]@3 [c4,d#4,g#4]@3 [c4,d#4,g#4]@2", AE: "[g#3,c4,f4]@3 c#4@3 d#4@2, ~@3 [g#3,f4]@5",
  AF: "[g#3,c4,d#4]@3 [g#3,c4,d#4]@3 [g#3,c4,d#4]@2", // G#
  AG: "[g#3,c4,f4]@6 f4@4 [f4,c#5]@2 ~ [f4,c#5]@3, ~@3 g#3@5, ~@3 c#4@3 d#4@2", // Fm C#
  AH: "[d#4,g#4,c5]@3 [c4,d#4,g#4]@3 [c4,d#4,g#4]@2", AI: "[f3,g#3,c4]@3 [g#3,c4,f4]@5", AJ: "[g#3,c4,d#4]",
  AK: "[g#3,c4,f4]@3 [g#3,c#4,f4]@5", // Fm C#
})).s("gm_piano").gain(0.45).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@25 A@2 B@2 C@2 D E D E D F G H@4 I@2 J K L M N O@4 P@2 N Q R K L ~@4 S@2 T U V ~@20 H@4 I@2 J K L M N O@4 P@2 N Q R
  K L ~@4 W@12 X
>`.pickRestart({
  A: "[~@3 d3@13]/2", B: "d3/2", C: "e3/2", D: "f#3@3 g3@5, [b3,d4]", E: "b3@3 a3@5, [c#4,e4]",
  F: "[f#3,a3]@6 [g3,b3]@9 d4, d4@15 ~", G: "~@2 e4@3 f#4@2 g4@2 f#4@2 e4@2 d4@3",
  H: "[~@8 d#5@8 c#5@8 ~@4 a4@4 ~@12 f#5@3 e5@17, e5@11 ~@5, b4@7 ~ b4@8]/4", I: "e4/2", J: "d4", K: "f4", L: "f#4",
  M: "d#4", N: "e4", O: "[~@8 f5@8 d#5@8 ~@4 b4@4 ~@12 g#5@3 f#5@17, f#5@11 ~@5, c#5@7 ~ c#5@8]/4", P: "f#4/2", Q: "g4",
  R: "g#4", S: "[[c4,d#4,g#4]@3 [c#4,f4,g#4]]/2", T: "b4@6 d#5 f#5", U: "e5", V: "d5",
  W: "[d#4@2 ~ [c#4,g#4], [c4,g#4]@3 ~, ~ f4]/2", X: "[g#3,c4,d#4]",
})).s("gm_string_ensemble_2").gain(0.31).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@3 A B ~@3 C D ~@2 E@2 ~@3 F G H I H J K ~ L M ~@2 N O ~@5 P Q R ~@2 S T ~@5 U V ~@2 W X ~@5 Y Z ~ AA AB ~ AC@2 AD@2
  AE ~@3 AF@2 AG AH ~@10 AI AJ ~@2 AK AL AM ~@4 AN AO ~@3 AP AQ ~@5 AR AS ~@16
>`.pickRestart({
  A: "~@11 c3!5", B: "c3!8 ~@8", C: "~@5 c3!11", D: "c3!2 ~@14", E: "[~@3 [d4,g4] [d4,g4]!2 ~@2, ~@3 g3@2 ~@3]/2",
  F: "~@12 a3@2 a3!2", G: "a3@2 a3!2 a3@2 ~@10", H: "~@14 c3!2", I: "c3@3 c3 c3@3 c3 c3@3 c3 ~@4",
  J: "c3@3 c3@2 c3!3 d3@2 d3!6", K: "d3!3 ~", L: "~@8 d4 [d4,f#4]@2 [d4,f#4] [d4,f#4]@2 [d4,f#4]@2",
  M: "[d4,f#4]!2 f#4 ~@5", N: "~@15 b4", O: "a4@3 b4 a4@3 b4 a4@4 ~@4", P: "~@2 b4!2 ~ b4!2 ~ b4!2 ~ b4!2 ~ b4!2",
  Q: "~ b4!2 ~ b4!2 ~ b4!4 b4@2 b4!3", R: "[e4,b4]!3 ~", S: "~@9 [b4,e5]!7", T: "[b4,e5]!3 ~",
  U: "~@3 e3!2 ~ e3!2 ~ e3!2 ~ e3!2 ~ e3", V: "f#3!3 ~", W: "~@5 [a#3,f#4]!7 [a#3,f#4]@4", X: "[a#3,f#4]!3 ~",
  Y: "~@3 f#3!2 ~ f#3!2 ~ f#3!2 ~ f#3!2 ~ f#3", Z: "g#3!2 ~@2", AA: "~@3 [d#4,g#4]", AB: "[d#4,g#4]!3 ~",
  AC: "[~@15 c#5@9 b4@7 ~]/2", AD: "[b4@8 a4@7 a4@9 g4@8]/2", AE: "a3@3 g3@3 f#3@2 e3@3 d3@2 e3@3",
  AF: "[~@2 a4@11 ~@3]/2", AG: "~@6 [g4,c5]!2", AH: "[g4,c5]!2 ~@6", AI: "~@7 a3 c4@2 c4@2 c4@2 c4@2", AJ: "c4!2 ~@6",
  AK: "[e4,b4] [e4,b4]@2 [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4]!2", // E5
  AL: "[e4,b4] [e4,b4]@2 [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4] [e4,b4]@2 [e4,b4]@2", AM: "[e4,b4] ~@7",
  AN: "b2 b2@2 b2 b2@2 b2 b2@2 b2 b2@2 b2!4", AO: "e2@13 ~@3", AP: "~@5 [a#3,f#4]!7 [a#3,f#4,a#4]!4",
  AQ: "[a#3,f#4,a#4]!4", AR: "~@5 [f#3,a#3]!11", AS: "[g#3,c4]!3 ~",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.7)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  ~@4 A ~@4 B ~@3 C ~@4 D ~ E ~@2 F ~@2 G ~@3 H ~@7 I J ~@9 K ~@10 L ~@15 M ~@11 N ~@39
>`.pickRestart({
  A: "~@8 c3!4 ~@4", B: "~@2 c3!4 ~@10", C: "~@2 [d4,g4]!2", D: "~@6 a3!2 a3@2 a3!2 ~@4", E: "~@12 c3@3 c3",
  F: "~@3 d3", G: "~@2 d4 [d4,f#4]!2 ~@3", H: "~@11 b4 a4@4", I: "~@3 [e4,b4]", J: "[e4,b4] ~@3", K: "~@3 f#3",
  L: "~@2 g#3!2", M: "~@2 [g4,c5]!3 ~@3", N: "~@2 c4!3 ~@3",
})).s("gm_overdriven_guitar").gain(0.13).pan(0.7)

// other · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@4 A B@3 C D B@2 E F B@3 E F G ~ H ~ I J K L J@11 M@2 N O P M@6 Q@2 R S T Q@6 U@2 V W U@2 X Y Z AA AB@2 ~@2 J@15 M@2
  N O P M@5 ~ Q@2 R S T Q@6 U@16 ~
>`.pickRestart({
  A: "~@15 c3", B: "c3!16", C: "c3!6 ~@10", D: "~@7 c3!9", E: "c3!12 ~@4", F: "~@11 c3!5", G: "c3!14 ~@2",
  H: "~@2 c3!12 ~@2", I: "~@4 d3!12", J: "d3!16", K: "d3!8 ~@5 d3 ~ d3", L: "~ d3 ~ d3!13", M: "e3!16",
  N: "e3!8 ~@5 e3 ~ e3", O: "~ e3 ~ e3!7 ~@6", P: "~ e3!15", Q: "f#3!16", R: "f#3!8 ~@5 f#3 ~ f#3",
  S: "~ f#3 ~ f#3!9 ~@4", T: "~ f#3!15", U: "g#3!16", V: "g#3!13 ~@3", W: "~@14 g#3!2",
  X: "[b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~ [b2,d#3] ~", // B
  Y: "[a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~ [a2,c#3] ~", // A
  Z: "[g2,b2] ~ [g2,b2] ~ [g2,b2] ~ [g2,b2] ~ [g2,b2] ~ [g2,b2] ~ [g2,b2] ~ [g2,b2] ~", AA: "~@8 a3@3 g3@3 f#3@2",
  AB: "a3@3 g3@3 f#3@2 a3@3 g3@3 f#3@2",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.3)

// chords · pad poly
const pad_poly = note("<~@70 A B C D ~@6 E F G H I H ~@42>".pickRestart({
  A: "[a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]!2 ~ [a3,d4]", // D5
  B: "[b3,d4]!2 ~ [b3,d4]!2 ~ [g3,d4]!2 ~ [g3,d4]!2 ~ [g3,d4]!2 [b3,d4]!2", // Bm G5 Bm
  C: "[a3,d4]!2 ~ [a3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]", // D5 Bm
  D: "[b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!2 ~ [b3,d4]!4", E: "c#3!16", F: "[c#3,a3,e4] [a3,e4]!15",
  G: "[a3,b3,d4,e4] [b3,d4]!5 [g3,d4]!10", H: "[b3,e4]!6 [a3,e4]!10", I: "[b3,d4]!6 [g3,d4]!10",
})).s("gm_pad_poly").gain(0.21).pan(0.2)

// chords · pad poly · soft notes · D5 Bm G5 D5 Bm
const pad_poly_soft = note(`<
  ~@70
  [~@2 [a3,d4] ~@2 [a3,d4] ~@2 [a3,d4] ~@2 [a3,d4] ~@2 [a3,d4] ~]
  [~@2 [b3,d4] ~@2 [b3,d4] ~@2 [g3,d4] ~@2 [g3,d4] ~@4]
  [~@2 [a3,d4] ~@2 [a3,d4] ~@2 [b3,d4] ~@2 [b3,d4] ~@2 [b3,d4] ~]
  [~@2 [b3,d4] ~@2 [b3,d4] ~@2 [b3,d4] ~@2 [b3,d4] ~@4]
  ~@54
>`).s("gm_pad_poly").gain(0.12).pan(0.2)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A B C B D@17 E ~ E ~ E ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E ~ E ~
  E ~ E ~ E ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E@2 ~ E ~ E ~ E ~ E ~ E ~ E ~ E ~@2
>`.pickRestart({
  A: "~@14 x!2", B: "x!2 ~ x!2 ~@11", C: "~@3 x!2 ~@9 x!2", D: "~ x ~@2", E: "~@3 x ~@12",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A@14 B A@3 C A@6 D A@3 C A@6 D A@3 C A@5 ~ A@18 E A@3 C A@6 F A@3 C A@6 F A@3 C A@3 C A@3 C A@3 C ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~@3 x!2 ~@2", C: "~@4 x ~@7 x ~@2 x", D: "~@4 x ~@7 x ~ x!2", E: "~@4 x ~@7 x!2 ~ x",
  F: "~@4 x ~@3 x ~@3 x ~ x!2",
})).gain(0.57)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@30 A ~@3 B ~@10 A ~@10 A ~@10 A ~ B ~@26 A ~@10 A ~@20>".pickRestart({
  A: "~@7 x ~@7 x", B: "~@15 x",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@23 A B A B A B A C D B A E D E A@2 B A E D B A C D B A@2 B A E D B A C D B A@2 B A E D B A C D ~ D B D B D B D B D B
  D B D B D B D B D A B A E D B A C D B A@2 B A E D B A C D B A@2 B A E A B A E A B A E A B A E ~
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", C: "x!4 ~@4",
  D: "~@2 x!3 ~ x ~ x ~ x ~ x ~ x ~", E: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A B@20 ~@47 C@3 D E C E C E C E C E C E C E C E ~@39>".pickRestart({
  A: "~@15 x", B: "x ~@14 x", C: "~@3 x ~@4", D: "~@13 x ~@2", E: "~@6 x ~@3 x ~@2 x ~@2",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A B C@18 ~@46 D E@2 F G H I H I H I H I H I H I H I H ~@39>".pickRestart({
// … 65 more lines

More by Ron