Strudelify

Speed King

Deep Purple

KeyG minorTempo100 bpm
0:00/0:00
// Speed King — Deep Purple
// 100 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 73, 4/4 at bar 73) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · distortion guitar · "gTR i"
const distortion_guitar = note(`<
  ~ A B A B C D C E@6 F A B A B C D C E@6 F G@6 ~@18 H@3 ~@6 I@3 J K L M N O P Q R S R T U V U W X@2 Y@2 Z X@2 AA@2 AB
  X@2 AA@2 AC AD@4
>`.pickRestart({
  A: "[f2,c3] [g2,d3] ~@2 [f2,c3] [g2,d3] ~@2", B: "[f2,c3]@2 [g2,d3]@2 [c3,g3]@2 [bb2,f3]@2 g2 f2 [g2,d3]@2 ~@4",
  C: "[f2,c3] [g2,d3,g3]@3 [f2,c3] [g2,d3,g3]@3", // F5 G5 F5 G5
  D: "[f2,c3]@2 [g2,d3,g3]@2 [c3,g3,c4]@2 [bb2,f3,bb3]@2 g2 f2 [g2,d3,g3]@6", // F5 G5 C5 Bb5 G5
  E: "[[f2,c3]@2 [g2,d3,g3]@2 [c3,g3,c4]@2 [bb2,f3,bb3]@2 g2 f2 [f2,c3,f3] ~ [bb2,f3]@6 c3 bb2 c3 bb2 c3@2 bb2 c3@2 e2@2 f2@2 gb2@2 g2 c3 bb2 c3 bb2 c3@2 bb2 c3@2 e2@2 f2@2 gb2@2 g2 c3 bb2 c3 bb2 c3@2 bb2 c3@2 e2@2 f2@2 gb2@2 g2 [bb2,f3,bb3]@8 [f2,c3,f3]@8 c3 c4@2 c3 bb3@2 c3 g3@2 c3 f3@2 eb3@2]/6", // F5 G5 C5 Bb5 F5 Bb5 F5
  F: "bb2 ~ c3 ~@13", G: "[[f2,c3] [d3,g3]@8 [d3,g3,d4]@8 [d3,g3,d4]@8 [d3,g3,d4]@16 ~@7, ~ g2@40 ~@7]/6",
  H: "[~ [d3,g3]@8 [d3,g3]@15, ~ g2@23]/3", I: "[~@10 [d3,a3,d4]@16 [d3,a3,d4]@16 [d3,a3,d4]@3 [c3,g3,c4]@3]/3",
  J: "[d3,a3]@6 ~@4 [d3,a3,d4]@3 [c3,g3,c4]@3, d4@5 ~@3", K: "[d3,a3,d4]@10 [d3,a3,d4]@3 [c3,g3,c4]@3",
  L: "[d3,a3,d4]@3 [c3,g3,c4]@3 [d3,a3,d4]@2 [c3,g3,c4]@2 [d3,a3,d4]@3 [c3,g3,c4]@3", // D5 C5 D5 C5 D5 C5
  M: "[d3,a3,d4]@3 [c3,g3,c4]@3 [d3,a3,d4]@2 [c3,g3,c4]@2 [d3,a3,d4]@3 [eb3,bb3,eb4]@3", // D5 C5 D5 C5 D5 Eb5
  N: "[e3,b3,e4]@3 [f3,c4,f4]@3 [gb3,db4,gb4]@2 [g3,d4,g4]@2 [ab3,eb4,ab4]@3 [a3,e4,a4]@3", // E5 F5 Gb5 G5 Ab5 A5
  O: "[bb3,f4,bb4]@3 [b3,gb4,b4]@3 [c4,g4,c5]@2 [db4,ab4,db5]@2 [d4,a4,d5]@3 [eb4,bb4,eb5]@3", // Bb5 B5 C5 Db5 D5 Eb5
  P: "[e4,b4,e5]@3 [f4,c5,f5]@3 [gb4,db5,gb5]@2 [g4,d5,g5]@2 [ab4,eb5,ab5]@3 [a4,e5,a5]@3", // E5 F5 Gb5 G5 Ab5 A5
  Q: "[bb4,f5,bb5]@2 [b4,gb5,b5]@3 [c5,g5,c6]@3 [f2,c3]@2 [g2,d3]@2 ~@4", // Bb5 B5 C5 F5 G5
  R: "[f2,c3] [g2,d3] ~@2 [f2,c3] [g2,d3] [c3,g3] [bb2,f3]", S: "g2 f2 [g2,d3]@2 ~@4 [f2,c3]@2 [g2,d3]@2 ~@4",
  T: "g2 f2 [g2,d3]@2 ~@4 [f2,c3]@2 [g2,d3,g3]@6", U: "[f2,c3] [g2,d3,g3]@3 [f2,c3] [g2,d3,g3] [c3,g3,c4] [bb2,f3,bb3]",
  V: "g2 f2 [g2,d3,g3]@6 [f2,c3]@2 [g2,d3,g3]@6", W: "g2 f2 [f2,c3,f3] ~ [bb2,f3]@6 c3 bb2 c3 bb2 c3@2",
  X: "bb2 c3@2 e2@2 f2@2 gb2@2 g2 c3 bb2 c3 bb2 c3@2",
  Y: "[bb2 c3@2 e2@2 f2@2 gb2@2 g2 [bb2,f3,bb3]@8 [f2,c3,f3]@8 c3 c4@2 c3 bb3@2]/2", // Bb5 F5
  Z: "c3 g3@2 c3 f3@2 eb3@2 bb2 ~ c3 bb2 c3 bb2 c3@2",
  AA: "[bb2 c3@2 e2@2 f2@2 gb2@2 g2 [bb2,f3,bb3]@8 [f2,c3,f3]@8 [g2,d3,g3]@2 ~@4]/2", AB: "~@10 c3 bb2 c3 bb2 c3@2",
  AC: "[f2,c3,f3] [g2,d3,g3] ~@2 [f2,c3,f3] [g2,d3,g3] ~@2", // F5 G5 F5 G5
  AD: "[[f2,c3,f3]@2 [g2,d3,g3]@2 ~@6 [d3,g3]@4 [d3,g3]!2 [d3,g3]!16 [d3,g3]!2 [d3,g3]@16 [g2,d3,g3]@2 ~@12, ~@5 g2@20 ~@7]/4", // F5 G5
})).s("gm_distortion_guitar").gain(0.39).pan(0.1)

// chords · drawbar organ · "hAMMOND"
const drawbar_organ = note(`<
  ~ A B A B C D C E@6 F A B A B C D C G@6 F ~@4 H I J ~ K@2 L ~ M N O@2 P Q R S T ~@12 U@3 V@2 W X Y Z AA AB AC AD AC AE
  AF AG AF AH AI@2 AJ@2 AK AI@2 AL@2 AM AI@2 AN@7
>`.pickRestart({
  A: "[f3,c4]!2 [g3,d4]@2 ~@4 [f3,c4]!2 [g3,d4]@2 ~@4", // F5 G5 F5 G5
  B: "[f3,c4]!2 [g3,d4]@2 [c4,g4]@2 [bb3,f4]@2 g3 f3 [g3,d4]@2 ~@4", C: "[f3,c4]!2 [g3,d4,g4]@6 [f3,c4]!2 [g3,d4,g4]@6",
  D: "[f3,c4]!2 [g3,d4,g4]@2 [c4,g4,c5]@2 [bb3,f4,bb4]@2 g3 f3 [g3,d4,g4]@6", // F5 G5 C5 Bb5 G5
  E: "[[f3,c4]!2 [g3,d4,g4]@2 [c4,g4,c5]@2 [bb3,f4,bb4]@2 g3 f3 ~@2 [bb3,f4,bb4]@6 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 [bb3,f4,bb4]@8 [f3,c4,f4]@8 c4 c5@2 c4 bb4@2 c4 g4@2 c4 f4@2 eb4@2]/6", // F5 G5 C5 Bb5 F5
  F: "bb3 ~ c4 ~@13",
  G: "[[f3,c4]!2 [g3,d4,g4]@2 [c4,g4,c5]@2 [bb3,f4,bb4]@2 g3 f3 g3@2 [bb3,f4,bb4]@6 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 c5 bb4 c5 bb4 c5@2 bb4 c5@2 e4@2 f4@2 gb4@2 g4 [bb3,f4,bb4]@8 [f3,c4,f4]@8 c4 c5@2 c4 bb4@2 c4 g4@2 c4 f4@2 eb4@2]/6", // F5 G5 C5 Bb5 F5
  H: "~@2 bb4 g4 a4 bb4 a4@2 f4 g4 ~ g4 ~ a4 bb4 g4",
  I: "a4 bb4 g4 [f4,a4] g4@3 d4 f4 d4 f4 [f4,g4] [a3,c4] [bb3,c4] [d4,f4] [c4,d4]", J: "[bb3,c4] g3@2 ~@13, ~ a3 ~@14",
  K: "[~@3 g4 a4 bb4@2 c5@2 d5@2 d5@2 eb5@2 d5@2 c5 d5 [d5,eb5] [c5,d5] [d5,eb5] [c5,d5] [d5,eb5] [c5,d5] [d5,eb5] [c5,d5] f5 bb4 c5 g4 bb4]/2", // Ebmaj7 Csus2 Ebmaj7 Csus2 Ebmaj7 Csus2 Ebmaj7 Csus2
  L: "f4 g4 ~@14", M: "~@2 f5 [d5,eb5]!2 [c5,d5] [bb4,c5]!2 [a4,bb4] bb4@3 bb4 [f4,g4] d4 a4, ~@9 a4 ~@6",
  N: "d4@3 ~@5",
  O: "[~@2 f5!2 ~ f5@2 eb5@2 d5 eb5 f5@2 eb5@2 d5@2 c5 [a4,d5]@2 [a4,db5] [g4,ab4,b4,c5] [e4,gb4,ab4,bb4] [eb4,g4] ~@8]/2", // D5 A Cmaj7 Gb7 Eb
  P: "~@2 g5 [d5,f5]!2 [c5,d5] [bb4,c5] d5@4 ~@5", Q: "~@2 bb4 [c5,d5] [a4,bb4] [bb4,c5] bb4@4 ~@6, ~@6 a4 ~@9",
  R: "~@2 bb3 [g3,a3] c4 [a3,bb3] d4 [bb3,c4] eb4 [c4,d4] f4 [d4,eb4] g4 [eb4,f4] a4 [f4,g4]", // Gsus2 Bbmaj7 Bbsus2 Csus2 Ebmaj7 Ebsus2 Fsus2
  S: "bb4 [g4,a4] c5 [a4,bb4] d5 [bb4,c5] eb5 [c5,d5] f5 [d5,eb5] g5 [eb5,f5] a5 [f5,g5] bb5 [g5,a5]", // Gsus2 Bbmaj7 Bbsus2 Csus2 Ebmaj7 Ebsus2 Fsus2 Gsus2
  T: "c6 [a5,bb5] d6 bb5@2 ~@11, ~@3 c6 ~@12", // Bbmaj7
  U: "[~@20 d5 c5 d5 c5 bb4 a4 [a3,e4,a4]@16 [d3,a3,d4]@3 [c3,g3,c4]@3, ~@5 [d3,a3,d4]@8 ~@11]/3", // A5 D5 C5 D5
  V: "[d3,a3,d4]@10 [d3,a3,d4]@3 [c3,g3,c4]@3", // D5 C5
  W: "[d3,a3,d4]@3 [c3,g3,c4]@3 [d3,a3,d4]@2 [c3,g3,c4]@2 [d3,a3,d4]@3 [c3,g3,c4]@3", // D5 C5 D5 C5 D5 C5
  X: "[d3,a3,d4]@3 [c3,g3,c4]@3 [d3,a3,d4]@2 [c3,g3,c4]@2 [d3,a3,d4]@3 [eb3,bb3,eb4]@3", // D5 C5 D5 C5 D5 Eb5
  Y: "[e3,b3,e4]@3 [f3,c4,f4]@3 [gb3,db4,gb4]@2 [g3,d4,g4]@2 [ab3,eb4,ab4]@3 [a3,e4,a4]@3", // E5 F5 Gb5 G5 Ab5 A5
  Z: "[bb3,f4,bb4]@3 [b3,gb4,b4]@3 [c4,g4,c5]@2 [db4,ab4,db5]@2 [d4,a4,d5]@3 [eb4,bb4,eb5]@3", // Bb5 B5 C5 Db5 D5 Eb5
  AA: "[e4,b4,e5]@3 [f4,c5,f5]@3 [gb4,db5,gb5]@2 [g4,d5,g5]@2 [ab4,eb5,ab5]@3 [a4,e5,a5]@3", // E5 F5 Gb5 G5 Ab5 A5
  AB: "[bb4,f5,bb5]@2 [b4,gb5,b5]@3 [c5,g5,c6]@3 [f3,c4]!2 [g3,d4]@2 ~@4", // Bb5 B5 C5 F5 G5
  AC: "[f3,c4]!2 [g3,d4]@2 ~@4 [f3,c4]!2 [g3,d4]@2 [c4,g4]@2 [bb3,f4]@2", // F5 G5 F5 G5 C5 Bb5
  AD: "g3 f3 [g3,d4]@2 ~@4 [f3,c4]!2 [g3,d4]@2 ~@4", AE: "g3 f3 [g3,d4]@2 ~@4 [f3,c4]!2 [g3,d4,g4]@6",
  AF: "[f3,c4]!2 [g3,d4,g4]@6 [f3,c4]!2 [g3,d4,g4]@2 [c4,g4,c5]@2 [bb3,f4,bb4]@2", // F5 G5 F5 G5 C5 Bb5
  AG: "g3 f3 [g3,d4,g4]@6 [f3,c4]!2 [g3,d4,g4]@6", AH: "g3 f3 ~@2 [bb3,f4,bb4]@6 c5 bb4 c5 bb4 c5@2",
  AI: "bb4 c5@2 e4@2 f4@2 gb4@2 g4 c5 bb4 c5 bb4 c5@2",
  AJ: "[bb4 c5@2 e4@2 f4@2 gb4@2 g4 [bb3,f4,bb4]@8 [f3,c4,f4]@8 c4 c5@2 c4 bb4@2]/2", // Bb5 F5
  AK: "c4 g4@2 c4 f4@2 eb4@2 bb3 ~ c5 bb4 c5 bb4 c5@2",
  AL: "[bb4 c5@2 e4@2 f4@2 gb4@2 g4 [bb3,f4,bb4]@8 [f3,c4,f4]@8 [g3,d4,g4]@2 ~@4]/2", AM: "~@10 c5 bb4 c5 bb4 c5@2",
  AN: "[bb4 c5@2 e4@2 f4@2 gb4@2 g4 [bb3,f4,bb4]@8 [f3,c4,f4]@8 e5@72 ~@14]/7", // Bb5 F5
})).s("gm_drawbar_organ").gain(0.48).pan(0.9)

// bass · electric bass finger · "bAIXO"
const bass = note(`<
  ~ A B A B C D C E@5 F G A B A B C D C E@5 F G H I J@2 K@18 L@7 M@4 N O P Q R S T U@2 V W X Y X Z AA AB AA AC AD@2 AE
  AF AG AD@2 AE AH AI AD@2 AE AJ AK AL AM AN@2
>`.pickRestart({
  A: "f1!2 g1@2 ~@4 f1!2 g1@2 ~@4", B: "f1!2 g1@2 c2@2 bb1@2 g1 f1 g1@2 ~@4", C: "f1!2 g1!6 f1!2 g1!6",
  D: "f1!2 g1@2 c2@2 bb1@2 g1 f1 g1!6",
  E: "[f1!2 g1@2 c2@2 bb1@2 g1 f1 g1@2 bb1@6 c2 bb1 c2 bb1 c2@2 bb1 c2@2 e1@2 f1@2 gb1@2 g1 c2 bb1 c2 bb1 c2@2 bb1 c2@2 e1@2 f1@2 gb1@2 g1 c2 bb1 c2 bb1 c2@2 bb1 c2@2 e1@2 f1@2 gb1@2 g1 bb1!8 f1!6]/5",
  F: "f1!2 c2 c3@2 c2 bb2@2 c2 g2@2 c2 f2@2 eb2@2", G: "bb1@2 c2 ~@13", H: "f2@2 g2@3 f2@2 g2@2 f2 g2@4 bb1 c2",
  I: "d2 f2 g2@3 f2@2 g2@2 f2 g2@4 bb1 c2", J: "d2 f2 g2@3 f2@3 g2@6 bb1 c2", K: "d2 f2 g2 ~@2 f2 ~@2 g2@6 bb1 c2",
  L: "d2 f2 g2@2 g2@2 f2 g2 f2 g2@3 g2!2 bb1 c2", M: "d2 f2 g2@2 g2@2 f2 g2 f2 g2!5 bb1 c2",
  N: "d2 f2 g2@2 g2@2 f2!2 d2!8", O: "d2!4 f2 d2 f2 g2 f2 d2!7", P: "d2!4 f2!2 g2!2 a2 g2 d2@3 c2@3",
  Q: "d3 c3 d3 c3 d3 f3!2 g3 f3 d3 d2@3 c2@3", R: "d2@10 d2@3 c2@3", S: "d2@3 c2@3 d2@2 c2@2 d2@3 c2@3",
  T: "d2@3 c2@3 d2@2 c2@2 d2!3 eb2!3", U: "e2!3 f2!3 gb2!2 g2!2 d2!3 eb2!3", V: "e2!3 f2!3 gb2!2 g2!2 ab2!3 a2!3",
  W: "bb2!2 b2!3 c3!3 f1!2 g1@2 ~@4", X: "f1!2 g1@2 ~@4 f1!2 g1@2 c2@2 bb1@2", Y: "g1 f1 g1@2 ~@4 f1!2 g1@2 ~@4",
  Z: "g1 f1 g1@2 f1!6 g1!6", AA: "f1!2 g1!6 f1!2 g1@2 c2@2 bb1@2", AB: "g1 f1 g1!6 f1!2 g1!6",
  AC: "g1 f1 g1@2 bb1@6 c2 bb1 c2 bb1 c2@2", AD: "bb1 c2@2 e1@2 f1@2 gb1@2 g1 c2 bb1 c2 bb1 c2@2",
  AE: "bb1 c2@2 e1@2 f1@2 gb1@2 g1 bb1!6", AF: "bb1!2 f1!8 c2 c3@2 c2 bb2@2",
  AG: "c2 g2@2 c2!2 [db2,d2] [eb2,e2] [f2,gb2] [g2,ab2] [a2,bb2] [c2,b2] bb1 c2 bb1 c2@2", AH: "bb1!2 f1!8 g1@2 ~@4",
  AI: "~@10 c2 bb1 c2 bb1 c2@2", AJ: "bb1!2 f1!8 g1@4 ~@2", AK: "~ g1@2 ~@2 g1@2 ~", AL: "~@2 g1@4 ~@4 g1@2 g1!4",
  AM: "g1!16", AN: "[g1!2 g1@16 g1@2 ~@12]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// other · electric guitar jazz · "sOLO jAZZ"
const electric_guitar_jazz = note("<~@35 A B C D E F@2 G H I J K L ~@52>".pickRestart({
  A: "~@4 c4 db4 d4 f4 ~@4 c4 db4 d4 f4", B: "~@4 c4 db4 d4 f4 d4@2 db4@2 c4@2 bb3 g3", C: "g3@3 ~@13", D: "~@15 c4",
  E: "db4 d4 f4 d4 f4 d4 f4@2 c4 db4 d4 c4 d4 bb3 c4 bb3",
  F: "[~@2 d4 bb3 c4 a3 f3 g3 a3 bb3 d4 a3 bb3 d4 bb3@4 ~@14]/2",
  G: "g4 f4 g4 c5 d5 a4 d5 c5 a4 g4 a4 c5 d5 bb4 c5 bb4", H: "f4 d4@4 ~@10 g4",
  I: "a4 bb4 f5 ~@2 d5 f5 ~@2 c5 d5 c5 bb4 a4 bb4 a4", J: "f4 gb4 g4@2 ~@6 g4 a4 bb4 c5 [a4,bb4] g4",
  K: "bb4@2 ~@6 d5 g4 c5 g4 bb4 g4 a4 g4", L: "f4 d4 ~@14",
})).s("gm_electric_guitar_jazz").gain(0.28).pan(1)

// other · distortion guitar · "sOLO aG"
const distortion_guitar_2 = note("<~@49 A@5 ~ B C@2 D@6 ~@36>".pickRestart({
  A: "[~@2 bb4@4 a4 bb4 a4 bb4@9 bb4@4 a4 bb4 a4 bb4@9 a5@4 f5 g5 f5 g5@9 a5@4 f5 g5 f5 g5@9 ~@14]/5",
  B: "~@2 g4@4 f4 g4 f4 g4@5 f4 g4", C: "[bb4 d5@2 ~ c5@2 bb4 c5 ~ bb4@9 g4@4 f4 g4 f4 g4@5 f4 g4]/2",
  D: "[bb4 d5@2 ~ c5@2 bb4 c5 ~ bb4@9 g5@2 f5@2 d5 c5@2 d5@5 g4@4 g5@2 f5@2 d5 c5@2 d5@9 g5@2 f5@2 d5 c5@2 d5@5 g4@4 d5@2 c5@2 a4 g4@3 d5@10 d5 c5 d5 c5 bb4 a4 a4@4 ~@2]/6",
})).s("gm_distortion_guitar").gain(0.21).pan(0)

// other · overdriven guitar · "sOLO gR"
const overdriven_guitar = note("<~@49 A@5 ~ B C@2 D@5 ~@37>".pickRestart({
  A: "[~@2 g3@4 f3 g3 f3 g3@9 g3@4 f3 g3 f3 g3@9 d4@4 c4 d4 c4 d4@9 d4@4 c4 d4 c4 d4@9 ~@14]/5",
  B: "~@2 g3@4 f3 g3 f3 g3@5 f3 g3", C: "[bb3 d4@2 ~ c4@2 bb3 c4 ~ bb3@9 g3@4 f3 g3 f3 g3@5 f3 g3]/2",
  D: "[bb3 d4@2 ~ c4@2 bb3 c4 ~ bb3@9 g4@2 f4@2 d4 c4@2 d4@5 g3@4 g4@2 f4@2 d4 c4@2 d4@9 g4@2 f4@2 d4 c4@2 d4@5 g3@4 d4@2 c4@2 a3 g3@3 ~@6]/5",
})).s("gm_overdriven_guitar").gain(0.48).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B D@3 E F G@2 D H I@2 J A B D@3 E F G@2 D H I K@4 L M N O N@4 P Q N@19 R S T U V U W X@3 Y Z AA AB AC D@2 AD
  AE AF AG AH AI AJ AF AG AH AK AL AF AG AH AK AM AN AO AP AQ
>`.pickRestart({
  A: "x ~@4 x ~@3 x ~ x ~ x ~@2", B: "~@2 x ~@2 x ~ x ~@2 x ~@5", C: "~@5 x ~@3 x ~ x ~ x ~ x",
  D: "~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~ x", E: "~ x ~ x ~ x ~@4 x ~ x ~@3", F: "~@2 x!2 ~ x!3 ~ x!3 ~ x ~ x",
  G: "~@2 x!2 ~ x ~@3 x ~ x ~ x ~ x", H: "~@2 x ~ x!2 ~ x ~@2 x!2 ~ x ~ x", I: "~@2 x ~@2 x ~@3 x ~ x ~ x ~@2",
  J: "~@2 x ~@2 x ~ x ~@2 x ~ x ~ x ~", K: "~ x ~ x ~ x ~ x", L: "~@2 x ~@3 x ~@3 x ~@4 x",
  M: "~@2 x ~@4 x ~ x ~@4 x ~", N: "~@2 x ~@4 x ~ x ~@5 x", O: "~@2 x ~@2 x ~ x!2 ~@5 x ~",
  P: "~@3 x ~@3 x ~ x ~@3 x ~@2", Q: "~@3 x ~@5 x ~@5 x", R: "~@2 x ~@4 x ~@2 x ~@3 x ~", S: "~ x ~@3 x ~ x",
  T: "~@5 x ~ x", U: "~@2 x ~@3 x ~@3 x ~@2 x!2 ~", V: "~@2 x ~@2 x ~ x", W: "~ x ~ x ~@2 x!2", X: "~ x!2 ~@3 x!2",
  Y: "~@8 x ~ x ~@2 x ~@2", Z: "~ x ~@8 x ~@2 x ~ x", AA: "~@2 x ~@10 x ~@2", AB: "~ x ~ x ~ x ~ x ~@2 x ~@2 x ~ x",
  AC: "~@2 x ~ x!8 ~ x ~ x", AD: "~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~@2", AE: "~@2 x ~ x ~@5 x!2 ~ x!3",
  AF: "~ x!3 ~ x ~ x ~@2 x!2 ~ x ~@2", AG: "~ x ~ x ~ x ~ x ~@2 x!2 ~ x ~@2", AH: "~ x ~ x ~ x ~ x ~@2 x!2 ~ x ~ x",
  AI: "~@2 x!2 ~ x ~ x ~@2 x ~ x!2 ~ x", AJ: "~@2 x!2 ~ x ~ x ~@2 x!2 ~ x!3", AK: "~@2 x!2 ~ x ~ x ~@2 x ~@5",
  AL: "~@2 x ~@7 x!2 ~ x!3", AM: "~ x ~@3 x ~@2", AN: "~@2 x ~@7 x ~@3 x!2", AO: "x!8 ~@8", AP: "~@11 x ~@4",
  AQ: "~ x!2 ~@13",
})).gain(0.53)

// drums · rim
const rim = s("rim").struct("<~@33 A B@2 C B@4 D E B@4 ~@53>".pickRestart({
  A: "~ x!2 ~", B: "x!4", C: "x ~@2 x", D: "x", E: "~@5 x!3",
})).gain(0.41)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A ~ B ~@11 A ~@30 C D ~@25 E ~ F ~@13 F ~@6 G H ~>".pickRestart({
  A: "~@12 x!3 ~", B: "~@3 x", C: "~ x!3", D: "x!4", E: "~@4 x!3 ~@9", F: "~ x ~@2", G: "~@9 x ~ x ~ x ~ x",
  H: "~ x ~ x ~ x ~ x!2 ~@7",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@8 B ~@4 A ~@13 C ~@4 D E ~@20 F@2 ~ G ~@6 H A I ~@14 A ~@9>".pickRestart({
  A: "~@8 x!3 ~@5", B: "~ x!2 ~@13", C: "~@5 x!3 ~@8", D: "~@7 x", E: "~ x ~@2 x ~@2 x ~@8", F: "~@8 x!2 ~@6",
  G: "~@4 x!2 ~ x ~@8", H: "~@5 x!2 ~@9", I: "~ x!3 ~@12",
})).gain(0.41)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@33 [x!3 ~@13] ~@7 [~@2 x ~@2 x ~@2 x ~@2 x ~@4] ~@58>").gain(0.24)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@14 A ~@13 A ~@4 B C@2 D C@4 E C@5 B C@3 F ~@37 G A ~@3 G H I ~@3>".pickRestart({
  A: "x", B: "~ x!7", C: "x!8", D: "x!2 ~@3 x!3", E: "x!7 ~", F: "x!4 ~@4", G: "~@6 x!2", H: "x ~ x!3 ~ x!2",
  I: "x ~ x!3 ~@3",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@10 B C ~@6 D ~@10 A ~@15 E@2 ~ F ~@7 G ~@15 H ~@9>".pickRestart({
  A: "x!2 ~@14", B: "~@14 x!2", C: "x", D: "~ x ~@2", E: "~@6 x!2 ~@8", F: "~@3 x ~@2 x ~@9", G: "~@6 x!3 ~@7",
  H: "~@7 x!2 ~@7",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B A B C D@2 E ~@5 C F B A G H D@2 E ~@5 I C D@3 ~@18 J D@10 K L M N L K O ~@3 P Q R F M D@2 S ~@20
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "~@2 x!6", D: "x!8", E: "x!3 ~@5", F: "x!4", G: "x!2 ~@2 x ~@3 x ~@3 x ~@3", H: "x ~ x!6",
  I: "~@2 x!5 ~", J: "~@4 x!4", K: "x!5 ~ x ~", L: "x!2 ~@4 x!2", M: "x ~@5 x!2", N: "x!5 ~@3", O: "x!4 ~@4",
// … 26 more lines

More by Deep Purple