Strudelify

Monkey Wrench

Foo Fighters

KeyE majorTempo182 bpm
0:00/0:00
// Monkey Wrench — Foo Fighters
// 182.3 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 10, 4/4 at bar 10) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 94 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): grt 1.
setcpm(182.3/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 · "grt 1"
const distortion_guitar = note("<~@3 A ~@3 A ~@38 B ~@3 C ~@3 C ~@37 D@2>".pickRestart({
  A: "~@3 c#4", B: "e2@4 a3@3 ~", C: "~@2 c#4 ~", D: "[~@6 e2@4 a3@3 ~@3]/2",
})).s("gm_distortion_guitar").gain(0.8)

// chords · distortion guitar · "grt 2"
const distortion_guitar_2 = note(`<
  A B C D E B C D F ~@3 G ~@3 G ~@3 G ~@4 H ~ I ~ J K L@4 M@12 N O P Q N O P Q ~@4 R ~@3 R ~@3 R ~@3 S ~ T ~ U V W X Y Z
  AA AB AC AD AE AB AC AD AE AB AC AD AF
>`.pickRestart({
  A: "f3@2 [b3,e4,f#4]!2 [b3,e4]!2 [b3,d#4,e4]!2", B: "[b3,c#4,e4]!2 [b3,e4]!2 [b3,d#4,e4]!2 [b3,c#4,e4]!2",
  C: "[b3,e4]!2 [b3,c#4,e4]!2 [b3,e4]!2 [g#3,b3,e4]!2", D: "[b3,e4]!2 [b3,c#4,e4]!2 [b3,e4]!4, ~@3 d4",
  E: "[b3,c#4,e4] [b3,e4] [b3,e4,f#4]!2 [b3,e4]!2 [b3,d#4,e4]!2", F: "[b3,c#4,e4] [b3,e4] ~@6",
  G: "~@3 [d2,a2] [e2,b2] [d2,a2] [e2,b2] [d2,a2]", H: "a3!2 ~@6, a4 ~@3", I: "[f#4,a4] ~@3", J: "[a4,d#5] ~@3",
  K: "~ [e2,b2,e3] e2@4 [d3,g3,b3] [a2,d3]", // E5 G D5
  L: "[[b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]!2 [a2,d3] [d#3,g#3,d#4,g#4]@2 [d#4,g#4] [d#3,g#3,d#4,g#4]@2 [d#3,g#3,d#4,g#4]!2 [e2,a2] [f#3,c#4,f#4,a#4]@2 [e3,b3,e4] [e3,b3,e4,g#4]!4 d2 [f#3,c#4,f#4,a#4]@2 [e3,b3,e4,g#4]!2 [f#3,c#4,f#4,a#4]@2 [d3,g3,b3] [c3,g3,c4,g4]@2]/4", // B5 D5 G#5 A5 F# E5 E F# …
  M: "[~ d2 [b2,f#3,b3,f#4]@2 [b2,f#3,b3,f#4,b4] [f#3,b3,f#4,b4] [a2,d3] [d#3,g#3,d#4,g#4]@2 [d#3,g#3,d#4,g#4]!5 [d2,a2] [f#3,c#4,f#4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4,g#4]!2 [d2,a2] [f#3,c#4,f#4,a#4]@2 [e3,b3,e4,g#4]!2 [f#3,c#4,f#4,a#4]@2 [a2,d3] [c3,g3,c4,g4]@2]/4", // B5 D5 G#5 D5 F#5 E5 E D5 …
  N: "[b3,e4,f#4]!2 [b3,e4]!2 [b3,d#4,e4]!2 [b3,c#4,e4]!2", O: "[b3,e4]!2 [b3,d#4,e4]!2 [b3,c#4,e4]!2 [b3,e4]!2",
  P: "[b3,c#4,e4]!2 [b3,e4]!2 [g#3,b3,e4]!2 [b3,e4]!2", Q: "[b3,c#4,e4]!2 [b3,e4]!4 [b3,c#4,e4] [b3,e4], ~@2 d4 ~",
  R: "~ [d2,a2] [e2,b2] [d2,a2] [e2,b2] [d2,a2] ~@2", S: "~@6 a3!2, ~@3 a4", T: "~@3 [f#4,a4]", U: "~@3 [a4,d#5]",
  V: "~@7 [e2,b2,e3]", W: "e2@4 [d3,g3,b3] [a2,d3] [b2,f#3,b3]@2",
  X: "[b2,f#3,b3]@2 [b2,f#3,b3]!2 [a2,d3] [d#3,g#3,d#4,g#4]@2 [d#4,g#4]", // B5 D5 G#5
  Y: "[d#3,g#3,d#4,g#4]@2 [d#3,g#3,d#4,g#4]!2 [e2,a2] [f#3,c#4,f#4,a#4]@2 [e3,b3,e4]", // G#5 A5 F# E5
  Z: "[e3,b3,e4,g#4]!4 d2 [f#3,c#4,f#4,a#4]@2 [e3,b3,e4,g#4]", // E F# E
  AA: "[e3,b3,e4,g#4] [f#3,c#4,f#4,a#4]@2 [d3,g3,b3] [c3,g3,c4,g4]@2 ~ d2", // E F# G C5
  AB: "[b2,f#3,b3,f#4]@2 [b2,f#3,b3,f#4,b4] [f#3,b3,f#4,b4] [a2,d3] [d#3,g#3,d#4,g#4]@2 [d#3,g#3,d#4,g#4]", // B5 D5 G#5
  AC: "[d#3,g#3,d#4,g#4]!4 [d2,a2] [f#3,c#4,f#4]@2 [e3,b3,e4]", // G#5 D5 F#5 E5
  AD: "[e3,b3,e4]@2 [e3,b3,e4,g#4]!2 [d2,a2] [f#3,c#4,f#4,a#4]@2 [e3,b3,e4,g#4]", // E5 E D5 F# E
  AE: "[e3,b3,e4,g#4] [f#3,c#4,f#4,a#4]@2 [a2,d3] [c3,g3,c4,g4]@2 ~ d2", // E F# D5 C5
  AF: "[e3,b3,e4,g#4] [f#3,c#4,f#4,a#4]@2 [a2,d3] [c3,g3,c4,g4]@2 ~@2", // E F# D5 C5
})).s("gm_distortion_guitar").gain(0.8)

// chords · distortion guitar · "grt 3"
const distortion_guitar_3 = note(`<
  A B C D E B C D F G H I J G H I J G H I J G H I K L@2 M@2 N@2 O@4 P@12 Q H I R Q H I R ~ S T U V S T U V S T U V S T U
  W X Y X Z X AA AB AC AD AE AF AG AD AH AF AG AD AH AF AG AD AI
>`.pickRestart({
  A: "[d3,f3]@2 [b2,f#3,b3]!6", B: "[b2,f#3,b3]!7 [f#2,c#3,f#3]", C: "[f#2,c#3,f#3]!3 [e2,b2,e3]!5",
  D: "[e2,b2,e3]!5 [d2,a2,d3] [e2,b2,e3] [d2,a2,d3]", E: "[e2,b2,e3] [d2,a2,e3] [b2,f#3,b3]!6",
  F: "[e2,b2,e3] [d2,a2,e3] ~@6", G: "~@2 [b2,f#3,b3,f#4]@2 [b2,f#3,b3]!4", H: "[b2,f#3,b3]!5 [f#2,c#3,f#3]!3",
  I: "[f#2,c#3,f#3] [e2,b2,e3]!7", J: "[e2,b2,e3]!3 d2 e2 d2 e2 d2",
  K: "[e2,b2,e3]!3 [d2,a2] [e2,b2] [d2,a2] [e2,b2] [d2,a2]", // E5 D5 E5 D5 E5 D5
  L: "[a3!2 [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3], a4 ~@7]/2", // E5 D5 E5 D5 E5 D5 E5 D5
  M: "[[f#4,a4]@2 [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3]]/2", // F#m E5 D5 E5 D5 E5 D5 E5 …
  N: "[[a4,d#5]@2 [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3]]/2", // Adim E5 D5 E5 D5 E5 D5 E5 …
  O: "[[b2,f#3,b3]@4 [b2,f#3,b3]@4 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [a2,d3,g3]@2 [g#2,d#3,g#3]@5 ~ [g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 [g#2,d#3,g#3]@2 [a2,d3]@2 [f#2,c#3,f#3]@4 [e2,b2,e3]@2 [e2,b2,e3]@4 [e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [f#2,c#3,f#3]@4 [e2,b2,e3]@2 [e2,b2,e3]@2 [f#2,c#3,f#3]@4 [d2,a2,e3,g3]@2 [c3,g3,c4]@4]/4", // B5 Dsus4 G#5 D5 F#5 E5 F#5 E5 …
  P: "[[d3,g3,b3] [d2,a2,d3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [d3,g3] [g#2,d#3,g#3]@2 [g#2,d#3,g#3] [g#2,d#3,g#3]@2 [g#2,d#3,g#3]!2 [a2,d3,g3] [f#2,c#3,f#3]@2 [e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3]!3 [f#2,c#3,f#3]@2 [e2,b2,e3]!2 [f#2,c#3,f#3]@2 [g3,b3] [c3,g3,c4]@2]/4", // G D5 B5 G5 G#5 Dsus4 F#5 E5 …
  Q: "[b2,f#3,b3]!8", R: "[e2,b2,e3]!3 [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,e3]",
  S: "[b2,f#3,b3,f#4]@2 [b2,f#3,b3]!6", T: "[b2,f#3,b3]!3 [f#2,c#3,f#3]!4 [e2,b2,e3]", U: "[e2,b2,e3]!8",
  V: "[e2,b2,e3] d2 e2 d2 e2 d2 ~@2", W: "[e2,b2,e3] [d2,a2] [e2,b2] [d2,a2] [e2,b2] [d2,a2] a3!2, ~@3 a4",
  X: "[e2,b2,e3]@2 [e2,b2,e3]!2 [d2,a2,d3] [e2,b2,e3]@2 [e2,b2,e3]", // E5 D5 E5
  Y: "[e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [f#4,a4]@2", // E5 D5 E5 D5 E5 D5 F#m
  Z: "[e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [a4,d#5]@2", // E5 D5 E5 D5 E5 D5 Adim
  AA: "[e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [e2,b2,e3] [d2,a2,d3] [b2,f#3,b3]@2", // E5 D5 E5 D5 E5 D5 B5
  AB: "[b2,f#3,b3]@4 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [a2,d3,g3]@2 [g#2,d#3,g#3]@5 ~", // B5 Dsus4 G#5
  AC: "[g#2,d#3,g#3]@2 [g#2,d#3,g#3]!2 [a2,d3] [f#2,c#3,f#3]@2 [e2,b2,e3]", // G#5 D5 F#5 E5
  AD: "[e2,b2,e3]@2 [e2,b2,e3]!3 [f#2,c#3,f#3]@2 [e2,b2,e3]", // E5 F#5 E5
  AE: "[e2,b2,e3] [f#2,c#3,f#3]@2 [d2,a2,e3,g3] [c3,g3,c4]@2 [d3,g3,b3] [d2,a2,d3]", // E5 F#5 Dsus4 C5 G D5
  AF: "[b2,f#3,b3]@2 [b2,f#3,b3]!2 [d3,g3] [g#2,d#3,g#3]@2 [g#2,d#3,g#3]", // B5 G5 G#5
  AG: "[g#2,d#3,g#3]@2 [g#2,d#3,g#3]!2 [a2,d3,g3] [f#2,c#3,f#3]@2 [e2,b2,e3]", // G#5 Dsus4 F#5 E5
  AH: "[e2,b2,e3] [f#2,c#3,f#3]@2 [g3,b3] [c3,g3,c4]@2 [d3,g3,b3] [d2,a2,d3]", // E5 F#5 G C5 G D5
  AI: "[e2,b2,e3] [f#2,c#3,f#3]@2 [g3,b3] [c3,g3,c4]@2 ~@2", // E5 F#5 G C5
})).s("gm_distortion_guitar").gain(0.8)

// bass · electric bass pick · "bass"
const bass = note(`<
  A B C D E B C D F G H I J G H I J G H I J G H I J K@4 L@2 M@16 N H I J N H I J ~ O P Q R O P Q R O P Q R O P Q R S@4 T
  U V W X Y V W X Y V W X Y V W X Z
>`.pickRestart({
  A: "~@2 b1!6", B: "b1!7 f#2", C: "f#2!3 e2!5", D: "e2!5 d2 e2 d2", E: "e2 d2 b1!6", F: "e2 d2 ~@6",
  G: "~@2 b1@2 b1!4", H: "b1!5 f#2!3", I: "f#2 e2!7", J: "e2!3 d2 e2 d2 e2 d2",
  K: "[~@2 e1@2 e1!2 d1 e1@2 e1@2 d1 e1 d1 e1 d1]/2", L: "[~@2 e1@2 e1!2 d1 e1@2 e1!2 d1 e1 d1 e1 d1]/2",
  M: "[b1@4 b1@4 d2@2 d#2@2 f2@2 g#2@4 g#2@2 g#2@2 f#2@2 g#2@2 f#2@3 ~ f#2@4 e2@2 e2@4 e2@2 e2@2 e2@2 f#2@4 e2@2 e2@2 f#2@4 e2@2 c2@4]/4",
  N: "b1!8", O: "b1@2 b1!6", P: "b1!3 f#2!4 e2", Q: "e2!8", R: "e2 d2 e2 d2 e2 d2 ~@2",
  S: "[e1@2 e1!2 d1 e1@2 e1@2 d1 e1 d1 e1 d1 ~@2]/2", T: "e1@2 e1!2 d1 e1@2 e1", U: "e1 d1 e1 d1 e1 d1 b1@2",
  V: "b1@2 d2 d#2 f2 g#2@2 g#2", W: "g#2@2 f#2@2 g#2@2 f#2@3 ~ f#2@4 e2@2", X: "e2@2 e2!3 f#2@2 e2",
  Y: "e2 f#2@2 e2 c2@2 b1@2", Z: "e2 f#2@2 e2 c2@2 ~@2",
})).s("gm_electric_bass_pick").gain(0.8)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B C@2 D B C@2 D B C@2 D B C E ~@30 F ~ G C@2 H G C@2 H G C@2 H G C I ~@23
>`.pickRestart({
  A: "~ x ~@6", B: "~@4 x!4", C: "x!8", D: "x!4 ~ x ~ x", E: "x!4 ~@4", F: "~@7 x", G: "~@2 x!6", H: "x!2 ~ x ~ x ~@2",
  I: "x!2 ~@6",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<A B@7 C ~@14 D E D F D F D E ~@16 B@7 G ~@15 H C H I H I H C ~@16>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x", D: "~@2 x!2", E: "x!2 ~@2", F: "x!4", G: "x!7 ~", H: "~ x!3", I: "x!3 ~",
})).gain(0.72)

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

stack(distortion_guitar, distortion_guitar_2, distortion_guitar_3, bass, kick, snare, hihat, open_hat, splash)

More by Foo Fighters