Strudelify

Sabotage

Beastie Boys

KeyG♯ minorTempo175 bpm
0:00/0:00
// Sabotage — Beastie Boys
// 175 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "guitar" named as a guitar, played on electric guitar clean (its electric bass finger patch is not one)
// note: duplicate parts dropped: ch 3 "guitar" electric guitar clean (copy of ch 1 "guitar" electric guitar clean)
// note: Full arrangement: all 169 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.
setcpm(175/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 · electric guitar clean · "guitar"
const electric_guitar_clean = note(`<
  A B A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C D E D E D E D E ~@8 D E D E D E D E D E D E D
  E D E F@3 A G A H A G A H A G A H A I@2 A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A
  C ~@8 A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C J@5
>`.pickRestart({
  A: "[g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2", // G# G#7 G# G#7 G#
  B: "[g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]", // G#7 G# G#7 G# G#7 G#
  C: "[g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,f#2,f#3]@2", // G#7 G# G#7 G# G#7
  D: "[g#1,g#2,g#3]!2 [g#1,g#2,f#3] [g#1,g#2,g#3]!2 [g#1,g#2,f#3] [g#1,g#2,g#3]!2", // G# G#7 G# G#7 G#
  E: "[g#1,g#2,f#3] [g#1,g#2,g#3]!2 [g#1,g#2,f#3] [g#1,g#2,g#3]!2 [g#1,f#2,f#3]@2", // G#7 G# G#7 G# G#7
  F: "[d#1@18 [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3]]/3", // G# G#7 G# G#7
  G: "[g#1,g#2,f#3] [g#1,g#2]!3 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3]", // G#7 G# G#7 G# G#7
  H: "[g#1,f#2,f#3]@2 [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3]", // G#7 G# G#7 G# G#7
  I: "[[g#1,g#2,f#3] [g#1,g#2]!2 [g#1,f#2] [g#1,g#2]!2 [g#1,f#2] [g#1,g#2] [g#1,g#2] [f#1,f#2] [d#1,d#2] [f#1,f#2] [g#1,g#2] [e1,e2] [b1,b2]@2, ~@4 b2@3 b2@3 ~@6, ~@7 d#2@2 ~@7]/2", // G#7 G# G#7 G# G#7 G# F# D# …
  J: "[[g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2]!2 [g#1,g#2,f#3] [g#1,g#2] [g#1,g#2]@32 ~]/5", // G# G#7 G# G#7 G#
})).s("gm_electric_guitar_clean").gain(0.57)

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@9 B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~@19 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C@5
>`.pickRestart({
  A: "[g#1,g#2,d#3,g#3] ~@3", B: "[g#1,g#2,d#3,g#3]!2 ~@4 [g#1,g#2,d#3,g#3]!2",
  C: "[[g#1,g#2,d#3,g#3]!2 ~@4 [g#1,g#2,d#3,g#3] [g#1,g#2]@32 ~, ~@14 [d#3,g#3] ~@65]/5", // G#5 G# G#5
})).s("gm_distortion_guitar").gain(0.68)

// bass · electric bass finger · "bass"
const bass = note(`<
  A ~ A ~ A ~ A ~ A ~ B C A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~@19 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C A ~ A ~ A ~ B D ~@3
>`.pickRestart({
  A: "g#1!2 ~@6", B: "g#1!2 ~@4 g#1!2", C: "g#1 f1 g#1 b1 b2@4", D: "g#1 ~@7",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · lead 5 charang · "synth"
const lead_5_charang = note("<~@28 A@2 B@2 C@2 D@2 ~@66 E@2 A@2 B@2 D@2 ~@40 A@2 B@2 C@2 E@2 F@7 ~@4>".pickRestart({
  A: "[[g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@6 [g#4,a5]@4 g#5@4 c7@2 [a6,a#6,b6] g#6, ~@24 a6 ~@3 g#5@4]/2", // Amaj7
  B: "[[g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@6 g#5 ~ a5@2 g#5 ~@3 c7@2 [a6,a#6,b6] g#6, ~@22 g#5 ~@5 g#5@4]/2", // Amaj7
  C: "[[g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@6 g#5@4 g#5@4 c7@2 [a6,a#6,b6] g#6, ~@20 g#6 ~@3 a6 ~@3 g#5@4]/2", // Amaj7
  D: "[[g#4,a5]@8 [g#4,a5]@4 [g#4,a5]@6 [g6,g#6] ~@3 [g#6,a6] ~@3 [a#6,b6] ~@3 [b6,c7] ~]/2", // Amaj7 G#maj7 Amaj7 Bmaj7 Cmaj7
  E: "[[g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@6 g#5@4 g#5@4 c7@2 [a6,a#6,b6] g#6, ~@20 c7 ~@3 c7 ~@3 g#5@4]/2", // Amaj7
  F: "[~@2 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@2 g#5@4 c7@2 [a6,a#6,b6] g#6 ~@2 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@2 g#5 ~ a5@2 g#5 ~@3 c7@2 [a6,a#6,b6] g#6 ~@2 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@2 g#5@4 g#5@4 c7@2 [a6,a#6,b6] g#6 ~@2 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@4 [g#4,a5]@2, ~@24 a6 ~@3 g#5@6 ~@20 g#5 ~@5 g#5@6 ~@18 g#6 ~@3 a6 ~@3 g#5@6 ~@14]/7", // Amaj7
})).s("gm_lead_5_charang").gain(0.29).pan(0.2)

// chords · lead 5 charang · "synth"
const lead_5_charang_2 = note(`<
  ~@28 A@2 B@2 C@2 D@2 ~@66 E@2 A@2 B@2 D@2 ~@40 A@2 B@2 C@2 E@2 F G F H F I F ~@4
>`.pickRestart({
  A: "[[g#4,a5]@4 [g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@4 g#5@4 a#6@2 ~@2 [a6,a#6,b6] g#6, ~@22 a6 ~@3 g#5@6]/2", // Amaj7
  B: "[~@4 [g#4,a5]@8 [g#4,a5]@6 [g#4,a5]@2 g#5 ~ g#5 ~ g#5 ~ a#6@4 [a6,a#6,b6] g#6, ~@13 g#5@3]/2", // Amaj7
  C: "[~@4 [g#4,a5]@8 [g#4,a5]@6 g#5@4 g#5@4 a#6@2 ~@2 [a6,a#6,b6] g#6, ~@18 a#6 ~@3 a6 ~@3 g#5@6]/2", // Amaj7
  D: "[~@4 [g#4,a5]@6 [g#4,a5]@4 [g#4,a5]@4 [g6,g#6] ~@3 [g#6,a6] ~@3 [a#6,b6] ~@3 [b6,c7] ~]/2", // Amaj7 G#maj7 Amaj7 Bmaj7 Cmaj7
  E: "[~@4 [g#4,a5]@8 [g#4,a5]@6 g#5@4 g#5@4 c7@2 ~@2 [a6,a#6,b6] g#6, ~@18 c7 ~@3 c7 ~@3 g#5@6]/2", F: "[g#4,a5]!4",
  G: "[g#4,a5]@4 ~@2 a6 ~@3 a#6@2 ~@2 [a6,a#6,b6] g#6, ~ [g#4,a5] g#5!2", // Amaj7
  H: "[g#4,a5]@4 g#5 ~ g#5 ~ g#5 ~ a#6@4 [a6,a#6,b6] g#6, ~@5 g#5@3", // Amaj7
  I: "[g#4,a5]@2 g#5@4 g#5@4 a#6@2 ~@2 [a6,a#6,b6] g#6, ~@2 a#6 ~@3 a6 ~@3 g#5@6", // Amaj7
})).s("gm_lead_5_charang").gain(0.29).pan(0.9)

// other · synth strings 1 · "synth"
const synth_strings_1 = note("<~@122 A B@3 ~@43>".pickRestart({
  A: "[g#4,g#5]!4", B: "[[g#4,g#5]!3 [g#4,g#5]@2 [a#4,a#5]@7]/3",
})).s("gm_synth_strings_1").gain(0.38)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B@3 A B@7 A B@3 C ~@7 A B@3 A B@11 A B@3 A B@3 A B@3 A B@3 ~@18 A B@3 A B@7 A B@3 C ~@7 A B@3 A B@3 A B@3 A B@3
  ~@4 B@3 C A B@3 A B@7 A B@3 ~@19
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A B ~@3 B ~@7 B ~@11 B ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@3 B ~ C ~@7 C ~@7 B ~@3 B ~@7 B ~@11 B ~@3 B ~@3 B ~@3 B
  ~@11 B ~@3 B ~@7 B ~@3 B ~@7 B ~@10
>`.pickRestart({
  A: "~ x", B: "x", C: "~ x ~@2",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@23 A ~@15 A ~@7 A ~@7 A ~ B ~@7 B ~@7 A ~@23 A ~@7 A ~@15 A ~@15 A ~@7 A ~@10
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.8)

stack(
  electric_guitar_clean, distortion_guitar, bass, lead_5_charang, lead_5_charang_2, synth_strings_1, kick, snare, hihat,
  open_hat, crash
)

More by Beastie Boys