Strudelify

Killer of Giants

Ozzy Osbourne

KeyB minorTempo160 bpm
0:00/0:00
// Killer of Giants — Ozzy Osbourne
// 160 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 216 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · electric guitar clean · "Clean Guitar"
const electric_guitar_clean = note(`<
  A@8 B C D@8 E@8 F@4 G@8 H@4 I@6 J@6 ~@14 K@8 L M N@8 ~@11 O@2 P@2 Q@8 M N@8 ~@11 R@5 ~@9 S@3 ~@54 T@8 ~ U@7
>`.pickRestart({
  A: "[~@6 e4 ~@31 e4 ~@24 e4, ~@3 e2@10 c4@16 ~@7 e3@10 b3 e4 b3 e4 b3 e4 b3 e4 b3 e4 b3 e4 b3@2 b3@2 b3@2, ~@4 e3@10 b3 e4 b3 e4 b3 e4 b3 e4 b3 e4 b3 e4 b3@2 b3@2 b3@2 b3@5 b3@3 b3@2 b3 c3@16 e4@2 e4@2 ~, ~@5 b3@3 b3@2 b3 c3@16 e4@2 e4@2 e4@7 ~ e4@2 e4@3 g3@16 ~@4, ~@7 e4@2 e4@3 g3@16 ~@7 e2@10 c4@16 ~@3]/8",
  B: "~@6 e4!2, b3@5 b3@3, ~@3 e2@5, ~ e3", C: "~@7 e4, b3@2 b3@3 c4@3, ~ e4@5 b3@2, ~@3 c3@5, ~ g3",
  D: "[~@6 e4 ~@15 e4 ~@17 b3 ~@13 e4 ~@8 e4, b3@4 e3@12 b3 d4@4 b3@2 e4 b3 e4 b3 c3@10 g3 b3 e4@2 b3 g3@8 f3@3 b3@2 e4 b3 e4 b3 c3 g3 c4 b3@2, ~ c4@4 b3@2 e4 b3 e4 b3 a#2@8 e2@13 b3@2 g3 g2@9 c3@7 e2@13, ~@2 g3@10 f3@8 e3@13 c4@10 f2@9 e3@12, ~@3 e2@10 a#3 d4 e4@3 a#3@10 g3 c4 b3 e4@5 d3@9 f3 a3 e4 b3 a3@15]/8",
  E: "[~@6 e4 ~@15 e4 ~@17 b3 ~@22 g4, b3@4 e3@12 b3 d4@4 b3@2 e4 b3 e4 b3 c3@10 g3 b3 e4@2 b3 g3@6 b3@12 g3 c4 d4@2, ~ c4@4 b3@2 e4 b3 e4 b3 a#2@8 e2@13 b3@2 g3 g2@9 c3 f3 a3 e4@5 g3 c4 d4 g4 d4 c4 g3 c3@5, ~@2 g3@10 f3@8 e3@13 c4@10 f2@7 f3 c3 f3@12, ~@3 e2@10 a#3 d4 e4@3 a#3@10 g3 c4 b3 e4@5 d3@13 a3@15]/8",
  F: "[~@31 g4, d4@4 f3 a#3 d4 g4 d4 a#3 f3@7 g4 d4 c3 f3@9 c4 d4@2, ~ c4@10 a#4@9 g3 c4 d4 g4@5 g3@4, ~@2 g3@10 d4 a#3 a4@10 d4 c4 g3 c3@5, ~@3 c3@12 d4 a#3@16]/4",
  G: "[~@63 a4, d4@4 f3 a#3 d4 g4 d4 a#3 f3@8 d4 d3 g3@14 a3@10 e4 c4 b4@10 e4 d4 a3 d3@2 d4 e4@2, ~ c4@10 a#4@9 a3 d4 e4 a4 e4 d4 a3 d3@6 d4@7 e4 c4 g3@7 a4 e4 d3 g3@12, ~@2 g3@10 d4 a#3 a4@3 g4@12 d4 e4 a4@5 g3 c4 e4 a4@4 c5@9 a3 d4 e4 a4@5 a3@4, ~@3 c3@12 d4 a#3@12 a3@4 e4@3 d3@12 e4 c4@16]/8",
  H: "[~@10 g3 ~@20 b3, e4@4 g3 c4 e4 a4@13 c#4@2 e4@2 c#4@4 c#4@4, ~ d4@7 e4 c4@2 [g3,c4]@14 g#3@4 g#3@3, ~@6 a3@28 c5@47 b3@12 ~@3, ~@9 d3@25 e4@23 b3@6 g#3@6 b3@9 e4@12 e4@6]/4", // C5
  I: "[~@47 b3, c#4@7 e4@2 e4 c#4 e4 c#4 e4 c#4 e4@2 e4 c4 e4 c4 e4 c4 e4, ~ g#3@15 c4@15 b3@4 b3@2 g3@2 b3@2 g3@2 b3@2 g3@3, ~@2 e4@2 c4@2 e4@2 c4@2 e4@2 c4@3 b3@4 b3@2 g#3@2 b3@2 g#3@2 b3@2 g#3@3 c#4@16, ~@3 b3@2 g3@2 b3@2 g3@2 b3@2 g3@4 g3@16 g#3@15]/6",
  J: "[~@15 a3@8 ~, c4@12 a3 e3 a2@14 e4@16 ~@4, ~ g3@14 e3@5 a3 e3 b2@16 ~@10, ~@2 e4@5 e3 a3 b3 e4@7 b3 e4@8 b3 a3@2 b3@16 ~@3, ~@3 b3 a3 e3 a2@5 b3@5 a3@3 b3@4 e3 a3 e3@16 ~@7]/6",
  K: "[~@27 b3 ~@35 c#4, ~@6 e2@8 d3 g3 e4@8 [b2,c#4]@15 b3 [g2,c#4]@14 d3@2 b2 b3 c#4 b3 c#4 b3 f#3@2, ~@7 f#2@11 d3 g3 d4@6 f#3@2 b3@2 f#3 b3 e4@10 d3 g3 b3@11 g3@9, ~@8 [g2,c#4]@14 d3@12 f#3 b3 d4@10 d3 g3 e4@16, ~@10 d3 g3 b3@11 g3@15 f#3@12 d3 g3 d4@12]/8", // Bsus2 Gdim
  L: "~@7 b3, b3@3 b3@2 b3@2 ~, ~ f#3@5 f#3@2, ~ c#4 c#4@2", M: "~@7 g3, [g2,c#4], ~ d3@2 d3, ~@3 g3@4 ~, ~ b3",
  N: "[~@3 b2, e4@8 [a2,c#4]@14 e3@4 d3 g3 b3@6 e3 a3 d4@4 b2 f#3 b3 c#4@16 ~@5, ~@2 d3@4 d3@8 e3 a3 e4@8 [g2,c#4]@8 [a2,e4]@12 b3 f#3 b2 f#4@16 ~, ~@9 g3@12 g3@33 e3@3 a3@3 d4@33 g3@24 a3@26 [f#3,b3]@48 ~, ~@12 d4@18 e3@3 a3@3 b3@33 a3@21 d3@24 e3@28 d4@48 ~@2]/8", // A Gdim A5 B5
  O: "[~@7 f#3, b2, ~ b3@2 b3@2 b3@3 b3@3 b3@2 b3@3, ~@2 c#4@2 c#4@3 c#4@3 c#4@2 c#4@4, ~@6 f#3@3 f#3@5 ~@2]/2",
  P: "[~ [b2,f#3], b2 ~, ~@3 b3@6 b3@6 b3@7 f#4@26, ~@6 c#4@6 c#4@11 [b3,c#4]@25, ~@3 f#3 ~@4]/2", // B5 Bsus2
  Q: "[~@19 b3 ~@43 b3, [g2,c#4]@14 d3@12 f#3 b3 d4@10 d3 g3 e4@8 b2@16, ~@2 d3@4 d3@2 e4@8 [b2,c#4]@15 b3 [g2,c#4]@14 d3@12 c#4 b3 c#4@4, ~@3 g3@4 g3@3 d3 g3 d4@6 f#3@2 b3@2 f#3 b3 e4@10 d3 g3 b3@11 g3@15 f#3@2, ~@4 b3@11 g3@15 f#3@12 d3 g3 d4@5 b3 c#4 b3 c#4 b3 f#3 c#4 b3 f#3@4 b3@2 ~]/8", // Gdim Bsus2 Gdim
  R: "[~@3 [b2,f#3]@2, b2@2 b2 ~@2, ~@3 b3@6 b3@6 b3@9 b3@9 b3@6 b3@12 b3@6 b3@6 b3@7 f#4@48 ~@2, ~@6 c#4@6 c#4@9 c#4@9 c#4@6 c#4@18 c#4@6 c#4@11 [b3,c#4]@48 ~, ~@6 f#3@3 f#3@5 f#3@8 f#3@2 ~@16]/5", // B5 Bsus2
  S: "[~ [a3,c#4]@4 ~, f#2@2 ~, ~@5 c#3@48 ~@19, ~@3 f#3@16 ~@5]/3", // A
  T: "[~@43 f#3@48 ~@5, ~ b2@48 ~@47, ~@4 b3@6 b3@6 b3@9 b3@9 b3@6 b3@48 ~@8, ~@7 c#4@6 c#4@9 c#4@9 c#4@6 c#4@48 ~@11, ~@19 f#3@9 f#3@15 ~@53]/4",
  U: "[~@32 b4@41 ~@11, ~@23 a2@27 e4@48 ~@70, ~@10 e3@9 a4@16 ~@21, ~@37 a3@48 ~@83, ~@43 c4@48 ~@77]/7",
})).s("gm_electric_guitar_clean").gain(0.53).pan(0.6)

// bass · fretless bass · "Bass"
const bass = note(`<
  A@8 B@16 C@8 D@8 ~@8 E@5 ~@15 F G@2 H@2 G@2 I@2 J@2 K@2 L M N O P Q R S T Q U V L W X Y T Z T AA AB@2 AC@2 AB@2 AD@2
  AE@2 AF@2 L M N O P Q R S T Q U V L W X Y T AG T AA L M AH AI L M AH AJ L M AK AL L M AH AI L M AH AJ L M AM@3 AN AO@3
  AP AQ@3 AR AS@3 AT AU@3 AV AW@3 AX AY@3 AZ BA@3 BB BC BD BE BF BG BH BE BI BJ BK BL BM BN BH BO BK BP BQ BO BR BS@8 ~
>`.pickRestart({
  A: "[~@3 e2@8 c2@24 e2@8 c2@21]/8", B: "[~@3 e2@8 c2@8 e2@8 a#1@8 e2@8 c2@8 g1@8 f1@5]/8",
  C: "[~@3 c2@16 c2@16 c2@16 c2@13]/8", D: "[~@3 d2@16 d2@16 d2@16 d2@13]/8", E: "[~@6 a2@16 b2@15 ~@3]/5",
  F: "~@6 e1 f#1", G: "[g1@14 g1 a1]/2", H: "[b1@14 e1 f#1]/2", I: "[b1@12 b2@2 e1 f#1]/2", J: "[g1@7 g1]/2",
  K: "[a1@14 e1 f#1]/2", L: "g1 ~ g1 ~ g1 ~ g1 ~", M: "a1 ~ a1 ~ a1 ~ a1 ~", N: "b1 ~ b1 ~ b1 f#2 b2 f#2", O: "b1",
  P: "~@2 b1@2 b2 b1@2 f#1", Q: "b1 ~ b1 ~ b1 c#2 d2 c#2", R: "a1@9 a1@2 ~", S: "a1@4 a1 b1 c#2 ~",
  T: "c#2 ~ b1@3 b1@2 f#1", U: "a1@3 a1", V: "a1@4 a1 b1 a1@2", W: "g1 ~ g1 ~ g1 a1 b1@2", X: "c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  Y: "a1 ~ a1 ~ a1 b1 c#2@2", Z: "b1 ~ b1@2 a1 b1 c#2 ~", AA: "b1@2 b1@2 b1@2 e1 f#1", AB: "[g1 ~ g1 ~ g1@10 g1 a1]/2",
  AC: "[b1 ~ b1 ~ b1@10 e1 f#1]/2", AD: "[b1 ~ b1 ~ b1@7 b1 b2@2 e1 f#1]/2", AE: "[g1 ~ g1 ~ g1@10 g1@2]/2",
  AF: "[a1 ~ a1 ~ a1@10 e1 f#1]/2", AG: "b1 ~ b1@2 b1 c2 d2 ~", AH: "b1 ~ b1 ~ b1 ~ b1 ~",
  AI: "b1 f#2 b1@2 b2@2 e1 f#1", AJ: "b1 ~ b1!2 b2@2 e1 f#1", AK: "f#1 ~ f#1 ~ f#1 ~ f#1 ~",
  AL: "f#1 ~ f#1 ~ f#1 ~ e1 f#1",
  AM: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 e1@3 e1@3 e1@3 e1@3 e1@3 e1@3 b1@6 d2@6 a#1@2 a#1@3 a#1@3 a#1@3 a#1@3 a1@3 a#1@3 a#1@3 a#1@2]/3",
  AN: "~ a1@3 a#1@3 c2@2 a#1@3 a1@3 g1@3 f1@3 e1@3",
  AO: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 e1@3 e1@3 e1@3 e1@3 e1@3 b1@6 d2@6 a#1@3 a#1@2 a#1@3 a#1@3 a#1@3 a1@3 a#1@3 a#1@3 a#1@3 a1@2]/3",
  AP: "~ a#1@3 c2@3 a#1@2 a1@3 g1@3 f1@3 e1@3 e1@3",
  AQ: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 e1@3 e1@3 e1@3 e1@3 b1@6 d2@6 a#1@3 a#1@3 a#1@2 a#1@3 a#1@3 a1@3 a#1@3 a#1@3 a#1@3 a1@3 a#1@2]/3",
  AR: "~ c2@3 a#1@3 a1@2 g1@3 f1@3 g1@3 g1@3 g1@3",
  AS: "[g1@3 g1@3 g1@3 g1@3 g1@3 g1@2 d2@3 g1@3 g1@3 g2@6 g2@6 a1@3 a1@3 a1@3 a1@2 a1@3 a1@3 a1@3 a1@3 a1@3 e2@3 a1@3 a1@2]/3",
  AT: "~ a2@6 a2@5 e1@3 e1@3 e1@3 e1@3",
  AU: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 e1@3 e1@3 b1@6 d2@6 a#1@3 a#1@3 a#1@3 a#1@3 a#1@2 a1@3 a#1@3 a#1@3 a#1@3 a1@3 a#1@3 c2@3 a#1@2]/3",
  AV: "~ a1@3 g1@3 f1@2 e1@3 e1@3 e1@3 e1@3 e1@3",
  AW: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 e1@3 b1@6 d2@6 a#1@3 a#1@3 a#1@3 a#1@3 a#1@3 a1@2 a#1@3 a#1@3 a#1@3 a1@3 a#1@3 c2@3 a#1@3 a1@2]/3",
  AX: "~ g1@3 f1@3 e1@2 e1@3 e1@3 e1@3 e1@3 e1@3",
  AY: "[e1@3 e1@3 e1@3 e1@3 e1@3 e1@2 b1@6 d2@6 a#1@3 a#1@3 a#1@3 a#1@3 a#1@3 a1@3 a#1@2 a#1@3 a#1@3 a1@3 a#1@3 c2@3 a#1@3 a1@3 g1@2]/3",
  AZ: "~ f1@3 g1@3 g1@2 g1@3 g1@3 g1@3 g1@3 g1@3",
  BA: "[g1@3 g1@3 d2@3 g1@3 g1@3 g2@5 g2@6 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@2 a1@3 e2@3 a1@3 a1@3 a2@6 a2@5]/3",
  BB: "~ a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@2", BC: "~ a1@6 ~@17", BD: "~@7 b1@6 b2@3 b1@6 f#1@2",
  BE: "~ b1@3 ~@3 b1@3 ~@3 b1@3 c#2@3 d2@3 c#2@2", BF: "~ a1@18 a1@4 ~", BG: "~ a1@12 a1@3 b1@3 c#2@3 ~@2",
  BH: "~ c#2@3 ~@3 b1@9 b1@6 f#1@2", BI: "~ a1@18 a1@5", BJ: "~ a1@12 a1@3 b1@3 a1@5",
  BK: "~ g1@3 ~@3 g1@3 ~@3 g1@3 ~@3 g1@3 ~@2", BL: "~ g1@3 ~@3 g1@3 ~@3 g1@3 a1@3 b1@5",
  BM: "~ c#2@3 ~@3 c#2@3 ~@3 c#2@3 ~@3 c#2@3 ~@2", BN: "~ a1@3 ~@3 a1@3 ~@3 a1@3 b1@3 c#2@5",
  BO: "~ b1@3 ~@3 b1@3 ~@3 b1@3 ~@3 e1@3 f#1@2", BP: "~ a1@3 ~@3 a1@3 ~@3 a1@3 ~@3 a1@3 ~@2",
  BQ: "~ b1@3 ~@3 b1@9 b1@3 ~@3 f#1@2", BR: "~ g1@23", BS: "[~@2 f#1@27 ~ a1@162]/8",
})).s("gm_fretless_bass").gain(0.52).pan(0.4)

// other · string ensemble 2 · "Synth"
const string_ensemble_2 = note("<~@5 A@7 B@8 C@8 D@8 E@8 F@5 ~@20 G@2 H@2 G@2 H@2 G@2 I@2 J K L ~@132>".pickRestart({
  A: "[~@7 e6@44 d6@5]/7", B: "[~@3 e6@16 d6@8 b5@32 a#5@5]/8", C: "[~@3 b5@16 g5@8 a5@8 g6@24 a#6@3 a6@2]/8",
  D: "[~ g6@2 g6@24 a#6@3 a6@3 g6@2 a6@24 c7@3 b6@2]/8",
  E: "[~ a6@2 a6@24 c7@8 ~@28 c6, ~@35 b6@28 ~, ~@57 e6@2 c6@2 e6@2 ~, ~@29 b5 g5 b5]/8",
  F: "[~@16 g5 ~@3, g5 b5 g#5 b5 g#5 b5 g#5 b5 g#5 b5 g5 b5 g5 b5 g5 b5 ~@4, ~ e6@2 c#6@2 e6@2 c#6@2 e6@2 c#6@2 e6@2 c#6@2 e6@2 c6@2 e6@2 c6@2 e6@2 c6@2 e6@2 c6@2 ~@7]/5",
  G: "[g4,b4,d5]/2", H: "[b4,d5,f#5]/2", I: "[a4,c#5,e5]/2", J: "[g4,b4,d5]", K: "[a4,c#5,e5]", L: "[b4,d5,f#5]",
})).s("gm_string_ensemble_2").gain(0.59).pan(0.3)

// other · pad warm · "synth 2"
const pad_warm = note("<~@16 A@8 B@8 C@8 ~@8 D@5 ~@8 E@2 F@2 G@2 H@2 ~@147>".pickRestart({
  A: "[~@3 e3@8 c3@8 e3@8 a#2@8 b2@8 c3@8 g2@8 a2@5]/8", B: "[~@3 c3@16 a#2@16 c3@16 a#2@13]/8",
  C: "[~@3 d3@16 c3@16 d3@16 c3@13]/8", D: "[~@9 [a2,a3]@12 [a2,a3]@12 [b2,b3]@25 ~@2]/5", E: "[a4 b4, [c#5,f#5]]/2",
  F: "[g#4,c#5,e5]/2", G: "[e4,b4,e5]/2", H: "[f#4,d5,f#5,a5]/2",
})).s("gm_pad_warm").gain(0.24).pan(0.8)

// chords · acoustic guitar steel · "Acoustic Gut."
const acoustic_guitar_steel = note("<~@53 A@4 B@4 C@4 B@4 ~@147>".pickRestart({
  A: "[~@24 [c#3,e4] ~@3 [d#3,d#4] ~@2 e3, f#2@8 g#2@4 a2@4 c#3@8 ~ [d#3,d#4]@2 ~@2 c#3@3, ~@2 f#3@2 f#4@2 a3@2 f#4@2 a3@2 e4@2 a3@2 ~@3 e4@2 e4@2 g#3@2 ~@2 f#3@2 ~ g#3@2, ~@3 a3@2 c#4@2 f#3@2 c#4@2 f#3@2 c#4@2 b3@2 ~ c#4@2 g#4@2 c#4@2 ~@2 b3@2 ~ c#4@2 ~]/4", // C#m D#
  B: "[~@36 a4 ~@56 g#2@3, e3@7 e3@9 d3@4 a2@4 d3@4 a2@3 ~, ~@2 b3@2 g#4@2 b3@2 ~ e4@2 b4@2 g#4@2 b3@2 a3@2 f#4@2 d4@2 g#4@2 d4@2 f#4@2 d4@2 ~, ~@3 e4@2 e4@2 ~ a4@2 b3@2 ~@2 e4@2 ~@2 d4@2 g#4@2 a3@2 f#4@2 a3@2 g#4@2 a3@2]/4",
  C: "[~@24 [b3,d#4] [c#4,e4] [d#4,f#4] [c#4,e4] ~@2 g#3@2, f#2@2 g#2 a2 c#3@2 ~@2, ~@2 f#3@2 f#4@2 a3@2 f#4@2 a3@2 e4@2 a3@2 ~@3 e4@2 e4@2 g#3@2 ~@4 b3@2 ~, ~@3 a3@2 c#4@2 f#3@2 c#4@2 f#3@2 c#4@2 b3@2 ~ c#4@2 g#4@2 c#4@2 ~@4 d#4@2 ~@2]/4", // B C#m D#m C#m
})).s("gm_acoustic_guitar_steel").gain(0.4)

// other · string ensemble 1 · "synth 3"
const string_ensemble_1 = note(`<
  ~@61 A@2 B@2 C@2 D@2 E F E F E G@3 E F E F E H@3 ~@16 E F E F E G@3 E F E F E H@3 ~@99
>`.pickRestart({
  A: "[a4 b4, [c#5,f#5]]/2", B: "[g#4,c#5,e5]/2", C: "[e4,b4,e5]/2", D: "[f#4,d5,f#5,a5]/2", E: "c#6 b5", F: "e6 d6",
  G: "[e6 f#6@2 f#6@9]/3", H: "[e6 f#6@2 f#6@7 ~@2]/3",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.6)

// chords · overdriven guitar · "dist. guitar"
const overdriven_guitar = note(`<
  ~@84 A B C D E B C F E G H I J K@4 ~@15 A B C D E B C F E G H I J K@4 L M N@2 L M N@2 L M O@2 L M N@2 L M N@2 L M P@7
  Q@5 R S@2 T@8 U@5 V@2 W X Y Z AA AB AC Z AA AD AC AE AF AG AH AI@3 AH AJ@6 ~@6
>`.pickRestart({
  A: "~@4 [c#4,f#4] [b3,e4] [a3,d4]@2", B: "[g#3,c#4] ~ [f#3,b3]@6", C: "[b2,f#3,b3]", D: "[a2,e3,a3]@6 [e3,a3,c#4] ~",
  E: "[e3,a3,c#4]@4 [c#4,f#4] [b3,e4] [a3,d4]@2", F: "[e3,a3]@6 [e3,a3,c#4] ~, a2", G: "[e3,a3] [g2,d3,g3]@3",
  H: "[g3,d4,g4]", I: "[c#3,g#3,c#4]", J: "[a2,e3,a3]", K: "[b2,f#3,b3]/4", L: "[d3,g3]", M: "[e3,a3]", N: "[f#3,b3]/2",
  O: "[c#3,f#3]/2", P: "[[b2,e3]@46 ~ [f3,a#3]@46 [b2,e3]@46 ~ [f3,a#3]@28]/7",
  Q: "[~@18 [b2,e3]@46 ~ [f3,a#3]@46 [d3,g3]@3 [d3,g3] ~ [d3,g3]!2 ~ [d3,g3]]/5", // E5 A#5 G5
  R: "[d3,g3]@3 [d3,g3]!2 ~ [d3,g3]!2 ~ [d3,g3]@3 [d3,g3]!2 ~ [d3,g3]!2 [d3,g3]@3 [d3,g3] ~ [d3,g3]!2", // G5
  S: "[~ [d3,g3] [d3,g3]@6 [d3,g3]@6 [e3,a3]@3 [e3,a3]!2 ~ [e3,a3]!2 ~ [e3,a3]@2 [e3,a3] ~ [e3,a3]!2 ~ [e3,a3] [e3,a3]@3 [e3,a3] ~ [e3,a3]!2 ~ [e3,a3] [e3,a3]@3 [e3,a3]!2 ~ [e3,a3]!2]/2", // G5 A5
  T: "[~ [e3,a3]@6 [e3,a3]@5 [b2,e3]@46 ~ [f3,a#3]@46 [b2,e3]@46 ~ [f3,a#3]@40]/8", // A5 E5 A#5 E5 A#5
  U: "[~@7 [b2,e3]@46 [f3,a#3]@46 ~ [d3,g3]@3 [d3,g3]!3 ~ [d3,g3] [d3,g3]@3 [d3,g3] ~ [d3,g3]!2 ~ [d3,g3] [d3,g3]@3]/5", // E5 A#5 G5
  V: "[[d3,g3]!2 ~ [d3,g3]!2 ~ [d3,g3]@3 [d3,g3]!2 ~ [d3,g3]!2 ~ [d3,g3]@5 [d3,g3]@6 [e3,a3]@3 [e3,a3] ~ [e3,a3]!3 ~ [e3,a3]@3 [e3,a3]!2 ~ [e3,a3]!2 ~ [e3,a3]@3 [e3,a3]]/2", // G5 A5
  W: "[e3,a3]!2 ~ [e3,a3] [e3,a3]@3 [e3,a3] ~ [e3,a3]!2 ~ [e3,a3] [e3,a3]@6 [e3,a3]@5", // A5
  X: "~ e3@3 e3@3 e3@3 [e3,a3]@3 [e3,a3]@3 [e3,a3]@3 [e3,a3]@3 [e3,a3]@2", // A5
  Y: "~ [e3,a3]@6 ~@6 [c#4,f#4]@3 [b3,e4]@3 [a3,d4]@5", Z: "~ [g#3,c#4]@3 ~@3 [f#3,b3]@17", AA: "~ [b2,f#3,b3]@23",
  AB: "~ [a2,e3,a3]@18 [e3,a3,c#4]@3 ~@2", AC: "~ [e3,a3,c#4]@12 [c#4,f#4]@3 [b3,e4]@3 [a3,d4]@5",
  AD: "~ [e3,a3]@18 [e3,a3,c#4]@3 ~@2, ~ a2@23", AE: "~ [e3,a3]@6 [g2,d3,g3]@17", AF: "~ [g3,d4,g4]@23",
  AG: "~ [c#3,g#3,c#4]@23", AH: "~ [a2,e3,a3]@23", AI: "[~ [b2,f#3,b3]@48 [g2,d3,g3]@23]/3",
  AJ: "[~ [b2,f#3,b3]@48 [g2,d3,g3]@25 [f#2,c#3,f#3]@27 ~ [a2,e3,a3]@41 ~]/6", // B5 G5 F#5 A5
})).s("gm_overdriven_guitar").gain(0.59).pan(0.4)

// other · distortion guitar · "lead guitar"
const distortion_guitar = note("<~@133 A B C D E F G@2 H@2 I J K L M N O P Q R S T U@2 ~@59>".pickRestart({
  A: "[g4,b4]@2 e4 d4@3 e4 d4", B: "[d4,f#4]@2 b3 a3@3 b3 a3",
  C: "f#3@3 e3@3 d3@3 c#3@3 d3@4 ~ c#3@4 a2@3, ~@12 c#3 ~@11", D: "b2@2 d3 b2@3 d3 b2", E: "g2 d3 g3 a3 g3@4",
  F: "a2 e3 a3 b3 a3@4", G: "[[f#3,f#4]@6 a4@3 b4@3 e4@6 f#4@3 f#4@6 d4@6 c#4 d4 c#4 b3@6 b3@6]/2",
  H: "e4@3 f#4 ~ e4 d4@3 e4 ~ d4 c#4@3 d4 ~ c#4 b3@3 c#4 ~ b3", I: "d4@4 ~ c#4@4 d4@3 e4@4 ~ d4@4 e4@3",
  J: "f#4@2 a4 f#4@3 a4 f#4", K: "g3 d4 g4 a4 g4@4", L: "a3 e4 a4 b4 a4@4", M: "b4@9 c#5 ~ d5 e5@3 f#5@3 e5@3 d5@3",
  N: "b4@9 d5 ~ e5 f#5@12", O: "g5@3 f#5 g5 f#5 d5@3 b4@3 g4@3 a4@3 b4@3 d5@3",
  P: "a5@3 f#5 a5 f#5 e5@3 d5@3 a4@3 b4@3 c#5@3 d5@3", Q: "b5@3 a5 a5@3 f#5", R: "~ g5 ~ g5 f#5@4, f#5@5 ~ f#5@5 ~@13",
  S: "c#6 b5", T: "d6!2", U: "[b5@23 ~]/2",
})).s("gm_distortion_guitar").gain(0.64).pan(0.3)

// chords · synth strings 1 · "fondo"
const synth_strings_1 = note("<~@155 A@7 B@6 C@8 D@8 E@3 ~@29>".pickRestart({
  A: "[[e3,g3,b3,e4]@46 ~ [a#3,d4,f4,a#4]@46 [e3,g3,b3,e4]@46 ~ [a#3,d4,f4,a#4]@28]/7", // Em A# Em A#
  B: "[~@18 [e3,g3,b3,e4]@46 ~ [a#3,d4,f4,a#4]@46 [b3,d4,g4,b4]@33]/6", // Em A# G
  C: "[~@14 [a3,c#4,e4,a4,c#5]@46 [g3,b3,e4,g4,b4]@46 ~ [a#3,d4,f4,a#4,d5]@46 [g3,b3,e4,g4,b4]@39]/8", // A Em A# Em
  D: "[~@8 [a#3,d4,f4,a#4,d5]@46 ~ [g3,b3,e4,g4,b4]@46 [a#3,d4,f4,a#4,d5]@46 ~ [b3,d4,g4,b4,d5]@44]/8", // A# Em A# G
  E: "[~ [c#4,e4,a4,c#5,e5]@35]/3", // A
})).s("gm_synth_strings_1").gain(0.29)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@81 A@2 B C ~@2 D ~@3 E F ~@7 G ~@14 H C ~@2 D ~@3 I F ~@7 J ~@48 K L ~@7 M ~@3 N O ~@11 P ~@8
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x", D: "~ x", E: "~@11 x!2 ~@11", F: "~@6 x!2", G: "~@12 x ~@2 x ~@2 x ~ x!2 ~@2",
  H: "~@4 x!4", I: "~@10 x ~ x!2 ~@10", J: "x!8", K: "~@19 x!2 ~ x!2", L: "~ x!2 ~@21", M: "~@13 x ~@10",
  N: "~@12 x!2 ~@10", O: "~@19 x ~@2 x ~", P: "~@5 x ~@2",
})).gain(0.24)

// … 49 more lines

More by Ozzy Osbourne