Strudelify

Brivido felino

Mina

KeyF minorTempo96 bpm
0:00/0:00
// Brivido felino — Mina
// 96 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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(`<
  ~@2 A@2 B C D ~@26 E F ~@2 B G H ~ I J ~@12 K ~@3 L ~@3 K ~@5 M N O P Q R S ~@3 T U ~ V W ~
>`.pickRestart({
  A: "[~@12 f5 ~ b4 bb4@2 ~@15]/2", B: "~@13 c6 ~ db6", C: "~ eb6@3 ~ db6 c6 bb5 ~@2 eb5@4 ~@2, ~ db6 ~@14",
  D: "[e4,bb4,db5] ~@7", E: "~@13 g6 ~ bb6", F: "~ g6!2 ~ eb6!2 ~ c6@3 ~@3 [eb6,f6] g6 ~",
  G: "db6 eb6!3 db6 eb6 ~ eb6 db6 eb6 db6 ~ db6 eb6 c6 bb5", H: "~ ab5 ~@14", I: "~@14 db5!2",
  J: "eb5@2 db5 c5@2 db5 ~ c5 ~ bb4 ~ ab4 ~ bb4 ~@2", K: "~@12 ab5 bb5@2 ~", L: "~@10 ab5 ~@2 ab5 ~@2",
  M: "~@6 g5 bb5 ~ g5!2 ~ eb5!2 ~ c5", N: "c5@3 ~@2 c5 ~ eb5 g5 ~ [f5,ab5] ~ [eb5,g5] f5 ~ eb5",
  O: "~ c5 ~@3 c5 eb5 ~ db5 eb5 f5 ab5 bb5 c6 ~ db6", P: "~ eb6 db6 eb6 ~ ab5 e5 [db5,eb5] c5 ~ [ab4,bb4] ~ e4 ~ ab4 ~",
  Q: "[f3,c4,eb4,eb5,bb5] ~ [f3,c4,eb4,eb5,g5,bb5] ~@3 [f3,c4,eb4,ab4,eb5,g5,bb5] ~@3 [f3,ab3,c4,eb4,ab4,eb5,g5,bb5] ~@5, [ab3,ab4,g5] ~@7", // Fsus4 Cm7 Fm7 Abmaj7
  R: "[f3,c4,eb4,eb5,bb5] ~@5 [f3,ab3,eb4,ab4,eb5,g5,bb5]@6 ~@4, [ab4,g5] ~@7", // Fsus4 Eb Abmaj7
  S: "[ab3,c4,db4,f4,db5,f5,ab5]@5 ~ [ab3,c4,db4,f4,c5,f5,ab5]@2 [ab3,f4,c5,ab5] c4 [c4,db4,f4,c5,f5,ab5] ~@5", // Dbmaj7 Fm Dbmaj7
  T: "~@12 g6 bb6@2 ~", U: "g6 ~ f6 ~@13", V: "~@14 eb6 [f6,g6]", W: "~ bb6@4 ~ g6 bb6 eb6 ~@3 f6 ~@3",
})).s("gm_piano").gain(0.43)

// chords · piano · soft notes
const piano_soft = note("<~@38 A ~@31 B C D E F G ~@6 H I ~>".pickRestart({
  A: "~@13 db6 ~@2", B: "~@8 eb5 ~@7", C: "~@7 c5 ~@8", D: "~@4 db6 ~@11", E: "~@2 [ab3,ab4] ~@3 ab3 ~@8 ab4",
  F: "ab3 ~@15", G: "~ c5 ~ c5@2 ~ db5 ~@3 ab3 ~@5", H: "~@14 c6 ~", I: "~@10 g6 ~@3 c6 ~",
})).s("gm_piano").gain(0.21)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E F G H I J G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD G H I J G H I J K L M N O P Q AE S T U V W X
  Y Z S T U V W X Y Z AA AF S T U V W X Y Z AA AB W X W X ~@2
>`.pickRestart({
  A: "f2 f1", B: "f2 ~ f2@3 eb2 ~ f2 f2@4 f1@2 f2 ~", C: "bb2@2 ~@5 bb1!2 ~ bb1@3 ~ bb2@2",
  D: "c2@4 ~@3 c2!2 ~ c2 ~@3 c3 ~", E: "db2@2 ~@5 db2 db2@4 ab2@2 db2@2", F: "c2 ~@7", G: "f1@6 ~@2 f2 ~ f2@4 c2@2",
  H: "f1@6 ~ f1 ~@2 f2@2 f1@2 c2@2", I: "bb1@6 ~ bb2 bb2@2 bb1 ~ bb1@2 bb2@2", J: "c2@6 c3 ~ c3@4 c2@2 c3 ~",
  K: "db2@4 ~@3 db2 db2@4 ab1@2 ab2 ~", L: "c2@5 ~ c2 ~ g2@3 ~ c2@4", M: "f2@6 ~ f1 f1@4 f2@3 ~",
  N: "d2@5 ~ d2 ~ d2@5 ~ d2 ~", O: "db2@4 ~@3 db2 db2@3 ~ ab2 ~ ab2 ~", P: "bb1@5 ~@2 bb1 bb1@4 bb2@2 bb1@2",
  Q: "c2@5 ~@2 c2@5 c3@2 ~ g2", R: "c2@6 c2 ~ c2@2 ~@2 c2@2 ~@2", S: "f1@4 ~@3 f1 f1@4 f2 ~ f1 ~",
  T: "f1@4 f2@3 f1!2 ~ f1@2 f2@2 f1@2", U: "bb1@6 ~ bb1!2 ~ bb1@2 f2@2 bb1@2",
  V: "~@4 c3@2 ~ c2 c2@4 c3@2 c2 ~, c2@3 ~@5", W: "f1@5 ~@2 f1!2 ~ f1@2 f2@4", X: "f1@5 ~@2 f1!2 ~ f1@2 f2@2 f1@2",
  Y: "bb1@6 ~ bb1 bb1@2 f2@2 f2@2 bb1@2", Z: "c2@6 ~ c2 c2@4 c3@2 c2 ~", AA: "db2@5 ~@2 db2 db2@6 ~@2",
  AB: "eb2@2 db2@2 bb1@2 c2@9 ~, db2 ~@15", AC: "f2@5 ~@2 f2 f2@5 ~@3", AD: "f1@5 ~@2 f1 [f1,gb1] ~ f1@2 f2 f1@2 ~",
  AE: "c2@5 ~ c2 ~ c2@4 g2@2 c2 ~", AF: "bb1@3 ~ f2 ~ bb1@2 c2@4 g2@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.57)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@23 A B C D E F G H I J ~@18 A B C D E F G H A B C D E F G H I K A B C D E F G H I J E F E F ~@2
>`.pickRestart({
  A: "[f3,ab3,c4,eb4]@3 [ab3,c4,eb4] f2 ~ [ab3,c4,eb4]@2 f3 [ab3,eb4] ~@2 [ab3,c4,eb4]@2 f3 ~, ~@11 f3@3 ~@2", // Fm7 Ab Ab5 Ab
  B: "[ab3,c4,eb4]@3 [ab3,c4,eb4] f3 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,eb4] ~@2 [ab3,c4,eb4]@2 f3@2, f2@5 ~@3 f2@7 ~, ~@11 f3@3 ~@2", // Ab
  C: "[ab3,db4,f4]@4 [ab3,db4,f4]@3 [ab3,f4] ~ [ab3,db4,f4] ~@4 f3@2, bb2@7 ~ bb2@8, ~@3 [ab3,db4,f4]", // Db
  D: "~@4 [c4,e4,g4]@4 ~ [c4,e4,g4] ~ bb3 [c4,e4,g4]@2 bb3 ~, f4@3 ~@13, ~ c3@7 c3@7 ~", // C
  E: "[ab3,c4,eb4,g4]@3 [c4,eb4,g4] ab3@2 [c4,f4]@2 ~ [c4,f4] ~@2 [c4,f4]@4, f3@7 ~ f3@8", // Abmaj7 Cm F5
  F: "[f3,ab3,c4,eb4]@3 [ab3,c4,eb4] ~@2 [ab3,c4,eb4]@2 ~ [ab3,c4,eb4] ~@2 [ab3,eb4]@4, ~ f3", // Fm7 Ab Ab5
  G: "[bb2,ab3,db4,f4]@3 ~@3 [db4,f4]@3 [ab3,db4]@3 bb2 ~ bb2@2, ~@3 ab3@6 ~@3 [ab3,db4,f4]@4, ~@3 f4@3 ~@10, ~ bb2@2 ~", // Bbm7 Db Db5 Db
  H: "[c3,bb3,eb4,g4]@3 [bb3,eb4,g4]@3 [bb3,eb4,g4]@2 c3@2 ~@2 c3@2 bb3 ~, ~@5 [bb3,e4]@2 ~", // Cm7 Eb Bbdim
  I: "[c4,f4,ab4]@4 [ab3,c4,f4,ab4]@3 [c4,f4,ab4] ~ [c4,ab4] ~@4 ab3@2, db3@7 ~ db3@8, ~@3 [c4,f4,ab4]", J: "c3 ~@15",
  K: "[db4,f4,ab4]@4 ~@2 ab3@2 [e4,g4]@2 ~@2 [e4,g4]@2 bb3 ~, bb2@8 c3@7 ~, ~@2 [db4,f4,ab4]@2 ~ bb3@2 ~", // Db Em Db
})).s("gm_electric_guitar_clean").gain(0.11).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@23 A ~ B C D E F G H ~@19 A ~ B C D E F G A ~ B C D E F G H I A ~ B C D E F G H ~ D E D E ~@2
>`.pickRestart({
  A: "~@9 c4 ~@6", B: "~@6 f3 ~@4 f3@3 ~@2", C: "bb2 ~@5 bb3@2 ~@8", D: "~@6 eb4@2 ~ eb4 ~ ab3@3 ab3@2",
  E: "~@2 f3 ~@5", F: "~@3 db4@3 ~@3 f4@3 ~@4", G: "~@4 c3@2 ~@4 g4@4 e4 ~", H: "~@7 ab3 ~ f4 ~ ab3@2 ~@3",
  I: "~ ab3@2 ~@5",
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.3)

// chords · pad halo
const pad_halo = note("<~ A@2 ~@78 B@4>".pickRestart({
  A: "[eb4@25 ~@7]/2", B: "[[c4,eb4,g4]@31 ~, bb4@59 ~@5]/4",
})).s("gm_pad_halo").gain(0.2)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@23 A@3 B C@3 D E ~ F@2 ~@16 A@3 B C@3 D A@3 B C@3 D G@2 A@3 B C@3 D E ~@4 H@3
>`.pickRestart({
  A: "f6/3", B: "eb6 db6", C: "[c6@12 c5@3 c6@7 bb5@2]/3", D: "g5@15 ~", E: "c5@15 ~", F: "[g6@31 ~]/2",
  G: "[~@16 g5@2 ab5@2 g5@2 c5@2 e5@2 g5@2 f5@2 ~ c5, c5@9 ~@7]/2", H: "[bb6@15 ~]/3",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.6)

// chords · electric guitar clean · Abmaj7
const electric_guitar_clean_3 = note(`<
  ~
  [~ [ab3,c4,eb4,g4] [ab3,eb4,g4] c4 [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]@2 [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]@7 ~]
  ~@83
>`).s("gm_electric_guitar_clean").gain(0.12).pan(0.8)

// chords · epiano1
const epiano1 = note(`<
  ~ A@2 B C D E F@2 G@2 H@2 I J K L M@2 N O P@2 Q R S T U@3 V W X ~@2 F@2 G@2 H@2 I J K L M@2 N O P@2 Q R S T U@3 V Q R
  S T U@3 V Y@2 Q R S T U@3 V W X Z@2 AA@3 ~
>`.pickRestart({
  A: "[[f2,ab3,eb4]@14 ~@10 [c4,eb4,g4]@7 ~, eb3@31 ~, ~@14 bb3@17 ~, ~@7 [ab3,eb4]@5 ~@4, ~@15 [f2,g3]@16 ~]/2", // Fm7 Cm Ab5 Fsus2
  B: "[c4,db4]@7 ~ ab3@4 c4@4, [bb2,f4], ~@7 [db4,ab4]@9", C: "~@4 c4@2 c4 ~, [c3,db4,e4]@15 ~, ab4@13 ~@3",
  D: "~ [eb4,f4]@7 ab3@3 ~ ab3@4, c4@10 ~ c4@5, ~ [db3,ab4]@15, ~ eb4", E: "[c3,bb3,db4,ab4] ~@7",
  F: "[[ab3,c4,eb4]@16 g4@9 ~@4 ab4@3, [f2,c3,bb3], g3 ~@15 [g3,c4,eb4]@16, ~@25 ab3@3 ~@4, ~@13 g4@3]/2", // Ab Fsus4 Cm
  G: "[[ab3,c4]@10 ~@4 ab3@2 ~@13 ab4@2 ~, [bb2,db4,f4] [c3,db4,e4], ab4@13 ab4@16 ~@3, ~@10 c4@7 ~@9 c4@6]/2", // Ab Bbm C
  H: "[[g3,ab3,c4,eb4]@16 ab3@9 ~@4 eb4@3, [f2,c3,bb3], ~ c4, ~@4 [g3,eb4]@3 g3, ~@25 ab3@7]/2", // Abmaj7 Fsus4 Cm
  I: "c4@2 ~ ab4, [bb2,db4,f4], ab3@7 ~", J: "c4@10 ~@2 e4@3 ~, [c3,g4]@15 ~, e4@3 ~, bb3@6 ~@4 c4@5 ~",
  K: "[eb4,ab4]@6 ~ ab3, [db3,f4], ab3@7 ~, ~@3 [eb4,ab4]", L: "[c3,bb3,d4,f4] [c3,e4], bb4, ~@2 bb3 ~",
  M: "[eb4@6 ~@4 c4@4 ~@8 d2@2 ~@4 f4@3 ~, [f2,g4]@14 c4@8 ~@2 d2@7 ~, c4@10 ~@4 ab4@17 ~, ~@3 [ab3,eb4]@5 d3@7 ~, ~@14 f4@12 c4@5 ~]/2", // Fsus2 Ab5
  N: "c4@4 ~@3 ab3, [db3,eb4,f4,ab4], ab3@7 ~, ~@3 c4", O: "c4@3 ~@4 ab3, [bb2,db4,f4], ~ ab4, ~@3 c4",
  P: "[[c4,f4]@3 ~@5 [c3,e4]@4 [c3,bb3,e4] ~ [g3,bb3,c4] ~, c3 ~, ~@3 [f4,g4]@5 ~@8, ~@5 bb3@3 ~@8, ~@3 c4@3 ~@2]/2", // F5 C C7 Fsus2
  Q: "[f2,c3,g3,ab3,bb3,c4,eb4]", R: "[c4,eb4]@2 ~ f3, [f2,ab3], ~ [c4,g4]",
  S: "[c4,ab4]@6 ~ ab3, [bb2,db4], ab3@5 ~ c4@2", T: "~@12 g4@3 ~, [c3,c4,f4]@15 ~, g4@3 ~, ~@8 [bb3,e4]@7 ~",
  U: "[~@6 [ab3,c4,eb4]@3 [ab3,c4,eb4]@2 ~ [c4,eb4]@4 ~@30 ab3@2, g4@4 [eb4,f4,g4]@4 [db4,f4]@3 ~, f3@11 f3@5 c4@10 g3@6 ~@9 ab3@5 ~@2, g3@4 ~@2 ab3@8 c4@5 [c4,ab4]@3 [c4,db4,f4]@2, [ab3,c4,eb4] f2@7 bb2@4]/3", // Ab Cm Eb Db Fm Dbmaj7 Ab
  V: "eb4@2 ~ bb3 e3@2 [c3,c4] ~, [c3,g4] ~, bb3@3 ~ [bb3,e4,g4]@3 ~, ~ eb4 ~@2", // C C5 Edim
  W: "~@7 ab3, [db3,eb4,f4], ab4!2, ~ c4@3, ~@3 c5", X: "~@3 [c3,e4,ab4,c5,eb5]@4 ~, ~@6 bb4 ~@9",
  Y: "[~@14 ab3@2 c4@4 ~@2 ab3@2 [bb4,eb5]@5 db5@2 bb3, [db3,eb4]@24 [c3,e4,ab4]@7 ~, f4@3 c5@3 ~@2, ab4@2 ab4@2 ab3 c4 ~@2, ~ c4@3 [bb2,db4,f4,ab4]@2 ~@2]/2", // Eb5 Dbsus2 Caug Bbm7
  Z: "[~@6 [ab3,c4,eb4]@3 [ab3,c4,eb4]@2 ~ [c4,eb4]@4 ~@12 c4@4, g4 [eb4,f4,g4], f3@11 f3@5 c4@10 g3@6, g3@8 ~@4 ab3@19 ~, [ab3,c4,eb4] f2@7]/2", // Ab Cm Eb Ab
  AA: "[~@6 [ab3,c4,eb4]@3 [ab3,c4,eb4]@2 ~ [c4,eb4]@4 ~@12 c4@9 ~@11, g4 [eb4,f4,g4] ~, f3@11 f3@5 c4@10 g3@6 ~@16, g3@8 ~@4 ab3@19 ~@17, [ab3,c4,eb4] f2@7 ~@4]/3", // Ab Cm Eb Ab
})).s("gm_epiano1").gain(0.3)

// chords · epiano1 · soft notes
const epiano1_soft = note(`<
  ~ A@2 B C D ~ E@2 F G ~ H I J K L M N O P Q R ~ S T U V W X ~ Y Z ~@2 E@2 F G ~ H I J K L M N O P Q R ~ S T U V W X
  ~@2 S T U V W X ~ Y ~@2 S T U V W X ~ Y Z V W V W ~@2
>`.pickRestart({
  A: "[~@15 c3@8 ~ ab3@4 ab3@3 ~, ~@23 c3@9]/2", B: "~@6 c4@6 ~ ab3@3", C: "~@13 ab4@2 ~", D: "~ f4",
  E: "[~@2 g3@13 ab3@9 ~@4 ab3@4, ~@25 f3@7]/2", F: "~@11 ab3@3 ~@2", G: "~@13 bb3@3", H: "f3", I: "~@7 ab3, ~ c4",
  J: "~@12 bb3@2 g3 ~, ~@3 bb3@3 ~@2, ~@9 g3@5 ~@2", K: "c4@9 c4 c4@6", L: "~@4 g3@3 ~@5 bb3@2 c4 ~",
  M: "~@8 f3@3 ~ f3@4", N: "~@6 c4@4 ~@4 d3 ~", O: "~@4 c4!2 ~@2", P: "~@3 c4 ~ ab3@2 ~, ~@2 c4 ~", Q: "~@3 c4@3 ~ g3",
  R: "~@8 g3 ~@7", S: "~ eb4", T: "~@10 ab3@3 ab4@3", U: "~@12 g3@3 ~", V: "~@8 g3@3 g3@3 g3@2",
  W: "f3@15 ab3, g3@5 ~@3", X: "~@3 ab4", Y: "~@7 ab3@3 ab3@4 ~@2", Z: "~@7 bb4@2 ~@7",
})).s("gm_epiano1").gain(0.18)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@5 A B ~@8 C ~@3 D E F G ~@6 H I J ~@6 K L ~@3 C ~ M N O E P Q R ~@5 H I R ~@5 H I J ~ R ~@5 H I J S ~@6
>`.pickRestart({
  A: "~@3 [c4,eb4,f4,ab4]", B: "[db4,e4,ab4] ~@15", C: "[c4,eb4,f4,ab4]@3 ~",
  D: "[c4,eb4,f4,ab4]@9 ~ [c4,eb4,f4] ~@2 [eb4,f4] ~@2, db2@5 ~@3", E: "~@12 [c4,f4]@3 ~",
  F: "~@11 [c4,f4]@2 ~@3, ~@11 g4 ~@4", G: "~@4 c4@3 ~@9", H: "~@2 c4 db4@2 ab4@3", I: "~@4 db4@2 eb4@4 bb4 ~@5",
  J: "f5@3 ~ eb5@3 c5 ~ f4 ~ ab4@3 ~@2", K: "~@7 [gb5,g5], ~@14 f5 ~", L: "bb5@5 bb5 ~ bb5@3 bb5@5 ~",
  M: "~@2 bb4@2 ~ bb4 ab4 ~ bb4@2 ab4@2 g4 ~ ab4 ~", N: "~@4 g4 ~@2 f4 ~@2 g4 ~ d4@2 f4 ~",
  O: "~@10 [c4,eb4,f4] ~@2 [eb4,f4] ~@2", P: "~@13 c5 e5 g5",
  Q: "bb5@3 ~ bb5@3 ~ g5 bb5 eb5 [c5,eb5] f5 [c5,eb5] bb4 [bb4,c5], ~@4 a5 ~@11", R: "ab4 g4 ~@14",
  S: "[bb2,ab3,f4,ab4] ~@2 [e4,ab4,bb4,eb5]@4 ~, ~@6 db5 ~@9", // Bb7 Emaj7
})).s("gm_lead_2_sawtooth").gain(0.15).pan(0.4)

// chords · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note("<~@5 A ~@13 B C D E ~@8 F ~@13 G H B C ~ I ~@16 F ~@9 F ~@7>".pickRestart({
  A: "~@12 g4 ~@3", B: "~@10 ab4 ~ db2 c4 ~@2", C: "~@8 db4@7 ~, ~@6 c4@5 ~@5, ~@2 ab4 ~",
  D: "~@9 [f4,g4] ~@3 c2 ~@2, ~@4 c4 ~@3", E: "~@4 bb3@3 ~@9, c2@3 ~@5", F: "[eb5,e5] ~@13 g4 ~", G: "~@5 c5 ~@10",
  H: "~@2 f4 ~@3 [g4,ab4] ~@9", I: "~@9 g5 ~@6",
})).s("gm_lead_2_sawtooth").gain(0.06).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<A B C@4 ~ C@25 D ~@2 C@43 D C@4 ~@2>".pickRestart({
  A: "~@15 x", B: "x!2 ~ x", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@54 [~@3 x] ~@30>").gain(0.45)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A@2 ~ B C ~@2 B C ~@4 D ~@2 E F ~ B ~ D ~ B ~ D@2 ~ G ~@2 B C ~@2 B C ~@4 D ~@2 E@2 ~ B ~ D ~ B ~ D ~ B ~ D ~ B ~
  D@3 ~ B ~ D ~ B ~ D@2 ~@2 B ~ B ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "x", C: "~ x ~ x ~@4", D: "~@3 x", E: "~@3 x ~ x ~@2", F: "~@3 x ~@4", G: "~@2 x ~@7 x ~@3 x!2",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@82 [~@15 x] ~@2>").gain(0.3)

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

// … 25 more lines

More by Mina