Strudelify

I'll Stick Around

Foo Fighters

KeyG minorTempo138 bpm
0:00/0:00
// I'll Stick Around — Foo Fighters
// 138 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 130 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(138/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.

// chords · distortion guitar · "guitar 1"
const distortion_guitar = note(`<
  ~ A@3 B A@3 B C D E C F E C@3 D E C F E A@3 B C D E C F E C@3 D E C F E C@2 G@4 H@3 I A@3 B A@3 B C D E C F E C@3 D E
  C F E C@2 G@4 H@3 I A@3 B A@3 B A@3 B A@3 B J K L M J K L M J K L M J K L M J K C M J K A@3 B A@3 B N
>`.pickRestart({
  A: "[g2,d3]@2 [g2,d3]@2 ~@2 [eb3,bb3]!2 [eb3,bb3]@2 [bb2,f3]@2 [c3,g3]@2 [f3,c4]@2", // G5 Eb5 Bb5 C5 F5
  B: "[g2,d3]@2 [g2,d3]@2 ~@2 [eb3,bb3]!2 [eb3,bb3]@2 [bb2,f3]@2 [c3,g3]@2 [bb2,f3]@2", C: "[g3,b3,d4,g4]!8",
  D: "[f3,a3,c4,f4]!8", E: "[e3,a3,c4,e4]!8", F: "[f3,bb3,d4,f4]!8",
  G: "[~@2 g4@2 d4 bb3 f3 ~@2 f3 g3@5 [c3,e3,bb3,d4]@13 [c3,e3,bb3,d4]!3 a2, bb2@7 b2@8 ~@17, f3@3 ~@13, [bb3,d4] ~@7]/4", // C7 Bb
  H: "[~@2 g4@2 d4 bb3 f3 ~@2 f3 g3@5 [c3,e3,bb3,d4]@7 [c3,e3,bb3,d4]!2, bb2@7 b2@8 ~@9, f3 ~@3, [bb3,d4] ~@5]/3", // C7 Bb
  I: "[c3,e3,bb3,d4]@2 [c3,e3,bb3,d4]@2 [c3,e3,bb3,d4]@2 [c3,e3,bb3,d4]@2 [c3,e3,bb3,d4]@2 [c3,e3,bb3,d4]!4 [c3,e3,bb3,d4]@2", // C7
  J: "[eb3,bb3,eb4,g4]!8", K: "[f2,c3,a3,eb4]!8", L: "[g2,b2,d3,g3,d4,g4]!8",
  M: "[d3,a3,d4,gb4]!3 [d3,a3,d4,e4]@2 [d3,a3,d4,gb4] [d3,a3,d4,e4]@2", N: "[g2,d3]!2 ~@6",
})).s("gm_distortion_guitar").gain(0.53).pan(0)

// chords · distortion guitar · "guitar 2"
const distortion_guitar_2 = note(`<
  ~@15 A@2 ~@16 A@2 ~@6 A@2 B@2 C@2 B@2 D ~@15 A@2 ~@6 A@2 B@2 C@2 B@2 D ~@48
>`.pickRestart({
  A: "[~@2 a4@2 a4@2 ~ a4@9]/2", B: "[~@7 [g2,d3,g3]@8 ~]/2", C: "[~@2 e3 [bb3,d4]@2 bb3 d4 e4@3 e4 d4 ~@4]/2",
  D: "~ [c3,e3,bb3,d4]!5 ~@2", // C7
})).s("gm_distortion_guitar").gain(0.47).pan(1)

// bass · electric bass pick · "bass"
const bass = note(`<
  ~ A@3 B A@3 B C@6 D@2 C@6 A@3 B C@6 D@2 C@6 D@2 E@4 F@3 G A@3 B A@3 B C@6 D@2 C@6 D@2 E@4 F@3 G A@3 B A@3 B A@3 B A@3
  B H I D J H I D J H I D J H I D J H I D J H I A@3 B A@3 B K
>`.pickRestart({
  A: "g1@2 g1@2 ~@2 eb2!2 eb2@2 bb1@2 c2@2 f2@2", B: "g1@2 g1@2 ~@2 eb2!2 eb2@2 bb1@2 c2@2 bb1@2",
  C: "f1@2 g1@3 ~ bb1@2 g1@3 ~ g1@2 e1@2", D: "g1!8", E: "[bb1@2 bb1 bb1@2 bb1!2 g1@2 g1 g1@2 g1!3 c2@13 c2!3 a1]/4",
  F: "[bb1@2 bb1 bb1@2 bb1!2 g1@2 g1 g1@2 g1!3 c2@2 c2!7]/3", G: "c2@2 c2@2 c2@2 c2@2 c2@2 c2!4 c2@2", H: "eb2!8",
  I: "f2!8", J: "d2!3 c2!2 d2!2 c2", K: "g1!2 ~@6",
})).s("gm_electric_bass_pick").gain(0.8)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@41 A ~@7 A ~@31 A ~@31>".pickRestart({
  A: "~@12 x!4",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@45 [~@3 x ~@2 x ~] [~@2 x ~@5 x ~ x!4 ~@2] ~@83>").gain(0.8)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@9 A B@5 ~@2 A B@4 C ~@4 A B@5 ~@2 A B@5 ~@2 D E ~@2 D E ~@10 A B@5 ~@2 A B@5 ~@2 D E ~@2 D E ~@49
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3", D: "~@2 x!5 ~", E: "~ x!6 ~",
})).gain(0.8)

stack(distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, mid_tom, crash, ride)

More by Foo Fighters