Strudelify

Blue Rondo

Jackie McLean

KeyF majorTempo77 bpm
0:00/0:00
// Blue Rondo — Jackie McLean
// 77 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(77/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.

// other · orchestra hit · F
const orchestra_hit = note("<~@76 [~@8 [f3,f4] ~@7]>").s("gm_orchestra_hit").gain(0.35)

// other · alto sax
const alto_sax = note(`<
  ~ A B ~ C@2 D ~ E F ~@2 G@2 ~@2 H ~@3 G@2 ~@2 H ~@3 I@2 ~@2 J ~@3 K ~@3 G@2 ~@2 H ~@7 H ~@3 I@2 ~@2 J ~@7 I@2 ~@2 J
  ~@4
>`.pickRestart({
  A: "~@14 a4 [c5,d5]", B: "f5 e5 d5@2", C: "[~@5 f4 a4 ~ c5 d5 ~ f4 a4 ~ g4 f4@7 ~@8 [a4,c5] [d5,e5]]/2",
  D: "f5@4 e5@3 [e5,f5] d5@7 ~", E: "~@9 f4 ~ a4 c5 d5 ~ a4", F: "~ c5@6 ~@9",
  G: "[~@5 f4 ~ g4 a4@2 g4 f4 ~ d4@10 ~@9]/2", H: "~@8 a4 g4 f4 d4 f4 g4@3",
  I: "[~@6 c5@3 d5 ~ f4 [g4,ab4] ~ g4 f4@7 ~@10]/2", J: "~@5 f4 g4 ~ a4@2 ~ g4@3 f4@2",
  K: "~@4 c5@4 [a4,bb4] a4 ~ g4 f4@4", // Bbmaj7
})).s("gm_alto_sax").gain(0.64)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A B A C A D ~@18 E F E G H I J K L M N@2 ~@16 E F E G H I J K L M N@2 A B A C H I J K L M O@2
>`.pickRestart({
  A: "~ bb3 d4 bb3 c4 d4 e4 c4", B: "f4 e4 d4@2", C: "a3@15 ~", D: "f4@4 e4@4 d4@5 ~@3", E: "[d3,f3] [e3,g3]",
  F: "[c3,a3]@4 [bb2,g3]@4 [a2,f3]@7 ~", G: "[c3,e3] [c3,eb3]", H: "[d3,f3]@8 [e3,g3]@7 ~",
  I: "[f3,a3]@4 [e3,g3]@4 [d3,f3]@7 ~", J: "[d3,g3]", K: "[bb2,d3,f3] e3", L: "[d3,f3]@7 ~ [e3,g3]@7 ~",
  M: "[f3,a3]@4 [e3,g3]@3 ~ [f3,a3]@7 ~", N: "[[f3,ab3]@7 ~ [g3,bb3]@5 ~ [a3,c4]@18]/2",
  O: "[[f3,ab3]@7 ~ [g3,bb3]@5 ~ [a3,c4]@12 ~@6]/2", // Fm Gm Am
})).s("gm_distortion_guitar").gain(0.14).pan(0.6)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B C D A E F G ~@16 H I H J H K L M H N O@2 ~@11 P Q R S T H I H J H K L M H N O@2 A B C D H K L M H N U@2
>`.pickRestart({
  A: "~ [d4,d5] [f4,f5] [d4,d5] [e4,e5] [f4,f5] [g4,g5] [c4,c5]", B: "[a4,a5] [g4,g5] [f4,f5]@2",
  C: "~ [d4,d5] [f4,f5] [d4,d5] [e4,e5] [f4,f5] [g4,g5] [e4,e5]", D: "[c4,c5]@15 ~",
  E: "[a4,a5]@4 [g4,g5]@4 [f4,f5]@5 ~ [f4,f5] [g4,g5]", F: "[a4,a5] [g4,g5] [f4,f5]@4 [d4,d5]@2 [f4,f5]@4 [a4,a5]@3 ~",
  G: "[c5,c6]@15 ~", H: "bb2 c3", I: "f3@4 e3@4 d3@7 ~", J: "a2@15 ~", K: "db3 a2", L: "b2", M: "g2@7 ~ [g2,c3]@8",
  N: "db3 d3", O: "[db3@8 eb3@6 f3@17 ~]/2", P: "~@7 d5@3 c5 ~ bb4@2 a4@2", Q: "g4@8 gb4@7 ~", R: "f4@3 e4@5",
  S: "d4@3 e4", T: "f4 ~", U: "[db3@4 eb3@3 f3@6 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.45).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@6 A B C ~@4 D E F G H I J K D E L M N O P Q R S T U V W X@2 ~@4 D E F G H I J K D E L M N O P Q R S T U V W X@2 N O
  P Q R S T U V W Y@2
>`.pickRestart({
  A: "~@14 f5 g5", B: "a5 g5 f5@4 d5@2 f5@4 a5@4", C: "c6",
  D: "g4 gb4 g4 a4 bb4 a4 bb4 c5 d5 db5 d5 e5 gb5 g5 a5 bb5, ~ gb4", E: "[f4,d6]@3 [e4,c6]@5",
  F: "[bb4,d5,f5]@11 ~ [bb4,c5,e5]@4", G: "[a4,c5,f5]@7 ~ [g4,bb4,d5]@4 [f4,bb4,c5]@3 ~", H: "[a3,c4,e4]@15 ~",
  I: "[a3,d4,f4]@15 ~", J: "[a3,c4,e4]", K: "[a3,d4,f4]", L: "[bb4,d5,f5] [bb4,c5,e5]",
  M: "~@4 a5 c6 a5 f5 g5 a5 bb5 c6 d6 eb6 f6 g6, [a4,c5,f5]@7 ~ [g4,bb4,d5]@4 [f4,bb4,c5]@3 ~", // F Gm Fsus4
  N: "c6@2 d6@6 [e5,g5,c6]@7 ~, [f5,bb5] ~", O: "[f5,a5]@4 [e5,g5]@3 ~ d6@3 ~ f6 ~ e6 ~, c6@7 ~ [d5,f5,a5]@8",
  P: "[f5,bb5,d6]@8 [e5,g5,c6]@7 ~", Q: "a5@6 c6 a5 bb5 a5 g5 f5 eb5 d5 c5 d5, [c5,e5] ~", R: "[bb4,f5,bb5] [c5,e5,g5]",
  S: "[db5,e5,a5]@7 ~ [d5,f5,a5]@8", T: "[b4,d5,g5]@15 ~",
  U: "bb5@4 d6@2 bb5@2 ~@4 c5@3 ~, [d5,f5,g5]@8 [e5,g5,c6]@7 ~", V: "[bb4,d5,f5]@7 ~ [c5,e5,g5]@7 ~",
  W: "[f5,a5]@4 [e5,g5]@3 ~ [a4,d5,f5]@7 ~, db5@7 ~@9", // F Em Dm
  X: "[[f4,ab4,db5,f5]@7 ~ [g4,bb4,eb5,g5]@6 [a4,f5]@18, ~@7 c5@8 ~]/2", // Db Eb Dm
  Y: "[[f4,ab4,db5,f5]@7 ~ [g4,bb4,eb5,g5]@6 [a4,c5,f5]@12 ~@6]/2", // Db Eb F
})).s("gm_string_ensemble_1").gain(0.37)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@2 B@3 C@5 D@3 E F G H I D@3 E F G J K L M N O P Q R S T U@2 V D@3 E F G H I D@3 E F G J K L M N O P Q R S T U@2 K L
  M N O P Q R S T W@2
>`.pickRestart({
  A: "[~@16 [bb3,d4,f4]@7 ~ [c4,e4]@6 ~@2, ~@15 f3@6 ~@2 g3@7 ~@2]/2", // Bb C
  B: "[[a3,c4,f4]@3 ~ [g3,c4,e4]@3 ~ [f3,a3,d4]@6 ~@2 [bb3,d4,f4]@7 ~ [c4,e4]@6 ~@2 [a3,c4,e4]@6 ~@2 [bb3,eb4]@3 ~ [a3,c4,eb4]@2 ~@2, ~@15 f3@7 ~ g3@7 ~ f3@7 ~ g3@3 ~@6]/3", // F C Dm Bb C Am Eb5 Adim
  C: "[[f3,bb3,d4]@6 ~@2 [c4,e4]@6 ~@2 [f4,a4]@3 ~ [e4,g4]@3 ~ [d4,f4]@6 ~@2 [b3,d4,f4]@7 ~ b3@4 ~@2 d4 ~ [bb3,c4]@3 ~@5 [bb3,e4]@7 ~ [e4,a4,c5]@15 ~, ~@7 g3@6 ~@2 a3@3 ~ a3@3 ~ a3@6 ~@2 g3@7 ~ g3@4 ~ g3@2 ~@5 g3@2 c4@2 g3@8 c4@16 ~, ~@16 db4@7 ~@17 [d4,f4]@5 b3@2 f4@4 ~ bb3@2 f4@2 ~@24]/5", // Bb C F Em Dm Bdim Bbsus2 Bbdim …
  D: "[[d4,f4,a4]@13 ~@15 c5@2 a4 ~ [f4,a4]@14 ~@2, ~@15 [c4,e4]@9 c4@6 ~ d4@15 ~@2, ~@8 [a4,c5]@5 e4@2 ~@9]/3", // Dm F C Am
  E: "[d4,g4]@4 d4@2 g4 ~ gb4@4 d4@2 gb4 ~, bb4@7 ~ bb4@7 ~, ~@8 d4@3 ~@5", // G5
  F: "[d4,f4]@4 d4 ~@5 bb4@4 g4 ~, bb4@6 [c4,e4]@9 ~, ~@8 g4@5 ~@3", // Dm C
  G: "[f4,bb4]@4 ~@4 f4@2 d4 ~ [c4,e4,g4]@3 ~, d4@3 ~ d4@5 ~@7, ~@6 bb4@5 ~@5", // Bb5 C
  H: "[c4,f4]@4 c4@2 f4 ~ a4 g4 ~ d4 ~ d4 f4 g4, a4@3 ~ [bb3,d4] f4 c4@2", I: "[c4,e4,a4,c5]@15 ~",
  J: "[c4,f4]@4 c4@2 f4 ~ a4 g4 ~ d4 ~ f4 a4 c5, a4@3 ~ [bb3,d4] f4 c4@2", // F5 Bb
  K: "[d4,f4]@4 d4@2 f4 ~ [c4,e4]@4 c4@2 e4 ~, bb4@3 ~ g4@3 ~", // Dm C
  L: "[c4,f4,a4]@3 ~ [c4,e4,g4]@3 ~ f4@3 ~ a4 g4 f4 a3, ~@4 [a3,d4]@3 ~", // F C D5
  M: "d4@2 ~@2 d4@2 f4 ~ [e4,g4]@4 c4@2 e4 ~, f4 ~@3, ~@2 bb3@4 ~ c4@3 ~@6", // Em
  N: "[c4,e4]@4 c4@2 e4 ~ [c4,g4,bb4]@3 ~ [c4,eb4,a4]@3 ~, a4@3 ~@5", // C C7 Adim
  O: "[d4,f4]@2 ~@2 f4@2 bb4 ~ [c4,e4]@4 c4@2 e4 ~, bb4@2 ~@2 g4@3 ~, ~@2 d4@5 ~@9", // Dm C
  P: "[db4,f4,a4]@4 ~@2 db4 ~ [d4,f4]@4 d4@2 f4 ~, ~@2 [e4,g4]@2 a4@3 ~", // Dbaug Dm Em
  Q: "[b3,d4,f4]@4 ~@8 d4@2 b3 ~, a4@3 d4@2 f4@2 ~, ~ b3@2 ~, ~@4 a4@3 ~", // Bdim
  R: "d4@2 ~@6 [c4,e4]@2 ~@5 c4, g4@2 d4@2 ~ c4@2 e4, bb3 ~ bb3@4 g4@5 e4@2 g4@3, ~@12 c5@3 ~", // C
  S: "~@4 f4@2 bb4 ~ e4@2 ~@2 e4@2 g4 ~, bb4 ~ g4 ~, ~@2 d4@4 ~ c4@2 ~ c4@4 ~@2",
  T: "[f4,a4]@4 [e4,g4]@3 ~ [d4,f4]@4 d4@2 f4 ~, db4@7 ~ a4@6 ~@2", // F Em Dm
  U: "[db4 ~ db4 f4 eb4 bb3 eb4 [c4,f4,a4]@8 ~, f4 ~ g4 ~@5, ~@2 ab3@5 ~ bb3 ~@23]/2", V: "c5@15 ~",
  W: "[db4 ~ db4 f4 eb4 bb3 eb4 [c4,f4,a4]@6 ~@3, f4 ~ g4 ~@5, ~@2 ab3@5 ~ bb3 ~@23]/2", // F
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E F G H I J I J K L M N I J I J K L O P Q R Q S E T U V Q W X@2 I J I J K L M N I J I J K L O P Q R Q S E T
  U V Q W Y@2 Q R Q S E T U V Q W Z@2
>`.pickRestart({
  A: "bb1@5 ~ bb1@2 c2@4 ~@2 c2@2", B: "f2@3 ~ e2@4 d2@3 ~ d2@4", C: "bb1@4 ~@2 bb1@2 c2@5 ~ c2@2",
  D: "f1@5 ~ f1@2 g1@4 a1@3 ~", E: "bb1@5 ~ bb1@2 c2@5 ~ c2@2", F: "db2 a1 d2 c2", G: "b1@5 ~ b1 ~ b1@5 ~ b1@2",
  H: "c2@5 ~ c2 ~ c2@3 ~ c2@4", I: "f1@4 ~@2 f1 ~ f1@7 ~", J: "bb1@4 ~@2 bb1 ~ bb1@7 ~", K: "g1@5 ~ g1@2 gb1@5 ~ gb1@2",
  L: "f1@4 f1@2 e1@7 ~ e1@2", M: "bb1@4 ~@2 bb1@2 bb1@3 ~ c2@3 ~", N: "f1@5 ~ f1 ~ f1@3 ~ c2@2 ~@2",
  O: "bb1@4 ~@2 bb1@2 c2@3 ~ c2@3 ~", P: "f1@5 ~ f1 ~ g1@3 ~ a1@2 ~@2", Q: "bb1@2 ~ bb1 c2@2 ~ c2",
  R: "f1@3 ~ e1@3 ~ d1@4 d2@2 c2@2", S: "f1@4 ~@2 f1@2 g1@3 ~ a1@4", T: "db2@3 ~ a1@3 ~ d2@5 ~ c2@2",
  U: "b1@4 ~@2 b1 ~ b1@5 ~@3", V: "g1@4 ~@2 g1@2 c2@3 ~ c2@3 ~", W: "db2@4 a1@4 d2@5 ~ d2@2",
  X: "[db2@5 ~ db2@2 eb2@5 ~ f2@13 ~ c2@4]/2", Y: "[db2@5 ~ db2@2 eb2@5 ~ f2@7 ~ f1 ~ g1@4 a1@4]/2",
  Z: "[db2@5 ~ db2@2 eb2@5 ~ f2@7 ~ c2 ~ f1@2 ~@6]/2",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · epiano1
const epiano1 = note(`<
  ~ A B C D E F G@2 H I J K L M N O H I J K L M P Q R S T U V W X Y Z AA AB@2 H I J K L M N O H I J K L M P Q R S T U V
  W X Y Z AA AB@2 R S T U V W X Y Z AA AC@2
>`.pickRestart({
  A: "f3@2 ~@4 d4@2 g3 ~@3 c4@2 e4@2, d4@3 ~ e4@3 ~, bb3!2 c4 ~, ~@2 f3@6 ~@2 g3@5 ~",
  B: "[a3,c4,f4]@4 [g3,c4,e4]@4 ~@4 c4@3 ~, ~ [a3,d4,f4]", // F C Dm
  C: "f3@2 ~@4 f4 ~ g3 ~@5 e4@2, d4@7 ~ e4@6 ~@2, bb3!2 c4!2, ~@2 f3@5 ~@3 g3@6",
  D: "f3@2 ~ a3 [g3,bb3,eb4]@2 [f3,a3,c4,eb4]@2, [c4,e4] ~, a3@3 ~@5, ~ f3 ~@2", // Eb F7 C
  E: "f3 ~@3 bb3@2 f4@2 g3@4 g3@2 c4 ~, d4@7 ~ [c4,e4]@7 ~, bb3 ~@3, ~@2 f3@5 ~@9", // C
  F: "[f4,a4]@4 [db4,e4,g4]@4 a3@4 a3@2 d4 ~, a3@8 [d4,f4]@7 ~", // F Dbdim Dm
  G: "[g3@4 ~@8 b3@2 d4 ~ bb3@6 ~@2 e4@8, f4@15 ~@17, [b3,d4]@6 d4@8 ~@9 bb3@8 ~, ~@4 g3@6 g3@5 g3@7 g3@10, ~@6 b3@6 ~@4 [c4,f4]@9 ~@7]/2", // Bm F5
  H: "[a3,c4,e4]@5 ~ [a3,c4,e4]@10", I: "[a3,d4]@6 d4@9 ~, f3@15 ~", J: "[c4,e4]@7 a3, a3@3 ~", K: "[f3,a3,d4]@15 ~",
  L: "~@8 [d4,gb4]@7 ~, [bb3,d4,g4] ~, ~@6 g3@7 ~@3", M: "bb3@4 g3@2 [g3,bb3]@6 g3@2 bb3 ~, [d4,f4]@6 [c4,e4]@9 ~",
  N: "f3@9 ~ f3 ~ [g3,c4,e4]@3 ~, [bb3,d4]@3 ~", O: "[a3,c4,f4]@7 ~ [g3,bb3,d4,f4]@4 [g3,bb3,c4,e4]@4",
  P: "[f3,bb3,d4]@7 ~ [g3,c4,e4]@8", Q: "[a3,c4,f4]@7 ~ [g3,bb3,d4,f4]@4 [a3,c4,eb4,f4]@4",
  R: "[f3,bb3]@2 f3 bb3 [g3,c4]@2 ~ c4, d4@4 e4@3 ~, ~@3 g3", // Bb5 C5
  S: "[a3,c4,f4]@4 [g3,c4,e4]@4 d4@4 c4@2 a3 ~, ~@8 [a3,f4]@7 ~", // F C Dm
  T: "[f3,bb3]@4 f3@2 bb3@2 [g3,c4]@4 g3@2 c4 ~, [d4,f4]@8 e4@7 ~", // Bb5 C5 Dm
  U: "[f3,a3]@4 f3@2 a3 ~ [g3,c4,eb4]@3 ~ [a3,c4,eb4]@3 ~, [c4,e4]@7 ~@9", // F Cm Adim C
  V: "[f3,bb3]@4 f3@2 bb3@2 [g3,c4]@4 g3@2 c4 ~, d4@6 ~@2 e4@7 ~", // Bb5 C5
  W: "[a3,f4]@4 [e4,g4]@2 a3@2 a3@3 ~@3 c4 ~, db4@8 [d4,f4]@7 ~, a4@3 ~@9 a3@4", // Dm Em Dm
  X: "[b3,d4,f4]@4 ~@2 b3@4 ~@2 b3@2 d4 ~, g3@3 ~ g3@5 ~ g3@5 ~, ~@3 f4@4 ~, ~@3 d4@3 ~@2", // Bdim
  Y: "[bb3,d4]@4 ~@2 bb3@2 g3@3 ~ g3@3 ~, f4@7 ~@9, g3@3 ~ g3@4 [bb3,c4,e4]@7 ~", // Bb C7
  Z: "[bb3,d4]@5 ~ [bb3,d4]@2 [g3,c4]@4 g3@2 c4 ~, f3@3 ~@5 e4@6 ~@2", // Bb C5
  AA: "[f4,a4]@4 [db4,e4,g4]@3 ~ [a3,d4]@4 a3@2 d4 ~, a3@7 ~ f4@6 ~@2", // F Dbdim D5
  AB: "[[ab3,db4]@4 ab3@2 db4 ~ eb4@2 f4@2 eb4 ~ [a3,c4,f4]@18, f4@7 ~ [bb3,g4]@5 ~@19]/2", // Db5 F Eb
  AC: "[[ab3,db4]@4 ab3@2 db4 ~ eb4@2 f4@2 eb4 ~ [a3,c4,f4]@12 ~@6, f4@7 ~ [bb3,g4]@5 ~@19]/2", // Db5 F Eb
})).s("gm_epiano1").gain(0.56)

// chords · epiano1 · soft notes
const epiano1_soft = note(`<
  ~@8 A B C D ~ E@2 ~@2 B C D ~ E@2 ~@10 F ~@3 B C D ~ E@2 ~@2 B C D ~ E@2 ~@10 F ~@11 F ~@3
>`.pickRestart({
  A: "~ c4", B: "f3@4 f3@11 ~", C: "~@6 a3@9 ~", D: "f3@11 ~ f3@3 ~", E: "[g3@5 ~@9 g3@5 ~@13, ~ bb3 ~@2]/2",
  F: "~@4 f3@3 ~@9",
})).s("gm_epiano1").gain(0.32)

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

// drums · rim
const rim = s("rim").struct("<~@9 [~ x ~@2]!8 ~@60>").gain(0.58)

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@16 B ~ B ~ B ~ B C ~@7 A ~@12 B ~ B ~ B ~ B C ~@7 A ~@3 C ~@7 A ~@4>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@12 x!3 ~",
})).gain(0.64)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A ~@8 B ~@2 A C D ~@2 B ~@2 A C D ~@14 B ~@2 A C D ~@2 B ~@2 A C D ~@25
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@5 x ~ x", C: "~@13 x ~@2", D: "~@5 x ~@2",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@23 B ~@3 C ~@3 D ~@2 E ~@16 B ~@3 C ~@3 D ~@2 E F ~@3 C ~@3 D ~@2 E ~
>`.pickRestart({
  A: "~@11 x!2 ~@3", B: "~@7 x!2 ~ x ~@5", C: "~@7 x", D: "~@5 x ~@2", E: "~@5 x!2 ~", F: "~@9 x!2 ~@5",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~ A ~ B ~@3 A ~@3 C ~@3 A ~@3 C ~@15 A ~@3 C ~@3 A ~@3 C ~@24>".pickRestart({
// … 44 more lines