Strudelify

Bark at the Moon

Ozzy Osbourne

KeyF majorTempo146 bpm
0:00/0:00
// Bark at the Moon — Ozzy Osbourne
// 146 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(146/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 · "Staff-4"
const bass = note(`<
  ~@3 A B C B D E F@7 G H@5 I J K F L D E F@7 G H@5 I J M N O P Q N O P R@8 S@8 T U V W ~@2 A B C B D E F@7 G H@5 I J M
  N O P Q N O P J ~
>`.pickRestart({
  A: "~ f1 g1 b1", B: "g1 a1!6 a2", C: "a1!5 a2 a1!2", D: "a1 bb1 a1 bb1 c2 bb1 a1 g1", E: "f1 a1!7", F: "a1!8",
  G: "a1 gb1!7", H: "gb1!8", I: "gb1 e1!7", J: "e1 e1@2 ~@5", K: "~ a1!6 a2", L: "a1!7 a2", M: "~ a1!4 c2 d2!2",
  N: "b1!2 g1!6", O: "g1 f1!7", P: "f1 e1!7", Q: "e1 a1!4 c2 d2!2",
  R: "[e1 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1]/8",
  S: "[~ f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 f1@2 f1@2 f1@2 f1@2 d1@2 d1@2 d1@2 d1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1]/8",
  T: "~ c2!7", U: "c2!8", V: "c2 a1!7", W: "a1 ~@7",
})).s("gm_electric_bass_pick").gain(0.48)

// chords · distortion guitar · "Staff-5"
const distortion_guitar = note(`<
  A B C D E F G H I ~@15 G F G H I ~@15 J K L@3 K M@3 ~@7 N ~@10 C B C D O F G H I ~@15 J K L@3 K P@3 ~
>`.pickRestart({
  A: "~@2 [a3,e4,a4]@4 ~@2 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@2", B: "~@4 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@3 ~@3",
  C: "~@2 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@2", D: "~ f3 g3 b3",
  E: "g3!2 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@5 ~ [a3,e4,a4]@2", F: "~@4 [a3,e4,a4]@5 ~ [a3,e4,a4]@3 ~@3",
  G: "~@2 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@5 ~ [a3,e4,a4]@2", H: "~ bb3 a3 bb3 c4 bb3 a3 g3", I: "f3 ~@7", J: "~@5 c4 d4@2",
  K: "b3@2 [g3,d4]@3 d4 c4 b3", L: "[g3 f3@8 e3@8 ~@4 c4 d4@2]/3", M: "[g3 f3@8 e3@8 [gb3,a3,c4]@4 ~@3]/3",
  N: "~ [gb3,a3,c4]@4 ~@3", O: "g3@2 [a3,e4,a4]@3 ~@3 [a3,e4,a4]@5 ~ [a3,e4,a4]@2",
  P: "[g3@2 f3@16 e3@16 [a3,e4,a4]@3 ~@11]/3", // A5
})).s("gm_distortion_guitar").gain(0.48)

// chords · lead 1 square · "Staff-6"
const lead_1_square = note(`<
  ~@8 A B C D A B C D E@3 F G@4 H ~ I@3 B C D A B C D E@3 F G@4 H ~ J@2 H ~@3 K@4 L@3 M K@4 N@5 O@2 ~@8 A B C D A B C D
  E@3 F G@4 H ~ P@2 Q ~ R@3 ~
>`.pickRestart({
  A: "~ [a4,e5,a5]@4 [a4,a5] ~ e5, ~@5 e5@2 ~", B: "[g4,g5]@2 [a4,e5,a5]@3 ~@3", C: "~ g5 gb5 g5 gb5 g5 g5@2",
  D: "g5@3 f5 d5@3 ~",
  E: "[~ [a4,db5,gb5]@4 [db5,gb5] [a4,db5,gb5]@3 [gb4,a4,d5]@4 [gb4,a4] [gb4,a4,d5]@3 [ab4,b4,e5]@4 [db5,e5,a5]@3]/3", // Gbm Gb5 Gbm D Gbm D E A
  F: "[a4,db5,gb5]@3 ~@5", // Gbm
  G: "[~ [a4,db5,gb5]@4 [a4,db5,gb5] [a4,db5,gb5]@3 [gb4,a4,d5]@4 [gb4,a4,d5] [gb4,a4,d5]@3 gb5 e5@2 [ab4,b4,gb5]@5 ~@4 e5 ab4!2, ~@17 [ab4,b4]@3 ~@12]/4", // Gbm D Abm7 Abm
  H: "a4 ~@3", I: "[~ [a4,e5,a5]@16 [a4,e5,a5]@4 [a4,a5] ~ e5, ~@21 e5@2 ~]/3", J: "[~ a5 e5@7 d5@4 e5 ab4!2]/2",
  K: "[~@3 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [b4,d5,g5]@2 e5 d5@3 d5 e5@3 ~@5, ~@19 [g4,b4]@4 [g4,b4]@2 ~@7]/4", // F G
  L: "[~@3 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [c5,f5,a5]@2 [a4,c5,g5]@2 [a4,c5,g5]@2 [a4,c5,g5]@2 [b4,d5,g5]@2 f5 e5 [g4,b4,d5]@2 ~, ~@19 [b4,d5]@2 ~@3]/3", // F Am7 G Bm
  M: "~ [b4,d5,g5]@2 f5 e5 [g4,b4,d5]@2 ~, ~@3 [b4,d5]@2 ~@3", // G Bm
  N: "[~@3 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,c5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,g5]@2 [bb4,d5,f5]@2 e5 d5 [d4,f4,bb4]@8 d5@2 c5@4 ~@5]/5", // F Dm Dsus4 Bb
  O: "[~@3 g5@2 f5 e5 c5@2 ~@7]/2", P: "[~ a5 e5@7 ab5@4 ab5!3]/2", Q: "a5@3 ~@5", R: "[~ [a4,e5,a5]@16 ~@7]/3",
})).s("gm_lead_1_square").gain(0.48)

// chords · lead 2 sawtooth · "Staff-7"
const lead_2_sawtooth = note("<~@16 A@8 B@3 ~@3 C@6 A@8 D@8 E@4 F@8 G@7 ~@10 C@6 A@8 H@8 I ~>".pickRestart({
  A: "[~ [gb4,a4,db5]@8 [gb4,a4,d5]@8 [e4,ab4,b4]@8 [gb4,a4,db5]@16 [gb4,a4,d5]@8 [ab4,b4,e5]@8 ~@7]/8", // Gbm D E Gbm D E
  B: "[~ [e4,a4]@16 ~@7]/3", C: "[~ [g4,d5]@16 [a4,e5]@16 [g4,d5]@15]/6", D: "[~ [e4,a4]@24 ~@7]/4",
  E: "[~ [f4,a4,c5]@16 [g4,b4,d5]@14 ~]/4", F: "[~ [f4,a4,c5]@16 [g4,b4,d5]@16 [f4,a4,c5]@16 [g4,b4,d5]@12 ~@3]/8",
  G: "[~ c5@8 ~@8 [bb4,f5]@16 [g4,c5,e5]@16 ~@7, ~ [f4,a4]@16 ~@39, ~@9 d5@24 ~@23]/7", // Bb5 C F
  H: "[~ [e4,a4]@16 [f4,a4,c5]@8 [e4,b4]@8 [e4,a4]@16 [f4,a4,c5]@8 [e4,b4]@7]/8", I: "~ a4@2 ~@5",
})).s("gm_lead_2_sawtooth").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C B ~ D E D E D E D F D F D F D F D G D F H ~ D E D E D E D F D F D F D F D G D E D E D E D E I@8 J I@3 K I J
  I J I ~ G ~@2 A B C B ~ D E D E D E D F D F D F D F D G D F H ~ D F H ~ G ~
>`.pickRestart({
  A: "~ x!3", B: "~ x ~@2 x ~@2 x", C: "~@2 x ~@2 x ~@2", D: "~ x ~ x ~ x!3", E: "~ x ~ x!2 ~ x!2",
  F: "~ x ~ x ~@2 x!2", G: "~ x ~@6", H: "~ x ~ x ~ x ~ x", I: "~ x ~@2 x!2 ~@2", J: "~@2 x ~@4 x!2 ~ x ~@5",
  K: "~@5 x ~@2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C B ~ D@15 E D@3 ~ D@15 E D@8 F G H I F G H G H G H J K G H G H L M ~@3 A B C B ~ D@15 E D@3 ~ D@3 ~ E ~
>`.pickRestart({
  A: "~ x!3", B: "~ x ~@2 x ~@2 x", C: "~@2 x ~@2 x ~@2", D: "~@3 x ~@3 x", E: "~ x ~@6", F: "x!3 ~@7 x ~@5",
  G: "~@5 x ~@2", H: "~ x ~@3 x ~@2", I: "~@10 x ~@3 x!2", J: "~@10 x!6", K: "x!2 ~@8 x ~@5", L: "~@5 x ~ x",
  M: "x!2 ~@14",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@3 B C ~@7 D ~@10 B C ~@7 D ~@33 B E ~@2 A ~@3 B C ~@7 D ~@10 B C ~@2 B C ~
>`.pickRestart({
  A: "~ x!3 ~@12", B: "~@7 x", C: "x!2 ~@14", D: "~ x ~@14", E: "x!3 ~@13",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@3 B@4 C D@14 E C D@18 E C D@7 F ~@3 G ~@3 A ~@7 A ~ B A ~@3 B@4 C D@14 E C D@7 E ~
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~ x ~ x ~ x", C: "~ x!7", D: "x!8", E: "x!2 ~@6", F: "x", G: "~@5 x ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A B C D E F E G ~@7 H D ~@9 I G ~@7 H D ~@33 G ~ J K D E F E G ~@7 H D ~@9 I G ~@2 I G ~@2
>`.pickRestart({
  A: "~ x!2 ~@13", B: "~@10 x ~@4 x", C: "x ~@4 x ~@2 x ~@6 x", D: "x", E: "x!2 ~@14", F: "~@7 x",
  G: "~@6 x ~ x!3 ~ x!2 ~@2", H: "~@12 x ~ x!2", I: "~@12 x!3 ~", J: "~@2 x ~@3 x ~@4 x ~ x!2 ~", K: "~@8 x ~@6 x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@2 A ~@51 B ~@7 B ~ B ~@5 A ~@2 A ~@26>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B C ~@2 D ~ E ~@7 F ~@11 E ~@7 F ~@34 E ~ G H ~@2 D ~ E ~@7 F ~@11 E ~@3 E ~@2
>`.pickRestart({
  A: "x", B: "~@5 x ~ x", C: "~@8 x ~@4 x!2 ~", D: "~@7 x", E: "~@2 x ~ x!2 ~@10", F: "~@10 x!2 ~@4",
  G: "x!2 ~@8 x ~@5", H: "~@6 x!2 ~@5 x!2 ~",
})).gain(0.48)

// drums · ride bell
const ride_bell = s("rd").struct("<~@15 A@6 ~@14 A@6 ~@11 B@12 C B@5 ~@16 A@6 ~@13>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@3 x", C: "~@5 x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  A ~ B C D E D A@2 ~ A ~ A ~ A@3 ~ A ~ A@9 ~ A ~ A ~ A@3 ~ A ~ A@13 ~ A ~ F ~ A ~ F ~ A ~ G ~ A ~ A ~ A@2 ~ B C D E D
  A@2 ~ A ~ A ~ A@3 ~ A ~ A@13 ~
>`.pickRestart({
  A: "~ x ~@6", B: "~@13 x ~@2", C: "~ x!3", D: "~ x ~@2 x ~@2 x", E: "~@2 x ~@2 x ~@2", F: "~ x ~@3 x ~@2",
  G: "~@5 x ~@2",
})).gain(0.4)

stack(
  bass, distortion_guitar, lead_1_square, lead_2_sawtooth, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  ride_bell, crash
)

More by Ozzy Osbourne