Strudelify
Crazy Train cover art

Blizzard Of Ozz

Crazy Train

Ozzy Osbourne

KeyA majorTempo67 bpm
0:00/0:00
// Crazy Train — Ozzy Osbourne
// 67 bpm, 4/8, key A 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: duplicate parts dropped: ch 3 fretless bass (copy of ch 2 electric bass pick); ch 6 overdriven guitar (copy of ch 5 distortion guitar)
// note: Full arrangement: all 169 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/2)

// 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
const bass = note(`<
  A B A C A B A D E F G H G I J K L M N@4 O P Q R S@4 T U V W X Y@3 Z AA AB AC AD AE AF AG AH@2 AI@2 AJ AK@4 AL AM AN AO
  AP AQ@4 AR AS AT AU AV@4 AW AX AW AY AZ BA@2 BB@3 BC BD BE BF BG BH BI BJ BK BL BM@5 BN BO BP BQ BR BS@3 BN BT BU BV
  BW BX BY BZ CA CB CC CD@2 AK@4 AL AM AN AO AP AQ@4 AR AS AT AU AV@4 AW AX AW AY AZ BA@2 BB@3 BC BD BE BF BG BH BI BJ
  BK BL CE BL CF@2 CG CH CI CJ CK CL
>`.pickRestart({
  A: "f#1!2 ~@6", B: "a1!2 ~@2 e1!2 ~@2", C: "d2!2 ~@2 c#2!2 ~@2", D: "d2@3 d2@3 ~@7 c#2@3 c#2@3 ~@5",
  E: "~ f#1@3 f#1@3 ~@17", F: "~ a1@3 a1@3 ~@6 e1@3 e1@3 ~@5", G: "~@2 f#1@3 f#1@3 ~@16",
  H: "~@2 d2@3 d2@3 ~@6 c#2@3 c#2@3 ~@4", I: "~ a1!2 ~@2 e1!2 ~", J: "~ f#1!2 ~@5",
  K: "~@3 d2@3 d2@3 ~@7 e2@3 e2@3 ~@2", L: "~@4 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
  M: "~ a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@2",
  N: "[~ e2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3]/4",
  O: "a1 e2 a1 a2 a1 a2 a1 a2", P: "a1 a2 a1 a2 a1 g#2 a1 f#2", Q: "~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@2",
  R: "~ a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@2",
  S: "[~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 g#2@3 a1@3]/4",
  T: "f#2 a1 e2 a1 a2 a1 a2 a1", U: "a2 a1 a2 a1 a2 a1 g#2 a1", V: "f#2@3 a1@3 e2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@2",
  W: "~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@2", X: "~ f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
  Y: "[~ a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 [f#1,f#2]@6 [f#1,f#2]@6 [e1,e2]@6 [e1,e2]@6 [d1,d2]@12 ~]/3", // F# E D
  Z: "~@2 [f#1,f#2]!2", AA: "[e1,e2]!2 [d1,d2]@2", AB: "~@12 [a1,a2]@6 ~ [a1,a2]@5",
  AC: "~ [a1,a2]@6 [a1,a2]@6 [e1,e2]@6 [e1,e2]@5", AD: "~ [e1,e2]@6 [e1,e2]@6 [f#1,f#2]@6 [f#1,f#2]@5",
  AE: "~ [f#1,f#2]@6 [f#1,f#2]@6 ~ [f#1,f#2]@6 [f#1,f#2]@4", AF: "~ [f#1,f#2]@3 [f#1,f#2]@3 [a1,a2]@3 [a1,a2]@2",
  AG: "~ [a1,a2]@3 [a1,a2]@3 [e1,e2]@3 [e1,e2]@2", // A E
  AH: "[~@2 [e1,e2]@6 ~ [e1,e2]@6 f#2@6 f#2@6 f#2@3 ~@3 e2@3 d2@3 d2@3 d2@3 d2@3, ~@5 f#2 ~@2]/2", // E
  AI: "[e2@3 e2@3 e2@3 e2@3 e2@3 f#2@6 f#2@6 ~ f#2@3 ~@3 e2@3 d2@3 d2@3 d2@3 d2@2, ~@31 f#2@6 ~@11]/2",
  AJ: "~ e2@3 e2@3 e2@3 e2@3 e2@3 a1@3 a2@3 a1@2",
  AK: "[~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 ~ a1@3 a2@3]/4",
  AL: "a1 a2 a1 a2 a1 a2 a1 a2", AM: "a1 g#2 a1 f#2 a1 e2 a1 a2", AN: "a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@2",
  AO: "~ a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@2", AP: "~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@2",
  AQ: "[~ a1@3 g#2@3 ~ a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3]/4",
  AR: "a2 a1 g#2 a1 f#2 a1 e2 a1", AS: "a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@2",
  AT: "~ a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@2", AU: "~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
  AV: "[~ a2@3 a1@3 g#2@3 a1@3 f#2@3 ~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 [f#1,f#2]@6 [f#1,f#2]@6 ~ [e1,e2]@6 [e1,e2]@6]/4", // F# E
  AW: "[d1,d2] ~", AX: "[f#1,f#2]!2 [e1,e2]!2", AY: "~ [a1,a2]@6 [a1,a2]@6 [a1,a2]@6 [a1,a2]@5",
  AZ: "~ [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@5", BA: "~ [f#1,f#2]@3 [f#1,f#2]@3 [f#1,f#2]@3 [f#1,f#2]@2",
  BB: "[~@2 [a1,a2]@6 [a1,a2]@6 [a1,a2]@6 ~ [a1,a2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 f#2@6 f#2@6 f#2@3 ~@3 e2@3, ~@11 f#2]/3", // A E
  BC: "d2@3 d2@3 d2@3 d2@3 e2@3 ~ e2@3 e2@3 e2@2", BD: "~ e2@3 f#2@6 f#2@6 f#2@3 ~@3 e2@2, ~@19 f#2@5",
  BE: "~ d2@3 d2@3 d2@3 d2@3 e2@3 e2@3 e2@3 e2@2", BF: "~ e2@3 f#1@3 f#1@3 ~@14", BG: "~@5 a1@3 a1@3 ~@6 e1@3 e1@3 ~",
  BH: "~@5 f#1@3 f#1@3 ~@13", BI: "~@2 d2!2 ~@2 e2!2", BJ: "~@2 f#1!2 ~@4", BK: "~@2 a1!2 ~@2 e1!2",
  BL: "~@7 f#1@3 f#1@3 ~@11",
  BM: "[~@7 d2@12 e2@12 f#1@3 f#1@3 f#1@3 f#1@3 ~ f#1@3 f#1@3 e1@3 e1@3 d1@3 d1@3 d1@3 d1@3 d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 ~ f#1@3 f#1@3 f#1@3]/5", // B
  BN: "f#1!8", BO: "f#1 e1!2 d1!5", BP: "d1@3 c#1@3 c#1@3 ~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@2",
  BQ: "~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@2", // B
  BR: "~ f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@2",
  BS: "[~ f#1@3 ~ e1@3 e1@3 d1@3 d1@3 d1@3 d1@3 d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 f#1@3 f#1@3 ~]/3", // B
  BT: "f#1!2 e1!2 d1!4", BU: "d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 ~ [b0,b1]@3 [b0,b1]@2",
  BV: "~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@2", // B C#
  BW: "~ [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 f#1@3 f#1@3 ~@5", BX: "~@14 a1@3 a1@3 ~@4",
  BY: "~@2 e1@3 e1@3 ~@6 f#1@3 f#1@3 ~@4", BZ: "~@14 d2@3 d2@3 ~@4", CA: "~@2 c#2@3 c#2@3 ~@7 f#1@3 f#1@3 ~@3",
  CB: "~@5 a1!2 ~", CC: "~ e1!2 ~@2 f#1!2 ~", CD: "[~@16 d2@12 e2@12 a1@3 a2@3 a1@2]/2",
  CE: "~@7 d2@3 d2@3 ~@6 e2@3 e2@2", CF: "[~@8 a1@3 a1@3 ~@6 e1@3 e1@3 ~@6 f#1@3 f#1@3 ~@10]/2",
  CG: "~@8 d2@3 d2@3 ~@7 e2@3", CH: "e2 ~@2 f#1!2 ~@3", CI: "~@3 a1!2 ~@2 e1", CJ: "e1@3 ~@7 f#1@3 f#1@3 ~@8",
  CK: "~@10 d2@3 d2@3 ~@6 e2@2", CL: "~ e2@3 ~@20",
})).s("gm_electric_bass_pick").gain(0.8)

// other · lead 1 square
const lead_1_square = note(`<
  ~@20 A B@2 ~ C@2 D@2 E F@2 ~ G H@3 I J@2 K@3 L@2 M@4 ~@6 N@2 O@2 P Q R@2 S@2 T U V W X Y Z@3 AA@2 AB@3 AC@3 AD ~@3
  AE@3 ~ AF AG AH@3 ~@27 AI@2 AJ ~ P AK AL@2 AM@2 AN@2 AO AP AQ ~ AR@3 AA@2 AS@3 AT@4 ~@20
>`.pickRestart({
  A: "~@5 e4@3 c#4@4 ~@12", B: "[~@15 c#4@2 b3@3 a3@3 g#3@3 a3@4 ~@2 c#4@7 ~@9, ~@31 b3@2 ~@15]/2",
  C: "[~@6 a4@2 ~ a4@2 ~ a4@2 ~@3 f#4@4 e4@12 ~@7 f#4@6 e4@2, ~@8 e4 ~@15]/2",
  D: "[~ e4@2 ~ d4@6 e4@3 d4@3 c#4@3 a3@10 ~@19]/2", E: "~@8 e4@3 c#4@5 ~@8",
  F: "[~@17 c#4@3 b3@3 a3@3 g#3@3 a3@5 ~@2 c#4@5 ~@7, ~@35 b3@2 ~@11]/2", G: "~@6 a4@2 ~@2 a4@2 ~ a4 ~ a4@3 e4@2 f#4@4",
  H: "[e4@9 ~@6 e4@3 ~ e4@3 f#4@3 e4@2 ~ [e4,f4]@3 d4@6 e4@3 d4@3 c#4@3 a3@8 ~@18]/3", I: "~@11 f#4@3 e4@3 f#4@7",
  J: "[~@2 g#4@5 ~@2 a4@14 f#4@11 ~ f#4@3 e4@3 f#4@7, ~@4 g#4 ~@19]/2",
  K: "[~@3 g#4@4 ~ g#4@2 ~ a4@22 e4@3 [a4,c#5]@3 a4@5 ~@2 [a4,c#5]@4 ~@2 c#5@3 ~@4 g#4@7 ~ [g#4,b4]@3 [g#4,b4]@2, ~@39 c#5@3 ~@9 a4@7 b4@9 ~@5, ~@29 f#4 ~@6]/3", // A G#m
  L: "[~ [g#4,b4]@3 g#4@5 ~@2 g#4@2 f#4@18 ~@17, ~@4 b4@3 ~@2 f#4@2 ~@37, ~@5 a4@12 ~@7]/2", // G#m
  M: "[~@11 e4@3 [a4,c#5]@3 [a4,c#5]@4 ~@2 [a4,c#5]@4 ~@2 a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@5 ~@2 g#4@3 f#4@17 ~@16, ~@29 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@4 a4@24 ~@12, ~@35 f#4@2 ~@22 f#4@2 ~@35]/4", // A G#m
  N: "[~@15 a4@2 ~ a4@2 ~ a4@2 a4@3 ~ f#4@6 e4@9 ~@6, ~@13 e4 ~@10]/2",
  O: "[~@2 e4@3 f#4@4 e4@2 ~ e4@3 d4@6 e4@6 ~@21]/2", P: "~@16 a4@2 ~ a4@2 ~ a4@2",
  Q: "~ a4@3 ~ f#4@5 e4@12 ~@2, ~@2 e4 ~@9", R: "[~@4 e4@3 f#4@3 e4@2 ~ e4@2 ~ d4@6 ~ e4@2 ~ d4@3 c#4@3 a3@9 ~@7]/2",
  S: "[~@17 a4@2 ~ a4@2 ~ a4@2 ~ a4@3 e4@2 f#4@4 e4@12 ~]/2", T: "~@6 e4@3 f#4@3 e4@2 ~ e4@3 d4@6", U: "e4 ~@5",
  V: "~@9 a4 ~ a4", W: "~ a4@2 ~ a4@3 e4@2 f#4@4 e4@11", X: "~@7 e4@3 f#4@3 e4@2 ~ e4@3 d4@5",
  Y: "~ e4@2 ~ d4@3 c#4@3 ~ a3@10 ~@3", Z: "[~@23 f#4@3 e4@3 f#4@8 ~@2 g#4@4 ~ g#4@2 a4@14 f#4@12]/3",
  AA: "[f#4@3 e4@3 f#4@9 g#4@5 ~ g#4@2 a4@23 e4@2]/2",
  AB: "[~ c#5@3 [a4,c#5]@4 ~@2 a4@5 ~ a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@6 ~ g#4@2 f#4@23, a4@3 ~@7 c#5@3 ~@3 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@3 a4@24 ~@2, ~@11 f#4 ~@11 f#4 ~@12]/3", // A G#m
  AC: "[~@23 e4@3 [a4,c#5]@3 [a4,c#5]@4 ~@2 a4@5 ~@2 a4@5 ~ [g#4,b4]@8 ~ b4@2 ~ b4@2 ~ b4@3 g#4@5 f#4, ~@35 c#5@3 ~@3 c#5@3 ~@3 f#4@2 ~@7 g#4@2 ~ g#4@2 ~ g#4@3 ~ b4@3 ~@3]/3", // A G#m
  AD: "g#4@3 f#4@17 ~@4, a4", AE: "[~@10 f#4@6 e4@6 d4@6 c#4@6 ~ b3@6 a3@6 b3@3 a3@3 c#4@6 e4@3 c#4@9 ~]/3",
  AF: "~@12 f#4@5 ~ f#4@5 ~", AG: "f#4 a4 g#4 f#4",
  AH: "[g#4@5 ~@2 a4@8 g#4@3 f#4@11 ~ f#4@13 g#4@10 ~@2 a4@17, ~@3 g#4 ~@23 g#4 ~@8]/3",
  AI: "[~@18 a4@3 a4@2 a4@3 ~ f#4@5 e4@13 ~@3, ~@27 e4 ~@20]/2", AJ: "~@2 e4@4 f#4@2 e4@2 ~@2 e4@3 d4@6 e4@3",
  AK: "~ a4@2 ~@2 f#4@4 e4@12 ~@3, ~@2 e4 ~@9", AL: "[~@4 e4@3 f#4@3 e4@2 ~ e4@3 d4@7 e4@3 d4@3 c#4@3 a3@10 ~@6]/2",
  AM: "[~@20 e4@3 c#4@7 ~@18]/2", AN: "[~@5 c#4@3 e4@2 ~@2 e4@2 ~ e4@2 ~ c#4@5 b3@2 a3@6 ~@17]/2",
  AO: "~@19 a4@2 ~ a4@2", AP: "~ a4@2 ~ a4@2 ~ a4@6 ~ e4@7 ~@3, ~@13 f#4@2 ~@9", AQ: "~@7 e4@3 f#4@3 a4@3 f#4 ~@2 a4@5",
  AR: "[~@23 f#4@3 e4@3 f#4@9 g#4@5 ~ g#4@2 a4@14 f#4@11 ~]/3",
  AS: "[~ c#5@3 a4@5 ~ a4@5 ~ a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@5 ~ f#4 g#4@2 f#4@23, a4@3 ~ c#5@3 ~@3 c#5@3 ~@3 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@3 a4@24 ~@2, ~@11 f#4 ~@24]/3", // G#m
  AT: "[~@23 e4@3 [a4,c#5]@3 a4@5 ~ a4@5 ~ a4@6 ~ [g#4,b4]@8 ~ b4@2 ~ b4@2 ~ b4@2 ~ b4@3 ~@3 g#4@3 f#4@20 ~, ~@29 c#5@3 ~@3 c#5@3 ~@3 c#5@3 ~@3 f#4@2 ~@7 g#4@2 ~ g#4@2 ~ g#4@2 ~ g#4@6 f#4@2 ~@23, ~@3 a4]/4", // A G#m
})).s("gm_lead_1_square").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B C D E F G H I J K L M N@3 O@2 P Q@2 R S@2 T@3 U V W X@3 Y@2 Z AA AB AC AD@2 AE AF J M@2 AG N@2 AH O@2 Q@3 S@2
  H T@2 AI U@2 AJ X@2 AK Y@2 AL AM AB AD@2 AN J@2 AO AP@2 AQ AR@2 B AS AT AU@2 AV AW S T@2 AX AY AZ BA BB BC BD BE BF
  ~@6 BG AF J M@2 BH N@2 AH O@2 Q@3 S@2 H T@2 AI U@2 AJ X@2 AK Y@2 BI BJ AB AD@2 AN J@2 BK AP@2 AQ AR@2 B@2 BL D@2 BM
  F@2 BN BO BP
>`.pickRestart({
  A: "~ x ~@2 x ~@2 x ~@5 x ~@5 x ~@4", B: "~ x ~@5 x ~@5 x ~@5 x ~@4", C: "~@2 x ~@2 x ~@2 x ~@5 x ~@5 x ~@3",
  D: "~ x ~@2 x ~@2 x ~@2 x ~", E: "~@2 x ~@2 x ~@2 x ~@5 x ~@6 x ~@2", F: "~ x ~ x ~ x ~ x", G: "~ x!3 ~ x ~ x",
  H: "~@9 x ~@12 x ~", I: "~@2 x", J: "~ x ~@2 x ~", K: "~@4 x ~@12 x ~@6", L: "~@5 x ~@11 x ~@5 x",
  M: "~@5 x ~@11 x ~@6", N: "~ x ~ x", O: "~@7 x ~@11 x ~@4", P: "~@7 x ~@12 x ~@3", Q: "~@2 x ~@2 x",
  R: "~@8 x ~@12 x ~@2", S: "~@3 x ~@3 x", T: "~@5 x ~@5 x", U: "~@11 x ~@11 x", V: "~@11 x ~@2 x ~@8 x",
  W: "~@11 x ~@12", X: "x!2", Y: "~ x ~@11 x ~@10", Z: "~ x ~@12 x ~@9", AA: "~@2 x ~@2 x ~@8 x ~@9",
  AB: "~ x ~@5 x ~@4", AC: "~@2 x ~@12 x ~@8", AD: "~ x ~@3 x ~@2", AE: "~@2 x ~@8 x", AF: "~@5 x ~@6",
  AG: "~@5 x ~@12 x ~@5", AH: "~@6 x ~@12 x ~@4", AI: "~@10 x ~@12 x", AJ: "~ x ~@4 x ~@5", AK: "x ~@12 x ~@10",
  AL: "~@5 x ~@5 x ~@2 x ~@2 x ~@6", AM: "~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x", AN: "~@3 x ~@12 x ~@7",
  AO: "~ x ~@2 x ~@6 x ~@5 x ~@5 x", AP: "~@5 x ~@5 x ~@5 x ~@5 x", AQ: "~ x!3", AR: "x!4", AS: "~ x ~@5 x ~@5 x ~@10",
  AT: "~ x ~@5 x ~@2 x ~@5 x ~@3 x ~@2 x", AU: "~@8 x ~@2 x ~@5 x ~@2 x ~@2 x", AV: "~@5 x ~@2 x ~@2 x ~@6 x ~@2 x ~@2",
  AW: "~ x!3 ~@3 x", AX: "~@10 x ~@2 x ~@5 x ~@2 x ~", AY: "~ x ~@9 x ~@2 x ~@5 x ~@2 x",
  AZ: "~@2 x ~@8 x ~@2 x ~@5 x ~@2 x", BA: "~@2 x ~@8 x ~@2 x ~@5 x ~@3", BB: "x!2 ~@2 x!2 ~ x", BC: "x!2 ~ x!3 ~ x",
  BD: "x ~@2 x ~@5 x ~@2 x ~@2 x ~@6 x ~", BE: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~", BF: "~ x ~@2 x ~@5 x ~@13",
  BG: "~@11 x", BH: "~@5 x ~@5 x ~@6 x ~@5", BI: "~ x!7", BJ: "x ~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x",
  BK: "~@4 x ~@6 x ~@5 x ~@5 x", BL: "~ x ~@5 x ~@5 x ~@6 x ~@3", BM: "~@2 x ~@5 x ~@6 x ~@5 x ~@2",
  BN: "~@3 x ~@6 x ~@5 x ~@5 x ~", BO: "~@2 x ~@2 x ~@2 x ~@2 x", BP: "~ x ~@4",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A ~ B ~ B ~ C D E F G H I J K L M N@2 O P Q R@2 S T@2 U V U W@2 X Y@2 Z AA AB AC@3 AD AE AF G@2 AG K@2 AH AI N AJ
  O AK R@3 AL T AM U AN AO W@2 Y@3 AP AQ AR AC@2 AS F@2 AT ~@3 AU ~@2 AV N AW@2 Q AX R AY T@2 AZ@3 BA W X Y BB ~@6 BC AE
  AF BD G AG K@2 AH AI N AJ O AK R@3 AL T AM U AN AO W@2 Y@3 BE BF AR AC@2 AS F@2 ~@17
>`.pickRestart({
  A: "~ x ~@2 x ~@19", B: "~@2 x ~@2 x ~@18", C: "~ x!2 ~@5", D: "~@3 x ~@5 x ~@6 x ~@5 x ~", E: "~@2 x ~@2 x ~@5 x",
  F: "~@5 x ~@5 x", G: "~@11 x ~@11 x", H: "~@11 x ~@10 x!2", I: "~ x!2 ~ x ~@6 x ~@11 x", J: "~ x", K: "x!2",
  L: "x ~@11 x ~@10 x", M: "~ x!2 ~ x!2 ~@7 x ~@10", N: "~ x ~@11 x ~@10", O: "~ x ~@5 x ~@4",
  P: "x ~ x!2 ~ x ~ x ~@6 x ~@9", Q: "~@2 x ~@12 x ~@8", R: "~ x ~@3 x ~@2", S: "~@2 x!2 ~ x!2 ~ x ~@7 x ~@7",
  T: "~ x ~@2 x ~", U: "~@5 x ~@11 x ~@6", V: "~@5 x!2 ~ x!2 ~@7 x ~@6", W: "~ x ~ x", X: "~@6 x ~@12 x ~@4",
  Y: "~@7 x ~@11 x ~@4", Z: "~@7 x ~@12 x ~@3", AA: "~@2 x ~@5 x ~@2 x ~@8 x ~@3", AB: "~@2 x ~@2 x", AC: "~@3 x ~@3 x",
  AD: "~@5 x ~@2 x ~@2 x", AE: "~@2 x ~@2 x ~@2 x ~@2 x", AF: "~@10 x ~@12 x", AG: "~@10 x!2 ~ x!2 ~ x ~@7",
  AH: "x ~@12 x ~@10", AI: "~ x ~@9 x ~ x!2 ~ x!2 ~@6", AJ: "~ x ~@12 x ~@9", AK: "~@2 x ~@10 x!2 ~ x!2 ~ x ~@4",
  AL: "~@4 x ~@9 x ~ x!2 ~ x!2 ~@3", AM: "~@4 x ~@12 x ~@6", AN: "~@5 x ~@11 x ~ x!2 ~ x ~", AO: "~@5 x ~@12 x ~@5",
  AP: "~ x ~@2 x ~@2 x ~@2 x ~", AQ: "~ x ~@2 x ~@2 x!2 ~ x ~", AR: "~@8 x ~@12 x ~@2", AS: "~@9 x ~@12 x ~",
  AT: "~@4 x ~@2 x ~@16", AU: "~@2 x!2 ~@4", AV: "~@7 x ~@5 x ~@5 x ~@4", AW: "~@2 x ~@2 x ~@8 x ~@9",
  AX: "x ~@4 x ~@2", AY: "~@3 x ~@12 x ~@7", AZ: "~@5 x ~@2 x ~@8 x ~@6", BA: "~@2 x!2 ~@2 x ~", BB: "~@7 x ~@16",
  BC: "~@8 x ~@2 x", BD: "~@11 x ~@2 x!2 ~@7 x", BE: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  BF: "~@2 x ~@3 x ~ x!2 ~ x ~ x!2 ~ x ~@2 x!2 ~ x ~",
})).gain(0.66)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@7 B ~@7 C D E F G H I J K L M N O P Q R S T U V W X Y Z@2 AA AB@2 AC AD@2 AE Z@2 AF AG AH AI AJ AK AL AM AN AO AP AQ
  AR AS AT AU AV AW AX AY AZ BA BB Z@2 BC AB@2 AD@2 BD Z@2 BE AB@2 BF BG@2 BH BI@2 BJ@2 BK ~@15 BL BM BN@2 BO@3 BP AG AH
  AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB Z@2 BC AB@2 AD@2 BD Z@2 BE AB@2 BF BG@2 BH BI@2 BJ@3 BQ@2
  BR BS@2 BT BU BV
>`.pickRestart({
  A: "~ x ~ x", B: "~@7 x ~@11 x ~@4", C: "~@9 x ~@12 x ~", D: "~@5 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@3",
  E: "~ x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@2", F: "~ x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~@4 x!2 ~@2",
  G: "~@2 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x ~ x ~", H: "~@7 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~",
  I: "~@2 x ~ x ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~", J: "~@3 x!2 ~@2 x ~ x!2 ~ x ~@2 x ~ x ~@3 x ~ x",
  K: "~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x", L: "~@8 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2",
  M: "~@4 x!2 ~@2 x ~ x ~ x!2 ~@2 x ~ x ~@3 x ~", N: "x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@4 x",
  O: "x ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x", P: "~@10 x!2 ~ x!2 ~@2 x ~ x ~@3 x",
  Q: "~ x ~@3 x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~@4", R: "x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4",
  S: "x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3", T: "x ~ x ~@5 x ~@2 x ~ x!2 ~ x ~@2 x!2 ~@3",
  U: "~ x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x ~ x ~@2", V: "~ x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@2",
  W: "~ x ~ x ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@2", X: "~@2 x!2 ~@7 x ~@2 x ~@2 x ~@2 x ~@2 x",
  Y: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", Z: "x!8", AA: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~",
  AB: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", AC: "~ x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x",
  AD: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", AE: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  AF: "x ~@3 x ~@2 x ~@2 x ~@2 x ~@8 x ~", AG: "~@10 x ~@7 x!2 ~ x!2 ~",
  AH: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~ x ~ x", AI: "~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x",
  AJ: "~@2 x!2 ~@4 x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2", AK: "~@2 x ~ x ~@3 x ~ x ~@8 x ~ x!2 ~",
  AL: "x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~ x!2 ~", AM: "x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~ x",
  AN: "x ~@2 x ~ x ~@3 x ~ x ~@4 x!2 ~@2 x ~ x!2", AO: "~ x ~@2 x!2 ~@4 x!2 ~@8 x ~ x ~",
  AP: "x!2 ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~", AQ: "x!2 ~@2 x ~ x ~@4 x!2 ~@4 x!2 ~@2 x ~ x",
  AR: "x ~ x ~@2 x!2 ~@4 x!2 ~@4 x ~ x ~@2 x!2", AS: "~ x!2 ~@2 x ~ x ~@3 x ~@10 x!2",
  AT: "~ x ~ x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~", AU: "x!2 ~ x ~@2 x!2 ~@4 x ~ x ~@3 x ~ x ~@2 x",
  AV: "x ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x", AW: "~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@5 x ~@2 x",
  AX: "~ x!2 ~ x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2", AY: "x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@4 x!2 ~@2",
  AZ: "x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2", BA: "x ~ x ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@6 x",
  BB: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", BC: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  BD: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2", BE: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~",
  BF: "~ x ~@9 x ~@11 x", BG: "~@11 x ~@11 x", BH: "~ x", BI: "x!2", BJ: "~ x ~@11 x ~@10", BK: "~ x ~@22",
  BL: "~@19 x ~@4", BM: "~@7 x ~@12 x ~@3", BN: "~@2 x ~@2 x", BO: "~@3 x ~@3 x", BP: "~@2 x ~@2 x ~@5 x",
  BQ: "~ x ~@5 x ~@4", BR: "~@2 x ~@12 x ~@8", BS: "~ x ~@3 x ~@2", BT: "~@3 x ~@12 x ~@7", BU: "~ x ~@2 x ~",
  BV: "~ x ~@4",
// … 43 more lines

More by Ozzy Osbourne