Strudelify
Planet Caravan cover art

1980 · Paranoid

Planet Caravan

Black Sabbath

KeyE♭ minorTempo86 bpm
0:00/0:00
// Planet Caravan — Black Sabbath
// 86 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(86/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, A@4 for four bars: edit a riff to change every repeat.

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A@7 B@72 C ~>".pickRestart({
  A: "[~@4 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 eb3@2, eb2@9 ~@7 db3@6 bb3@8 ab3@11 ~@5 eb3@8 bb3@8 ab3@11 ~@5 eb3@8 bb3@8 ab3@11 ~@7, ~@2 bb2@7 ~@5 eb3@9 ~ db3@7 ~ eb2@9 ~@9 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7 db3@7 ~ db3@7 ~ eb2@9 ~@7, ~@18 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7 db3@7 ~ db3@7 ~ eb2@9 ~@9 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7]/7", // Ebm
  B: "[~@4 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 ~@6 gb3@2 ~@6 gb3@2 ~@6 gb3@2 [gb3,bb3,eb4]@3 ~ [f3,gb3,bb3,eb4]@4 eb3@2, db3@6 bb3@8 ab3@11 ~@5 eb3@8 bb3@8 ab3@11 ~@5 eb3@8 bb3@8 ab3@11 ~@5 eb3@8 bb3@8 ab3@11 ~@7, ~@2 f3@5 ~ db3@7 ~ eb2@9 ~@9 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7 db3@7 ~ db3@7 ~ eb2@9 ~@9 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7, ~@10 f3@5 ~@3 bb2@7 ~@7 db3@7 ~ db3@7 ~ eb2@9 ~@9 f3@5 ~@3 f3@5 ~@3 bb2@7 ~@7 db3@7 ~ db3@7 ~ eb2@9 ~@7]/8", // Ebm
  C: "~@2 gb3 ~@4 ab3, db3@6 bb3@9 ~, ~@2 f3@5 ~ db3@7 ~, ~@10 f3@5 ~, ~@3 gb3",
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B 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
>`.pickRestart({
  A: "eb2@6 eb2@4 eb2@2 ab2 bb2 db3@2", B: "db2@2 ~ db2 ab2 a2 ab2 gb2", C: "eb2@3 ~",
})).s("gm_electric_bass_finger").gain(0.3)

// other · tenor sax
const tenor_sax = note(`<
  ~@3 A B C D C D E D A B C D C D E D A B C D C D E D ~@4 A B C D C D F D E D A B C D C D E D G H I@3 ~@27
>`.pickRestart({
  A: "~@3 db4", B: "eb4@15 ~", C: "~@3 db4@2 bb3 ab3@2", D: "ab3 eb3@5 ~@2", E: "~@4 db4 ~ db4@4 bb3@6",
  F: "~@6 db4@4 bb3@5 ~", G: "~@5 eb3@2 db3", H: "db3@2 eb3@13 ~", I: "[~@10 eb3@4 db3@4 eb3 ~ eb3@26 ~@2]/3",
})).s("gm_tenor_sax").gain(0.28)

// other · acoustic guitar nylon · Ebm Eb5 Ebm Eb5 Ebm Eb5 Ebm Eb5 …
const acoustic_guitar_nylon_2 = note(`<
  ~@27
  [[eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6]]!4
  ~@9
  [[eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6] [eb5,gb5] [bb5,eb6]]!2
  ~@39
>`).s("gm_acoustic_guitar_nylon").gain(0.13)

// drums · congas
const congas = s("conga:18").struct(`<
  ~ A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B F D E B
  F D E B C G E B F D E B C D E H C D E B F ~
>`.pickRestart({
  A: "~@10 x!6", B: "~@2 x!3 ~@5 x!3 ~@3", C: "~@2 x!3 ~@5 x!6", D: "~@2 x!3 ~@11", E: "x!3 ~@7 x!6",
  F: "~@2 x!3 ~@4 x!7", G: "~@2 x!3 ~@3 x ~ x ~@5", H: "~@2 x!3 ~@4 x!4 ~@3",
})).gain(1.54)

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

stack(acoustic_guitar_nylon, bass, tenor_sax, acoustic_guitar_nylon_2, congas, congas_2)

More by Black Sabbath