Strudelify
Self Control cover art

1988 · Self Control

Self Control

Raf

KeyA♭ majorTempo114 bpm
0:00/0:00
// Self Control — Raf
// 114 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 11 "Flute" named as a pipe, played on flute (its synth brass 2 patch is not one)
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · synth bass 2 · "Synbass"
const bass = note(`<
  ~@4 A B A C D E D F A B A B G H I J A B A C G H I J A B A C G H I J A B A C G H I J A B A C G H I J A B A C G H I J K
  L D F D F A B A C G H I J A B A C G H I J A B A C G H I J D F D F D F D F D F D F M F N O
>`.pickRestart({
  A: "f1 f2 f1 f2 f1 f2 f1 f2", B: "c2 c3 c2 c3 c2 c3 c2 c3", C: "c2@2 c3@2 c2@2 c3@2 c2@2 c3@2 c2@2 c3 ~",
  D: "f2 ~ f2 ~ eb2 ~ f2@4 eb2 f2 ab2@4", E: "c2 ~ c2 ~ bb1 ~ c2@3 ~ bb1 c2 eb2@3 ~",
  F: "c2 ~ c2 ~ bb1 ~ c2@4 bb1 c2 eb2@4", G: "eb1 eb2 eb1 eb2 eb1 eb2 eb1 eb2", H: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2",
  I: "db2 db3 db2 db3 db2 db3 db2 db3", J: "ab1@2 ab2@2 ab1@2 ab2@2 ab1@2 ab2@2 ab1@2 ab2 ~",
  K: "~@4 f1@6 eb1 f1 ab1@4", L: "c2 ~ c2 ~ bb1 ~ c2@4 bb1 c2 eb2@3 ~", M: "f2 ~ f2 ~ eb2 ~ f2@3 ~ eb2 f2 ab2@4",
  N: "f2 ~ f2 ~ eb2 ~ f2@4 eb2 f2 ab2@3 ~", O: "c2 ~ c2 ~ bb1 ~ c2@3 ~ c2@2 eb2@2 f2@2",
})).s("gm_synth_bass_2").gain(0.64)

// other · pad halo · "Ice rain"
const pad_halo = note("<~@20 A B C D E C@2 D A B C D E C@2 D ~@8 F@4 ~@4 F@4 ~@18 A B C D E C@2 D ~@24>".pickRestart({
  A: "f5@3 c5@3 ab4@10", B: "eb4@3 g4@3 d5@2 eb5@7 ~", C: "f5@3 c5@3 ab4@8 ~@2", D: "eb4@3 g4@3 d5@2 eb5@6 ~@2",
  E: "~@3 g4@3 d5@2 eb5@5 ~@3", F: "[~@8 f3 c3 eb3 ab3 ~ f3 bb2 c3@13 ~@4]/2",
})).s("gm_pad_halo").gain(0.32).pan(0.6)

// chords · electric guitar clean · "Clean gt"
const electric_guitar_clean = note(`<
  ~@36 A B C D E F G H I J K L M N O P I J K L M N O P Q R S R T U ~@16 I J K L M N O P V W X Y V W X Y Z AA AB AC Z AA
  AB AD
>`.pickRestart({
  A: "[ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5]@2 ~@2", // Fm
  B: "[g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5]@2 ~@2", // Eb
  C: "[ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5] ~@2 [ab4,c5,f5]!3 ~", // Fm
  D: "[g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@3", // Eb
  E: "[g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~@2 [g4,bb4,eb5,f5] ~ [eb5,f5] ~", // Eb Ebsus2
  F: "[ab4,db5,f5] ~@2 [ab4,db5,f5] ~@2 [ab4,db5,f5] ~@2 [ab4,db5,f5] ~@2 [ab4,db5,f5] ~ [ab4,db5,f5] ~", // Db
  G: "[ab4,db5,f5] ~@2 [ab4,db5,f5] ~@2 [ab4,db5,f5] ~@2 [ab4,db5,f5]@2 ~ [ab4,db5,f5]@2 [ab4,db5,f5] ~", // Db
  H: "[ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@2 [ab4,c5,eb5] ~@2", // Ab
  I: "[ab4,c5,f5] ~@3 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@2 [g4,bb4,eb5]", // Fm Eb
  J: "~ [bb4,eb5] [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] [ab4,c5,f5]", // Eb5 Eb Fm
  K: "~@4 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@2 [g4,bb4,eb5]", // Fm Eb
  L: "~ bb4 [bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]!2", // Eb5 Eb
  M: "~@4 [g4,bb4,eb5]@2 ~@2 [g4,bb4,eb5]@2 ~@2 [g4,bb4,eb5]@2 ~ [f4,ab4,db5]", // Eb Db
  N: "~@2 [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5]!2", // Db
  O: "~@4 [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~@2 [f4,ab4,db5]@2 ~ [eb4,ab4,c5]", // Db Ab
  P: "~ [eb4,ab4,c5]!2 ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ ab4 ~", // Ab
  Q: "~@4 f4@6 eb4 f4 ab4@3 ~", R: "c4 ~@2 c4 ~@2 c4@2 ~@2 c4 ~@2 c4 ~@2", S: "f4@2 ~ f4 ~@2 f4 ~@3 f4 ~@2 f4 ~@2",
  T: "f4 ~@2 f4 ~@2 f4 ~@3 f4 ~@2 f4 ~@2", U: "c4@2 ~ c4 ~@2 c4 ~@3 c4 ~@2 c4 ~@2",
  V: "~@2 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4 ~@2 eb4!2", W: "eb4 ~ eb4 ~@2 eb4!2 ~ eb4 ~@2 eb4 ~@2 c4 eb4",
  X: "~@2 eb4 ~@2 eb4 ~ eb4!2 ~@2 eb4 ~@2 eb4!2", Y: "~@2 eb4 ~@2 eb4 ~@2 c4 ~ eb4 ~ f4 ~ ab4 bb4",
  Z: "[ab4,c5,f5] ~@3 [ab4,c5,f5]@2 ~@2 [ab4,c5,f5] ~@3 [ab4,c5,f5]@2 ~ [g4,bb4,eb5,f5]", // Fm Eb
  AA: "~ [bb4,eb5,f5] [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,eb5,f5] ~ [g4,bb4,eb5,f5] ~@2 [ab4,c5,f5]", // Bbsus4 Eb Cm Eb Fm
  AB: "~@4 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@2 [g4,bb4,eb5,f5]", // Fm Eb
  AC: "~ [bb4,eb5,f5] [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ f5 ~", // Bbsus4 Eb
  AD: "~ [bb4,eb5,f5] [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [g4,bb4,eb5,f5] ~ [c4,c5]@2 [eb4,eb5]@2 [f4,f5]@2", // Bbsus4 Eb C Eb F
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.4)

// chords · electric guitar clean · "Clean gt" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@40 A ~@2 B ~ C D E ~@3 F ~ C D E ~@3 F ~@23 C D E ~@3 F ~ G ~@3 G ~@3 H I J ~ H I C
>`.pickRestart({
  A: "~@8 f5 ~@5 [g4,bb4] ~", B: "~@5 eb5 ~@2 eb5 ~@3 eb5 ~@3", C: "~ g4 ~@14", D: "~@6 f5 ~@7 [g4,eb5] ~",
  E: "~ [g4,eb5] ~@14", F: "~@14 [eb4,c5] ~", G: "~@15 ab4", H: "~ g4 ~@8 bb4 ~@3 [g4,eb5,f5] ~",
  I: "~@6 f5 ~@3 f5 ~@3 [g4,f5] ~", J: "~ g4 ~@12 [g4,bb4,eb5] ~",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.4)

// other · pad new age · "Fantasia"
const pad_new_age = note("<~@12 A B C D E F C G A B C D E F C G ~@38 A B C D E F C G ~@32>".pickRestart({
  A: "f5 eb5@2 f5@2 c5@3", B: "ab5@2 g5@4 c5@9 ~", C: "f5@2 eb5@4 f5@4 c5@5 ~", D: "ab5@2 g5@4 c5@7 ~@3",
  E: "f5@2 eb5@4 bb4@3 ~ c5@2 eb5@2 f5@2", F: "ab5@2 g5@4 f5@7 ~@3", G: "ab5 g5@2 c5@4 ~",
})).s("gm_pad_new_age").gain(0.31)

// chords · pad poly · "Pads"
const pad_poly = note(`<
  A@8 ~@36 B C D E C F@3 B C D E C F@3 ~@22 B C D E C F@3 B C D E B C D E B C D E B C D G
>`.pickRestart({
  A: "[[c4,f4,ab4] [bb3,c4,g4] [c4,f4,ab4] [bb3,c4,g4], eb4]/4", B: "[c4,f4,ab4]@15 ~", C: "[bb3,eb4,g4]",
  D: "[c4,f4], ab4@7 ~", E: "[bb3,eb4]", F: "[[db4,f4]@31 ~ eb4@16, ab4@47 ~]/3",
  G: "[bb3,eb4,g4]@7 ~@3 [c4,c5]@2 [eb4,eb5]@2 [f4,f5]@2", // Eb C Eb F
})).s("gm_pad_poly").gain(0.25).pan(0.4)

// chords · pad poly · "Pads" · soft notes
const pad_poly_soft = note("<~@46 A@2 ~@3 B ~@2 A@2 ~@3 B ~@24 A@2 ~@3 B ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@4>".pickRestart({
  A: "[~@15 g4@17]/2", B: "c4",
})).s("gm_pad_poly").gain(0.06).pan(0.4)

// other · distortion guitar · "Dist  gt"
const distortion_guitar = note(`<
  ~@7 A B C D E ~@23 F@4 G@6 ~ H ~@4 I J K J ~@5 L M D C D C ~@15 F@4 N@5 D C D C B C D C B C D C B C D O
>`.pickRestart({
  A: "f2@2 f2!2", B: "[f2,f3] ~ [f2,f3] ~ [eb2,eb3] ~ [f2,f3]@3 ~ [eb2,eb3] [f2,f3] [ab2,ab3]@4",
  C: "[c2,c3] ~ [c2,c3] ~ [bb1,bb2] ~ [c2,c3]@4 [bb1,bb2] [c2,c3] [eb2,eb3]@4", // C Bb C Bb C Eb
  D: "[f2,f3] ~ [f2,f3] ~ [eb2,eb3] ~ [f2,f3]@4 [eb2,eb3] [f2,f3] [ab2,ab3]@4", // F Eb F Eb F Ab
  E: "[c2,c3] ~ [c2,c3] ~ [bb1,bb2] ~ [c2,c3]@4 [bb1,bb2] [c2,c3] [eb2,eb3]@3 ~", // C Bb C Bb C Eb
  F: "[~@5 c3 eb3 f3@2 ~@4 f3 g3 c3@2 ~@4 c3 eb3 f3@2 ~@4 f3 g3 c3]/4",
  G: "[~@10 g3@2 ab3@2 bb3@10 ~@2 ab3@2 g3@2 f3@10 ~@2 f3@2 g3@2 ab3@10 ~@2 g3@2 f3@2 c3@10 ~@2 c3@2 eb3@2 f3@8 f3@2 f3 c3 eb3 ab3 ~ f3 bb2 c3]/6",
  H: "f3@2 ~@2 f3@2 f3 ~ f3 c3 eb3 ab3 ~ f3 bb2 c3", I: "~@9 c3 eb3 ab3 ~ f3 eb3 f3",
  J: "~@8 f3 c3 eb3 ab3 ~ f3 bb2 c3", K: "~@2 c3 ~@5", L: "~@4 [f2,c3,f3]@6 [eb2,eb3] [f2,f3] [ab2,ab3]@3 ~",
  M: "[c2,c3] ~ [c2,c3] ~ [bb1,bb2] ~ [c2,c3]@4 [bb1,c2,bb2] c3 [eb2,eb3]@3 ~", // C Bb C Bbsus2 Eb
  N: "[~@10 g3@2 ab3@2 bb3@8 ~@4 ab3@2 g3@2 f3@6 ~@6 f3@2 g3@2 ab3@8 ~@4 g3@2 f3@2 c3@9 ~@3 [bb1,bb2] [c2,c3] [eb2,eb3]@4]/5", // Bb C Eb
  O: "[c2,c3] ~ [c2,c3] ~ [bb1,bb2]@2 c3 ~@3 c3 ~ eb3 ~ f3@2", // C Bb
})).s("gm_distortion_guitar").gain(0.32).pan(0.6)

// other · kalimba
const kalimba = note(`<
  ~@4 A B C D ~@20 A B C E F G H I A B C E F G H I J K J K L M N O J K J K F G H P ~ Q R Q R Q ~@8 A B C E F G H I J K J
  K F G H S R T R U R T R U R T R U R T R V
>`.pickRestart({
  A: "f4!2 eb4 f4 ~@2 f4 ~ eb4 f4 ~@2 f4 f4@2 ~", B: "c4 ~ bb3 c4 ~@2 c4 ~@3 c4!2 ~@2 c4!2",
  C: "f4!2 eb4 f4 ~@2 f4 ~@3 f4 ~ eb4 f4@2 ~", D: "c4 ~ bb3 c4 ~@2 c4 ~ bb3 ~ c4@2 ~@4",
  E: "c4 ~ bb3 c4 ~@2 c4 ~ bb3 ~ c4 ~@5", F: "eb4!2 bb3 eb4 ~@2 eb4 ~@3 eb4 ~ bb3 eb4 ~@2",
  G: "f4!2 eb4 f4 ~@2 f4 ~ eb4 f4 ~@2 f4 ~ [eb4,f4] ~", H: "f4!2 eb4 f4!2 ~ f4 ~ eb4 f4 ~@2 f4 ~ f4!2",
  I: "eb4!2 ~ eb4 ~@2 eb4!2 ~ eb4 ~@2 eb4 ~ e4 ~", J: "f4 ~@2 f4 ~@2 f4 ~ f4 c4 eb4 ab4 ~ f4 bb3 c4",
  K: "~@3 c4 ~@2 c4 ~@3 c4 ~@5", L: "eb4 ~@2 eb4 ~@2 eb4 ~@3 eb4@2 ~@4", M: "bb3 ~@2 bb3 ~@2 bb3 ~@3 bb3 ~@5",
  N: "db4 ~@2 db4 ~@2 db4 ~@3 db4 ~@5", O: "ab3 ~@2 ab3 ~@2 ab3 ~@2 c4 eb4 ab4 ~ f4 eb4 f4",
  P: "eb4!2 ~ eb4 ~@2 eb4!2 ~ eb4 ~@2 eb4 ~ f4 ~", Q: "~@2 c4!2 ~ c4 ~@2 c4 ~@2 c4 ~@2 c4 ~",
  R: "~@2 f4!2 ~ f4 ~@2 f4 ~@2 f4 ~@2 f4!2", S: "eb4!2 ~ eb4 ~@2 eb4!2 ~ eb4 ~@2 eb4@2 e4 ~",
  T: "c5!2 c4!2 c5!2 c4@2 c5 c4 [eb4,eb5] c4 [f4,f5] c4 [ab4,ab5] [g4,g5]", // Eb F Ab G
  U: "c5!2 c4!2 c5!2 c4!2 c5 c4 [eb4,eb5] c4 [f4,f5] ~ [ab4,ab5] [g4,g5]", // Eb F Ab G
  V: "c5!2 c4!2 c5!2 c4!2 c5 c4 [c5,c6]@2 eb5@2 [f5,f6]@2, ~@12 eb6 ~@3", // C F
})).s("gm_kalimba").gain(0.57).pan(0.4)

// chords · pad sweep · "Sweep pd"
const pad_sweep = note("<~@11 A@3 ~@5 B@3 ~@43 C@2 ~@6 D@2 ~@31>".pickRestart({
  A: "[~@3 [f3,ab3,c4,f4]@9 ~@4]/3", B: "[~@8 [ab3,c4]@27 ~@13, ~@7 f3@24 ~@17, ~ f4@3 ~@2]/3",
  C: "[~@10 [f3,ab3,c4,f4]@19 ~@3]/2", D: "[~@5 [f3,ab3,c4,f4]@10 ~]/2",
})).s("gm_pad_sweep").gain(0.25)

// other · flute
const flute = note("<~@73 A@3 B@4 C@2 D E D E F G H I ~@16>".pickRestart({
  A: "[~@5 c5 eb5 f5@2 ~@4 f5 ab5 c5@2 eb5 ~@3 c5 eb5 f5]/3",
  B: "[~@10 f5@2 ab5@2 c5@4 eb5@2 ~@6 g5@2 ab5@2 bb5@4 ~@8 ab5@2 g5@2 f5@4 ab5@3 ~@5 f5@2 g5@2 ab5@2]/4",
  C: "[~@5 g5 f5 c5@2 eb5@2 ~@5]/2", D: "~@2 f5!2 ~ eb5 f5@3 ~ eb5 f5 ~ ab5@3", E: "g5@2 ~ f5@2 ~ eb5@5 ~@5",
  F: "~@2 g5!2 ~ f5 g5@3 ~ f5 g5 ~ bb5@3", G: "ab5@2 ~ g5@2 ~ f5@8 ~@2", H: "~@2 f5!2 ~ eb5 f5@4 eb5 f5 ~ ab5@3",
  I: "g5@2 ~ f5@2 ~ eb5@6 ~@4",
})).s("gm_flute").gain(0.43)

// drums · kick
const kick = s("bd").struct(`<
  [x!2]!2
  [x ~@2 x!2 ~@3]
  [x!2]!4
  [x ~@7 x ~@2 x ~@4]
  [x!2]!52
  [~ x ~@2]
  [x!2]!44
  [x ~@4 x ~ x]
>`).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  A@45 B A B A B A B A B A B A B A B ~ A@22 B A B A B A B A B A B A B A B A B A B A B A@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D A B C D E F G F E F G F E@2 F H E F G F E@2 F H I J K L I J K L M N O P M N O P M N O P M N O P M N O P M N O
  P ~ Q R S T U E F G F E@2 F H M N O P M N O P M N O P M N O P@2 Q R S P Q R S P Q R S V Q R W
>`.pickRestart({
  A: "x!4 ~@2 x!4 ~@3 x!3", B: "x ~@2 x ~@2 x!2 ~ x ~@4 x!2", C: "x!2 ~ x ~@2 x!4 ~@4 x!2",
  D: "x!2 ~ x ~@2 x!2 ~ x ~@4 x!2", E: "x!8", F: "x!7 ~", G: "x!5 ~ x!2", H: "x!6 ~ x", I: "x!2 ~ x!6 ~@2 x!2 ~@3",
  J: "x!2 ~ x!3 ~ x!8 ~", K: "x!2 ~ x!7 ~ x!3 ~@2", L: "x!6 ~ x!7 ~@2", M: "x!2 ~ x!3 ~ x ~ x!5 ~@2",
  N: "x!2 ~ x!2 ~@2 x ~ x!3 ~@3 x", O: "x!4 ~@2 x!3 ~ x!2 ~ x ~@2", P: "x!2 ~ x!11 ~@2", Q: "x!5 ~ x!8 ~@2",
  R: "x!2 ~ x!2 ~ x!8 ~@2", S: "x!2 ~ x!8 ~ x!2 ~@2", T: "x!2 ~ x!10 ~@3", U: "x!2 ~ x!2 ~ x!2 ~@2 x ~ x ~@3",
  V: "x ~@2 x!11 ~@2", W: "x!2 ~ x!7 ~@6",
})).gain(0.29)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 [~@13 x ~@2] ~@7 [~@7 x] ~@29 [~@13 x ~@2] ~@23 [~ x]>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@43
  [~@7 x ~@2 x ~@5]
  ~@7
  [~@7 x ~@2 x ~@5]
  ~@29
// … 14 more lines

More by Raf