Strudelify

The Fly

U2

KeyE majorTempo115 bpm
0:00/0:00
// The Fly — U2
// 115 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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
const distortion_guitar = note(`<
  ~@8 A@8 B@8 ~@4 C@4 ~@8 D@4 E@4 F@4 ~@8 D@4 G@4 H@4 I@5 J K L@5 M@2 N@6 O@8 P Q R S Q T U V D@4 ~@4 C@4
>`.pickRestart({
  A: "[~@3 d5@57 ~@4]/8", B: "[~@31 g4@33, [b2,e3]]/8", C: "[d5@63 ~]/4", D: "[b2,e3]/4", E: "[~@15 g4@49]/4",
  F: "[b4,d5,e5]/4", G: "[c#3,g#3]!5 ~ [c#3,g#3]!2 ~ [c#3,g#3]!2 ~ [b2,f#3]@2 [c#3,g#3] ~",
  H: "[e5@21 e5 ~ g5 f#5@2 d5 c#5 ~ d5 e5 ~@5 f#4@28, ~@31 b4@33]/4",
  I: "[~ a4@2 g4 e4@2 ~ g4@2 e4@7 d4 e4 b3@14 d4 e4 g4 f#4 ~ d4 e4 a4@3 g4@3 b4@16 d5@2 e5@15 d5 e5, d5@61 ~@19, ~@3 a4 ~@36]/5",
  J: "~ f#5@2 d5 e5@12, g5 ~@7", K: "d5@2 c#5@2 ~@2 a4@7 f#4 a4 ~, ~@5 b4@2 ~@9",
  L: "[b4 a4 f#4 a4@11 b4 g#4@6 ~@9 g#4@33 a4@2 ~ b4@2 c#5 ~ b4 d5@5 ~ b4@3, ~@15 a4 ~@5 c#5@42 ~@2 c#5@2 ~@9 c#5@2 ~@2]/5",
  M: "[~ e5@18 d#5@2 c#5@11]/2", N: "[~@3 b4@2 g#4@4 ~ f#4@2 g#4@84]/6", O: "[c#5@125 ~@3]/8",
  P: "e5@3 d#5@3 c#5@3 b4@2 g#4@2 ~ b4@2", Q: "e5@3 d#5@3 c#5@3 b4@2 ~ g#4@2 b4@2",
  R: "e5@3 ~ d5 c#5@4 a4@3 [g4,g#4] ~ a4@2, ~@3 d#5@2 ~@11", S: "e5@3 d#5@2 c#5@4 a4@3 g#4@2 a4@2",
  T: "e5@2 d#5@3 ~ c#5@3 b4@2 g#4@2 b4@2 ~", U: "e5@3 d#5@3 c#5@4 a4@2 g#4@2 a4@2",
  V: "e5@3 d#5@3 c#5@3 a4@2 ~ g#4@2 a4@2",
})).s("gm_distortion_guitar").gain(0.4).pan(0.6)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A B A B A B A B A B A B A B A C ~@8 A C A C A C A C ~@8 D@2 E@2 A C A C A C A C ~@8 D@2 E@2 F G H@2 A C A C A C A C I
  J K L M N O P Q@3 R S T@2 U@3 V@3 W X Y@3 Z@4 AA@2 D@2 E@2 A C A C A C A AB
>`.pickRestart({
  A: "e2@2 [b2,e3] ~ [b2,e3]@2 d3 [b2,e3] ~ [b2,d3] [b2,e3] ~ e3@2 d3@2, ~@3 b2", // E5 Bm E5
  B: "e2@2 [b2,e3] ~ [b2,e3]@2 d3 [b2,e3] ~@2 e3 ~ [b2,e3]@2 d3 ~, ~@9 [b2,d3]@2 ~@5", // E5 Bm
  C: "e2@2 [b2,e3] ~ [b2,e3]@2 d3 [b2,e3] ~@2 e3 ~ e3@2 d3@2, ~@9 [b2,d3]@2 ~ b2@4", // E5 Bm
  D: "[~@8 [e3,b3,e4]!3 [e3,b3,e4]@19 ~@2, ~@11 d4 ~@20]/2", E: "[[d5,e5]@2 d5 b4@29]/2",
  F: "[g#3,c#4]!5 ~ [g#3,c#4]!2 ~ g#3 [g#3,c#4]@2 [g#3,c#4] ~ [g#3,c#4] ~", // C#5
  G: "[g#3,c#4]!5 ~ [g#3,c#4]!2 ~ [g#3,c#4]!2 ~ [g#3,c#4] ~ [g#3,c#4] ~", // C#5
  H: "[g#3,c#4]!4 [g#3,c#4]@2 [g#3,c#4]!2 ~ [g#3,c#4]!2 ~ [g#3,c#4] ~ [g#3,c#4] ~", // C#5
  I: "[c#3,e3] ~ [c#3,e3] [c#3,e3]@2 ~ [c#3,d3] [c#3,e3] ~ [c#3,d3,e3] e3 ~ [c#3,e3]@2 d3 ~", // C#m Dmaj7 C#m
  J: "[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~ [c#3,d3] e3 ~ [c#3,e3]@2 d3 ~", // C#m Dmaj7 C#m
  K: "[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 [d3,e3] ~ e3@2 d3 ~, ~@9 [c#3,e3]@2 ~ c#3@4", // C#m Dsus2 C#m
  L: "e3 ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3] ~ [c#3,d3,e3] ~@2 e3@2 d3 ~, ~@4 e3 ~@7 c#3@4", // C#m
  M: "[c#3,e3] ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~, ~@4 e3 ~@4 [c#3,d3]@2 ~@5", // C#m Dmaj7
  N: "[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 e3 ~@2 d3 ~@2, ~@9 [c#3,d3]@2 ~ [c#3,e3]@3 ~", // C#m Dmaj7 C#m
  O: "[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~, ~@9 [c#3,d3]@2 ~@5", // C#m Dmaj7
  P: "[c#3,e3] ~ [c#3,e3] ~ e3 [c#3,d3] ~ [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~, ~@3 c#3@2 ~@4 [c#3,d3]@2 ~@5", // C#m Dmaj7 C#m Dmaj7
  Q: "[[c#3,e3] ~ [c#3,e3] [c#3,e3]@2 ~ [c#3,d3] [c#3,e3] e3 [c#3,d3,e3,f#3] e3 g#3 b3 c#4 d3 ~ [c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~ [c#3,d3] e3 ~ [c#3,e3]@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 [d3,e3] ~ e3@2 d3 ~, ~@4 [c#3,e3] b3@11, ~@41 [c#3,e3]@2 ~ c#3@4]/3", // C#m Dmaj7 C#m Dmaj7 C#m Dmaj7 C#m Dsus2 …
  R: "e3 a3 [c#3,e3] b3 [e3,g#3] a3 d3 [c#3,e3,f#3] g#3 [c#3,d3,e3] f#3 ~ g#3 a3 [d3,b3]@2, ~@4 c#3@3 ~@5 c#3@4, ~@6 e3 ~", // C#m E F#7 C#m G
  S: "[c#3,e3] ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~, c#4, ~@4 e3 ~@4 [c#3,d3]@2 ~@5", // C#m Dmaj7
  T: "[[c#3,e3] ~ [c#3,e3,e4] ~ d#4 c#4 d3 [c#3,e3,f#4] ~ d3 e3 ~@2 d3 ~@2 [c#3,e3] ~ [c#3,e3,f#4] g#4 ~ f#4 ~ [c#3,e3] g#4 ~ e3 ~ [c#3,e3]@2 d3 ~, ~ d#4@2 ~ [c#3,e3]@3 ~@2 g#4@9 ~@4 [d3,c#4]@2 g4@7 ~, ~@9 c#3@2 ~ [c#3,e3]@3 ~@5 [c#3,e3]@3 ~@2 [c#3,d3]@2 ~@5]/2", // C#m F#7 C#m F#7 C#m Dmaj7 C#m Dmaj7
  U: "[[c#3,e3,g#4] ~ [c#3,e3] ~ e3 [c#3,d3,f#4] ~ [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~ [c#3,e3] ~ [c#3,e3] [c#3,e3]@2 ~ [c#3,d3] [c#3,e3] ~ [c#3,d3,e3] e3 ~@2 e4 d3 ~ [c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~ [c#3,d3] e3 ~ [c#3,e3]@2 [d3,f#4] ~, ~ a4@2 [c#3,g#4]@2 ~ e4@2 f#4@22 ~ g#4@16 ~, ~@9 [c#3,d3]@2 ~@17 [c#3,e3]@3 ~@17]/3", // C#m Dmaj7 C#m Dmaj7 C#m Dmaj7 C#m D …
  V: "[[c#3,e3,f#4] e4 [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 [d3,e3] ~ e3@2 d3 ~ e3 ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3] ~ [c#3,d3,e3] ~@2 e3@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3] ~ d3 e3 ~ [c#3,e3,e4]@2 [d3,f#4] ~, ~@2 c#5@33 b4@2 ~ g#4@4 ~@6, ~@9 [c#3,e3]@2 ~ c#3@5 ~@3 e3 ~@7 c#3@4 ~@4 e3 ~@4 [c#3,f#4]@3 ~@4]/3", // F#7 C#m Dsus2 C#m D C#m F#5
  W: "[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 [e3,f#4]@2 ~ d3 f#4@2, c#5@2 ~ b4@3 g#4@3 [c#3,d3]@2 ~ [c#3,e3,e4]@2 ~@2", // C#m Esus2 Dmaj7 C#m
  X: "[c#3,e3,e4] ~ [c#3,e3,c#4] ~ [c#3,e3,e4]@2 d3 [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 a3, ~@6 c#4@9 ~, ~@9 [c#3,d3]@2 ~@5", // C#m Dmaj7
  Y: "[[c#3,e3,b3] ~ [c#3,e3,c#4] [c#3,d4,e4] e3 [c#3,d3,f#4] a4 [c#3,e3] b4 [c#3,d3,c#5] e3 e5 [c#3,e3]@2 [d3,a5] ~ [c#3,e3] ~ [c#3,e3] [c#3,e3]@2 ~ [c#3,d3] [c#3,e3] ~ [c#3,d3,e3] e3 ~ [c#3,e3]@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~ [c#3,d3,g#3] [e3,a3] ~ [b3,c4] c#4 [d3,d4] ~, ~@12 f#5 ~@2 g#5@23 ~@6 [c#3,e3]@3 ~]/3", // C#m7 C#m Dmaj7 C#m Dmaj7 C#m D5 C#m …
  Z: "[[c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 [d3,b3] [c#3,e3,c#4] ~@2 [d3,e3] ~ e3@2 d3 ~ e3 ~ [c#3,e3] ~ c#3@2 d3 [c#3,e3,b3] ~ [c#3,d3,e3] e4@2 ~@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ c#3@2 [d3,f#4] [c#3,e3,e4] ~@2 e3 ~ [c#3,e3]@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ [c#3,e3]@2 d3 [c#3,e3] ~@2 e3 ~@2 d3 ~@2, c#4@6 ~@2 a3@16 c#4@2 ~@2 e3@2 ~@6 e3 ~@27, ~@9 [c#3,e3]@2 ~ c#3@5 ~@3 e3 ~@7 c#3@4 ~@9 [c#3,d3]@2 ~@14 [c#3,d3]@2 ~ [c#3,e3]@3 ~, ~@29 f#4@2 g#4@6 ~@3 c#4@23 ~]/4", // C#m G C#m Dsus2 C#m C#m7 C#m D …
  AA: "[[c#3,e3,a3] b3 [c#3,e3,c#4] ~ d4 c#4 d3 [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~ [c#3,e3] ~ [c#3,e3] ~ e3 [c#3,d3] ~ [c#3,e3] ~@2 e3 ~ [c#3,e3]@2 d3 ~, ~@4 [c#3,e3]@3 e4@24 ~, ~@9 [c#3,d3]@2 ~@8 c#3@2 ~@4 [c#3,d3]@2 ~@5]/2", // A C#m Dmaj7 C#m Dmaj7
  AB: "e2@2 [b2,e3] ~ [b2,e3]@2 d3 ~@9", // E5
})).s("gm_distortion_guitar").gain(0.4).pan(0.4)

// chords · drawbar organ
const drawbar_organ = note("<~@32 A@8 B@4 ~@8 C@8 B@4 ~@12 A@32 B@4 ~@8>".pickRestart({
  A: "[g#4@31 ~ a4@31 ~ g#4@32 a4@31 ~, [c#4,e4]@127 ~]/8", B: "[b3,e4,b4]/4",
  C: "[g#4@31 ~ a4@32 g#4@32 a4@31 ~, [c#4,e4]@127 ~]/8", // C#m
})).s("gm_drawbar_organ").gain(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@11 A B@4 C@7 D C@7 D E F G H I J K L M N O P C@7 D E F Q H I J K L M@2 R N S T U T C@7 D E F Q H I J K L E F Q H I J
  K L E F Q H I J K L E F Q H I J K L M@2 R N C@7 V
>`.pickRestart({
  A: "~@9 e2 d2 b1 a1 g1 f#1 e1", B: "e1 ~ e1 ~ e1@2 ~ e1 ~ e1 ~@2 e1@2 ~@2",
  C: "e1 ~ e1 ~ e1@2 ~ e1 ~ e1 ~@2 e1@2 d1 ~", D: "e1 ~ e1 ~ e1@2 ~ e1 ~ e1 ~@2 e1@2 d1@2",
  E: "c#1 ~ c#1 ~ c#1@2 ~ c#1 ~ c#1!2 ~ c#1@2 d1@2", F: "e1 ~ e1 ~ e1@2 ~ e1 ~ e1!2 ~ e1@2 f#1 ~",
  G: "a1 ~ a1 ~ a1@2 ~ a1 ~ a1!2 ~ a1@2 g1 ~", H: "f#1 ~ f#1 ~ f#1@2 ~ f#1 ~ f#1!2 ~ f#1 ~ e1 ~",
  I: "c#1 ~ c#1 ~ c#1@2 ~ c#1 ~ c#1!2 ~ c#1 ~ [d1,e1] ~", J: "e1 ~ e1 ~ e1@2 ~ e1 ~ e1!2 ~ e1@2 d1@2",
  K: "a1 ~ a1 ~ a1@2 ~ a1 ~ a1!2 ~ a1 ~ f#1 ~", L: "a1 ~ a1 ~ a1@2 ~ a1 ~ a1!2 ~ a1@2 f#1 ~",
  M: "e2@2 e1 ~ e1@2 ~ e1 ~ e1!2 ~ [e1,g1]@2 a1@2, e1 ~@2 d2@3 b1@3 a1@2 ~@3 d1 ~", // Em
  N: "e2@2 e1 ~ e1@2 ~ e1 ~ e1 a1@2 [e1,g1]@2 a1@2, e1 ~@2 d2@3 b1@3 ~ e1 ~@3 d1 ~", // Em
  O: "e2@2 e1 ~ e1@2 ~ e1 ~ e1!2 ~ e1@2 a1@2, e1 ~@2 d2@2 ~ b1@3 a1@2 g1@2 ~ d1 ~",
  P: "e2@2 e1 ~ e1@2 a1 e1 ~ e1!2 ~ [e1,g1]@2 a1@2, e1 ~@2 d2@3 b1@3 a1@2 ~@3 d1 ~", // Em
  Q: "a1 ~ a1 ~ a1@2 ~ a1 ~ a1!2 ~ a1 ~ g1 ~",
  R: "e2@2 e1 ~ e1@2 ~ e1 ~ e1!2 ~ [e1,g1]@2 a1@2, e1 ~@2 d2@2 ~ b1@3 a1@2 ~@3 d1 ~", // Em
  S: "c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2 ~@2 b1@2 c#2 ~", T: "c#2@2 ~ c#2@2 ~ c#2@2 ~ c#2@2 ~ b1@2 c#2 ~",
  U: "c#2 ~@2 c#2@2 ~ c#2@2 ~ c#2@2 ~ b1@2 c#2 ~", V: "e1 ~ e1 ~ e1@2 ~@10",
})).s("gm_electric_bass_finger").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~ x ~@4 x!2 ~ x ~@3 x ~]!117 [x!2 ~@6]>").gain(0.5)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@10 B A@3 B A@7 B A@7 B A@7 B A@3 B A@7 B A@7 B A@3 B A@3 B A@7 B A@7 B A@7 B A@7 B A@7 B A@3 B A@6 C
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x!4 ~@4",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@67 [~@7 x] ~@52>").gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@67 [~@13 x ~@2] ~@52>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [~ x ~@2 x ~@4 x ~@6]!107 [~ x ~@2 x ~@11]>").gain(0.4)

stack(
  distortion_guitar, distortion_guitar_2, drawbar_organ, bass, kick, snare, hihat, mid_tom, high_tom, crash, tambourine
)

More by U2