Strudelify

The Blue Chip Bop

Acoustic Alchemy

KeyG majorTempo133 bpm
0:00/0:00
// The Blue Chip Bop — Acoustic Alchemy
// 133 bpm, 4/4, key G 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: duplicate parts dropped: ch 5 "WARM PAD" pad warm (copy of ch 2 "STRINGS" string ensemble 1); ch 4 "+FEEDBCKGT" distortion guitar (copy of ch 6 "DISTORTION" distortion guitar)
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · "A.PIANO 3"
const piano = note(`<
  ~ A B C D E@4 F G F G F G F G H I F G F G F G F G F G F G F G H I F G A B C D E@4 F G F G F G F G H I F G A B C D E@4
  J K J K J K J K L M N ~ N M L O P@2 Q R S T@2 U V W X Y Z ~@3 AA AB AC@2 AD AB AE@2 ~ F G F G F G F G H I F G A B C D
  ~@2
>`.pickRestart({
  A: "[g#3,d4,f4]", B: "[g3,d4,f4]", C: "[c#3,g#3,a#3,d#4]",
  D: "[c4,f4]@8 [b2,d#3,a3,d4,g4] ~@3 [b2,d#3,a3,d4,g4] ~@3, [c3,g3]", // F5 G C5
  E: "[[e3,g3,b3]@4 ~@6 [f#3,a3,c#4]@2 ~@2 [g3,b3,d4]@4 ~@4 [f#3,a3,c#4]@5 ~@5]/2", // Em F#m G F#m
  F: "[e3,g3,b3]@4 ~@6 [f#3,a3,c#4] ~@3 [g3,b3,d4]@2", G: "~@6 [f#3,a3,c#4]@5 ~@5",
  H: "[e3,a3,c#4]@4 ~@6 [f#3,b3,d4] ~@3 [g3,c#4,e4]@2", I: "~@6 [f#3,b3,d4]@5 ~@5",
  J: "[e3,g3,c#4,e4]@2 ~ [e3,g3,e4] ~@2 [f#3,a3,f#4] ~ [e3,g3,e4]@4 ~@4, ~@3 d4 c#4 ~@3", // C#dim Em F#m Em
  K: "~@2 [e3,g3,c#4,e4] ~@2 [f#3,a3,d4,f#4] ~ [c#3,e3,g3,c#4] [e3,g3,c#4,e4]@2 ~@6", // C#dim D C#dim
  L: "[e3,g3,b3,e4]@2 ~ [e3,g3,b3,e4] ~@2 [f#3,a3,f#4] ~ [e3,g3,e4]@4 ~@4, ~@3 c#4 b3 ~@3", // Em F#m Em
  M: "~@6 [b3,e4,g4] ~ [a3,d4,f#4]@2 ~@4 [f#3,a3,d4] ~", N: "[b3,d4,e4]@2 ~ [b3,d4,e4] ~@2 [b3,e4]@4 ~@6, ~@3 d4 ~@4",
  O: "~@14 e5 d5",
  P: "[[d4,f#4,b4]@2 e5 d5 b4@2 ~@3 f#5@2 b4@2 e5@2 ~ [d4,f#4]@2 ~ b4 [d4,f#4,c#5]@2 ~ a4 b4@2 ~ d5 ~@2 b4 c#5, ~@6 b4@2 [b3,e4]@2 ~@13 [b3,e4]@2 ~@7, ~@7 c#5@2 ~@6 d5@2 ~@15]/2", // Bm D Dmaj7 E5
  Q: "d5 c#5 d5 e5 f#5 ~ e5 f#5 g5!2 f#5 g5 a5!2 g5 a5, [d4,f#4] ~@3 [b3,e4] ~@3", // D E5
  R: "[d4,f#4,b5]@2 a5 ~ [d4,f#4]@2 f#5 ~ [b3,e4]@2 ~ a5 ~ [b3,e4]@2 d5, ~@4 f#5 ~@3 e5 ~ b5@2 ~ f#5 ~@2", // Bm D E5
  S: "[g#3,e4] ~ e5 ~ b5@2 b5 g#5 [f#3,d#4] ~ [d#5,d#6] ~ d#5 [b4,b5] ~@2, e5@2 ~@7 g#5@2 ~ d#6@2 ~@2", // C#m D#m D# B
  T: "[[g#3,e4]@3 [a4,a5] ~ [c#5,c#6]@2 ~ [f#3,d#4,c#5,c#6]@3 ~@2 [f#3,d#4]!2 ~ [g#3,e4]@3 [b4,b5] [c#5,c#6] [d#5,d#6] ~ d#6 [f#3,d#4]@3 [c#5,c#6] [d#5,d#6] [e5,e6] ~ [e5,e6], c#5 ~@4 [b4,b5] ~@5 [b4,b5]@2 [d#5,d#6]@2 [d#5,d#6]@2 ~@6 d#5@2 ~@7, ~@12 [c#5,c#6]@3 ~@17]/2", // C#m A C# D#m7 D#m C#m B C# …
  U: "[g#3,e4]@2 ~ [d#5,d#6] [e5,e6] [f#5,f#6] ~ [f#3,d#4]@3 [d#5,d#6] [e5,e6] [f#5,f#6] d#5 e5 f#5, ~@3 [g#3,e4]@2 ~@2 [f#5,f#6] ~@8", // C#m D# E F# D#m D# E F# …
  V: "d5 e5 f#5!2 ~ e5 f#5!2 g5!2 f#5 g5 a5!2 g5 a5, [d4,f#4] ~@3 [b3,e4] ~@3", // D E5
  W: "b5!2 a5 b5 c#6!2 b5 c#6 d6!2 c#6 a5@2 c#6 d6 e6, [d4,f#4]@2 ~@2 [d4,f#4]@2 ~ [b3,e4]@2 ~@7", // D E5
  X: "f#6!2 e6 d6 c#6@2 d6 e6 g#6!2 f#6 e6 c#6!2 b5 a5, [g#3,e4]@3 ~@5 [f#3,c#4]@3 ~@5", // C#m F#5
  Y: "[g#3,e4]@2 e5 f#5 g#5!2 f#5 g#5 a5!2 g#5 a5 b5 e5 f#5 g#5, f#5 ~@3 [g#3,e4]@3 [f#3,c#4]@3 ~@6", // C#m F#5
  Z: "a5 ~@2 a5@2 ~@11", AA: "[a#3,d4,f4] [c4,e4,g4]", AB: "[b3,d4] [a3,c4], a4",
  AC: "[~@13 [e3,g3] b3!2 e4 [e4,g4] b4 [g4,b4] e5!2 g5 b5 ~@5 e3@3, [d4,a4]@26 [g4,b4] e4 [g3,b3]@4, b3@14 e3@11 [e5,g5]@7, ~@3 [e2,b2]@5, ~@15 g3 b3@2 e4@2 g4 b4 e5 g5 [b5,e6]@8]/2", // Em G D5 G Em E5
  AD: "[d4,f4,b4] [c4,e4,g4,b4]", AE: "[[b3,d4,a4]@3 ~]/2",
})).s("gm_piano").gain(0.18).pan(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B C D ~@32 A B C D ~@16 A B C D ~@36 E F G@2 E F H@2 ~@13 A B C D ~@2
>`.pickRestart({
  A: "[g#2,g#3,f4]", B: "[g2,g3,d4]", C: "[c#2,g#3,d#4]", D: "[c2,c4,f4]@8 [d#3,a3,d4,g4] ~@3 [d#3,a3,d4,g4] ~@3, g3",
  E: "[d4,f4] [c4,e4,g4]", F: "[b3,d4] [a3,c4], a4", G: "[b3,d4,a4]/2", H: "[[b3,d4,a4]@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.09).pan(0.7)

// bass · electric guitar jazz · "JAZZ GTR"
const bass = note(`<
  ~ A B C D E F G F E F G F E F G F H I G F E F G F E F G F E F G F H I G F A B C D E F G F E F G F E F G F H I G F A B
  C D E F G J K L K L K L M N O P O Q R S O T U@4 V@4 U@2 V W ~@4 X Y Z AA AB Y Z AC@2 E F G F E F G F H I E F A B C D
  ~@2
>`.pickRestart({
  A: "g#1@7 ~", B: "g1@7 ~", C: "c#2@7 ~", D: "c2@7 ~ b1 ~@3 b1@2 ~@2", E: "e1@2 e1@2 f#1@2 g1@2 e1@3 ~@5",
  F: "~ e1 f#1 g1 e1 g1 f#1 f1", G: "e1@2 e1@2 f#1@2 g1@2 e1@3 ~@3 e1@2", H: "a1@2 e1@2 g1@2 a1@2 e1@3 ~@3 a1@2",
  I: "~ e1 g1 a1 e1 g1 f#1 f1", J: "~@2 e1@2 f#1@2 g1@2 e1@2 a1 b1@2 ~ e2@2", K: "a1 ~ a1@2 e1@3 ~ g1@3 ~ g#1@4",
  L: "~@2 a1@2 e1@2 e1@2 g1@2 g1@2 g#1 ~ g#1 ~", M: "a1 ~ a1@2 e1@3 ~ g1@4 ~@2 d2@2",
  N: "g2 ~ g2@2 f#2 ~ f#2@2 e2@2 b1 ~ g1@2 b1 ~", O: "e1@2 e1@2 a1@2 a1@2 b1 ~ d2@3 ~ e2@2",
  P: "~@2 e1@2 a1 ~ a1@2 b1 ~ b1@2 d2 ~ e2@2", Q: "~@2 e1@2 a1 ~ a1@2 b1 ~ b1@2 e2 ~ d2@2",
  R: "e2@2 e1@2 a1@2 a1@2 b1 ~ d2@3 ~ e2@2", S: "~@2 e2@2 d2 ~ e2@2 a2@2 ~ g2 e2 ~ b1 ~",
  T: "~@2 e1@2 a1 ~ a1@2 b1 ~ d2 ~ e2@2 f#1 ~", U: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  V: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~", W: "f#1!3 ~ a1@2 b1@8 ~@2", X: "e1@7 b1", Y: "e2@7 b1",
  Z: "~@12 b1 ~ e2 b1, e1@7 ~", AA: "e1@13 ~@3", AB: "~@7 b1, e1", AC: "[e1@5 ~@3]/2",
})).s("gm_electric_guitar_jazz").gain(0.4)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@4 A B ~@9 C D E ~@13 F@2 ~@4 G H I J K@2 ~ L@2 ~@2 M ~@3 N O ~@2 P@2 H Q J R@2 S@2 ~@16 T@4 U@4 V@2 W@2 X ~@11 Y ~@3
  Z@2 ~@2 M ~@4 G H AA AB AC AD
>`.pickRestart({
  A: "~@4 [d#3,a3,d4] ~ [a3,d4,d#4] ~", B: "[a4,a5]@3 ~", C: "b5", D: "f#5", E: "e5", F: "[~ b5@3, e5 ~]/2",
  G: "g#2@15 ~", H: "g2@15 ~", I: "c#3@15 ~", J: "~@4 [d#3,a3,d4] ~ [a3,d4,d#4] ~, c3@15 ~",
  K: "[~@8 [e2,e3]@3 [e2,e3]!2 ~ [e2,e3]@8 ~@10]/2", L: "[[e4,g4]@9 ~@7]/2",
  M: "~@4 d4 e4 d4 e4 g4 e4 a4 b4 a4 g4 e4@2", N: "~@13 c#5@2 b4, d5", O: "a4 ~",
  P: "[~@16 g#2@15 ~, [g5,b5,g6]@9 ~@7]/2", Q: "c#3@15 ~, g#2@3 ~@13", R: "[~@8 a4@3 a4 ~@2 a4@17 ~]/2",
  S: "[~ d5@4 a4@6 ~@5]/2", T: "d5/4", U: "c#5/4", V: "d5/2", W: "c#5/2", X: "b4", Y: "a5@11 ~@5",
  Z: "[~@2 e4@2 [g4,b4] ~ e4 ~ [d4,f#4]@2 b3@2 [d4,f#4]@2 [e4,g4]@7 ~@11]/2", // G D Em
  AA: "c#3@5 d#3 f3@2 g#3@5 f3 f#3@2, g#2@3 ~@13", AB: "g3@7 ~ [d#3,a3,d4]@2 ~@2 [d#3,a3,d4]@2 ~@2",
  AC: "[d#3,a3,d4] ~ [d#3,a3,d4] ~ [d#3,a3,d4] ~ [a3,d4,d#4] ~", AD: "[d#3,a3,d4] ~@7",
})).s("gm_distortion_guitar").gain(0.2)

// chords · distortion guitar · "DISTORTION" · soft notes · D
const distortion_guitar_soft = note("<~@123 [~@2 [d#3,a3,d4] ~ [d#3,a3,d4] ~ [d#3,a3,d4] ~]>")
  .s("gm_distortion_guitar").gain(0.1)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  ~ A B C D ~@32 A B C D ~@16 A B C D ~@19 E F@2 G H I J@2 K L M N O P ~@3 Q R S@2 T R U@2 ~@13 A B C D ~@2
>`.pickRestart({
  A: "[g#3,d4,f4]", B: "[g3,d4,f4]", C: "[c#3,g#3,a#3,d#4]",
  D: "[c4,f4]@8 [b2,d#3,a3,d4,g4] ~@3 [b2,d#3,a3,d4,g4] ~@3, [c3,g3]", E: "~@14 e5 d5",
  F: "[[d4,f#4,b4]@2 e5 d5 b4@2 ~@3 f#5@2 b4@2 e5@2 ~ [d4,f#4]@2 ~ b4 [d4,f#4,c#5]@2 ~ a4 b4@2 ~ d5 ~@2 b4 c#5, ~@6 b4@2 [b3,e4]@2 ~@13 [b3,e4]@2 ~@7, ~@7 c#5@2 ~@6 d5@2 ~@15]/2", // Bm D Dmaj7 E5
  G: "d5 c#5 d5 e5 f#5 ~ e5 f#5 g5!2 f#5 g5 a5!2 g5 a5, [d4,f#4] ~@3 [b3,e4] ~@3", // D E5
  H: "[d4,f#4,b5]@2 a5 ~ [d4,f#4]@2 f#5 ~ [b3,e4]@2 ~ a5 ~ [b3,e4]@2 d5, ~@4 f#5 ~@3 e5 ~ b5@2 ~ f#5 ~@2", // Bm D E5
  I: "[g#3,e4] ~ e5 ~ b5@2 b5 g#5 [f#3,d#4] ~ [d#5,d#6] ~ d#5 [b4,b5] ~@2, e5@2 ~@7 g#5@2 ~ d#6@2 ~@2", // C#m D#m D# B
  J: "[[g#3,e4]@3 [a4,a5] [b4,b5] [c#5,c#6]@2 ~ [f#3,d#4,c#5,c#6]@3 ~@2 [f#3,d#4]!2 ~ [g#3,e4]@3 [b4,b5] [c#5,c#6] [d#5,d#6] ~ d#6 [f#3,d#4]@3 [c#5,c#6] [d#5,d#6] [e5,e6] ~ [e5,e6], c#5 ~@10 [b4,b5]@2 [d#5,d#6]@2 [d#5,d#6]@2 ~@6 d#5@2 ~@7, ~@12 [c#5,c#6]@3 ~@17]/2", // C#m A B C# D#m7 D#m C#m B …
  K: "[g#3,e4]@2 ~ [d#5,d#6] [e5,e6] [f#5,f#6] ~ [f#3,d#4]@3 [d#5,d#6] [e5,e6] [f#5,f#6] d#5 e5 f#5, ~@3 [g#3,e4]@2 ~@2 [f#5,f#6] ~@8", // C#m D# E F# D#m D# E F# …
  L: "d5 e5 f#5!2 ~ e5 f#5!2 g5!2 f#5 g5 a5!2 g5 a5, [d4,f#4] ~@3 [b3,e4] ~@3", // D E5
  M: "b5!2 a5 b5 c#6!2 b5 c#6 d6!2 c#6 a5@2 c#6 d6 e6, [d4,f#4]@2 ~@2 [d4,f#4]@2 ~ [b3,e4]@2 ~@7", // D E5
  N: "f#6!2 e6 d6 c#6@2 d6 e6 g#6!2 f#6 e6 c#6!2 b5 a5, [g#3,e4]@3 ~@5 [f#3,c#4]@3 ~@5", // C#m F#5
  O: "[g#3,e4]@2 e5 f#5 g#5!2 f#5 g#5 a5!2 g#5 a5 b5 e5 f#5 g#5, f#5 ~@3 [g#3,e4]@3 [f#3,c#4]@3 ~@6", // C#m F#5
  P: "a5@2 ~ a5@2 ~@11", Q: "[a#3,d4,f4] [c4,e4,g4]", R: "[b3,d4] [a3,c4], a4",
  S: "[~@13 [e3,g3] b3!2 e4 [e4,g4] b4 [g4,b4] e5!2 g5 b5 ~@5 e3@3, [d4,a4]@26 [g4,b4] e4 [g3,b3]@4, b3@14 e3@11 [e5,g5]@7, ~@3 [e2,b2]@5, ~@15 g3 b3@2 e4@2 g4 b4 e5 g5 [b5,e6]@8]/2", // Em G D5 G Em E5
  T: "[d4,f4,b4] [c4,e4,g4,b4]", U: "[[b3,d4,a4]@3 ~]/2",
})).s("gm_piano").gain(0.25).pan(0.4)

// other · acoustic guitar steel · "+12STR GTR"
const acoustic_guitar_steel = note("<~@21 A B@2 ~@5 C ~@3 D ~@11 C ~@3 C ~@3 D ~@56 C ~@3 D ~@9>".pickRestart({
  A: "~@2 e3 ~ e3 ~ b3 ~@9", B: "[~@12 [b3,c4] b3 a3@4 b3 ~@13]/2", C: "~ b3 g4 a4 b4 a4 f#4 e4",
  D: "~ e4 g4 a4 b4 a4 f#4 g4",
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.7)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E@12 F@2 E@14 F@2 E@2 A B C D E@12 F@2 E@2 A B C D E@4 G H G H G H G H I J I J I J I J K L K L M N M N K L O
  P ~@4 Q R S T@2 R U@2 ~ I J I J I J I J V W I J A B C X ~@2
>`.pickRestart({
  A: "[g#3,d4,f4]", B: "[g3,d4,f4]", C: "[c#3,g#3,a#3,d#4]",
  D: "[c4,f4]@8 [b2,d#3,a3,d4] ~@3 [b2,d#3,a3,d4] ~@3, [c3,g3]", // F5 B7 C5
  E: "[[e3,g3,b3]@6 ~@4 [f#3,a3,c#4]@2 ~@2 [g3,b3,d4]@5 ~@3 [f#3,a3,c#4]@5 ~@5]/2", // Em F#m G F#m
  F: "[[e3,a3,c#4]@6 ~@4 [f#3,b3,d4]@2 ~@2 [g3,c#4,e4]@5 ~@3 [f#3,b3,d4]@5 ~@5]/2", // A Bm C#dim Bm
  G: "[e3,g3,c#4,e4]@2 ~ [e3,g3,e4] ~@2 [f#3,a3,d4,f#4] ~ [e3,g3,c#4,e4]@3 ~@5", // C#dim Em D C#dim
  H: "~@2 [e3,g3,c#4,e4] ~@2 [f#3,a3,d4,f#4] ~ [c#3,e3,g3,c#4] [e3,g3,c#4,e4]@2 ~@6", // C#dim D C#dim
  I: "[e3,g3,b3]@4 ~@6 [f#3,a3,c#4] ~@3 [g3,b3,d4]@2", J: "~@6 [f#3,a3,c#4]@5 ~@5", K: "[b3,d4,f#4] ~ [g3,b3,e4] ~",
  L: "[b3,d4,f#4] ~ [b3,d4,f#4] ~ [g3,b3,e4]@2 ~@2", M: "[g#3,b3,e4] ~ [g#3,b3,d#4] ~",
  N: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,d#4]@2 ~@2", O: "[g#3,b3,e4] ~ [a3,c#4,f#4] ~",
  P: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,c#4,f#4]@2 ~@2", Q: "f4@3 g4@3 a4@2 b4@3 c5@3 d5@2",
  R: "e5@5 ~@2 c5 b4@3 g4@2 ~ e4@2, ~@3 d5 ~@4", S: "a4@5 ~@3",
  T: "[~@16 f4@3 g4@3 a4@2 b4@3 c5@3 d5@2, ~@14 e4@5 ~@13]/2",
  U: "[a4 g4 a4@11 ~@5 e2@8 ~@6, ~@7 e4@6 ~@3, ~@15 b3@12 ~@5, ~@4 g3@3 ~, ~@17 e3@12 ~@3]/2",
  V: "[e3,a3,c#4]@4 ~@6 [f#3,b3,d4] ~@3 [g3,c#4,e4]@2", W: "~@6 [f#3,b3,d4]@5 ~@5",
  X: "[c4,f4]@8 [b2,d#3,a3,d4,g4] ~@3 [b2,d#3,a3,d4,g4] ~@3, [c3,g3]", // F5 G C5
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.6)

// drums · rim
const rim = s("rim").struct("<~@52 [x!6 ~ x!2 ~ x ~ x ~@3] ~@71>").gain(0.36)

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

// drums · snare
const snare = s("sd").struct("<~@4 A B@3 C B@28 ~@3 A B@16 ~@3 A B@36 ~@3 D ~@3 D ~ B@12 ~@3 A ~@2>".pickRestart({
  A: "~@2 x!2", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@4 x!2 ~@2",
})).gain(0.57)

// drums · low tom
const low_tom = s("lt").struct("<A ~ B ~@21 A ~@13 B ~@19 B ~@13 A ~@31 C D ~@11 C ~ B ~@4>".pickRestart({
  A: "~@11 x!2 ~ x ~", B: "~@11 x!2 ~ x!2", C: "~@7 x", D: "~@6 x!2",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B C B C B C B C B C B C B C B A B C B C B C B C B C B C B C B ~@4 A B C B C B C B C B C B C B C B ~@4 A B C B C
  B C B C B C B C B C B C B C B ~@12 C B C B C B C B C B C B ~ C B C B C B C B C B C B ~@6
>`.pickRestart({
  A: "x!8", B: "~@2 x!6", C: "x ~ x!6",
})).gain(0.5)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 A ~@15 B ~@19 C ~@3 C D ~@11 E ~@3 F ~@2>".pickRestart({
  A: "~@2 x!3 ~@3 x ~@2 x ~@4", B: "~@4 x ~@3 x ~@2 x ~@4", C: "~@12 x!2 ~@2", D: "~@8 x ~@2 x!2 ~ x ~",
  E: "~@10 x!4 ~@2", F: "~@2 x!2",
})).gain(0.43)

// drums · ride
const ride = s("rd").struct(`<
  ~@81
  [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!4
  [~@2 x ~ x ~ x!3 ~ x ~ x ~ x ~]
  [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!4
  [~@2 x ~ x ~ x!3 ~ x ~ x ~ x ~]
  [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]
  [x ~ x ~ x ~ x!2 ~@2 x ~ x ~ x ~]
  ~@31
>`).gain(0.43)

// drums · china
const china = s("cr").struct(`<
  ~ A@4 ~@32 A@4 ~@16 A@4 ~@24 A ~@4 A ~ B A ~@2 A ~ A ~ A ~ A ~ A ~@12 A@4 ~@3
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.5)

// … 79 more lines