Strudelify

Children of the Grave

Black Sabbath

KeyC♯ minorTempo135 bpm
0:00/0:00
// Children of the Grave — Black Sabbath
// 135 bpm, 4/4, key C# 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: Full arrangement: all 153 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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.

// other · overdriven guitar
const overdriven_guitar = note(`<
  A@4 ~@33 B ~ B ~ B ~ B ~ B ~ B ~ B ~@13 B ~ B ~ B ~ B ~ B ~ B ~ B ~@37 C@14 ~ D@4 E@2 F@6 G H@4 I@2 J@2 ~@4
>`.pickRestart({
  A: "[c#4 c#4@2 d#4 d#4@2 e4 e4@2 f#4 f#4@2 g4@2 g#4@2]/2", B: "~@5 e5@3", C: "[~@19 e5@9 ~@20]/2",
  D: "[~@4 c#5@4 c#5@7 ~ c#5@4 c#5@7 ~ c#5@2 ~ g#4@2 ~ g#4@18 e4@2 ~ e4@2 ~ g4@2 ~ e4@2 ~ c#4@24 e4@2 ~ e4@2 ~ f#4@2, ~@15 b4 ~@11 f#4 ~@2 f#4 ~@14 f#4 ~@2]/4",
  E: "~ f#4@2 ~ e4@2 ~ e4@2 ~ f#4@2 ~ f#4@2 ~ e4@2 ~ e4@2 ~ f#4@2, e4 ~@2 f#4 ~@2 e4 ~@2 f#4 ~@2",
  F: "[~ f#4@2 ~ [c#3,g#3,c#4]@48 c#5@36 d#5@6 e5@6 e5@24 d#5@2 ~ d#5@2 ~ e5@2 ~ e5@2 ~ d#5@2 ~ d#5@2 ~ e5@2, e4 ~@62 e5 ~@2 d#5 ~@2 e5 ~@2]/6", // C#5
  G: "~ e5@2 ~ c#5@2 ~ c#5@2 ~ e5@2 ~ e5@2 ~ f#5@2 ~ a5@2 ~ g#5@2, d#5 ~@2 e5 ~@2 c#5 ~@2 g#5 ~@2",
  H: "[~ c#6@2 ~ c6@12 [e5,a5]@6 [d#5,g#5]@6 [c#5,g#5]@36 [b4,e5]@6 [g#4,c#5]@6 c#4@3 c#4@6 d#4@3 d#4@6 e4@2, a5 ~@47]/4", // A5 G#5 C#5 E5 C#5
  I: "[~ e4@6 f#4@3 f#4@6 g4@6 g#4@6 c#4@3 c#4@6 d#4@3 d#4@6 e4@2]/2", J: "[~ e4@6 f#4@3 f#4@6 g4@6 g#4@6 ~@20]/2",
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  A@4 ~@8 B C D C D ~@4 B C D C D C E F@2 G@2 C D C D C H C H C H C H C H C H C H C@3 E F@2 G@2 C D C D C H C H C H C H
  C H C H C H C@3 E F@2 G@2 ~@4 I J K L M@16 N@8 O@8 P@8 Q@3 ~ R@8 S T@2 U@6
>`.pickRestart({
  A: "[c#1 c#1@2 d#1 d#1@2 e1 e1@2 f#1 f#1@2 g1@2 g#1@2]/2", B: "a1@2 g#1 ~ a1@2 g#1 ~", C: "c#1!4", D: "c#1!2 a1 g#1",
  E: "c#1!2 e1!2", F: "a1!4", G: "b1!4", H: "c#1@2 c#1@2 c#1 e1@3",
  I: "c#1@2 e1@2 f#1@2 g1@2 g#1@2 c#2@2 g1@4 ~ c#2@2 ~@5", J: "~ c#1@2 e1@2 f#1@2 g1@2 g#1@2 c#2@2 g1@4 ~ f#1@2 ~@4",
  K: "~ c#1 e1 f#1 g1 g#1 c#2 g1@2 c#2 ~@2", L: "~@3 c#1@2 e1@2 f#1@2 g1@2 g#1@2 c#2@2 g1@4 f#1@2 ~@3",
  M: "[~@2 c#1@12 e1@3 c#1@6 g#1@3 g1@12 g1@3 g#1@3 a#1@3 b1@3 c#1@12 e1@3 c#1@6 g#1@3 g1@12 g1@3 g#1@3 a#1@3 b1]/8",
  N: "[~@4 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 a1@6 g#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 a1@6 g#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@9 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@5]/8",
  O: "[~@4 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@9 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@9 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@9 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@5]/8",
  P: "[~@4 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@3 e1@9 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 c#1@6 e1@6 e1@6 a1@6 a1@6 a1@6 a1@6 a1@6 a1@6 a1@6 a1@2]/8",
  Q: "[~@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 ~@10]/3",
  R: "[~@2 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 a1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#1@3 c#1@3 c#1@3 c#1@3 c#1@3 c#1@3 a1@3 g#1@3 c#1@3 c#1@3 c#1@3 c#1@3 c#1@3 c#1@3 a1@3 g#1]/8",
  S: "~@4 c#1@3 c#1@6 d#1@3 d#1@6 e1@2", T: "[~ e1@6 f#1@3 f#1@6 g1@6 g#1@6 c#1@3 c#1@6 d#1@3 d#1@6 e1@2]/2",
  U: "[~ e1@6 f#1@3 f#1@6 g1@6 g#1@6 c#1@96 ~@20]/6",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A B C D ~@8 E F G F G ~@4 E F G F G@2 ~ G ~ G ~ F G F G F@16 G ~ G ~ G ~ F G F G F@16 G ~ G ~ G ~@5 H I J K L M L M L
  M L M L M L N L M L O P Q P Q P@16 Q ~ Q ~ Q ~@3 Q ~ Q ~ P Q P Q R S T U Q ~@4
>`.pickRestart({
  A: "x!2 ~ x!2 ~ x!2", B: "~ x!2 ~ x ~ x ~", C: "~ x ~@2 x ~@2 x", D: "~ x!3", E: "x!4", F: "x!2", G: "x",
  H: "x ~@5 x ~@5 x ~@6 x ~@4", I: "~ x ~@5 x ~@5 x ~@6 x ~@3", J: "~@2 x ~@5 x ~@5 x ~@6 x ~@2", K: "~ x ~ x ~ x ~ x",
  L: "~@4 x ~@5 x ~@2 x ~@8 x ~", M: "~ x ~@8 x ~@2 x ~@5 x ~@2 x ~", N: "~ x ~@8 x!2 ~@7 x!2 ~@3",
  O: "~ x ~@8 x ~@2 x ~@6 x ~@3", P: "~ x ~@2 x ~", Q: "~ x ~@4", R: "~@4 x ~@2 x ~@5 x ~@2 x ~@5 x ~",
  S: "~ x ~@5 x ~@2 x ~@5 x ~@5 x ~", T: "~@7 x ~@8 x ~@7", U: "~ x ~@8 x ~@5 x ~@5 x ~",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  A B A B C@8 ~@2 D ~ D C@4 ~@2 D ~ D C@6 ~ D ~ D ~@16 C@6 ~ D ~ D ~@16 C@10 ~@21 E ~ E ~@16 F G@11 H E ~ E I J I J ~@5
>`.pickRestart({
  A: "x!2 ~ x!2 ~ x!2", B: "~ x!2 ~ x ~ x ~", C: "x ~ x!5 ~ x!4", D: "~@2 x!2", E: "~@8 x ~@2 x",
  F: "~@4 x ~@3 x ~ x ~ x!2 ~@2 x ~@3 x ~ x ~", G: "x!2 ~@2 x ~@3 x ~ x ~ x!2 ~@2 x ~@3 x ~ x ~", H: "x!2 ~@22",
  I: "~@4 x ~@2 x ~@5 x ~@2 x ~@5 x ~", J: "~ x ~@5 x ~@2 x ~@5 x ~@5 x ~",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A@8 ~@5 A@4 ~@5 A@6 ~@20 A@6 ~@20 A@10 ~@40 B C@11 D ~@12>".pickRestart({
  A: "x ~ x!5 ~ x!4", B: "~@4 x ~@3 x ~ x ~ x!2 ~@2 x ~@3 x ~ x ~", C: "x!2 ~@2 x ~@3 x ~ x ~ x!2 ~@2 x ~@3 x ~ x ~",
  D: "x!2 ~@22",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@36 A B C B C B C B C B C B C B C@2 ~@10 A B C B C B C B C B C B C B C@2 ~@34 D E F E F E F E F E F E F E F@2 ~@25
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "x!4", D: "~@5 x ~@2 x ~@2 x", E: "~@2 x ~@2 x ~@2 x ~@3", F: "~@2 x ~@2 x ~@2 x ~@2 x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  A B A B ~@8 C@5 D ~@3 C@5 D ~ D ~ D ~ C@4 D E ~ E ~ E ~ E ~ E ~ E ~ E ~@2 D ~ D ~ D ~ C@4 D E ~ E ~ E ~ E ~ E ~ E ~ E
  ~@2 D ~ D ~ D ~ D ~@3 D F G H I@20 J K ~ K ~ K ~ K ~ K ~ K ~ K ~@2 J ~ J ~ J ~@3 J ~ J ~ I@4 L M L M J ~@4
>`.pickRestart({
  A: "x!2 ~ x!2 ~ x!2", B: "~ x!2 ~ x ~ x ~", C: "x!4", D: "x", E: "~@5 x ~@2", F: "~ x ~@22", G: "~ x ~@10",
  H: "~ x ~@6", I: "~@2 x ~@2 x ~@2 x ~@2 x", J: "~ x ~@4", K: "~@19 x ~@4", L: "~@4 x ~@2 x ~@5 x ~@2 x ~@5 x ~",
  M: "~ x ~@5 x ~@2 x ~@5 x ~@5 x ~",
})).gain(0.64)

stack(overdriven_guitar, bass, kick, snare, low_tom, mid_tom, open_hat, crash)

More by Black Sabbath