Strudelify

Je hoort bij mij

Paul de Leeuw

KeyA♭ majorTempo80 bpm
0:00/0:00
// Je hoort bij mij — Paul de Leeuw
// 80 bpm, 4/4, key G# 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@16 A B C D A B C D E F G H E I J K L M N O P Q R@4 S A B C D E F G H L M N O P Q T@4 N O P Q U@4 M N O P Q V@2 W S W
  S W S W X Y@3
>`.pickRestart({
  A: "e4@6 ~ c4, [a1,a2,e3,a3], ~@3 f4, ~@13 e4@3", B: "b3@3 b3, [g2,g3,e4]", C: "~@3 e4@13, [f2,f3,a3]",
  D: "[c2,c3,g3,c4,d4,e4]", E: "[f2,f3,c4,g4,ab4]", F: "[eb2,eb3,g3,c4]", G: "[db2,db3,f3,ab3,c4]",
  H: "[ab1,ab2,eb3,ab3,bb3,c4]@15 ~", I: "[eb2,eb3,c4,eb4,g4]", J: "[db2,db3,c4,db4,f4]",
  K: "[ab1,ab2,bb3,c4,eb4]@15 ~", L: "[bb2,bb3,db4,f4]", M: "[c3,ab3,c4,eb4]", N: "[db3,c4,f4,ab4] [eb3,db4,f4,ab4]",
  O: "[ab2,g3,bb3,eb4]@3 [ab2,ab3,c4,eb4] ~@2 [ab2,ab3,c4,eb4]@3 [ab2,c4,eb4,ab4]@3 [bb2,db4,ab4]@2 [c3,c4,eb4,ab4]@2, ~@12 f4 ~@3", // Eb Ab Bbm7 Ab
  P: "c4@10 ~@5 db3, db3@15 ~, [f4,ab4]@11 f4@5, ~@5 c4@2 c4, ~@3 ab4", Q: "[eb3,c4,eb4,ab4]@3 [f3,c4,eb4,ab4]@5",
  R: "[[bb2,f3,ab3,db4]@6 [ab2,eb3,bb3,c4]@6 [gb2,f3,ab3,db4]@19 ~ f4@15 ~ [ab3,c4,eb4]@3 ~@3 ab2@2 ~ [eb4,ab4,c5]@2 ab2 [c3,eb4,g4,bb4]@4, ~@31 [eb3,ab3]@17 ab2@6 ~@2 ab2@3 ~@5, ~@8 db4@7 ~, ~@51 [ab3,c4]@9 ~@4, ~@51 eb4@6 ~@7]/4", // Bbm7 Ab Db Ab Cm7 Ab5 Ab
  S: "[c4,f4,ab4]@3 ~@3 db3@2 db3 [db3,eb4,ab4,c5]@3 [db3,db4,f4,ab4]@3 ~, db3@3 ~@5, ~@3 [c4,f4]@9 ~@4, ~@3 ab4@6 ~@7", // Fm Ab Db F5
  T: "[[bb2,f3,ab3,db4]@6 [ab2,eb3,bb3,c4]@6 [gb2,f3,ab3,db4]@19 ~ [bb2,bb3,f4]@16 [c3,ab3,c4,eb4]@16, ~@31 [eb3,ab3]@17 ~@16, ~@32 db4@19 ~@13]/4", // Bbm7 Ab Db Bb5 Ab Ab5
  U: "[[bb2,f3,ab3,db4]@6 [ab2,eb3,bb3,c4]@6 [gb2,f3,ab3,db4]@19 ~ [db4,f4]@16 [bb2,bb3,db4,f4]@16, ~@31 ab3@19 ~@14, ~@31 eb3@16 ~@17]/4", // Bbm7 Ab Db Bbm
  V: "[[bb2,f3,ab3,db4]@3 [ab2,eb3,bb3,c4]@3 [gb2,f3,ab3,db4]@10]/2", // Bbm7 Ab Db
  W: "[ab3,c4,eb4]@3 ~@3 ab2@2 ~ [eb4,ab4,c5]@2 ab2 [c3,eb4,g4,bb4]@4, ab2@6 ~@2 ab2@3 ~@5, ~@3 [ab3,c4]@9 ~@4, ~@3 eb4@6 ~@7", // Ab Cm7 Ab
  X: "[c4,f4,ab4]@3 ~@3 db3@2 db3 [db3,eb4,ab4,c5]@3 [db3,db4,f4,ab4]@4, db3@3 ~@5, ~@3 [c4,f4]@9 ~@4, ~@3 ab4@6 ~@7", // Fm Ab Db F5
  Y: "[~ [ab4,bb4]@16 ~@7, ~ [ab2,ab3,eb4]@32 ~@15]/3", // Absus2 Ab5
})).s("gm_epiano1").gain(0.34).pan(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A B@2 C B A D E F G D H F G D H I J K L I J K L M N O P Q R S@2 T U V F G D H I J K L M N O P Q R S@2 W X Y Z AA
  AB AC@2 AD W X Y Z AA AB AC@2 AE V U V U V U AF AG@2 ~
>`.pickRestart({
  A: "a1@2 ~ a1 ~@5 g1 ~@2 a1 ~@3", B: "a1@3 a1 ~@5 g1 ~@2 a1 ~@3", C: "a1@3 a1 ~@5 g1 ~@2 a1 b1 c2 ~",
  D: "f1@2 ~ f1 ~@5 f1 ~@2 f1 ~@3", E: "e1@9 f2 e2 b1 c2 b1 f1 e1", F: "a1@2 ~ a1 ~@5 a1 ~@2 a1 ~@3",
  G: "g1@2 ~ g1 ~@5 g1 ~@2 g1 ~@3", H: "c2@2 ~ c2 ~@5 c2 ~@2 c2 b1 g1@2", I: "f1@3 f1 ~@5 f2 g2 ab2 f2 ~@3",
  J: "eb1@3 eb1 ~@5 eb2 f2 g2 eb2 ~@3", K: "db1@3 db1 ~@5 db2 eb2 f2 db2 ~@3",
  L: "ab1@3 ab1 ~ ab1 bb1 c2 ~ eb2 ~ ab2 g2 c3 eb3@2", M: "bb1", N: "c2", O: "db2 eb2", P: "ab1@9 ab1@3 bb1@2 c2@2",
  Q: "db2", R: "eb2@6 f2@7 f1 g1 ab1", S: "[bb1@6 ab1@6 gb1@18 db2 d2]/2", T: "~@8 eb1@7 ~, eb2@15 ~",
  U: "ab1@2 ~ ab1 ~@5 ab1 ~@2 c2@4", V: "db2@2 ~ db2 ~@5 db2 ab1@2 db2@2 ab1 ~", W: "bb1@6 f1 bb1 ~ bb1@2 ~ bb1@4",
  X: "c2@3 ~ c2@2 g1 c2 ~ c2@2 ~ c2@4", Y: "db2@3 db2@6 eb2@2 ~ eb2@4", Z: "ab1@3 ab2@3 ab1@3 ab1@3 bb1@2 c2@2",
  AA: "db2@6 ab1 db2 ~ db2@2 ~ db2@3 d2", AB: "eb2@6 f2@5 c2 f1@4",
  AC: "[bb1@6 ab1@6 ~@9 db2 gb2@3 gb2@2 ~ gb2@3 db2, ~@12 gb1@19 ~]/2",
  AD: "eb2@3 eb2 ~ eb2 ~ eb2@2 eb1 eb2 ~ eb2!2 eb1@2, d2 ~@15", AE: "ab1@2 ~ ab1 ~@5 ab1 ~@2 c2@4, d2 ~@15",
  AF: "db2@2 ~ db2 ~@5 db2 ab1@2 db2@2 ab1@2", AG: "[~ ab1@28 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.47).pan(0.6)

// other · marimba
const marimba = note("<A@8 B@8 ~@16 C D ~@11 E F ~@4 C D ~@34>".pickRestart({
  A: "d6 g6 bb6 a6 bb6 a6 d6 c7 bb6 a6 bb6 a6 bb6 a6 d6 g6", B: "e6 a6 c7 b6 c7 b6 e6 d7 c7 b6 c7 b6 c7 b6 e6 a6",
  C: "~ [db4,db5] [f4,f5] [ab4,ab5] ~@12", D: "~@10 ab6 c7 bb6 eb6 ab6 ~", E: "~@14 g5 d6",
  F: "c6 ~ g5 d6 c6 ~ g5 d6 c6 ~ g5 d6 c6 ~ g5 ~",
})).s("gm_marimba").gain(0.27).pan(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A B C D E@8 ~@16 F G H I J K L@2 M N@2 ~@7 O F G H I J K L@2 P@2 Q R S T U@2 ~ V@2 Q R S T U@2 W@6 X@2 Y@2 ~
>`.pickRestart({
  A: "~@2 [bb4,c5,d5,eb5] [bb4,d5] ~@2 [bb4,c5,d5,eb5] [bb4,d5] ~@3 [bb4,d5] ~@2 [bb4,d5] ~", // Cm7 Bb Cm7 Bb
  B: "~@2 [bb4,c5,d5,eb5] [bb4,d5] ~@12", // Cm7 Bb
  C: "~@3 [bb3,c4,d4,eb4] [bb3,d4] ~ [bb3,c4,d4,eb4] [bb3,d4] ~@3 [bb3,d4] ~@2 [bb3,d4] ~", // Cm7 Bb Cm7 Bb
  D: "~@3 [bb3,d4] ~@2 [bb3,d4] ~@9", E: "[e5@63 ~]/4", F: "[c5,c6]@11 ~ [bb4,bb5]@4",
  G: "[ab4,ab5]@3 [eb5,eb6]@3 [ab4,ab5] [g4,g5]", H: "[f4,f5]@3 [ab4,ab5]",
  I: "[bb4,bb5]@3 [c5,c6] ~@2 [c5,c6]@3 [ab4,ab5]@2 ~ [bb4,bb5] ~ [c5,c6] ~", J: "[eb5,eb6]@11 ~ [f5,f6]@3 ~",
  K: "[eb5,eb6]@5 ~ [f5,f6]@3 ~ [eb5,eb6]@2 [db5,db6] ~ [c5,c6] ~", L: "[[ab4,ab5]@15 ~]/2",
  M: "[ab4,bb4] [c5,db5] [bb4,c5] [db5,eb5] [c5,db5] [eb5,f5] [db5,eb5] [f5,g5] [eb5,f5] [g5,ab5] [f5,g5] [ab5,bb5] [g5,ab5] [bb5,c6] [ab5,bb5] [c6,db6]", // Absus2 Dbmaj7 Bbsus2 Dbsus2 Dbmaj7 Ebsus2 Dbsus2 Fsus2 …
  N: "[[eb5,eb6]@29 ~@3]/2", O: "~@9 ab5@3 bb5@2 c6@2",
  P: "[ab4 ~@3 [c6,c7]@3 ~ [db6,db7]@3 ~ [c6,c7] ~ [ab5,ab6]@7 ~ [eb6,eb7] [bb5,bb6]@2 ~ [c6,c7]@4 ~@2]/2", // C Db C Ab Eb Bb C
  Q: "[c5,c6] [db5,db6] [c5,c6]@7 [bb4,bb5] [ab4,ab5] [f4,f5] [eb4,eb5] [db4,db5] [c4,c5] [db4,db5]", // C Db C Bb Ab F Eb Db …
  R: "[c4,c5] [db4,db5] [c4,c5]@6 ~ [ab4,ab5]@2 ~ [bb4,bb5] ~ [c5,c6] ~", S: "[c5,c6]!2 [db5,db6] [c5,c6]",
  T: "ab5@5 ~ [eb5,eb6] [bb4,bb5]@3 [c5,c6]@5 ~, ab4 ~@7", U: "[ab4,ab5]/2",
  V: "[~@4 [c6,c7]@3 ~ [db6,db7]@3 ~ [c6,c7] ~ [ab5,ab6]@7 ~ [eb6,eb7] [bb5,bb6]@2 ~ [c6,c7]@4 ~@2]/2", // C Db C Ab Eb Bb C
  W: "[[ab4,ab5]@24 [bb4,bb5]@4 [c5,c6]@3 ~]/2", X: "[[ab4,ab5]@6 [bb4,bb5] [c5,c6]]/2",
  Y: "[~ bb4@12 ~@4 ab4@7 ~@8, ab5@8 ~@6 bb4@5 ~@13, ~ [ab3,eb4]@24 ~@7, ~ ab4@16 ~@15]/2", // Ab5
})).s("gm_string_ensemble_1").gain(0.19).pan(0.7)

// other · trumpet
const trumpet = note(`<
  ~@11 A ~@2 B C ~@7 D ~@3 E ~@10 F@2 G H@2 ~@4 I J K@2 ~@6 L@2 M@2 ~ N O P Q@2 R M@2 ~ N O P S@2 H@8 T ~@2
>`.pickRestart({
  A: "~@12 [a4,a5] [b4,b5] [c5,c6] ~", B: "~@12 c5 d5 ~@2", C: "~@3 b4@9 ~@4, e5@3 ~", D: "d4@2 c4 ~@3 c4@9 ~",
  E: "[ab3,c4] ~@3 [ab3,c4] ~ [ab3,c4]@6 [g3,bb3] ~@3", F: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@5 ~ [db4,f4,ab4]@18 ~@2]/2",
  G: "~@6 [eb4,ab4,bb4,db5,eb5]!2 ~@8", H: "ab4 ~ eb5 db5 ~ c5 ~ ab4 ~ eb5@3 db5 ~ c5 ~", I: "[f4,f5]!2 ~@14",
  J: "bb2@2 g3@10 eb4@2 c4 ~", K: "[~@4 eb4 ~@3 eb4 ~@3 c4@2 ~@4 eb3@6 ~@8, ~@14 eb4@11 ~@7]/2",
  L: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@5 ~ [db4,f4,ab4,eb5]@15 ~ [ab3,ab4,ab5]!2 ~@2]/2", // Db Ab Db Ab
  M: "[~@4 [c4,c5]@4 [db4,db5]@4 [c4,c5] ~ [ab3,ab4]@7 ~ [eb4,eb5] [bb3,bb4]@3 [c4,c5]@5 ~]/2", // C Db C Ab Eb Bb C
  N: "~@9 [ab3,ab4]@2 ~ [bb3,bb4] ~ [c4,c5] ~", O: "[c4,c5]@2 [db4,db5] [c4,c5]",
  P: "[ab3,ab4]@6 [eb4,eb5] [bb3,bb4]@3 [c4,c5]@4 ~@2", // Ab Eb Bb C
  Q: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@5 ~ [db4,f4,ab4]@16 [db4,f4,ab4]!2 ~@2]/2", // Db Ab Db
  R: "[eb3,db4,f4,ab4]@12 [db4,f4,ab4]!2 ~@2", // Db
  S: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@5 ~ [db4,f4,ab4,db5,f5,ab5]@15 ~ [db5,f5,ab5]!2 ~@2]/2", T: "~ ab4@14 ~",
})).s("gm_trumpet").gain(0.28).pan(0.9)

// other · alto sax
const alto_sax = note(`<
  ~@11 A ~@2 B C ~@7 D ~@14 E@2 F G H ~@4 I ~@9 J@2 ~@6 E@2 K ~@6 E@2 L H L H L H L H M@2 ~
>`.pickRestart({
  A: "~@12 [c4,a4] [d4,b4] [e4,c5] ~", B: "~@12 c5 d5 ~@2", C: "~@3 f4@3 ~@2, e5@13 ~@3, ~ b4@2 ~",
  D: "d4@2 c4 ~@3 c4@10", E: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@6 [db4,f4,ab4]@18 ~@2]/2",
  F: "[bb3,db4,f4,ab4]!2 ~@4 [bb3,db4,f4,ab4]!2 ~@8", // Bbm7
  G: "[ab3,ab4] ~ [eb4,eb5] [db4,db5] ~ [c4,c5] ~ ab3 ~ [eb4,eb5]@3 [db4,db5] ~ [c4,c5] ~", // Ab Eb Db C Eb Db C
  H: "[ab3,ab4] ~ [eb4,eb5] [db4,db5] ~ [c4,c5] ~ [ab3,ab4] ~ [eb4,eb5]@3 [db4,db5] ~ [c4,c5] ~", I: "[f3,f4]!2 ~@14",
  J: "[[db4,f4,ab4]@5 ~ [c4,eb4,ab4]@6 [db4,f4,ab4]@15 ~ ab4!2 ~@2]/2", K: "[db4,f4,ab4]@11 ~ [db4,f4,ab4]!2 ~@2",
  L: "ab3 ~ [eb4,eb5] [db4,db5] ~ [c4,c5] ~ ab3 ~ [eb4,eb5]@3 [db4,db5] ~ [c4,c5] ~", M: "[~ [eb3,eb4]@23 ~@8]/2",
})).s("gm_alto_sax").gain(0.32).pan(0.2)

// other · trombone
const trombone = note("<~@11 A ~@3 B ~@22 C@2 ~@8 D E@2 ~@6 C@2 ~@6 C@2 ~@7 C@2 ~@11>".pickRestart({
  A: "~@12 [a2,a3] [b2,b3] [c3,c4] ~", B: "~@4 d4@3 ~", C: "[[bb2,bb3]@5 ~ [ab2,ab3]@6 [gb2,gb3]@18 ~@2]/2",
  D: "bb2@2 g3@9 ~ eb4@2 c4 ~", E: "[~@4 eb4 ~@3 f4 ~@3 c4@2 eb4@10 ~@8]/2",
})).s("gm_trombone").gain(0.07).pan(0.3)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B C@2 D E F G ~@7 H@2 ~@7 I J K@2 I J K@2 L ~@12 M@2 I J K@2 L ~@35
>`.pickRestart({
  A: "~@15 f4", B: "bb3 a3 bb3 a3@3 c4@3 a3@6 ~",
  C: "[d3@2 ~ d3@2 ~ f4 a3 bb3 ~ bb3 a3 ~ a3 ~@2 a3@6 ~@5 c4@4 ~, ~@5 d3@2 ~@7 c4@8 ~@10]/2",
  D: "g2@2 ~ a3 bb3 f4 bb3 a3 bb3 g3 ~ a3 ~ bb3 f4 ~", E: "~ a3 ~ bb3 g3 bb3 a3 ~ bb3 ~@2 g3 ~ d4 ~@2",
  F: "~@3 d3 ~ a3 bb3 g3 f4 ~ bb3 a3 ~ bb3 f4 ~", G: "a3 ~@2 bb3 ~ g3 d4 a3 ~@8",
  H: "[~@9 f4 e4 b3 c4 b3 f3 e3@4 ~@13]/2", I: "~@2 g3 ab3@2 g3 f3@2, f2, ~ c3@7",
  J: "~@2 f3 g3@5, eb2, ~ bb2@7, ~@3 f3 ~@4, ~@6 gb3 ~@9",
  K: "[~@2 eb3 f3@2 eb3 f3 ~ ab2@7 ~, db2 ~, ~@2 ab2@13 ~@17, ~@6 e3 ~@7 eb3@16 ~@2]/2",
  L: "~@7 ab3@8 ~, ~@5 db3@11, ~@6 f3@9 ~", M: "[~@16 [e4,g4]@15 ~, ~@15 [c3,g3]@16 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.41)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<A@2 B@2 C@2 ~@2 D E F G D E F G ~@11 H@2 ~@14 I ~@43>".pickRestart({
  A: "[~@17 [g5,bb5]@12 ~@3, ~@14 [d4,g4,bb4,d5]@17 ~, ~@17 d6@14 ~]/2", B: "[~@15 [bb5,c6,f6]@12 ~@5, ~@7 a4@6 ~@3]/2",
  C: "[~@17 a6@11 ~@4, ~@14 bb5@11 ~@7, ~@15 d6@11 ~@6, ~@16 f6@11 ~@5]/2", D: "~@3 [a3,c4,e4]@4 ~",
  E: "~@6 [c4,e4,g4]@7 ~@3", F: "~@6 [a3,c4,f4]@7 ~@3", G: "~@5 [a3,c4,e4]@9 ~@2", H: "[~@5 c6@18 ~@9]/2",
  I: "e4@11 ~@5",
})).s("gm_pad_halo").gain(0.09).pan(0.3)

// chords · pad halo · "HALO PAD" · soft notes
const pad_halo_soft = note("<~@6 A@2 ~@35 B ~@43>".pickRestart({
  A: "[~@7 c7@6 ~@3, ~@11 d6@12 ~@9, ~@3 f6@3 ~@2, ~@13 a6@12 ~@7]/2", B: "~@3 b6@4 ~",
})).s("gm_pad_halo").gain(0.05).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@8 [x ~@2 x ~@5 x ~@2 x ~@3]!76 [~ x ~@14] ~@2>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@8 A B A C A B A B D@67 A E ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "x ~@5 x ~@8 x", C: "x ~@5 x ~@5 x!3 ~", D: "~@6 x ~@8 x", E: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@8 [x ~ x ~ x ~ x ~ x!7 ~]!23 [x ~ x ~ x ~ x!10] [x ~ x ~ x ~ x ~ x!7 ~]!52 ~@3>")
  .gain(0.24)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@8
  [~ x ~ x ~ x ~ x ~@7 x]!23
  [~ x ~ x ~ x ~@10]
  [~ x ~ x ~ x ~ x ~@7 x]!51
  [~ x ~ x ~ x ~ x ~@8]
  x
  ~@2
>`).gain(0.16)

// drums · crash
const crash = s("cr").struct(`<
  ~@23 A B ~@2 C B ~@3 B@6 D E B ~@5 A B ~@2 C B@6 D E B@6 D E F B@6 D E B ~@2 G B ~@3 H ~@2
>`.pickRestart({
  A: "~@6 x!10", B: "x", C: "~@10 x!6", D: "x ~@2 x ~@2 x ~", E: "~@15 x", F: "x ~@9 x!2 ~ x!2 ~", G: "~@9 x ~@3 x ~ x",
  H: "~ x ~@2 x!12",
})).gain(0.16)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@23 A ~@3 B ~@18 A ~@3 B ~@33 C D ~>".pickRestart({
  A: "~@2 x!4 ~@10", B: "~@4 x!6 ~@6", C: "~ x!3 ~@12", D: "x!8 ~@8",
})).gain(0.08)

// drums · ride
const ride = s("rd").struct("<~@14 A ~@44 B@3 C B@2 D E ~ B@3 C B@2 D E F B@2 G B H B I ~@3>".pickRestart({
  A: "~@5 x ~ x ~ x ~@2 x ~@3", B: "~ x ~ x ~ x ~ x", C: "~ x!2 ~@3 x ~ x ~@5 x ~", D: "~@3 x ~@4", E: "~@3 x ~@3 x",
  F: "~@6 x ~@2 x!2 ~@3 x ~", G: "~@2 x ~@4 x!2 ~@3 x ~@3", H: "~ x!2 ~@3 x ~@3 x ~@2 x ~@2",
  I: "~@2 x ~@3 x ~@3 x ~@2 x!2 ~",
})).gain(0.48)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@13 A B C ~@43 D@2 ~ E ~ F G H ~ D@2 ~ E ~ F G H D@2 I J K L M N ~@3>".pickRestart({
  A: "~@9 x ~ x!2 ~ x!2", B: "~@2 x!2 ~@7 x ~@2 x ~", C: "x", D: "~@13 x ~@2", E: "~@7 x ~@4 x ~@3",
  F: "~ x ~@3 x ~@3 x ~ x ~ x ~@2", G: "~ x ~@3 x ~ x", H: "~@2 x ~@6 x!2 ~@5", I: "~ x ~@7 x ~@3 x ~@2",
  J: "~ x ~@9 x ~@4", K: "~@5 x ~@3 x ~@3 x ~@2", L: "~@5 x ~@3 x ~@5 x", M: "x!2 ~@3 x ~@3 x ~@3 x ~@2",
  N: "~ x ~@3 x ~@3 x ~@6",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@32 A B A B A B A B A ~@2 C@8 A B A B A B A B A B A B A B A B A@2 B A B A B A B A B A B A B A D E ~@2
>`.pickRestart({
  A: "x!3 ~ x!6 ~@2 x ~ x ~", B: "x ~ x!5 ~ x!8", C: "~ x ~ x ~ x ~ x", D: "x ~ x!5 ~ x!7 ~", E: "x",
// … 49 more lines

More by Paul de Leeuw