Strudelify

Diary of a Madman

Ozzy Osbourne

KeyE♭ majorTempo168 bpm
0:00/0:00
// Diary of a Madman — Ozzy Osbourne
// 168 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 264 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H I@6 J K@4 L@6 M@2 ~@16 N@2 O@3 ~@21 P@3 Q@3 R@3 S T U V W X Y Z AA AB ~@17 AC@2 AD@2 AE@2 AF@2 AC@2
  AD@2 AE@2 AF@2 AG@2 AH@2 AG@2 AI@2 AG@2 AH@2 AG@2 AJ@2 AG@2 AH@2 AG@2 AI@2 AG@2 AH@2 AG@2 AJ@2 AG@2 AH@2 AG@2 AI@2
  AG@2 AH@2 AG@2 AJ@2 AG@2 AH@2 AG@2 AI@2 ~@42 P@3 Q@3 R@3 S AK ~@34
>`.pickRestart({
  A: "~@7 a3, a2, ~ a3@5 db4@2, ~@2 db4@3 eb4@3, ~@6 eb4@2 e4@7 ~",
  B: "~@7 g3, a2, ~ g3@5 db4@2, ~@2 db4@3 eb4@3, ~@6 eb4@2 e4@7 ~",
  C: "~@7 gb3, a2, ~ gb3@5 c4@2, ~@2 c4@3 eb4@3, ~@6 eb4@2 a4@7 ~",
  D: "~@7 f3, a2, ~ f3@5 b3@2, ~@2 b3@3 d4@3, ~@6 d4@2 a4@7 ~",
  E: "~@7 e3, a2, ~ e3@5 b3@2, ~@2 b3@3 db4@3, ~@6 db4@2 e4@7 ~",
  F: "~@7 e3, a2, ~ e3@5 b3@2, ~@2 b3@3 c4@3, ~@6 c4@2 e4@7 ~",
  G: "~@7 e3, g2, ~ b3@2 b3@3 b3@2, ~@2 c4@3 c4@3, ~@8 e4@7 ~",
  H: "~@7 f3, f2, ~ f3@5 a3@2, ~@4 d4@4 e4@7 ~, ~@3 a3@2 d4@3",
  I: "[~@12 b3 ~@4 e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2, e2@8 ~@8 a2@5 ~ a2@11 ~ a2@14, ~ b2@2 b2@2 ab3@2 ab3@2 ab3@2 e4@2 ~@35, ~@2 gb3@2 gb3@2 gb3@2 b3@2 b3@2 ~ [b3,d4]@4 ~@31]/6", // Bm
  J: "e2@2 ~ e3 c4 e3 b3 e3, ~@2 a2@5 ~",
  K: "[~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2 e2@2 ~ e3 c4 e3, a2@11 ~ a2@14 ~@2 a2@4]/4",
  L: "[b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2 e2@2 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3, ~@2 a2@11 ~ a2@14 ~@2 a2@5 ~ a2@11 ~]/6",
  M: "[~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 ~@4, a2@7 ~]/2",
  N: "[~@4 c4 ~@2 c4, ~@8 a2@12 g2@11 ~, ~@12 b3@7 ~@5 b3@7 ~]/2",
  O: "[~@2 f3 ~@2 g3 ~@2 c4 ~@2 c4, c4@11 ~ d4@11 ~@5 a3@7 ~ g3@11 ~, ~@4 a3@8 ~@4 b3@7 ~ f3@11 ~@5 b3@7 ~]/3",
  P: "[~@2 c4 ~@2 c4 ~@2 f3 ~@2 g3, a2@12 g2@11 ~@5 a3@8 ~@4 b3@7 ~, ~@4 b3@7 ~@5 b3@7 ~ c4@11 ~ d4@11 ~]/3",
  Q: "[~@8 c4@4 ~@8 c4@4 ~@8 a3@3 ~ [f3,a3,c4,e4]@5 ~@3 [g3,b3,d4,g4]@4, f3@11 ~ g3@11 ~@5 c4@7 ~@13, ~@4 a3@7 ~@5 b3@7 ~ e4@11 ~@13]/3", // Fmaj7 G
  R: "[~@2 b3 ~@2 b3 ~ a3 g3 ~@2 g3, a2@12 g2@12 ~@16 b3@7 ~, ~@4 c4@7 ~@5 c4@7 ~ c4@10 ~@2 d4@12]/3",
  S: "~@8 f3@3 a3 b3@4, c4@11 ~@5, ~@4 a3@7 ~@5", T: "c4@2 b3@2 [a2,a3] e3 c4 e3", U: "b3 e3 a2 e3 a3 e3 b3 e3",
  V: "c4 e3 b3 e3 a3 e3 a2 e3", W: "c4 e3 b3 e3 a3 e3 b3 e3", X: "c4 e3 b3@2 e2@2 a2 e3", Y: "c4 e3 b3 e3 a2 e3 a3 e3",
  Z: "b3 e3 c4 e3 b3 e3 a3 e3", AA: "a2 e3 c4 e3 b3 e3 a3 e3", AB: "b3@2 e3@2 c4@2 e3 ~@9",
  AC: "[~ gb4 ~@3 g4 ~ g4, b3, ~@2 g4@2 e4@3 ~, ~@3 gb4@2 ~ gb4@2]/2",
  AD: "[~ gb4 ~@3 g4 ~ g4, c4, ~@2 g4@2 e4@3 ~, ~@3 gb4@2 ~ gb4@2]/2",
  AE: "[~ d4 ~@3 g4 ~ g4, b3, ~@2 g4@2 e4@3 ~, ~@3 d4@2 ~ d4@2]/2",
  AF: "[~ d3 ~@5 gb4, gb4@3 gb4@2 gb4@2 ~, ~@2 d4@2 e4@3 ~, ~@3 d4]/2",
  AG: "[~@2 gb4 g4 ~@3 g4, g4@4 ~@4 e4@3 ~ gb4@3 ~, ~ b3@7, ~@10 g4@3 ~@3]/2",
  AH: "[~@2 gb4 a4 e4 a4 gb4 a4, a4 ~@3, ~ d3@7]/2", AI: "[~@2 gb4 a4 e4 a4 g4 gb4, a4 ~@3, ~ d4@7]/2",
  AJ: "[~@2 gb4 a4 [g4,b4] [gb4,a4] [e4,g4] [d4,gb4], a4 ~@3, ~ d3@7]/2", AK: "c4@4 b3@4 a3@3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.38)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~@29 A@3 B C@6 B D@4 ~@4 E@6 F E@6 F E@6 F ~@32 G@4 ~@86 E@6 F E@6 F E@6 F E@6 F ~@10 H I J K L M N O P Q R S T U V W
  X Y I J K Z M N O P Q R S T U V AA X AB
>`.pickRestart({
  A: "[~@20 db4@4 ~@12 e4@2 ~@5 a4@5, ~@4 a2@15 ~@5, ~@6 e4@8 ~@2 eb4@3 ~@5, ~@8 eb4@5 ~ db4@5 ~@2 [c4,eb4]@3, ~@24 g3@14 gb3@7 ~@3]/3", // Cm
  B: "~@3 a4@5, f3@15 ~, ~@4 b3@11 ~, ~@5 d4@11",
  C: "[~@12 db4@4 ~@12 e4@2 ~@5 a4@5 ~@6 e4@10 ~@12 db4@4 ~@12 e4@2 ~@5 a4@5, a2@15 ~@13 a2@15 ~@5, ~@4 e4@16 ~@4 eb4@6 ~@15 db4@11 ~@4 e4@16 ~@4 eb4@6 ~@10, ~@8 eb4@10 ~@2 db4@10 ~@4 [c4,d4]@6 ~@4 b3@11 ~@9 eb4@10 ~@2 db4@10 ~@4 [c4,eb4]@6, ~@16 g3@14 gb3@7 ~@3 f3@15 ~@17 g3@14 gb3@7 ~@3]/6", // Csus2 Cm
  D: "[~@12 db4@4 ~@12 e4@2 ~@5 a4@5 ~@6 e4@11 ~@7, a2@15 ~@17, ~@4 e4@16 ~@4 eb4@6 ~@15 db4@11 ~@8, ~@8 eb4@10 ~@2 db4@10 ~@4 [c4,d4]@6 ~@4 b3@11 ~@9, ~@16 g3@14 gb3@7 ~@3 f3@15 ~@9]/4", // Csus2
  E: "[~@12 db4@4 ~@12 e4@2 ~@5 a4@5 ~@6 a4@10 ~@12 db4@4 ~@12 e4@2 ~@5 a4@5, a2@15 ~@13 a2@15 ~@5, ~@4 e4@16 ~@4 eb4@6 ~@15 d4@11 ~@4 e4@16 ~@4 eb4@6 ~@10, ~@8 eb4@10 ~@2 db4@10 ~@4 [c4,eb4]@6 ~@4 b3@11 ~@9 eb4@10 ~@2 db4@10 ~@4 [c4,d4]@6, ~@16 g3@14 gb3@7 ~@3 f3@15 ~@17 g3@14 gb3@7 ~@3]/6", // Cm Csus2
  F: "~@3 e4@5, f3@15 ~, ~@4 b3@11 ~, ~@5 db4@11",
  G: "[~@15 g4, e2 e2, ~@8 g4@7 ~ g4@11 ~ g4@8 ~@4 g4@7 ~ g4@9 ~@7, ~@12 gb4@7 ~ gb4@7 ~@17 gb4@7 ~ gb4@7 ~@5, ~@24 e4@8 ~@4 e4@17 ~@3 e4@7 ~]/4",
  H: "~@4 a2 e3 c4 e3", I: "b3 e3 a2 e3 a3 e3 b3 e3", J: "c4 e3 b3 e3 a3 e3 a2 e3", K: "c4 e3 b3 e3 a3 e3 b3 e3",
  L: "c4 e3 b3@2 e2@2 a2 e3", M: "c4 e3 b3 e3 a2 e3 a3 e3", N: "b3 e3 c4 e3 b3 e3 a3 e3", O: "a2 e3 c4 e3 b3 e3 a3 e3",
  P: "b3 e3 c4 e3 b3@2 e2@2", Q: "a2 e3 c4 e3 b3 e3 a2 e3", R: "a3 e3 b3 e3 c4 e3 b3 e3", S: "a3 e3 a2 e3 c4 e3 b3 e3",
  T: "a3 e3 b3 e3 c4 e3 b3@2", U: "e2@2 a2 e3 c4 e3 b3 e3", V: "a2 e3 a3 e3 b3 e3 c4 e3",
  W: "b3 e3 a3 e3 a2 [d3,e3] c4 e3", X: "b3 e3 a3 e3 b3 e3 c4 e3", Y: "b3@2 e2@2 a2 e3 c4 e3",
  Z: "c4@2 e3 ~ b3@4 e2@4 a2@2 e3@2", AA: "b3 e3 a3 e3 a2 e3 c4 e3", AB: "b3@2 e2@2 a2 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// chords · distortion guitar · "DIST GUITAR"
const distortion_guitar = note(`<
  ~@18 A@7 B@3 C@2 ~@13 D@2 E@3 F@2 ~@19 G@3 H@3 G@3 I@8 J@2 K L M@2 N O@2 N P@2 Q R@2 S@4 ~@72 T U V@2 W X V@2 W X V@2
  W X Y Z AA AB AC AD@2 AE AF AG@2 AH AI@2 ~@14 G@3 H@3 G@3 I@8 AJ@2 AK@4 AL AM@4 AN@6 AJ@2 AK@4 AL AO@4
>`.pickRestart({
  A: "[~@2 e2@2 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2 e2@2 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3, ~@4 a2@5 ~ a2@11 ~ a2@14 ~@2 a2@5 ~ a2@11 ~]/7",
  B: "[~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 [e2,b2]@6 [f2,c3]@6, a2@7 ~@5]/3", // E5 F5
  C: "[[gb2,db3]@3 [c3,g3]@2 [b2,gb3] ~@2]/2", D: "[~@2 [a2,e3]@3 [g2,d3]@3]/2",
  E: "[[f2,c3] [g2,d3] [f2,c3] [g2,d3]]/3", F: "[[a2,e3]@13 ~@3]/2", G: "[[a2,e3] [g2,d3] [f2,c3] [g2,d3]]/3",
  H: "[[f2,c3]@3 [g2,d3]@3 [a2,e3]@3 [f2,c3]@2 [g2,d3]]/3", // F5 G5 A5 F5 G5
  I: "[[f2,c3]@6 [g2,d3]@6 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2 e2@2 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3, ~@12 a2@5 ~ a2@11 ~ a2@14 ~@2 a2@5 ~ a2@11 ~]/8", // F5 G5
  J: "[~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 c3@4, a2@7 ~]/2", K: "d3 c3 gb2@3 gb2 g2 gb2", L: "~ e2 g3 b2 gb3 b2 e2 b2",
  M: "[e3 b2 gb3 b2 ~@4 g4@2 ~@4 g4@2, ~@2 g3@3 gb3@3, ~@3 d4@2 ~ d4@2]/2", N: "~ b2 g3 b2 gb3 b2 e2 b2, e2 ~@3",
  O: "[e3 b2 gb3 b2 ~@4 g3@2 a2@2 ~@2 g3@2, ~@4 bb2@5 ~@7, ~@3 e3@2 ~ e3@2]/2",
  P: "[e3 b2 gb3 b2 ~@4 g4@2 ~@4 d4@2, ~@2 g3@2 ~ gb3@2 ~, ~@3 d4@2 ~ a4@2]/2", Q: "e2 b2 g3 b2 gb3 b2 e2 b2",
  R: "[e3 b2 gb3 b2 ~@4 g3@2 ~@4 g3@2, ~@2 bb2@2 ~ a2@3, ~@3 e3@2 ~ e3@2]/2", S: "[[e2,b2]@15 ~]/4",
  T: "c3@3 ~ c3 d3 c3@2", U: "gb2@3 ~ gb2 g2 gb2@2",
  V: "[e2 ~ e2@2 [e3,b3] [d3,a3] e3@2 e2@2 [c4,e4] [b3,eb4] e4@4, ~@6 b3@3 ~@3 c4@3 ~]/2", // E5 D5 C B
  W: "e2 gb2!3 [e4,a4]@2 gb2@2", X: "c3 b2 c3 d3 g3 gb3 e3 d3", Y: "g4@15 ~", Z: "a4 g4 f4 e4 f4 e4 eb4 e4",
  AA: "eb4 c4 a3!3 ab3 e3 eb3", AB: "f3 a2@3 ~@2 e4 eb4", AC: "e4 gb4 e4 eb4 a4 db5 eb4@2", AD: "[~@2 a4 c5 e5@11 ~]/2",
  AE: "e5 f5 ab5 f5 e5 eb5 c5 b4", AF: "a4 ab4 a4 b4 c5 b4 c5 eb5",
  AG: "[e5@2 eb5@2 e5@2 gb5@2 c6@2 b5@2 ab5@11 ~ e3 d3 ~ e3 g3 e3 ~ g3]/2",
  AH: "a3 g3 ~ a3 c4 a3 ~ c4 d4 c4 ~ d4 e4 d4 ~ e4", AI: "[g4 e4 ~ g4 a4 g4 ~ e4 c5@20 ~@4]/2",
  AJ: "[~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3!2 ~ e2@2, a2@7 ~]/2",
  AK: "[~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2, a2@5 ~ a2@11 ~ a2@14]/4",
  AL: "e2@2 ~ e3 c4 e3 b3 e3, ~@2 a2@5 ~",
  AM: "[~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 e3 ~ e2@2 ~ e3 c4 e3, a2@11 ~ a2@14 ~@2 a2@4]/4",
  AN: "[b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 b3@2 e2@2 ~ e3 c4 e3 b3 e3 ~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3, ~@2 a2@11 ~ a2@14 ~@2 a2@5 ~ a2@11 ~]/6",
  AO: "[~ e3 a3 e3 b3 e3 c4 e3 b3 e3 a3 e3 ~ e3 c4 e3 b3 e3 a3 e3 b3 e3 c4 e3 ~@2 [e2,b2]@2 [a2,e3]@2 ~@2, a2@11 ~ a2@14 ~@6]/4", // E5 A5
})).s("gm_distortion_guitar").gain(0.46)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~@18 A B C D E D F G H I J@2 K L M N O K@3 L N@2 P K Q@2 R@3 S T U K V W N@2 X V@3 W Y Z AA K@3 AB AC AD@3 AE@3 AD@3
  AF@2 AG AH AI AJ@2 AG AK AL AM AN AO@2 AP AQ AR AS AT AU AV AW@2 AX@4 AY@12 AZ@4 BA@4 BB@2 BC@2 BD@2 BE@2 BF@2 BG@2
  BH@2 BG@2 BI BJ BK@2 BD@2 BL@2 BI BJ BM@2 BI BN BO BP BI BQ BR BP BS BT BU BP BS BQ BU BP BI BQ BV BP BI BT BU BP BW
  BX BY@2 BZ CA CB@2 BZ CA BY@2 BZ CA N O CC CD K L N@2 O K@2 CE L N@2 X V@3 W Y Z AA K@3 AB AC AD@3 AE@3 AD@3 AF@2 B CF
  D CG D B C CH C CI B C CJ G D B CK B G CI CL CI B C CM CF D B AH CJ CN D F CO
>`.pickRestart({
  A: "~@4 e1@4 a1@3 ~@5", B: "~@4 a1@3 ~@9", C: "a1@3 ~@9 a1@3 ~", D: "~@8 a1@3 ~@5", E: "~@4 a1@4 e1@4 a1@3 ~",
  F: "~ a1 ~@2", G: "a1@3 ~@9 a1@4", H: "~@8 e1@5 ~ e1 ~", I: "e1 ~ e1 ~ f1@6 f1 ~ f1@2 f1 ~",
  J: "[gb1@6 gb1 ~ gb1@3 ~ c2@8 b1@3 ~ g1 ~ a1@2 ~@4]/2", K: "~@8 g1 ~ a1@2 ~@4", L: "~@4 g1 ~ a1@2 ~@8",
  M: "g1 ~ a1@3 ~ d2 e2 a2 ~@7", N: "g1 ~ a1@2 ~@12", O: "g1 ~ a1@2 ~@8 g1 ~ a1@2", P: "g1 ~ a1 ~@9 g1 ~ a1@2",
  Q: "[~@2 a1@3 g1@3]/2", R: "[f1@6 g1@6 f1@6 g1@5 ~]/3", S: "g1@2 a1 ~@13", T: "g1 ~ a1@2 ~@8 g1@2 a1@2",
  U: "~@8 g1@2 a1 ~@5", V: "~@4 g1 a1 ~@2", W: "~@2 g1 a1 ~@4", X: "g1 a1 ~@4 g1 a1", Y: "g1 ~ a1@3 ~@11",
  Z: "g1 a1 ~@6", AA: "g1 ~ a1@2 ~@8 g1@2 a1 ~", AB: "~@4 g1 ~ a1 ~@9", AC: "g1 ~ a1@2 ~@2 c2 e2 a2 ~@7",
  AD: "[a1 g1 f1 g1]/3", AE: "[f1@12 g1@10 ~@2 a1@11 ~ f1@8 g1@4]/3", AF: "[f1@12 g1@11 ~ a1@2 ~@6]/2",
  AG: "~@2 a1 ~@5", AH: "a1@2 ~@10 a1@3 ~", AI: "~@4 a1 ~@3", AJ: "[~@4 a1@4 e1@3 ~ a1@11 ~ a1@2 ~@6]/2",
  AK: "a1@3 ~@9 a1@2 ~@2", AL: "a1 ~ a1 ~ c2@4", AM: "d2 c2 d2@4 g1 gb1", AN: "e1 g2 gb2 e1",
  AO: "[gb1@2 e1@2 gb1@3 ~ g1@12 d2@12]/2", AP: "e1@9 ~@3 e1@4", AQ: "e1 gb1 bb1@2", AR: "g1 a1@2 g1",
  AS: "e1@5 ~ e1@2", AT: "a2 g2 e2 ~ g1@2 d2@2", AU: "g1@4 d2@7 ~ gb1@4", AV: "e1@2 g2@2 gb2@2 e1 ~",
  AW: "[e1@4 gb1@4 bb1@11 ~ a1@12]/2", AX: "[e1@15 ~]/4", AY: "[e1@61 ~@3]/4", AZ: "[~@28 gb2 g2 gb2 d2, e1@61 ~@3]/4",
  BA: "[e2 d2]/4", BB: "[~@12 gb2 g2 gb2 g2, e1@15 ~]/2", BC: "[d2@15 ~]/2", BD: "e1/2", BE: "[d2@12 gb2 g2 gb2 d2]/2",
  BF: "[e2@8 e1@23 ~]/2", BG: "[d2@23 ~ gb2@2 g2@2 gb2@2 d2@2]/2", BH: "[e2 e1 e2@6]/2", BI: "e2 e1", BJ: "e2",
  BK: "d2/2", BL: "[~@12 gb2 g2 gb2 d2, d2@13 ~@3]/2", BM: "[~@12 gb2 g2 gb2 d2, d2@15 ~]/2", BN: "e1@4 gb2 g2 gb2 e2",
  BO: "d2@7 ~ d2@7 ~", BP: "d2@4 gb2 g2 gb2 d2", BQ: "e2@4 gb2 g2 gb2 g2", BR: "d2@7 ~ d2@8", BS: "e2@8 e1@7 ~",
  BT: "e1@4 gb2 g2 gb2 g2", BU: "d2!2", BV: "d2@8 d2@7 ~", BW: "c2@3 ~ c2 d2 c2@2", BX: "gb1@3 ~ gb1 g1 gb1@2",
  BY: "[e1 ~ e1@2 e2 d2 e2@3 e1 c2 b1 c2@4]/2", BZ: "e1 gb1!3 gb1@3 ~", CA: "c2 b1 c2 d2 g2 gb2 e2 d2",
  CB: "[e1@2 ~@2 e1 ~ e1 ~ e2@2 d2@2 e2@6 e1@2 c2@2 b1@2 c2@8]/2", CC: "~@8 g1 ~ a1@3 ~ d2 e2",
  CD: "a2 ~@7 g1 ~ a1@2 ~@4", CE: "~@8 g1 ~ a1 ~@5", CF: "a1@4 ~@8 a1@3 ~", CG: "~@4 a1@3 ~ e1@2 ~@2 a1@4",
  CH: "~@8 a1@3 ~ e1@2 ~@2", CI: "~@2 a1 ~", CJ: "e1 ~ a1@2 ~@4", CK: "a1@3 ~ e1@2 ~@2 a1@3 ~@5",
  CL: "~@2 a1 ~ e1 ~ a1@2", CM: "~@4 a1 ~ e1 ~", CN: "a1 ~@2 a1", CO: "a1@3 ~ e1@3 ~ a1@4 ~@4",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 2 · "SLOW STRINGS"
const string_ensemble_2 = note(`<
  ~@103 A@2 B@6 C@2 D@8 E@2 C@2 E@2 C@2 F@2 G@2 H@2 G@2 F@2 C@2 E@2 C@2 E@2 C@2 F@2 C@2 I@2 G@2 F@2 G@2 H@2 G@2 H@2 C@2
  E@2 C@2 E@2 J@2 ~@87
>`.pickRestart({
  A: "e4/2", B: "[b3 c4 b3, g4]/6", C: "[d4,gb4]/2", D: "[b3@32 c4@32 b3@32 [d4,gb4]@31 ~, g4@97 ~@31]/8",
  E: "[e4,g4]/2", F: "[b3,g4]/2", G: "[a3,gb4]/2", H: "[b3,e4]/2", I: "[~@4 c4 ~@3, [b3,e4]]/2", J: "[d4,a4]/2",
})).s("gm_string_ensemble_2").gain(0.22)

// chords · violin
const violin = note(`<
  ~@113 A B C@2 D@2 E@2 ~@2 F@2 G@2 F H I@2 J@2 K L M N O P Q@6 R@3 S T@4 ~@2 U V@3 U W X@2 U W Y@2 ~@3 Z@2 AA AB AC
  AD@2 AE AF ~@32 AG AH AI@3 ~@30 AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA
>`.pickRestart({
  A: "[b3,g4] ~@3 [b3,g4] ~@3 [b3,g4] ~@3 [b3,g4] ~@3", B: "[b3,g4] ~@3 [b3,g4] ~@3 [b3,g4] ~@3 b3@2 ~@2, ~@12 g4 ~@3",
  C: "[c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~@3", D: "[d4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~@3 [d4,g4] ~@3",
  E: "[e4,gb4] ~@3 [e4,gb4] ~@3 [e4,gb4] ~@3 [e4,gb4] ~@3", F: "[d4,gb4] ~@3 [d4,gb4] ~@3 [d4,gb4] ~@3 [d4,gb4] ~@3",
  G: "[e4,g4] ~@3 [e4,g4] ~@3 [e4,g4] ~@3 [e4,g4] ~@3", H: "g4 gb4 e4 d4",
  I: "[~@4 g5@2 ~@2 gb5@2 ~@2 g5 ~@3 e5@16, b3]/2", J: "[[a3,d5]@31 ~]/2", K: "e5 ~@3 g5 ~@2 gb5@2 ~@3 g5 ~@3",
  L: "e5 ~@3 g5@2 ~ gb5@2 ~@3 g5@2 ~@2", M: "d5@2 ~@2 g5@2 ~ gb5@2 ~@3 g5 ~@3", N: "a5 ~ g5 ~ gb5 ~ g5 ~",
  O: "e5 ~ g5 ~ gb5 ~ g5 ~", P: "e5 ~@3 g5@2 ~@2 gb5@2 ~@2 e5@2 ~@2",
  Q: "[~@16 b4@47 ~@21 g5@2 ~@2 gb5 ~@3 g5 ~@3, d5@63 a4@31 ~@2]/6", R: "[e5@2 gb5]/3", S: "b5 a5 g5 gb5",
  T: "[e5@31 d5@30 ~@3]/4", U: "~@2 e5 gb5", V: "[[e5,g5]@4 [gb5,a5]@4 [e5,g5]@4 [d5,gb5]@3 ~ g5@31 ~, ~@15 e5@32 ~]/3",
  W: "[e5,g5] [gb5,a5] [e5,g5] [d5,gb5]", X: "[b4, g5@15 ~]/2", Y: "[~@8 b4@23 ~, e5, g5@15 ~]/2",
  Z: "[gb5 ~ g5 ~ gb5 ~ g5 ~ gb5@2 ~ gb5@2 ~@2 gb5@2 ~ g5@2 gb5@2 g5@2 gb5@2 ~ gb5@2 ~ g5@2, ~@5 g5 ~ g5 ~@5 g5 ~@2]/2",
  AA: "gb5 g5 gb5 g5 gb5 g5 gb5 g5", AB: "gb5 ~@8 d6 ~ e6 d6 ~ e6 ~", AC: "d6 ~ e6 ~ d6 ~ e6 ~ d6 ~ e6 ~ d6 ~ e6 ~",
  AD: "[~@6 d6 b5, e6@31 ~]/2", AE: "[c6,e6]", AF: "[d6,gb6]", AG: "~@3 d5 eb5 f5 gb5 g5", AH: "a5@15 ~",
  AI: "[g5@13 gb5@11 d5@16 ~@8]/3", AJ: "~@3 c5", AK: "b4 ~ a4 b4", AL: "c5 b4 a4 ~", AM: "c5 b4 a4 b4",
  AN: "c5 b4 ~@2", AO: "c5 b4 ~ a4", AP: "b4@4 c5@4 b4@4 a4@3 ~", AQ: "~ c5 b4 a4", AR: "b4 c5 a4 ~",
  AS: "~@4 e5@4 d5@3 ~@5", AT: "c5 d5 e5 d5", AU: "c5 ~ e5 d5", AV: "c5@4 d5@4 e5@3 d5@4 ~", AW: "~@7 a5@4 ~ g5@3 ~",
  AX: "~ e5 g5 a5", AY: "g5@4 e5@3 ~@5 a5@4", AZ: "g5 e5 g5 a5", BA: "g5@3 ~ e5@3 ~ a5@5 ~@3",
})).s("gm_violin").gain(0.24)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@28 A ~@16 B ~@25 A ~@5 C A ~@10 D ~@10 A ~@3 E ~@27 F ~@15 G ~@5 E ~@6 E ~ H ~@3 E ~@4 E ~ E ~@46 A ~@5 C A ~@35
// … 56 more lines

More by Ozzy Osbourne