Strudelify

My Poor Brain

Foo Fighters

KeyF♯ majorTempo126 bpm
0:00/0:00
// My Poor Brain — Foo Fighters
// 126 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 105 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): DISTROTION.
setcpm(126/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.

// chords · electric guitar jazz · "JAZZGITR"
const electric_guitar_jazz = note(`<
  A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B ~@8 A@2 B A@2 B A@2 B A@2 B ~@18 A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B ~@31
>`.pickRestart({
  A: "[[f4,g#4]!2 [f4,g#4]@2 [f4,g#4]!3 [f#4,a#4,c#5]@2 [f#4,a#4,c#5]!2 [f#4,a#4,c#5]@2 [f#4,a#4,c#5]!3]/2", // Fm F#
  B: "[f#4,a#4,c#5] [f#4,b4,c#5] [f#4,b4,c#5]@2 [f#4,b4,c#5] [f#4,a#4,c#5]!3", // F# F#sus4 F#
})).s("gm_electric_guitar_jazz").gain(0.53)

// chords · distortion guitar · "Distorted"
const distortion_guitar = note(`<
  A@18 B C B D B C B D A@12 B C B D B C B D E F G H E F G H G H I J@2 I J@2 I J@2 I J@2 I J@2 I J@2 B C B D B C B D E F
  G H E F A@16 ~
>`.pickRestart({
  A: "c#4 ~ c#4 ~ c#4 ~ c#4 ~", B: "[c#3,g#3,c#4]!4 ~ [b2,f#3,b3]!2 ~",
  C: "[b2,f#3,b3]!4 ~ [e3,b3,e4] [d#3,a#3,d#4] [c#3,g#3,c#4]", D: "[b2,f#3,b3]!4 ~ [g2,d3,g3] [f#2,c#3,f#3] [e2,b2,e3]",
  E: "[g#2,d#3,g#3]!8", F: "[b2,f#3,b3]!8", G: "c#3!2 b3 c#3!2 b3 c#3 ~", H: "c#3!2 b3 c#3!2 [b2,f#3] [c3,g3] [e3,b3]",
  I: "[c#3,g#3]!8", J: "[b2,f#3]!8",
})).s("gm_distortion_guitar").gain(0.64)

// chords · distortion guitar · "DISTROTION"
const distortion_guitar_2 = note("<~@88 A B A B A B A B A B A B A B A C@2>".pickRestart({
  A: "~ c#3 b3 c#3 ~ b3 ~@2", B: "~ c#3 b3 c#3 ~ [b2,f#3] [c3,g3] [e3,b3]",
  C: "[~ c#3 b3 c#3 ~ [b2,f#3] [c3,g3] [e3,b3]@2 ~@7]/2", // B5 C5 E5
})).s("gm_distortion_guitar").gain(0.8)

// chords · distortion guitar · "Solo Time"
const distortion_guitar_3 = note("<~@55 A B@6 C@9 D@3 E ~@30>".pickRestart({
  A: "~@4 [g#3,f4]@3 [c#4,f#4]", // C# F#5
  B: "[[f4,g#4]@5 [f4,g#4]!2 [f#4,a#4]@6 [f#4,a#4] [d#4,f#4] [d#4,f#4]@6 [d#4,f#4]!2 [e4,g4]]/3", // Fm F# D#m Em
  C: "[[f4,g#4]@5 [f4,g#4]!2 [f#4,a#4]@14 [f#4,a#4]!2 [f4,g#4]]/3", // Fm F# Fm
  D: "[[f4,g#4]@10 [f4,g#4]@2 [f4,g#4]@2 [f#4,a#4]@28 [c#3,d#3] [e3,f#3,g#3] [a#3,b3,c#4] [c#4,d#4,e4] [f#4,g#4] [a#4,b4]]/3", // Fm F# C#sus2 E A#m C#m F#sus2 Bmaj7
  E: "b4 ~@15",
})).s("gm_distortion_guitar").gain(0.53)

// other · guitar harmonics
const guitar_harmonics = note(`<
  ~@17 A ~@19 B ~@10 C ~@3 C ~ C D ~@28 C ~@3 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ E
>`.pickRestart({
  A: "~@6 a#4 g#4", B: "~@3 a#4", C: "~@7 a#4", D: "d#5 ~", E: "~ b4@2 a#4 ~@4",
})).s("gm_guitar_harmonics").gain(0.72)

// bass · electric bass finger · "FINGERBASS"
const bass = note(`<
  A@18 B C B D B C B D A@12 B C B D B C B D E F G H E F G H G H A@18 B C B D B C B D E F G H E F G H G H G H G H G H G H
  G I G J@2
>`.pickRestart({
  A: "[c#2@2 c#2@2 c#2 b1 c#2 b1@2 f#1 g#1 b1@2 f#1 g#1 b1@2 b1 b1@2 b1 g#1 b1 c2]/3",
  B: "c#2@2 c#2@2 c#2@2 c#2@2 ~@2 f#2 g#2 b2@2 ~@2", C: "b1!4 ~ e2 d#2 c#2", D: "b1!4 ~ g1 f#1 e1", E: "g#1!8",
  F: "b1!3 f#2 g#2 b2@2 g#2", G: "c#2!2 b2 c#2!2 b2 c#2 ~", H: "c#2!2 b2 c#2!2 b1 c2 e2",
  I: "g#2!2 f#2 e2 c#2 b1 c2 e2", J: "[c#2!2 b2 c#2!2 b1 c2 e2@2 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.8)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@92 A ~ A ~ A ~ A ~ A ~ A ~@2>".pickRestart({
  A: "~@3 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@2 B A@2 B A@2 B A@2 B A@2 ~@8 A@3 B A@2 B A@2 B A@2 ~@67>".pickRestart({
  A: "x!8", B: "~ x!7",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 B C B@3 C B@2 ~@3 A ~@2 A ~@2 A ~@2 B C B@3 C B D ~@2 B@2 ~@2 B C B D C@17 B@2 C B@3
  C B@2 ~@2 B@2 ~@2 B C B@3 C B@3 C B@3 C B@2 ~
>`.pickRestart({
  A: "x", B: "x!3 ~", C: "x!4", D: "x ~ x ~ x!3 ~",
})).gain(0.64)

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

stack(
  electric_guitar_jazz, distortion_guitar, distortion_guitar_2, distortion_guitar_3, guitar_harmonics, bass, kick,
  snare, low_tom, hihat, open_hat, crash
)

More by Foo Fighters