Strudelify

My Hero

Foo Fighters

KeyE majorTempo155 bpm
0:00/0:00
// My Hero — Foo Fighters
// 155 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 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): Beach Hunt.
setcpm(155/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · epiano1 · "Original Song by"
const bass = note(`<
  A@24 B C A@16 D@3 E F@3 G D@3 E F@4 B C A@16 D@3 E F@3 G D@3 E F@4 D@3 E F@3 G D@3 E F@4 A@18 H@3
>`.pickRestart({
  A: "[e1@11 ~ c#2@20]/2", B: "f#1@2 f#1 c#2 b1 g#1 a1@2", C: "~@2 a1@4 ~@2 a1@3 ~ b1@4", D: "a1", E: "a1 b1", F: "e1",
  G: "e1!2", H: "e1/3",
})).s("gm_epiano1").gain(0.08)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@8 A@8 B C B D B C B D E@2 A@16 F G@2 H@2 I@2 J@2 G@2 H@2 I@2 K E@2 A@16 F G@2 H@2 I@2 J@2 G@2 H@2 I@2 K F G@2 H@2
  I@2 J@2 G@2 H@2 I@2 K A@18 ~@3
>`.pickRestart({
  A: "[[d#4,e4] e4 [d#4,e4] [b3,e4]@5]/2", B: "e4@3 ~ e4@2 e4@3 ~ e4@2 d#4@2 d#4@2", C: "f#4 d#4!3 f#4 d#4!3",
  D: "f#4 d#4!3 f#4 e4!3", E: "[f#4@2 f#4 c#5 b4 g#4 a4@8 ~@2]/2", F: "~ d#4", G: "[e4 f#4@2 d#4]/2",
  H: "[e4 b3@2 d#4]/2", I: "[e4 f#4@2 f#4]/2", J: "[g#4 d#4@2 d#4]/2", K: "g#4 d#4",
})).s("gm_overdriven_guitar").gain(0.04).pan(0)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@8 A@8 B C B D B C B D E@2 B C B D B C B D B C B D B C B D F G@2 H@2 I@2 J@2 G@2 H@2 I@2 K E@2 B C B D B C B D B C B
  D B C B D F G@2 H@2 I@2 J@2 G@2 H@2 I@2 K F G@2 H@2 I@2 J@2 G@2 H@2 I@2 K B C B D B C B D B C B D B C B D B D ~@3
>`.pickRestart({
  A: "[[e4,d#5] [e4,e5] [e4,d#5] [e4,b4]@5]/2", B: "e4@3 ~ e4@2 e4@3 ~ e4@2 d#4@2 d#4@2", C: "f#4 d#4!3 f#4 d#4!3",
  D: "f#4 d#4!3 f#4 e4!3", E: "[f#4@2 f#4 c#5 b4 g#4 a4@4 ~@6]/2", F: "~ d#4", G: "[e4 f#4@2 d#4]/2",
  H: "[e4 b3@2 d#4]/2", I: "[e4 f#4@2 f#4]/2", J: "[g#4 d#4@2 d#4]/2", K: "g#4 d#4",
})).s("gm_distortion_guitar").gain(0.03)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@126 x ~@2>").gain(0.19)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@24 ~@2 A@16 B@16 ~@2 A@16 B@32 A@18 ~@3>".pickRestart({
  A: "x!4 ~ x ~ x", B: "x!2 ~ x!4 ~",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 [~@2 x!2] ~@33 [~@2 x!2] ~@69>").gain(0.19)

// drums · open hat
const open_hat = s("oh").struct("<A B@23 ~@2 B@16 C@16 ~@2 B@16 C@32 B@16 A B ~@3>".pickRestart({
  A: "x!4", B: "x ~ x!2", C: "x!5 ~@3",
})).gain(0.19)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B@2 C A B A B A B A B A B A B A B A B ~@16 B C A B A B A B A B A B A B A
  B A B ~@32 A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "x ~@2 x", B: "~@3 x", C: "~ x ~ x ~@4",
})).gain(0.19)

// drums · crash
const crash = s("cr").struct(`<
  A ~ B ~ A ~@19 B C ~@16 D C@7 D C@7 B C ~@16 D C@7 D C@7 D C@7 D C@7 ~@16 A ~ A ~@2
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x", D: "x!2",
})).gain(0.19)

stack(bass, overdriven_guitar, distortion_guitar, kick, snare, low_tom, pedal_hat, mid_tom, open_hat, high_tom, crash)

More by Foo Fighters