Strudelify

Fireball

Deep Purple

KeyB minorTempo238 bpm
0:00/0:00
// Fireball — Deep Purple
// 238 bpm, 4/4, key B minor. 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: Full arrangement: all 205 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(238/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 · electric bass pick · "bAIXO"
const bass = note(`<
  ~@8 A B@2 C D B@2 C D E@2 C D F@2 G H@8 I ~ J K@2 L J K@2 L J K@2 L J K@2 M@8 N@2 ~ O P Q R S T U V W X Y Z AA@2 AB@6
  AC K@2 L J K@2 L J K@2 L J K@2 M@8 N@2 ~ AD ~@15 AE ~ AF ~ AG ~ AH@4 AI AJ AK AL AI AJ AK AL AI AJ AM AL AI AJ AN AL
  AI AJ AK AL AI AJ AK AL AI AJ AM AL AI AJ AN AO@8 AP@3 AI AJ AK AL AI AJ AK AL AI AJ AM AL AI AJ AN AL AI AJ AK AL AI
  AJ AK AL AI AJ AM ~@4
>`.pickRestart({
  A: "~ c2@9 b1@2 b1@2 b1@2", B: "[b1@2 b1@3 ~ b1 ~ b1@3 ~ b1 ~ a1@4 d2@4 a2@3 ~ b1@2 b1@2 b1@2]/2",
  C: "b1@2 b1@3 ~ b1@2 d2@3 ~ d2@2 a2@2", D: "~ b2 ~@3 b1!3",
  E: "[b1@2 b1@3 ~ b1 ~ b1@3 ~ b1 ~ a1@4 d2@4 a1@3 ~ b1@2 b1@2 b1@2]/2",
  F: "[b1@2 b1@3 ~ b1 ~ b1@3 ~ b1 ~ a2@4 d2@4 a1@3 ~ b1@2 b1@2 b1@2]/2", G: "b1@2 b1@3 ~ b1@2 d2@3 ~ d2@2 a1@2",
  H: "[~ b1@4 c#2@4 c#2@6 c#2@2 d2@2 d#2@2 e2@4 a2@2 b2@4 d3@2 e3@2 d3@2 d2@2 g1@2 g1@2 g#1@2 a1@2 a#1@2 b1@2 c2@2 c#2@2 f#1@2 f#1@2 g#1@2 g#1@2 c2]/8",
  I: "~ c2@2 c#2@2 c#2@2 ~", J: "~@3 b1!5", K: "[~@2 b1 ~ b1@3 ~ b1 ~ a1@4 d2@4 a1@3 ~ b1@2 b1@2 b1@2 b1@2 b1@2]/2",
  L: "~@2 b1@2 d2@3 ~ d2@2 a1@2 ~@2 b1@2",
  M: "[~@2 b1@2 d2@3 ~ d2@2 a1@2 ~@2 b1@8 c#2@8 c#2@12 c#2@4 d2@4 d#2@4 e2@8 a2@4 b2@8 d3@4 e3@4 d3@4 d2@4 g1@4 g1@4 g#1@4 a1@4 a#1@4 b1@4 c2@4 c#2@4 f#1@4 f#1@2]/8",
  N: "[~ g#1@2 g#1@2 c2@2 c2@2 c#2@2 c#2@2 ~@3]/2", O: "~@6 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  P: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", Q: "e2 ~ e2 ~ e2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  R: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", S: "c#2 ~ c#2 ~ c#2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  T: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", U: "c2 ~ c2 ~ c2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  V: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", W: "g2 ~ g2 ~ g2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  X: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", Y: "d2 ~ d2 ~ d2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  Z: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  AA: "[a2 ~ a2 ~ a2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@4 f#2 ~ f#2@4 f#2 ~ f#2 ~ f#2@4]/2",
  AB: "[f#2 ~ f#2@3 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@4 f#2 ~ f#2@4 f#2 ~ f#2 ~ f#2@4]/2",
  AC: "f#2 ~ f#2@3 ~ b1@2 b1@2 b1@2 b1@2 b1@2", AD: "[a1,e2] ~ [b1,f#2]@2 ~@12", AE: "~ b1 ~@6", AF: "~ b1 ~ b1 ~@4",
  AG: "~ b1@2 ~@5",
  AH: "[~@2 a#2@4 b2@4 e2@4 f2@4 b1@4 c2@4 a1@4 a#1@4 f1@4 g1@4 g#1@4 a1@4 b1@2 b1@2 b1@2 b1@2 b1@3 ~ b1 ~]/4",
  AI: "b1@3 ~ b1 ~ a1@4 d2@4 a1@2", AJ: "~@2 b1@2 b1@2 b1@2 b1@2 b1@3 ~ b1@2", AK: "d2@3 ~ d2@2 a2@2 ~@2 b2@2 ~@4",
  AL: "~@2 b1@2 b1@2 b1@2 b1@2 b1@3 ~ b1 ~", AM: "d2@5 ~ c#2@5 ~ c2@4", AN: "d2@3 ~ d2@2 a1@2 ~@2 b1@2 ~@4",
  AO: "[~ c#2@4 c#2@6 c#2@2 d2@2 d#2@2 e2@4 a2@2 b2@4 d3@2 e3@2 d3@2 d2@2 g1@2 g1@2 g#1@2 a1@2 a#1@2 b1@2 c2@2 c#2@2 f#1@2 f#1@2 g#1@2 g#1@2 c2@2 c2@2 c#2]/8",
  AP: "[~@2 c#2@26 c2@6 b1@2 b1@2 b1@2 b1@2 b1@3 ~ b1 ~]/3",
})).s("gm_electric_bass_pick").gain(0.64)

// other · distortion guitar · "gUITARRA"
const distortion_guitar = note(`<
  ~@8 A B@2 C D B@2 C D B@2 C D B@2 C E@5 F@4 ~ G H@2 I G H@2 I G H@2 I G H@2 J@3 K@7 ~ L M N O P Q R S T U V W@7 X@3
  H@2 I G H@2 I G H@2 I G H@2 J@3 K@7 ~ Y ~@15 Z ~ AA ~ AB ~ AC@4 AD AE AF AG AD AE AF AG AD AE AF AG AD AE AF AG AD AE
  AF AG AD AE AF AG AD AE AF AG AD AE AH@3 AI@8 AG AJ AG AK AG AJ AG AK AG AJ AG AK AG AJ AG AK AG AJ AG AK AG AJ AG AK
  AG AJ AG AK ~@4
>`.pickRestart({
  A: "~@5 b2!3", B: "[b2@2 b2@3 ~ b2 ~ b2@3 ~ b2 ~ a2@4 d3@4 a2@3 ~ b2@2 b2@2 b2@2]/2",
  C: "b2@2 b2@3 ~ b2@2 d3@3 ~ d3@2 a2@2", D: "~ b2 ~@3 b2!3",
  E: "[~ b2@4 [c#3,g#3]@10 c#3@2 d3@2 d#3@2 e3@4 [e3,b3]@2 [e3,b3]@10 d3@3]/5", // C#5 E5
  F: "[~ [d3,a3]@12 [c#3,g#3]@16 [c#3,g#3] ~@2]/4", G: "~@3 b2!5",
  H: "[~@2 b2 ~ b2@3 ~ b2 ~ a2@4 d3@4 a2@3 ~ b2@2 b2@2 b2@2 b2@2 b2@2]/2", I: "~@2 b2@2 d3@3 ~ d3@2 a2@2 ~@2 b2@2",
  J: "[~@2 b2@2 d3@3 ~ d3@2 a2@2 ~@2 b2@8 [c#3,g#3]@20 c#3@4 d3@2]/3", // C#5
  K: "[~ d#3@2 e3@4 [e3,b3]@2 [e3,b3]@10 d3@4 [d3,a3]@12 [c#3,g#3]@16 [c#3,g#3] ~@4]/7", // E5 D5 C#5
  L: "~@6 e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", M: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  N: "e3 ~ e3 ~ e3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~", O: "c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~",
  P: "c#3 ~ c#3 ~ c#3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", Q: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  R: "c3 ~ c3 ~ c3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~", S: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~",
  T: "g3 ~ g3 ~ g3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", U: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  V: "d3 ~ d3 ~ d3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~",
  W: "[a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ [a3,e4]@8 f#3@16 f#3@16 f#3@16 f#3@16 f#3@16 f#3@10]/7", // A5
  X: "[~@3 f#3@16 b2!5]/3", Y: "[a2,e3] ~ [b2,f#3]@2 ~@12", Z: "~ [b2,f#3] ~@6", AA: "~ [b2,f#3] ~ [b2,f#3] ~@4",
  AB: "~ [b2,f#3]@2 ~@5", // B5
  AC: "[~@2 a#3@4 b3@4 e3@4 f3@4 b2@4 c3@4 a2@4 b2@4 f2@4 g2@4 g#2@4 a2@4 b2@2 b2@2 b2@2 b2@2 b2@3 ~ b2 ~]/4",
  AD: "b2@3 ~ b2 ~ a2@4 d3@4 a2@2", AE: "~@2 b2@2 b2@2 b2@2 b2@2 b2@3 ~ b2@2", AF: "d3@3 ~ d3@2 a2@2 ~@2 b2@2 ~@4",
  AG: "~@2 b2@2 b2@2 b2@2 b2@2 b2@3 ~ b2 ~", AH: "[d3@3 ~ d3@2 a2@2 ~@2 b2@8 [c#3,g#3]@20 c#3@4 d3@4 d#3@2]/3",
  AI: "[~ e3@4 [e3,b3]@2 [e3,b3]@10 d3@4 [d3,a3]@12 c#3@16 [c#3,g#3]@13 d3@2]/8", // E5 D5 C#5
  AJ: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ d3@2 b2@2 a2@2", AK: "b2 ~ d3@2 b2@2 a2@4 b2@4 ~@2",
})).s("gm_distortion_guitar").gain(0.48).pan(1)

// chords · drawbar organ · "hAMMOND"
const drawbar_organ = note(`<
  ~@8 A B@2 C D B@2 C E F@2 G H F@2 G I@8 J ~ K L@2 M K L@2 M N O@2 P N O@2 P Q@8 R ~ S@2 T@8 U@4 V@6 W L@2 M K L@2 M N
  O@2 P N O@2 P Q@8 R ~ X ~@15 Y ~ Z ~ AA ~ AB@4 ~@15 AC AD AE AF AC AD AE AF AG AH AI AJ AG AH AI AK@7 AL@4 AM@8 AN AO
  AN AO AN AO AN AO AN AO AN AO AN AO AN AO AN AO AN AO ~@4
>`.pickRestart({
  A: "~@5 [b2,f#3]!3", // B5
  B: "[[b2,f#3]@2 [b2,f#3]@3 ~ [b2,f#3] ~ [b2,f#3]@3 ~ [b2,f#3] ~ [a2,e3]@4 [d3,a3]@4 [a2,e3]@3 ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2]/2", // B5 A5 D5 A5 B5
  C: "[b2,f#3]@2 [b2,f#3]@3 ~ [b2,f#3]@2 [d3,a3]@3 ~ [d3,a3]@2 [a2,e3]@2", D: "~ [b2,f#3] ~@3 [b2,f#3]!3",
  E: "~ [b2,f#3] ~@3 b2!3", F: "[b2@2 b2@3 ~ b2 ~ b2@3 ~ b2 ~ a2@4 d3@4 a2@3 ~ b2@2 b2@2 b2@2]/2",
  G: "b2@2 b2@3 ~ b2@2 d3@3 ~ d3@2 a2@2", H: "~ b2 ~@3 b2!3", I: "[~ b2 ~@3 c#3@16 e2@16 d3@16 c#3@11]/8",
  J: "~@5 c#3 ~@2", K: "~@3 [b2,f#3]!5",
  L: "[~@2 [b2,f#3] ~ [b2,f#3]@3 ~ [b2,f#3] ~ [a2,e3]@4 [d3,a3]@4 [a2,e3]@3 ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2]/2", // B5 A5 D5 A5 B5
  M: "~@2 [b2,f#3]@2 [d3,a3]@3 ~ [d3,a3]@2 [a2,e3]@2 ~@2 [b2,f#3]@2", N: "~@3 b2!5",
  O: "[~@2 b2 ~ b2@3 ~ b2 ~ a2@4 d3@4 a2@3 ~ b2@2 b2@2 b2@2 b2@2 b2@2]/2", P: "~@2 b2@2 d3@3 ~ d3@2 a2@2 ~@2 b2@2",
  Q: "[~@3 c#3@16 e2@16 d3@16 c#3@13]/8", R: "~@3 c#3 ~@4", S: "[~@3 [e3,b3,e4]@13]/2",
  T: "[~ [e3,b3,e4]@2 [c#3,g#3,c#4]@16 [c3,g3,c4]@16 [g2,d3,g3]@16 [d3,a3,d4]@13]/8", // E5 C#5 C5 G5 D5
  U: "[~@6 [a3,e4,a4]@32 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4]@4 [f#3,c#4] ~ [f#3,c#4]@4 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4]@4]/4", // A5 F#5
  V: "[[f#3,c#4] ~ [f#3,c#4]@4 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4]@4 [f#3,c#4] ~ [f#3,c#4]@4 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4]@4]/2", // F#5
  W: "[f#3,c#4] ~ [f#3,c#4]@3 ~ [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2", X: "a2 ~ b2@2 ~@12",
  Y: "~ [b2,f#3] ~@6", Z: "~ [b2,f#3] ~ [b2,f#3] ~@4", AA: "~ [b2,f#3]@2 ~@5",
  AB: "[~ a#3@2 b3@2 e3@2 f3@2 b2@2 c3@2 a2@2 b2@2 f2@2 g2@2 g#2@2 a2@2 ~@7]/4",
  AC: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@3 ~ [b2,f#3] ~", // B5
  AD: "[b2,f#3]@3 ~ [b2,f#3] ~ [a2,e3]@4 [d3,a3]@4 [a2,e3]@2", // B5 A5 D5 A5
  AE: "~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@3 ~ [b2,f#3]@2", // B5
  AF: "[d3,a3]@3 ~ [d3,a3]@2 [a2,e3]@2 ~@2 [b2,f#3]@2 ~@4", AG: "~@2 b2@2 b2@2 b2@2 b2@2 b2@3 ~ b2 ~",
  AH: "b2@3 ~ b2 ~ a2@4 d3@4 a2@2", AI: "~@2 b2@2 b2@2 b2@2 b2@2 b2@3 ~ b2@2", AJ: "d3@3 ~ d3@2 a2@2 ~@2 b2@2 ~@4",
  AK: "[d3@3 ~ d3@2 a2@2 ~@2 b2@8 c#3@32 e2@32 d3@30]/7", AL: "[~ c#3@31]/4",
  AM: "[~@2 f#7@6 f#7@2 f#7@3 ~ f#7 ~ f#7@5 ~ f#7 ~ f#7 ~ f#7@2 f#7@2 a7@3 ~ f#7@6 f#7@2 f#7@3 ~ f#7 ~ f#7@5 ~ f#7 ~ f#7 ~ f#7@2 f#7@2 a7@3 ~ f#7@6 f#7@2 f#7@3 ~ f#7 ~ f#7@5 ~ f#7 ~ f#7 ~ f#7@2 f#7@2 a7@3 ~ f#7@6 f#7@2 f#7@3 ~ f#7 ~ f#7@5 ~ f#7 ~ f#7 ~ f#7@2 f#7@2 a7@2, ~ b6@63]/8",
  AN: "~@2 a7@4 a7@2 a7@2 a7@3 ~ a7 ~", AO: "a7@5 ~ a7 ~ a7 ~ a7@2 a7@2 a7@2",
})).s("gm_drawbar_organ").gain(0.39).pan(0)

// chords · overdriven guitar · "sOLO"
const overdriven_guitar = note("<~@106 A@3 B@7 C@5 D ~@83>".pickRestart({
  A: "[~ b3@23]/3",
  B: "[~ c4@17 b3@16 a3@6 b3@5 b3@5 a3@8 f#3@4 e3@4 f#3@4 e3@2 f#3@4 e3@2 f#3@4 a3@20 b3@2 a3@2 f#3@3 e3 b2@2]/7",
  C: "[~ d3@33 [b2,f#3]@6 [d3,a3]@6 [e3,b3]@8 [d3,a3]@4 [b2,f#3]@4 [a2,e3]@4 [b2,f#3]@2 [b2,f#3]@2 ~@2 [a2,e3]@2 [a2,e3]@2 ~@2 [g2,d3]@2]/5", // B5 D5 E5 D5 B5 A5 B5 A5 …
  D: "[g2,d3] ~ [f#2,c#3]!2 ~ [e2,b2] ~ [d2,a2]", // G5 F#5 E5 D5
})).s("gm_overdriven_guitar").gain(0.52).pan(0.7)

// chords · percussive organ · "fX"
const percussive_organ = note("<~@122 A B C D E@6 F G H I@2 J K L M N O P Q R S@2 ~@57>".pickRestart({
  A: "~@2 [f#3,b3]!14", B: "[f#3,b3] [b3,e4] [c4,f4]!8 [a#3,d#4]!6", C: "a#3 [d4,b4] [f#4,c#5]!14",
  D: "[f#4,c#5] [b4,f#5] [c5,g5]!2 [a#4,f5]!2 [c5,g5]!2 [a#4,f5]!4 [a#3,f4]!4", // F#5 B5 C5 A#5 C5 A#5
  E: "[[b3,c4,g4,a4] [d4,b4] [f6,g6,e7] ~@2 [a7,d#8] [f7,g#7,d8] ~@2 [d7,d#7,f#7] [d#7,f7] ~@23 f#7@48 [f#4,b4] ~ [f#5,b5] ~ [f#5,b5]!2 ~@2 [f#4,b4] ~ [f#5,b5] ~ [f#5,b5] ~, ~@4 [f7,g7,b7]@2 [g7,c#8]@2 [b6,e7]@2 c#6@5 [a4,a#5]@5 ~@76, ~@5 [e7,a#7]@2 [c7,f7,a7,c8]@2 [g6,a#6,c#7,g7,g#7]@2 [b5,g6,a#6,d#7,f7]@2 [c#5,e5,b5,d6]@5 ~@16 e8@50 ~@12, ~@10 [f6,g#6,a6,b6,c7,d7,f#7]@2 f#5@4 g4@5 ~@75, ~@12 [e6,c#7]@2 [b4,a5,c6]@5 [f#2,a#2,c#3,f3,f#3,a#3]@24 ~@53]/6", // Cmaj7 G C Adim Ddim D D#sus2 B5 …
  F: "[f#4,b4] ~ [f#4,b4] ~ [f#5,b5] ~ [f#5,b5] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [g5,c6] ~", // B5 C5
  G: "[g5,c6] ~ [f#4,b4]@2 ~@2 [f#4,b4]@2 ~@2 [g4,c5]@2 ~@2 [g4,c5]@2", // C5 B5 C5
  H: "[f#4,b4]@3 ~ [f#4,b4]@2 e4@2 ~@2 [b3,f#4]@2 ~@2 [a4,e5] ~", // B5 A5
  I: "[[b4,f#5] ~ [f#4,b4,f#5]@2 ~@2 [f#4,b4,f#5]@2 ~@2 [b4,e5]@2 [c#5,f#5]@2 [d5,g5]@4 [c#5,f#5]@4 [b4,e5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]@2]/2", // B5 E5 F#5 G5 F#5 E5 D5
  J: "~ [b4,e5] [c#5,f#5] [b4,f#5,b5]@2 [c#5,f#5] ~ [b4,e5]", K: "~@2 [a4,d5]@2 [f#5,b5]@3 ~ [a4,d5]@2 [f#5,b5]@2 ~@4",
  L: "~ [f#5,b5]@4 [e5,a5] [f#5,b5] [g5,c6]", M: "[e5,a5] [f#5,b5]@4 [e5,a5] [f#5,b5] [g5,c6]",
  N: "[e5,a5] [f#5,b5]@2 [b5,e6]@2 [a5,d6] [g5,c6]@2", O: "[f#5,b5]@2 [f#5,b5] [e5,a5]@2 [f#5,b5]@2 [g5,c6]",
  P: "[f#5,b5] [e5,a5]@2 [g5,c6] [f#5,b5] [e5,a5]@2 [g5,c6]", // B5 A5 C5 B5 A5 C5
  Q: "[f#5,b5] [d5,g5]@2 [g5,c6] [f#5,b5] [d5,g5]@2 [g5,c6]", // B5 G5 C5 B5 G5 C5
  R: "[f#5,b5] [c#5,f#5]@2 [d5,g5] [c#5,f#5] [b4,e5]@2 [a4,d5]", // B5 F#5 G5 F#5 E5 D5
  S: "[[f#4,b4] [a4,d5]@2 [a4,d5] [f#4,b4] [c#5,f#5]@2 [f#4,b4]@4 ~@5]/2", // B5 D5 B5 F#5 B5
})).s("gm_percussive_organ").gain(0.28).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I J@15 I K L M L M J N O ~ P Q@14 R P@2 S Q T Q U Q V ~ P W P W P W P W P W P W X Y@5 Z U P Q@14 R P@2
  S Q S Q U Q V ~ AA@16 ~@6 P@2 AB AC@30 AD AE K AC AF AC AG AC AH K AI AJ AC@7 AK AC@7 K AC@12 ~@4
>`.pickRestart({
  A: "~@11 x ~ x ~@2", B: "~ x ~ x ~@3 x ~ x ~@3 x ~ x", C: "~@3 x ~ x ~@3 x ~@3 x ~ x", D: "~@3 x ~ x ~@3 x ~@5 x",
  E: "~@3 x ~@3 x ~@5 x ~ x", F: "~@3 x ~ x ~@3 x ~ x ~@3 x", G: "~ x ~@3 x ~ x ~ x ~@3 x ~ x",
  H: "~@3 x ~ x ~@3 x ~@6", I: "~@5 x ~@2", J: "~ x!2 ~@2 x ~@2", K: "~ x ~@3 x ~@2", L: "~ x!2 ~@2 x ~ x",
  M: "~@2 x ~@2 x ~@2", N: "x ~ x ~@2 x ~@2", O: "~ x ~@2 x!2 ~@2", P: "~@3 x ~@3 x", Q: "x ~@2 x ~@3 x",
  R: "x ~@2 x ~@4", S: "x ~@2 x ~ x ~@2", T: "x ~@4 x ~@2", U: "x ~@2 x ~@2 x ~", V: "~@2 x!2 ~@4",
  W: "~@2 x ~ x ~@2 x", X: "~@3 x!2 ~@2 x", Y: "x ~@2 x!2 ~@2 x", Z: "x", AA: "x!3 ~ x!3 ~", AB: "~@3 x ~ x ~ x",
  AC: "~ x ~@3 x!2 ~", AD: "~ x ~@2 x!2 ~ x", AE: "~ x!2 ~@5", AF: "~ x ~ x ~@2 x ~", AG: "~@3 x ~@2 x ~",
  AH: "~ x ~@2 x ~ x ~", AI: "x!2 ~ x!2 ~ x ~", AJ: "~@7 x", AK: "~ x ~@6",
})).gain(0.39)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E F G H I J@15 K L ~ M N O J O P ~ Q R@14 S T U J V O R W R X ~ Y Z AA Z AA Z AA Z AA Z AA Z Q R@5 AB AC T
  R@14 S T U I V AD R W R X ~ J@16 X ~ AE ~ X ~ R Q AF J@30 AG AH AG N W AI W J AJ J AK ~ J@7 AL J@20 ~@4
>`.pickRestart({
  A: "~@15 x", B: "~@5 x ~@5 x ~@4", C: "~ x ~@5 x ~@3 x ~@4", D: "~ x ~@5 x ~@3 x ~ x!2 ~", E: "~@11 x ~@4",
  F: "~ x ~@5 x ~@5 x ~@2", G: "~@3 x ~@7 x ~@4", H: "~ x ~@5 x ~@3 x!5", I: "~@7 x", J: "~@3 x ~@3 x",
  K: "~@2 x!3 ~@9 x ~", L: "~@2 x ~ x ~@2 x", M: "~@2 x ~@3 x ~@7 x!2", N: "x ~@2 x ~@4", O: "~ x ~ x ~@3 x",
  P: "~@3 x ~@4", Q: "~@5 x ~@2", R: "~ x ~@3 x ~@2", S: "~@2 x ~@7 x ~@3 x!2", T: "x ~@4 x ~@2", U: "x ~ x ~@2 x ~@2",
  V: "~@2 x ~@7 x!3 ~@3", W: "~ x ~@3 x ~ x", X: "~ x ~@6", Y: "~@2 x!3 ~@7 x ~@3", Z: "~ x ~ x ~@2 x ~", AA: "~@3 x",
  AB: "~@2 x ~@3 x!3 ~ x ~ x ~ x ~", AC: "~@2 x!3 ~@3 x ~ x ~@3 x!2", AD: "~ x ~@5 x", AE: "~ x ~ x ~@4", AF: "x!2 ~@6",
  AG: "~@3 x ~@2 x ~", AH: "x ~@5 x ~ x!4 ~@4", AI: "~@6 x!3 ~@5 x ~", AJ: "~@3 x ~ x ~ x", AK: "~@2 x ~@2 x ~ x",
  AL: "~@6 x ~@3 x!2 ~@4",
})).gain(0.39)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~@3 B ~@20 C ~@2 D ~ E ~ F G H ~@15 I ~@3 J F ~@2 K L M ~ E ~ E ~ E ~ E ~ E ~ E ~@23 I ~@3 J F ~@2 N O ~@24 P ~@32 D
  ~@3 C Q ~@3 R ~@8 C ~@23
>`.pickRestart({
  A: "~@11 x!3 ~@2", B: "~ x ~@3 x ~@3 x ~@6", C: "x", D: "~ x", E: "~ x ~@6", F: "~@7 x", G: "~@2 x ~ x!6 ~@6",
  H: "x!6 ~@10", I: "~@3 x", J: "~ x ~@2", K: "~@5 x ~ x", L: "~@2 x!2 ~@8 x!4", M: "x!2 ~@14", N: "~@8 x!4 ~@4",
  O: "x!4 ~@3 x!3 ~@2 x!4", P: "~@3 x ~ x ~ x", Q: "~@5 x ~@2", R: "~@4 x!4 ~@8",
})).gain(0.39)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@122
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]
  [~@5 x ~@2]
  [~ x ~@3 x ~@2]
  ~@77
>`).gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A ~ B ~ C ~@15 D ~ E ~@5 F G ~@16 H I J ~@5 K L ~@36 H I J ~@5 M N ~@23 J ~@32 M O P ~@7 Q ~@7 M ~@24
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@5 x ~ x ~ x ~@6", C: "~ x ~ x!5 ~@8", D: "~@5 x!4 ~@7", E: "~ x ~ x ~@4", F: "~@12 x!2 ~ x",
  G: "x!2 ~@10 x!4", H: "~ x!4 ~@11", I: "~@7 x", J: "~ x ~@6", K: "~@8 x!2 ~ x ~ x ~ x", L: "~ x ~@2 x!2 ~@2 x!4 ~@4",
  M: "~@12 x!4", N: "~@4 x!3 ~@3 x!2 ~@4", O: "x!2 ~@14", P: "~@5 x ~ x", Q: "x!4 ~@4 x!6 ~@2",
})).gain(0.39)

// drums · open hat
const open_hat = s("oh").struct("<~@60 A B C B C B C B C B C B D ~@132>".pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x!2 ~@3 x!3", D: "x!2 ~@6",
})).gain(0.39)

// drums · high tom
const high_tom = s("ht").struct("<~@33 [~@10 x!2 ~@4] ~@25 [~@6 x!2 ~@8] ~@20 [~ x!2 ~@13] ~@124>").gain(0.39)
// … 28 more lines

More by Deep Purple