Strudelify

Breaking the Law

Judas Priest

KeyG minorTempo161 bpm
0:00/0:00
// Breaking the Law — Judas Priest
// 161 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(161/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@8 A@2 B A@3 B A C@2 D@2 C@2 E F A G@2 H@2 G@2 I A@2 B A@3 B A C@2 D@2 C@2 E F A G@2 H@2 G@2 J K L K L K L K L M N M
  N M N M O P Q R@2 S ~ T@2 U@2 C V U@2 C V U@2 C V U@2 C V U@2 C W@2
>`.pickRestart({
  A: "g1!8", B: "bb1!4 f1!3 g1", C: "eb2!8", D: "bb1!8", E: "d2!8", F: "d2 ~@7", G: "[g1!7 g2@2 g1!7]/2",
  H: "[g1!5 g2 ~ g2@2 g1!7]/2", I: "g1!5 g2 ~ g2", J: "g1!5 g2 ~ a2", K: "a1!8", L: "a1!3 g1!5", M: "c2!7 eb2",
  N: "eb2!3 bb1!5", O: "eb2!3 f2!5", P: "g2 ~@3", Q: "~@7 eb2", R: "[eb2@2 ~@5 f2@2 ~@6 g1]/2", S: "g1 ~@3",
  T: "[eb2@2 ~@5 f2@2 ~@7]/2", U: "g2!8", V: "f2!8", W: "[f2!4 bb2 a2 ~ g2@2 ~@7]/2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@8 A@2 B@2 A@2 B@2 C@2 D E F@2 G H I J@2 K@2 J@2 L@3 B@2 A@2 B@2 C@2 D E F@2 G M I J@2 K@2 J@2 N O@2 P@2 Q@4 R S R T
  R S R T U V W@2 U ~ W@2 U ~ W@2 U ~ W@2 U ~ W@2 U ~ W@2 U ~ W@2 ~
>`.pickRestart({
  A: "[[g3,d4,g4]@28 [g3,d4,g4] ~ [g3,d4,g4] ~]/2", // G5
  B: "[[bb3,f4,bb4]@4 [bb3,f4,bb4] ~ [bb3,f4,bb4] ~ [f3,a3,f4]@6 [g3,d4,g4]@18]/2", // Bb5 F G5
  C: "[[eb4,bb4,eb5]@7 [eb4,bb4,eb5]]/2", D: "[bb3,f4,bb4]", E: "[bb3,f4,bb4]@3 [bb3,f4,bb4]@3 [bb3,f4,bb4]@2",
  F: "[eb4,bb4,eb5]", G: "[d4,a4,d5]@4 [d4,a4,d5]!4", H: "[d4,a4,d5] ~@7", I: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~",
  J: "[g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ [g4,d5,g5]@6 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~]/2", // G5
  K: "[g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ [g4,d5,g5]@2 g3 ~ [g4,d5,g5]@6 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~]/2", // G5
  L: "[g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ [g4,d5,g5]@2 g3 ~ g4@2 [g3,d4]@28 [g3,d4,g4] ~ [g3,d4,g4] ~, ~@7 [d5,g5]@3 ~@14, ~@4 g4 ~@7]/3", // G5
  M: "[d3,d4,a4,d5] [d4,a4]@3", N: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ [g4,d5,g5]@2 g3 ~@3",
  O: "[[a3,e4,a4]@7 [a3,e4,a4]@4 [g3,d4,g4]@2 [g3,d4,g4]@2 g3]/2", // A5 G5
  P: "[[a3,e4,a4]@6 [a3,e4,a4] [a3,e4,a4]@4 [g3,d4,g4]@2 [g3,d4,g4]@2 g3]/2", // A5 G5
  Q: "[[a3,e4,a4]@6 [a3,e4,a4] [a3,e4,a4]@4 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]]/2", // A5 G5
  R: "[c4,g4,c5]@6 [c4,g4,c5] [eb4,bb4,eb5]", S: "[eb4,bb4,eb5]@3 [bb3,f4,bb4]@5", T: "[eb4,bb4,eb5]@3 [f4,c5,f5]@5",
  U: "[g4,d5,g5] ~@3", V: "~@7 [eb4,bb4,eb5]", W: "[[eb4,bb4,eb5]@2 ~@5 [f4,c5,f5]@2 ~@6 [eb4,bb4,eb5]]/2",
})).s("gm_distortion_guitar").gain(0.5)

// chords · lead 4 chiff · "CHIFFER LD"
const lead_4_chiff = note(`<
  ~@8 A@2 B@2 A@2 B@2 C@2 D E F@2 G H I J@2 K@2 J@2 L@3 B@2 A@2 B@2 C@2 D E F@2 G M I J@2 K@2 J@2 N O@2 P@2 Q@4 R S R T
  R S R T U V W@2 X ~ W@2 X ~ Y@2 U ~ Y@2 U ~ Y@2 U ~ Y@2 U ~ Y@2 ~
>`.pickRestart({
  A: "[[g3,d4,g4]@28 [g3,d4,g4] ~ [g3,d4,g4] ~]/2", // G5
  B: "[[bb3,f4,bb4]@4 [bb3,f4,bb4] ~ [bb3,f4,bb4] ~ [f3,a3,f4]@6 [g3,d4,g4]@18]/2", // Bb5 F G5
  C: "[[eb4,bb4,eb5]@7 [eb4,bb4,eb5]]/2", D: "[bb3,f4,bb4]", E: "[bb3,f4,bb4]@3 [bb3,f4,bb4]@3 [bb3,f4,bb4]@2",
  F: "[eb4,bb4,eb5]", G: "[d4,a4,d5]@4 [d4,a4,d5]!4", H: "[d4,a4,d5] ~@7", I: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~",
  J: "[g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ [g5,d6,g6]@6 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~]/2", // G5
  K: "[g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ [g5,d6,g6]@2 g4 ~ [g5,d6,g6]@6 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~]/2", // G5
  L: "[g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ [g5,d6,g6]@2 g4 ~@3 [g3,d4,g4]@28 [g3,d4,g4] ~ [g3,d4,g4] ~, ~@7 [g5,d6,g6]@3 ~@14]/3", // G5
  M: "[d3,d4,a4,d5] [d4,a4]@3", N: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ [g5,d6,g6]@2 g4 ~@3",
  O: "[[a4,e5,a5]@7 [a4,e5,a5]@4 [g4,d5,g5]@2 [g4,d5,g5]@2 g4]/2", // A5 G5
  P: "[[a4,e5,a5]@6 [a4,e5,a5] [a4,e5,a5]@4 [g4,d5,g5]@2 [g4,d5,g5]@2 g4]/2", // A5 G5
  Q: "[[a4,e5,a5]@6 [a4,e5,a5] [a4,e5,a5]@4 [g4,d5,g5]@2 [g4,d5,g5]@2 [g4,d5,g5]]/2", // A5 G5
  R: "[c5,g5,c6]@6 [c5,g5,c6] [eb5,bb5,eb6]", S: "[eb5,bb5,eb6]@3 [bb4,f5,bb5]@5", T: "[eb5,bb5,eb6]@3 [f5,c6,f6]@5",
  U: "[g5,d6,g6] ~@3", V: "~@7 [eb4,bb4,eb5]", W: "[[eb4,bb4,eb5]@2 ~@5 [f4,c5,f5]@2 ~@6 [eb4,bb4,eb5]]/2",
  X: "[g4,d5,g5] ~@3", Y: "[[eb5,bb5,eb6]@2 ~@5 [f5,c6,f6]@2 ~@6 [eb5,bb5,eb6]]/2",
})).s("gm_lead_4_chiff").gain(0.52)

// drums · kick
const kick = s("bd").struct("<~@4 A ~ A ~ B@15 C B@23 D B@24 A E F E A ~ F E B@20 ~>".pickRestart({
  A: "x", B: "x!8", C: "x ~@4 x ~@2", D: "x!2", E: "~@7 x", F: "x ~@6 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@4 A ~ A ~ B@14 C D B@3 E B@18 C A B@3 E B@20 A F G F A ~ G F H B@19 ~>".pickRestart({
  A: "x", B: "~ x ~ x", C: "~@2 x ~ x!4", D: "x ~@2 x", E: "~ x ~@2", F: "~@7 x", G: "x ~@6 x", H: "x!2 ~ x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@22 A B ~@3 C ~@3 C ~@14 A B ~@3 C ~@3 C ~@17 D E D B ~ E D ~@21>".pickRestart({
  A: "~@5 x!3", B: "x", C: "~@3 x", D: "~@7 x", E: "x ~@6 x",
})).gain(0.8)

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

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

stack(bass, distortion_guitar, lead_4_chiff, kick, snare, low_tom, hihat, crash)

More by Judas Priest