Strudelify

Learn to Fly

Foo Fighters

KeyE majorTempo136 bpm
0:00/0:00
// Learn to Fly — Foo Fighters
// 136 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "Guitar" overdriven guitar (copy of ch 2 "Guitar" distortion guitar)
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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"
const distortion_guitar = note(`<
  ~ A B C@2 A B C@2 D E@3 D E@3 D F G H D I J@2 K L M@2 K L M@2 K L M@2 N O A B C@2 A B C@2 D F G H D F G H D F G H D
  E@3 N P Q N P K R S@2 N P K R S@2 N T D E@3 D E@3 D F G U@5 N P Q N P Q N P V@4 W@2
>`.pickRestart({
  A: "[b2,f#3,b3,e4]@2 [b2,f#3,b3,e4] [b2,f#3,b3,e4]@2 [b2,f#3,b3,e4]!3", B: "f#2 f#3 a3 [b3,e4]@2 [b3,e4] f#2 [b3,e4]",
  C: "[[e2,b2]@2 [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4]@2 [e3,b3,e4]!3]/2", // E5
  D: "b2 c#4 b3 [c#4,f#4]@5", // F#5
  E: "[f#2 [a3,b3] f#3 ~@5 [e2,b2,e3]@3 ~@5 e2 b3 e3 [b3,e4]@5, ~@3 [b3,e4]@8 e4@8 ~@5, ~@11 b3@6 ~@7]/3", // Asus2 E5
  F: "f#2 [a3,b3] f#3 [b3,e4]@5", G: "[e2,b2,e3]@3 [b3,e4]@5", H: "e2 b3 e3 [b3,e4]@5",
  I: "~ [a3,b3] f#3 [b3,e4]@5, f#2 ~@3", // Asus2 E5
  J: "[[e2,b2]!3 [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] ~ [e3,b3,e4], ~@7 [e2,b2]]/2", // E5
  K: "[b2,f#3,b3]@2 [b2,f#3,b3] [b3,e4]@2 [b3,e4] [b2,f#3,b3] [b3,e4]", // B5 E5 B5 E5
  L: "[c#3,f#3,a3] b3 a3 [b3,e4]@2 [b3,e4] [c#3,f#3,a3] [b3,e4]", // F#m E5 F#m E5
  M: "[[e2,b2]!3 [e3,b3,e4]@2 ~ [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4]@2 [e3,b3,e4] [e2,b2] [e3,b3,e4], ~@5 [e3,b3,e4]@2 ~@9]/2", // E5
  N: "[g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!6", O: "[a2,e3,a3,d4]@3 [a2,e3,a3,c#4]@3 f#3@2",
  P: "[a2,e3,a3,d4]!3 [a2,e3,a3,d4]@2 [a2,e3,a3,d4]!3", // Asus4
  Q: "[e2,b2,e3,g#3]@2 [e2,b2,e3,g#3] [g#3,b3,e4]@2 [g#3,b3,e4] [e2,b2,e3,g#3] [g#3,b3,e4]", // E
  R: "[g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4] [g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]!3", // G
  S: "[[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3] [e2,b2,e3,g#3]@2 [e2,b2,e3,g#3] [g#3,b3,e4]@2 [g#3,b3,e4] [f#2,d3,a3,d4] [e2,a2,d3,g3,b3], ~@7 [d4,f#4]@4 ~@5]/2", // D D5 E D Em7 D
  T: "[a2,e3,a3,d4]!3 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]!3", U: "[e2 b3 e3 [b3,e4]@37]/5", V: "b2 b3 f#3 [c#4,f#4]@5",
  W: "[[b2,f#3,b3]@3 e2@3 [f#3,c#4]@10]/2", // B5 F#5
})).s("gm_distortion_guitar").gain(0.64)

// bass · slap bass 2 · "Bass"
const bass = note(`<
  ~ A B C@2 A B C@2 D E F@2 G H F@2 G H F@2 G H F@2 A B C@2 A B C I A B C@2 J K A B C@2 A B C@2 G H F@2 G H F@2 G H F@2
  G H F@2 J K L J K M J N O J K M J N O J K D E F@2 G H F@2 G H F@2 A B C@2 J K O J K O J K P@4 Q@2
>`.pickRestart({
  A: "b1@2 b1 b1@2 b1!3", B: "f#1@2 f#1 f#1@2 f#1!3", C: "e2@2 e2 e2@2 e2!3", D: "b1@3 b1 b1@4", E: "f#1@3 f#1 f#1@4",
  F: "e2@3 e2 e2@3 ~", G: "b1@3 b1 b1@3 ~", H: "f#1@3 f#1 f#1@3 ~", I: "e2@2 e2 e2@2 e2!2 ~", J: "g1!8", K: "a1!8",
  L: "e2!8", M: "b1!8", N: "d2!8", O: "e1!8", P: "b1", Q: "[b1@3 e1@3 f#1@8 ~@2]/2",
})).s("gm_slap_bass_2").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@2 x ~ x ~@2]!36
  [x ~@2 x!2 ~@3]!2
  [x ~@2 x ~ x ~@2]!24
  [x ~@2 x!2 ~@3]!2
  [x ~@2 x ~ x ~@2]!44
  x
>`).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~ A@36 B@2 A@24 B@2 A@31 B@8 A@5 ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A@3 B C A@10 B ~@22 C A@2 B C A@6 B C A@2 B ~@17 C A@2 D C A@7 ~@12 C A@3 E ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7", D: "x!6 ~@2", E: "~@7 x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B@2 C A B@3 ~@3 D ~@11 D A B@6 C A B@5 A B@2 C A B@3 ~@3 D ~@7 D ~@3 D A B A@5 B A@4 B A@4 ~@3 D ~@8 A B@3 A@2 B A
  B A B A E ~@3 F ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!6 ~ x", D: "~@7 x", E: "x", F: "~ x!6 ~",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B A ~@3 A ~@3 A ~@11 A ~@2 B A ~@2 B A ~@5 A ~@2 B A ~@3 A ~@3 A ~@7 A ~@3 A ~ A@16 ~@2 B A ~@7 A ~@3 A@9 ~@3
  A@2
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.8)

stack(distortion_guitar, bass, kick, snare, hihat, open_hat, crash)

More by Foo Fighters