Strudelify

Symptom of the Universe

Black Sabbath

KeyD majorTempo85 bpm
0:00/0:00
// Symptom of the Universe — Black Sabbath
// 85 bpm, 4/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 180 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar
const overdriven_guitar = note(`<
  A@2 B C A@2 B C A@2 B C A@2 B C D E F@2 G H F@2 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D E F@2 G H F@2 A@2 B
  C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D E F@2 G H F@2 I J K L K L K L K L K L M N@11 O@2 N@2 P@2 N@2 P@2 N@2 P@2
  N@2 A@2 B C A@2 B C Q@8 ~@36
>`.pickRestart({
  A: "[[d2,a2]!7 [g#2,d#3]@7 [g#2,d#3]@2]/2", B: "[d2,a2]!7 [d3,a3]", C: "~ [g#2,d#3]@5 [g#2,d#3]@2", D: "[c3,g3]",
  E: "[g#2,d#3]", F: "[g2,d3]/2", G: "[c3,g3] [c3,g3]@3",
  H: "[g#2,d#3]@3 [g#2,d#3]@2 [g#2,d#3]@3 [g#2,d#3]@3 [g#2,d#3]@2 [g#2,d#3]@3", I: "[e2,b2] ~@7", J: "~@5 [g2,d3]@3",
  K: "[e2,b2]!8", L: "[e2,b2]!5 [g2,d3]@3", M: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~",
  N: "[a2,e3]@3 [a2,e3]!3 ~ [a2,e3] [a2,e3]@3 [a2,e3]!3 ~ [a2,e3]", O: "[g2,d3]", P: "[g2,d3]!2",
  Q: "[[d2,a2]!7 [g#2,d#3]@57]/8", // D5 G#5
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~@8 A@2 B C A@2 B C D E F@2 D E F@2 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D E F@2 D E F@2 A@2 B C A@2 B C
  A@2 B C A@2 B C A@2 B C A@2 B C D E F@2 D E F@2 G H I J I J I J I J I J K L@11 M@2 L@2 M@2 L@2 M@2 L@2 M@2 L@2 A@2 B C
  A@2 B C N@8 ~@4 O@32
>`.pickRestart({
  A: "[d1!7 g#1@7 g#1@2]/2", B: "d1!7 d2", C: "~ g#1@5 g#1@2", D: "c2", E: "g#1", F: "g1/2", G: "e1 ~@7", H: "~@5 g1@3",
  I: "e1!8", J: "e1!5 g1@3", K: "e1 ~ e1 ~ e1 ~ e1 ~", L: "a1@3 a1!3 ~ a1 a1@3 a1!3 ~ a1", M: "g1",
  N: "[d1!7 g#1@57]/8", O: "[e1@8 e2@3 d2 b1@2 a1@18]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@32 A@2 B@2 A@2 B@2 C@2 D@2 E@2 B@2 ~@16 A@2 B@2 A@2 B@2 C@2 D@2 E@2 B@2 ~@100
>`.pickRestart({
  A: "[d3@2 d3@2 d3@2 d3 d#3@3 d#3 d#3@2 d#3@3]/2", B: "[d3@2 d3@2 d3@2 d3 d#3@6 ~@3]/2",
  C: "[d3@2 d3@2 d3@2 d3 d#3@4 ~@5]/2", D: "[d3@2 d3@2 d3 d3@2 d#3@6 ~@3]/2",
  E: "[d3@2 d3@2 d3@2 d3 d#3@3 d#3 d#3@2 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.64)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@148 A@32>".pickRestart({
  A: "[e2@6 ~@2 b3@3 g#3 e3@3 d4@3 ~ e3 c#4@4 b3@4 c#4@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@156 A@2 B@2 A@2 C@2 D E F@2 G H I ~ A@2 B@2 A@2 C@2>".pickRestart({
  A: "[b3@7 c#4 d4@2 ~ b3@4 f#4@3 ~@2 e4@4 d4@4 e4@4]/2", B: "[b3@7 c#4 d4@2 ~ b3@4 f#4@3 ~@2 e4@12]/2",
  C: "[a4@4 g4@4 f#4@2 ~ e4@4 d4@17]/2", D: "~@8 e5@3 f#5 g5@3 a5", E: "f#5@3 g5 a5@3 b5 a5@3 g5 f#5@3 e5",
  F: "[g5@4 f#5@4 e5@4 d5@3 e5@4 ~@13]/2", G: "~@3 b5 b5@3 b5!2 ~@2 b5 b5@3 b5",
  H: "b5 ~@2 b5 b5@3 b5!2 ~@2 b5 b5@3 b5", I: "b5@2 a5@2 g5@2 f#5 e5",
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(1)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@8 ~@7 B A@24 ~@7 B A@24 C@2 ~@5 B ~ D ~ D ~ D ~ D ~ D ~ D ~ A@10 E A@3 E A@3 E A@3 E A@2 F@2 A@8 ~@4 G@23 H G@15
  H
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~ x!3 ~ x!3 ~ x!3 ~ x", D: "~@5 x ~@2", E: "~@4 x ~@4 x ~ x!3 ~ x",
  F: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", G: "~ x", H: "~ x ~ x!3 ~ x ~@8",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@8 B@2 C D E ~ C F ~@24 B@2 C D E ~ C F ~@26 C D E ~ C F G ~@3 H G H G H G H G ~@36 I ~@26 J ~@15 J
>`.pickRestart({
  A: "~@3 x", B: "~@13 x!3", C: "x!16", D: "x!8 ~@4 x!4", E: "~@12 x!4", F: "x!9 ~ x ~ x ~@3", G: "x", H: "~@7 x",
  I: "~@4 x!3 ~", J: "~@8 x ~@2 x ~ x ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A@2 ~ B C ~ D E ~@24 A@2 ~ B C ~ D E ~@27 B C ~ D E ~@48 F ~@43>".pickRestart({
  A: "~@6 x!2 ~ x!4 ~@3", B: "~@8 x!4 ~@4", C: "~@10 x!2 ~@4", D: "~@12 x!4", E: "x!8 ~@8", F: "x!3 ~ x ~ x ~@9",
})).gain(0.64)

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

// drums · high tom
const high_tom = s("ht").struct("<~@16 A@2 ~@2 B ~ C ~@25 A@2 ~@2 B ~ C ~@29 B ~ C ~@93>".pickRestart({
  A: "x!6 ~@2 x ~@7", B: "~@8 x!2 ~@6", C: "~@6 x!6 ~@4",
})).gain(0.64)

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

stack(
  overdriven_guitar, bass, electric_guitar_clean, acoustic_guitar_steel, acoustic_guitar_nylon, kick, snare, low_tom,
  mid_tom, open_hat, high_tom, crash
)

More by Black Sabbath