Strudelify

La voce del silenzio

Mina

KeyF majorTempo91 bpm
0:00/0:00
// La voce del silenzio — Mina
// 91 bpm, 4/4, key F major. 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 72 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/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(`<
  ~@16 A B C D E F G H I J@2 K ~ A B C D E L M N O P Q R A B C D E F G S ~@7 A B C D E L M N O P Q R T@2 U V
>`.pickRestart({
  A: "bb3@2 ~@3 f3 [f3,bb3,d4] bb2, bb2@6 bb3@5 ~@5, f3@2 ~@2 d4@7 ~@5, ~ f3 bb2 ~", // Bb
  B: "[a3,c4,f4]@3 ~ a3@2 ~@4 c4@2 [a3,c4,f4]@2 a2@2, a2@4 f4@7 ~@5, ~ c4 a3 ~, ~@3 a2@3 ~@2", // F
  C: "[g2,g3,bb3,d4]@2 [g3,bb3,d4] g2 c3@2 bb3 c3, ~@8 [g3,c4]@7 ~", // Gm C5
  D: "[f2,a3,c4,f4]@4 [a3,c4,f4]@2 ~@2 [a3,c4,eb4]@3 f2 [a3,c4,eb4]@2 f2@2, ~@3 f2@2 ~@3", // F Adim
  E: "[bb2,f3]@2 f3 ~@2 bb3 [f3,bb3,d4] bb2, d4@3 ~ d4@7 ~@5, ~ bb3 f3 ~, ~@6 bb2@7 ~@3", // Bb5 Bb
  F: "[a2,c4]@2 a3 ~@2 c4 [a3,c4,f4] a2, [a3,f4]@3 ~ f4@7 ~@5, ~@3 a2@3 ~@2, ~@2 a3 ~", // Am F Dm
  G: "[g2,g3,bb3,d4]@4 [g3,bb3,d4]@2 g2@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@2 e2 ~, ~@2 e2 ~", // Gm
  H: "[f3,a3,d4]@3 ~@3 a2 ~ [e3,g3,bb3,d4]@3 ~ [e3,g3,bb3,d4]@2 a2 ~, a2 [f3,a3,d4] a2 ~", // Dm Em7b5 Dm
  I: "[f3,a3,d4]@3 ~ [f3,a3,d4]@2 a2@2 [a2,g3,bb3]@4 [e3,g3,bb3,db4]@2 a2 ~, a2@4 ~@4 [e3,db4]@3 ~@5", // Dm Eb Edim Dbm
  J: "[[f3,d4]@2 d3@2 [f3,a3,d4]@2 d3@2 [e3,g3,bb3,d4]@4 [e3,g3,bb3,d4]@2 ~@2 [f3,a3,d4]@3 ~ [f3,a3,d4]@2 d2 ~ [e3,g3,bb3,c4]@3 ~ e3 ~ e3 ~, d2@21 ~@3 c2@7 ~, ~@14 d3@7 ~@7 [g3,bb3,c4]@4, ~@29 c3@2 ~]/2", // Dm Em7b5 Dm C7
  K: "~@2 c4@2 ~@4 a3@2 c4@2 [a3,f4]@2 c4 ~, [a2,a3,f4]@2 f4@3 ~@3, ~ [a3,c4] ~@2, ~@6 a2@9 ~", // Dm Am
  L: "[g3,db4,e4]@3 ~ [g3,db4,e4]@2 ~@2 [g3,e4]@3 ~ [g3,db4,e4]@2 a2 ~, a2@2 ~ a2@3 ~@2, ~@8 db4 ~@7", // Dbdim C Dbdim
  M: "[a3,d4,f4]@3 ~ [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 d3@2 [a3,d4,f4]@2 d3 ~, d3@4 ~@2 d2@7 ~@3", // Dm
  N: "[db3,bb3,db4,f4]@2 [g3,bb3,db4,f4] db3 ~@4, g3@3 ~@13", // Bbm Gm7b5
  O: "[a3,c4,f4]@3 ~ a3@2 ~@2 a3@2 c4 ~ [a3,c4,f4]@2 f2@2, f2@4 f4@7 ~@5, ~@3 f2@3 ~@2", // F
  P: "[f3,g3,bb3,d4]@4 [g3,bb3,d4]@5 f3!2 ~ [f3,g3,bb3,d4]@2 c2@2, c2@13 ~@3, ~@4 f3@3 ~@9", // Gm7 Gm Gm7
  Q: "[a3,c4,f4]@4 ~@2 c4@4 f2@2 [c4,f4]@2 f2 ~, f2 ~, ~@4 [a3,f4]@6 ~@2 a3 ~@3", // F F5 Dm
  R: "[c3,bb3,f4]@8 g3@4 c3@3 ~, ~@4 [bb3,e4]@3 ~", // Fsus4 Bbdim
  S: "[g3,a3,d4]@3 ~ [g3,a3,d4]@2 a2@2 [g3,a3,db4]@2 a2@2 [g3,a3,db4]@2 a2 ~, a2 ~@3", // Gsus2 A7
  T: "[f2,a3,f4]@4 [a3,f4]@2 f2 ~ [d4,f4]@3 ~ [d4,f4]@2 bb2 ~, ~@2 bb2 ~", // F Dm
  U: "[a3,f4]@3 ~ [a3,f4]@2 f2@2 a3@2 ~@2 a3@2 f4@2, f2@4 ~@4 f4@5 ~@3, ~@10 f2@5 ~", V: "[f2,f3,a3]",
})).s("gm_piano").gain(0.42).pan(0.4)

// bass · acoustic bass
const bass = note(`<
  ~@15 A B C D E F G H I J K L M A B C D E N O P Q R S T U B C D E F G H V ~@6 A B C D E N O P Q R S T U W@2 X Y
>`.pickRestart({
  A: "a1 ~ a1 ~ a1 ~ a1 ~ a1@2 a2@2 a1@2 a2 ~", B: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1@2", C: "a1@4 ~@2 a1 ~ a1@4 f2@2 a1@2",
  D: "g1@2 ~ g1 c2@2 ~ c2", E: "f1@6 c2@2 f2@2 f2 f2@2 c2 f1 ~", F: "bb1@5 ~ bb1 ~ bb1@6 bb1@2",
  G: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1@2", H: "g1@5 ~ g1 ~ e1@4 e2@4", I: "a2@5 ~ a2 ~ a2@4 a1@2 a2 ~",
  J: "a2@4 ~@2 a2 ~ a2@4 a1@2 a2 ~", K: "a2@5 ~ d2 ~ d2@6 ~@2", L: "d2@4 ~@2 d2 ~ c2@3 ~@3 c2@2",
  M: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", N: "bb1@4 ~@2 bb1 ~ bb1@5 ~ bb1 ~", O: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~",
  P: "d2@4 ~@2 d2 ~ d2@4 ~@2 d2 ~", Q: "db2@4 ~@2 db2 ~ db2@4 ~@2 db2 ~", R: "f1@4 ~@2 f1 ~ f1@4 ~@2 a1 bb1",
  S: "c2@4 ~@2 c2 ~ c2@5 ~ c2@2", T: "f1@4 ~@2 f1 ~ f1@5 ~ a1 bb1", U: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~",
  V: "a1@6 e2@2 a2@6 e2 ~", W: "f1@4 ~@2 f1 ~ bb1@4 ~@2 bb1 ~", X: "f1@5 ~ f1 ~ f2@2 c2@2 f1@3 ~", Y: "f1",
})).s("gm_acoustic_bass").gain(0.46)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C ~@3 D E F G H I H I J K ~@7 L M N@2 O K ~@12 P Q R S P Q R T F E G H I J K ~@12 U@4
>`.pickRestart({
  A: "~@8 a5 g5 a5 bb5 [f5,g5] g5 e5 g5", B: "f5 [g5,a5] f5 e5 f5 d5 [d5,e5] e5 f5 d5 b4 [ab4,d5] f5 e5 f5 [f5,g5]",
  C: "e5 d5 db5 e5 [a4,db5] e4 a4 db4 e4 a3@7", D: "[f4,a4,d5]!8 [g4,bb4,d5]!8", E: "[f4,a4,d5]!8 [e4,g4,d5]!8",
  F: "[a4,d5]!8 [bb4,d5]!8", G: "[a4,d5]!8 [g4,d5]!4 [bb4,e5] ~ [bb4,e5] ~", H: "[a4,c5,f5]!8 [bb4,d5,f5]!8",
  I: "[a4,c5,f5]!8 [g4,bb4,f5]!8", // F Gm7
  J: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
  K: "[a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~", // A
  L: "~ a4 g4 a4 bb4 g4 f4 g4", M: "a4 f4 e4 f4 g4 e4 d4 e4",
  N: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~", // F Em
  O: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~", // F
  P: "~ [d5,d6] [db5,db6] [d5,d6] [e5,e6] [d5,d6] [db5,db6] [d5,d6]", // D Db D E D Db D
  Q: "~ [c5,c6] [b4,b5] [c5,c6] [d5,d6] [c5,c6] [b4,b5] [c5,c6]", // C B C D C B C
  R: "~ [bb4,bb5] [a4,a5] [bb4,bb5] [c5,c6] [bb4,bb5] [a4,a5] [bb4,bb5]", // Bb A Bb C Bb A Bb
  S: "[c5,c6]@6 [d5,d6]@2 [eb5,eb6]@2 [f5,f6]@5 ~", T: "[a4,a5]@15 ~",
  U: "[a4@7 ~ [g4,bb4]@8 a4@7 ~ [g4,bb4]@8 a4@32, f5]/4", // Gm
})).s("gm_string_ensemble_1").gain(0.28).pan(0.6)

// other · trombone
const trombone = note("<~@28 A ~@4 B C D E F G F H I A J K I A ~ L ~@11 B C D E F G F H M N O@2>".pickRestart({
  A: "a2", B: "bb2@8 bb3@3 ~ bb2@3 ~", C: "~@8 a3@4 a2@3 ~", D: "~@8 d4@3 ~ d3@3 ~", E: "~@8 db4@3 ~ db3@2 ~@2",
  F: "[f2,a3,f4]", G: "[f2,bb3,d4]", H: "[c3,bb3,f4]@8 [c3,bb3,e4]@7 ~", I: "bb2", J: "g2 c3",
  K: "f3@8 ~@2 [c3,f3] ~ [c3,f3]@4", L: "a2@3 ~", M: "~ a3 g3 a3 bb3 g3 f3 g3", N: "a3 f3 e3 f3 g3 e3 d3 e3",
  O: "[f2,f3]/2", // F
})).s("gm_trombone").gain(0.5).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@2 A@3 ~ B C D E F G H I J K L M N O P Q R S@2 T@2 U K L M N O P V W X ~@2 Y Z L M N O P Q R AA D E AB H I J K L M N
  O P V W X ~@2 Y Z AC@2 AD ~
>`.pickRestart({
  A: "[~@15 [a2,e3,g3,db4]@2 ~ db4@20 ~@10, ~@17 [a2,e3,g3]@20 ~@11]/3", // A7
  B: "[f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4] ~ [f3,a3,d4]@2 [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~", // Dm Gm
  C: "[f3,a3,d4] ~ [f3,a3,d4]@2 [f3,a3,d4] ~ [f3,a3,d4] ~ [e3,g3,d4]@2 [e3,g3,d4]@2 [e3,g3,d4] ~ [e3,g3,d4] ~", // Dm Em7
  D: "d3@2 [a3,d4] d3 d3@2 bb3 d3, f4@7 ~@9, a3@3 ~@5 [g3,d4]@7 ~", // D5 G5
  E: "d3 ~@3 d4@2 d3@2 g3@4 bb3@2 g3 ~, [a3,f4]@7 ~ [bb2,d4]@7 ~", // Dm Bb
  F: "[f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~", // F Bb
  G: "[f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,g3,bb3,f4] ~ [f2,g3,bb3,f4] ~ [f2,g3,bb3,f4] ~ [f2,g3,bb3,f4] ~", // F Gm7
  H: "[f2,a3,c4,f4]@2 [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4]@2 [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~ [f2,bb3,d4,f4] ~", // F Bb
  I: "[f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [f2,a3,c4,f4] ~ [g2,g3,bb3,d4,f4]@2 [g2,g3,bb3,d4,f4] ~ [g2,g3,bb3,d4,f4]@2 [g2,g3,bb3,d4,f4] ~", // F Gm7
  J: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~, f2", // F
  K: "[db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~ [g3,db4,e4] ~, a2@15 ~, g3 ~@7", // Dbm Dbdim
  L: "~@2 f3 ~ f3 ~ f3@2 ~@2 f3 ~@3 bb2 ~, bb2@7 ~ bb2@5 ~@3, ~ [bb3,d4] ~ [f3,bb3]", // Bb Bb5
  M: "~@2 a3 ~ a3@2 a3@4 a2@2 [a3,f4]@2 a2@2, a2 ~, ~@4 f4@7 ~@5", // Dm
  N: "~@2 g3@2 bb3@2 g3@2 ~@2 g3 ~@3 c3@2, g2@2 c3 [g3,c4]", // C5
  O: "f2@4 [a3,f4]@2 f2 ~ [f2,a3,eb4]@3 f2 a3 ~ a3@2, ~@3 eb4, ~@13 f2@2 ~", // Dm F7
  P: "~@2 f3 ~ f3@2 ~@2 f3@3 ~@3 bb2@2, bb2@4 d4@7 ~@5, ~@3 bb2@3 [f3,bb3,d4]@2", // Bb
  Q: "~@2 a3 ~ a3@2 ~@2 a3@3 ~@3 a2@2, a2@4 f4@7 ~ [a3,f4]@4, ~@3 a2@3 ~@2", // Dm
  R: "~@2 g3 ~ g3@2 g3@4 g2@2 [g3,bb3]@2 g2 ~, g2 ~, ~@4 bb3@7 ~@5", // Gm
  S: "[a2@4 f3@2 ~@8 a2@2 ~@2 f3@2 ~@2 f3@2 ~@2 g3@2 db4@2 g3 ~, ~@4 d4@5 ~ g3@5 ~@9 a2@8, ~@3 a2@3 d4@3 ~ d4@2 ~@4]/2",
  T: "[~@2 a3@2 ~@2 a3@2 ~@2 g3@2 ~@2 g3@2 ~@2 a3@2 ~@2 a3@2 ~@4 bb3@2 c4 ~, d3@7 ~ d3@7 ~ d3@7 ~@2 c3@7, ~@4 f4@4 ~@4 d4@6 ~@2 f4@4 ~@2 g3@5 ~]/2",
  U: "~@4 a3@2 a3@2 ~@2 a3@2 [a3,f4]@2 a2 ~, [a3,f4]@4 ~@2 f4@5 ~@5, ~@2 a2@5 ~ a2@5 ~@3", // Dm
  V: "~@2 g3 ~@9 g3@2 db4@2, a2@4 g3@7 ~@5, ~@4 e4@4 db4@4 db4 ~@3, ~@3 a2@2 a2@3",
  W: "~@4 a3 ~ a3@2, d3 f4@3, ~@2 a3@4 d3@7 ~@3, ~@5 d4@3",
  X: "~@2 g3@2 bb3@2 g3@2 ~@2 g3@2 bb3@2 g3 ~, db3@3 db4@4 ~, ~@4 db3@3 ~",
  Y: "~@2 a3@2 ~@2 a3@2 ~@4 bb3@2 c4 ~, d3@7 ~@2 c3@7, ~@4 f4@4 ~@2 g3@5 ~",
  Z: "~@2 g3 ~ [g3,bb3]@2 c3@2 e3@4 c3@2 e3 ~, c3@5 ~@3 bb3@7 ~", // Gm
  AA: "~@4 d4@2 a2@2 ~@2 a2@2 g3@2 a2 ~, a2@5 ~@3 db4@7 ~, ~@3 g3@8 ~@5",
  AB: "d3@4 d4@2 d3@2 g3@4 bb3@2 g3 ~, [a3,f4]@7 ~ [bb2,d4]@7 ~", // Dm Bb
  AC: "f2@4 [f3,c4]@2 f2@2 [f3,bb3]@2 f2@2 [f3,bb3]@2 f2 ~", AD: "[f2,f3,c4]@13 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A@2 ~@4 B@4 C ~ D E F@2 D E G H@3 I J ~ D E F@2 D K L M C N C O D E F@2 D E G P ~@3 B@2 C ~ D E F@2 D K L M C N C
  O Q@2 R@2
>`.pickRestart({
  A: "[~@6 [bb3,g4,bb4]@6 [a3,f4,a4]@7 [g3,e4,g4]@13]/2", B: "[a4 bb4 a4 g4, f4@3 ~]/2", C: "[c4,f4]", D: "[bb4,d5]",
  E: "[a4,c5]", F: "[bb4 ~@2 eb4, g4 a4, ~ c5@3]/2", G: "[d4,bb4] [e4,bb4]", H: "[f4,a4] [e4,bb4]",
  I: "[f4,a4] [e4,g4,bb4]", J: "[f4,a4]", K: "[a4,db5]", L: "[a4,d5]", M: "[g4,db5]", N: "[d4,g4]",
  O: "d4@8 e4@5 ~@3, g4@13 ~@3", P: "d4 db4, a4", Q: "[c5,f5,a5] [bb4,d5,g5]", R: "[c5,f5,a5]/2",
})).s("gm_string_ensemble_2").gain(0.3)

// other · violin · Fsus2 Gsus2 Dsus2 Abdim Fsus2 A
const violin = note(`<
  [~@8 a5 g5 a5 bb5 [f5,g5] g5 e5 g5]
  [f5 [g5,a5] f5 e5 f5 d5 [d5,e5] e5 f5 d5 b4 [ab4,d5] f5 e5 f5 [f5,g5]]
  [e5 d5 db5 e5 [a4,db5] e4 a4 db4 e4 a3@7]
  ~@69
>`).s("gm_violin").gain(0.57).pan(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@22 A ~@5 B ~@7 C ~@3 D ~@6 A ~@15 C ~@3 E ~@2 F ~>".pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@5 x ~ x", C: "~@11 x!3 ~@2", D: "~@12 x!3 ~", E: "~@12 x!2 ~ x", F: "~@11 x!2 ~@3",
})).gain(0.52)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@19 A ~@12 A ~@11 A ~@14 A ~@12>".pickRestart({
  A: "~@9 x ~@6",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@16 A B@2 ~ A B ~@7 A B@2 ~@9 A B@2 ~ A B ~@9 A B@2 ~@13>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.37)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@2 B ~@9 A ~@3 B ~@3 C ~@3 A ~@2 B ~@11 A ~@3 B ~@3 A ~@2 B ~>".pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "~@5 x ~@2",
})).gain(0.52)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@15 A ~@6 B ~@24 B ~@7 A ~@14 C ~>".pickRestart({
  A: "~ x ~@6", B: "~ x!5 ~@2", C: "~@3 x ~@4",
})).gain(0.3)

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

// drums · ride
const ride = s("rd").struct("<~@23 A B C@3 ~@5 D C@2 E D C@2 ~@9 E ~@10 D C@2 E D C@2 ~@5>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x!6", D: "~@2 x!6", E: "x",
})).gain(0.44)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@25 A@3 ~@5 A@3 ~ A@3 ~@20 A@3 ~ A@3 ~@5>".pickRestart({
  A: "~ x ~@6",
})).gain(0.22)

stack(
// … 3 more lines

More by Mina