Strudelify

N.I.B.

Black Sabbath

KeyE♭ minorTempo103 bpm
0:00/0:00
// N.I.B. — Black Sabbath
// 103 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "gUITARRA b" distortion guitar (copy of ch 2 "gUITARRA" distortion guitar); ch 5 "vOZ b" lead 6 voice (copy of ch 4 "vOZ" lead 6 voice); ch 7 "sOLO b" overdriven guitar (copy of ch 6 "sOLO" overdriven guitar)
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 finger · "bAIXO"
const bass = note(`<
  A B A C A B A C A B A C A B A C D E F G A B A C A B A C A B A C H I J K H I J K L M L N@2 A B A C A B A C A B A C D E
  F G D E F G D E F G O P Q R S T U V A B A C A B A C A B A C H I J K H I J K L W L N@2 A B A C A B A C A B A C D E F G
  D E F G H I J K D E F G H I J X@2 ~
>`.pickRestart({
  A: "eb2@2 eb2@2 db2@2 eb2@2 eb2 ~ gb2@2 f2@2 f2 ~", B: "eb2@2 eb2@2 db2@2 eb2@2 eb2 ~ bb2@2 ab2@2 gb2@2",
  C: "eb2@2 eb2@2 db2@2 eb2@2 eb2 ~ ab1 bb1 db2 eb2 gb2@2", D: "eb2@2 eb2!2 eb2@2 eb2!2 eb2@2 eb2!2 eb2@2 eb2!2",
  E: "db2@2 db2!2 db2@2 db2!2 db2@2 db2!2 db2@2 db2!2", F: "b1@2 b1!2 b1@2 b1!2 b1@2 b1!2 b1@2 b1!2",
  G: "bb1@2 bb1!2 bb1@2 bb1!2 bb1@2 bb1!2 bb1@2 bb1!2", H: "eb2@4 bb2@2 eb3@2 ~ eb3@2 eb3!2 bb2 eb2@2",
  I: "db2@4 ab2@2 db3@2 ~ db3@2 db3!2 ab2 db2@2", J: "b1@4 gb2@2 b2@2 ~ b2@2 b2!2 gb2 b1@2",
  K: "bb1@4 f2!2 bb2@3 bb2!4 f2 bb1!2", L: "b1@7 b1", M: "bb1@14 bb1!2", N: "bb1/2", O: "eb2!5 ~@11", P: "db2!5 ~@11",
  Q: "b1!5 ~@11", R: "bb1!2 f2!2 bb2!2 f2!2 eb2!4 ab2 bb2 db3 eb3", S: "eb3!5 db3 bb2@2 db2!4 gb2 ab2 b2 db3",
  T: "db3!5 b2 ab2@2 b1!4 e2 gb2 a2 b2", U: "b2!5 a2 gb2 bb1@2 bb1!3 eb2 e2 ab2 bb2", V: "bb2@2 bb2!4 ab2@2 e2@8",
  W: "bb1@7 bb1", X: "[bb1 eb2@4 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · distortion guitar · "gUITARRA"
const distortion_guitar = note(`<
  ~@4 A B A C A D A C A E A C F@3 G A B A C A D A C A D A C H I J K H I J K J K J K@2 A B A C A D A C A D A C F@3 G L
  M@3 N O P Q R@4 S T U V A B A C A D A C A D A C H I J K H I J K J K J K@2 A B A C A D A C A E A C F@3 G L W@3 X Y Z Q
  AA AB AC AD AE AF AG AH AI AJ
>`.pickRestart({
  A: "[eb3,bb3]!2 [db3,ab3] [eb3,bb3] ~ [gb3,db4] [f3,c4] ~", B: "[eb3,bb3]!2 [db3,ab3] [eb3,bb3] ~ bb4 gb4@2",
  C: "[eb3,bb3]@2 [eb3,bb3]@2 [db3,ab3]@2 [eb3,bb3]@2 ~@2 eb3@2 ab3 [ab3,bb3] bb3 [ab3,bb3]", // Eb5 Db5 Eb5 Absus2
  D: "[eb3,bb3]!2 [db3,ab3] [eb3,bb3] ~ [gb4,bb4,eb5] [gb4,bb4,eb5]@2", // Eb5 Db5 Eb5 Ebm
  E: "[eb3,bb3]@2 [eb3,bb3]@2 [db3,ab3]@2 [eb3,bb3]@2 ~@2 [gb4,bb4,eb5] ~ [gb4,bb4,eb5]@4", // Eb5 Db5 Eb5 Ebm
  F: "eb3@4 gb3@2 ab3@2 ab3 gb3 eb3@2 eb3@4", G: "bb4!4", H: "[eb3,bb3]", I: "[db3,ab3]", J: "[b2,gb3]", K: "[bb2,f3]",
  L: "gb3@2 [f3,gb3] [eb3,f3]@2 ~ gb3@2 [f3,gb3] eb3@3 f3@2 gb3@2, ~@9 f3 ~@6", // Gbmaj7 Ebsus2 Gbmaj7
  M: "[ab3@2 bb3@2 bb3@6 db4@2 db4@6 eb4@2 eb4@6 f4@2 f4@2 f4@8 eb4 db4 db4@8]/3",
  N: "eb4!3 d4 eb4@2 d4@2 ab4 gb4 eb4@2 gb4@2 ab4@2", O: "bb4@2 gb4 ab4 eb4@2 bb4@2 gb4 ab4 gb4@2 bb4@2 gb4 ab4",
  P: "gb4@4 bb4@4 bb4@4 ab4@2 gb4 ~", Q: "ab4 gb4 ab4 ~ gb4@12",
  R: "[gb3@2 [f3,gb3] eb3@3 f3@2 gb3@2 ab3@2 bb3@2 bb3@6 db4@2 db4@6 eb4@2 eb4@6 gb4@2 gb4@6 gb4 ab4 bb4@6 bb4@2 eb5@2 eb5@2 eb5@2 db5@2 bb4@2, ~@3 f3 ~@60]/4", // Gbmaj7
  S: "gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 ab5@4",
  T: "gb5@2 eb5 gb5 eb5@2 db5@2 eb5 [bb4,db5] bb4@2 bb4 eb5 db5 ~", U: "eb5@4 eb5 db5 bb4 a4 db5 eb5 bb4@2 bb4@4",
  V: "ab4@2 gb4 ab4 gb4 eb4 gb4 bb4 gb4@8",
  W: "[ab3@2 bb3@2 bb3@6 db4@2 db4@6 db4 eb4 eb4@6 f4@10 db4 eb4 db4@2 db4@8]/3", X: "[eb4,gb4]!12 eb5@4",
  Y: "bb4@2 gb4@2 ab4 gb4 eb4@2 gb4 ab4 bb4 gb4 ab4 eb4 gb4 ab4", Z: "bb4@7 gb4", AA: "bb4!2 eb5 eb5@2 bb4 ab5 gb5",
  AB: "gb5 eb5!2 db5 eb5 db5 bb4 ab4 bb4 eb5 db5 eb5!2 db5 bb4 ab4",
  AC: "eb5 db5 eb5@4 bb4 db5 bb4@2 bb4@2 bb4 ab4 gb4 [gb4,ab4]", AD: "eb4 gb4 bb4@2 bb4@2 eb5@2 bb4@2 bb4@2 bb4@4",
  AE: "bb4@2 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5",
  AF: "bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4 gb5 eb5 bb4",
  AG: "ab5@6 gb5@2 eb5 gb5 eb5 db5!2 bb4 ab4 bb4", AH: "eb5 bb4 ab4 bb4 [eb3,bb3,eb4]@12",
  AI: "db4 eb4 gb4 ab4!2 gb4 ab4 gb4!3 eb4 db4 eb4 db4 bb3 eb3", AJ: "d3",
})).s("gm_distortion_guitar").gain(0.44).pan(0)

// chords · overdriven guitar · "sOLO" · Bb5
const overdriven_guitar = note("<~@19 [[f5,bb5]!4] ~@40 [bb5!4] ~@56 [bb5!4] ~@18>")
  .s("gm_overdriven_guitar").gain(0.44).pan(0)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@69 [~@2 x!2]!3 ~@64>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A B A B A B A B A B A B ~@4 A B A B A B A B A B A B C@11 ~@2 A B A B A B A B A B A B ~@20 A B A B A B A B A B A B
  C@11 ~@2 A B A B A B A B A B A B ~@22
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@2 x ~ x ~ x!2",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A@5 ~ A ~ A ~ A ~ A ~ A ~ B@11 C D A ~ A ~ A ~ A ~ A ~ A ~ A@12 ~@3 E A@5 ~ A ~ A ~ A ~ A
  ~ A ~ B@11 C D A ~ A ~ A ~ A ~ A ~ A ~ A@19 F ~@2
>`.pickRestart({
  A: "x", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", C: "x!16", D: "x!8 ~@8", E: "x ~@6 x ~@8", F: "x!2 ~@2",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@16 A@3 B ~@37 A@3 B A@3 B A@4 ~@4 A@4 ~@37 A@3 B A@3 C A@11 D ~@2>".pickRestart({
  A: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", B: "~@2 x!3 ~ x!2 ~@8", C: "~@2 x!3 ~ x!3 ~@7", D: "~@2 x!2 ~@12",
})).gain(0.72)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@43 [x!16] [x!5 ~@11] ~@55 [x!16] [x!5 ~@11] ~@34>").gain(5.64)

// drums · vibraslap · soft notes
const vibraslap_soft = s("vibraslap:0").struct("<~@44 [~@5 x!3 ~@8] ~@56 [~@5 x!3 ~@8] ~@34>").gain(3.76)

stack(
  bass, distortion_guitar, overdriven_guitar, kick, snare, pedal_hat, open_hat, crash, ride, vibraslap, vibraslap_soft
)

More by Black Sabbath