Strudelify
KeyA majorTempo109 bpm
0:00/0:00
// Vietnow — Rage Against the Machine
// 109 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1, 2/4 at bar 8, 4/4 at bar 9, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 2 "Guitar-2" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 120 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-2.
setcpm(109/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// 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-2"
const electric_guitar_clean = note("<~@7 A B ~@61 C@11 D E@3 ~ E@3 ~@8 F ~@11 G H@3 I J@3 K ~@2>".pickRestart({
  A: "~@3 a2", B: "a2@7 ~@9", C: "f#2 ~ f#2 ~ f#2 ~ f#2 ~", D: "f#2 ~ f#2 ~@5", E: "~@10 e2@5 ~",
  F: "~@5 g2@3 ~ f#2@3 ~ g2@3", G: "~@13 f#2!3", H: "~@9 f#2!2 ~ f#2!4", I: "~@9 f#2!2 ~@2 g2@3",
  J: "~ f#2@3 ~ g2@3 ~ f#2!2 ~@2 g2@3", K: "~ f#2@3 ~ g2@3 ~@8",
})).s("gm_electric_guitar_clean").gain(0.72)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@8 A B C B C B C B D@16 E@2 F G E@2 F H B C B C B C B D@16 E@2 F G E@2 F ~@4 I@3 J I@3 J I@3 J I@3 J K L M N M N M O
  K L M L M L M P@8 Q R@3 S ~@2
>`.pickRestart({
  A: "a1@7 ~ e1 f#1!2 e1 a1!2 ~@2", B: "e1 f#1!2 e1 a1!2 ~@10", C: "e1 f#1!2 e1 f#1!3 e1 f#1!3 e1 a1!2 ~@2",
  D: "e1 f#1!2 e1 f#1!4 ~@8", E: "f#2!2 e1@2 f#1@2 e1@2 a1@3 a#1 a1@2 e1@2",
  F: "f#2!2 e1@2 f#1@2 e1@2 a1@3 a1 g#1@2 e1@2", G: "f#2!2 ~@14", H: "f#2!2 ~@6 e1 f#1!2 e1 a1!2 ~@2",
  I: "c2@2 f#2@5 ~ c2@2 e1@5 ~", J: "c2@2 f#2@5 ~ f#2 e2 f#2@2 f#2 e2 f#2@2",
  K: "e1 f#1!2 e1 a1!2 ~@2 e1 f#1!2 e1 a1!2 ~@2", L: "~@8 e1 f#1!2 e1 f#1!3 e1",
  M: "f#1!3 e1 a1!2 ~@2 e1 f#1!2 e1 a1!2 ~@2", N: "~@4 a1!2 ~ a1 e1 f#1!2 e1 f#1!3 e1", O: "~@5 g1@3 ~ f#1@3 ~ g1@3",
  P: "~@8 e1 f#1!2 e1 f#1!4", Q: "~@8 e1 f#1!2 e1 ~ g1@3", R: "~ f#1@3 ~ g1@3 e1 f#1!2 e1 ~ g1@3",
  S: "~ f#1@3 ~ g1@3 ~@8",
})).s("gm_electric_bass_pick").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C B D E C B C B C B C F G F G F G F G F G F G F G F H I@3 J I@3 E C B C B C B C F G F G F G F G F G F G F G F
  H I@3 J I@3 ~@4 K L K L K M K L K N K L K L K L O P Q P Q P Q R O P Q P Q P Q S T U T U T U T V W@3 ~@3
>`.pickRestart({
  A: "~@2 x ~@3 x ~@6 x ~@2", B: "x ~@2 x ~@3 x ~ x ~ x ~@4", C: "x ~ x ~@3 x ~@6 x ~@2", D: "x!2 ~@6", E: "~@4 x!3 ~",
  F: "x ~@6 x ~@8", G: "x ~@6 x ~ x!2 ~@5", H: "x ~@6 x ~ x ~@6", I: "x ~ x ~@5 x ~@2 x!2 ~@3",
  J: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~", K: "x!8", L: "x ~ x ~ x ~ x ~@4 x!2 ~@3", M: "x!4 ~@4", N: "x!4 ~ x!2 ~",
  O: "x!3 ~ x!2 ~ x", P: "~@5 x ~@2 x ~@2 x ~@3 x", Q: "~ x ~ x ~@4 x ~ x ~@3 x ~", R: "~@5 x ~@3 x ~@3 x ~@2",
  S: "~@5 x ~@2 x ~@6 x", T: "~ x!2 ~@5 x ~@6 x", U: "~@4 x ~@3 x ~@6 x", V: "~@2 x ~ x!2 ~@2", W: "~@4 x!2 ~@2",
})).gain(0.72)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A B A B C D E B E B E B E B@15 F ~@3 G ~@3 H E B E B E B E B@15 F ~@3 G ~@3 I@3 J ~@16 K L M L M L M N K L M L M L
  M N ~@14
>`.pickRestart({
  A: "x!6 ~@2", B: "x!8", C: "x!3 ~ x ~ x ~", D: "~@2 x ~ x!2 ~@2", E: "x ~ x!4 ~@2", F: "x!5 ~@3", G: "~@3 x ~@3 x",
  H: "~@4 x!2 ~@2", I: "x!4", J: "x!2 ~@2", K: "x!2 ~@2 x ~ x!2", L: "x!2 ~@2 x!4", M: "x!5 ~ x!2", N: "x!2 ~@6",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 [~@5 x ~ x] ~@46>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~@3 B ~ B ~ B ~ B ~@19 C ~@4 B ~ B ~ B ~ B ~@19 C ~@23 D E D E D E D E D E D E D E D E ~@14
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@2 x ~@10 x ~@2", C: "~ x ~ x", D: "~@5 x ~@2", E: "~@5 x ~@10",
})).gain(0.72)

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

stack(electric_guitar_clean, bass, kick, snare, hihat, mid_tom, open_hat, crash)

More by Rage Against the Machine