Strudelify
Elevation cover art

All That You Can't Leave Behind

Elevation

U2

KeyE majorTempo108 bpm
0:00/0:00
// Elevation — U2
// 108 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(108/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.

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

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 B@2 ~ A ~ A ~ A ~ A ~@17 C
>`.pickRestart({
  A: "g#4 g#4@2 g#4@2 g#4@2 ~", B: "[[a2,e3]@7 ~]/2", C: "~@8 [e2,e3,b3]@3 ~@5",
})).s("gm_distortion_guitar").gain(0.35).pan(0.9)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@18 A ~ A ~ A ~ A ~@18
>`.pickRestart({
  A: "~@7 g#4",
})).s("gm_distortion_guitar").gain(0.2).pan(0.9)

// other · tenor sax
const tenor_sax = note(`<
  ~@3 A ~@8 B C D E F G H I J K L M N O P Q ~@3 R B S T U V W X Y Z AA L M N O P Q ~@7 R AB AC AD AE AF@2 AG@2 AH Z AA L
  M N O P Q ~@7 AI ~@3 AJ AK ~@2 AL AM@2
>`.pickRestart({
  A: "g5@3 ~ g5@3 ~ g5@3 ~ e5@2 ~@2", B: "e5@3 ~@5 d5 ~ d5 ~ d5 ~ d5@2", C: "e5@3 ~@3 d5 ~ d5 ~ d5 ~ d5 ~ d5@2",
  D: "e5@2 ~@4 d5 ~ e5@2 d5 ~ b4 ~@3", E: "e5@2 e5@3 ~ e5@3 ~ e5@4 d5@2", F: "~@6 d5 ~ d5 ~ d5 ~ d5 ~ d5@2",
  G: "e5 ~@5 d5!3 ~ d5 ~ d5 ~ d5@2", H: "e5 ~@5 d5@2 e5@2 ~@4 d5@2", I: "e5@2 e5@2 ~@2 e5@2 ~@2 e5@3 ~@3",
  J: "g5@3 ~@3 d5@2 d5 ~ e5 ~ e5 ~ e5@2", K: "g5@2 ~@4 d5 ~ d5@2 e5 ~ e5 ~ e5 ~",
  L: "g5@2 ~@2 e5@2 ~@2 d5@2 e5 ~ e5@2 ~@2", M: "g5@2 ~@2 e5@2 g5@4 e5@2 ~@2 g5 ~",
  N: "~@2 e5 ~ e5@2 ~@2 d5@2 e5@3 ~ e5 ~", O: "~@2 e5 ~ e5 ~ e5 ~ g5 ~ e5 ~ e5@2 d5@2", P: "e5 ~@5 g5@2 e5@2 ~@6",
  Q: "g5 ~@3 g5 ~@3 g5 ~@3 g5@2 ~@2", R: "g5 ~@3 g5 ~@3 g5 ~@3 e5@2 ~@2", S: "e5@3 ~@3 b4 ~ d5 ~ d5 ~ d5 ~ d5@2",
  T: "e5 ~@3 e5!2 d5 b4", U: "e5 ~ e5@3 ~ e5 ~@3 e5@4 d5@2", V: "~@6 b4 ~ d5 ~ d5 ~ d5 ~ d5@2",
  W: "e5 ~@5 b4 ~ d5 ~ d5!2 ~ d5@2 e5", X: "~@3 d5 e5 ~@2 d5", Y: "e5@2 e5@2 ~@2 e5@2 ~@2 e5@3 ~ e5@2",
  Z: "g5@3 ~@5 d5 ~ e5 ~ e5 ~ e5@2", AA: "g5@2 ~@6 d5@2 e5 ~ e5 ~ e5 ~", AB: "g#4@9 ~@7", AC: "~@8 g#4 ~ g#4@3 ~ a4@2",
  AD: "~@2 a4@5 ~ a4@2 g#4@4 a4@2", AE: "~@12 a4 ~ a4 ~", AF: "[a4@3 ~ g#4@2 f#4@4 e4@4 f#4@5 ~@9 e4@2 e4@2]/2",
  AG: "[f#4@9 ~ f#4@4 e4@13 ~@5]/2", AH: "~@7 e5", AI: "~ g5 e5 g5@2 g5 ~@2", AJ: "~@14 g5!2", AK: "g5 e5 ~@6",
  AL: "g5@3 ~ g5@3 ~ g5@4 e5@2 ~@2", AM: "[~@12 g5!2 ~ g5@2 e5@6 ~@9]/2",
})).s("gm_tenor_sax").gain(0.29)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@4 A@7 B C D C D C D C D C D C D C D C D A@3 B C D C D C D C D C D C D C D C D A@7 B E@2 ~@7 C D C D C D C D F G F G
  F H I J K A@6 B L@2
>`.pickRestart({
  A: "[e2,e3,b3,e4,g#4]@3 [e2,e3] [e2,e3,b3,e4,g#4]@2 [e2,e3] [a2,a3,e4,a4]@2 [a2,e4,a4] [a2,a3,e4,a4]@3 [a2,e4,a4] [a2,a3,e4,a4]@2", // E A5
  B: "[b2,f#3,b3,f#4,b4]@3 [b2,f#3] [b2,f#3,b3,f#4,b4]@2 [b2,f#3] [b2,b3,f#4,b4]@2 [b2,f#4,b4] [a2,a3,e4,a4]@2 [a2,a3,e4,a4]@3 [a2,e4,a4]", // B5 A5
  C: "[b2,f#3]@7 ~ [a2,e3]@8", D: "[b3,e4] ~@7, e2@7 ~", E: "[e3,b3]/2", F: "e3!8 [d#3,e3] d#3!7",
  G: "[d3,d#3] d3!7 d3@7 ~", H: "[d3,d#3] d3!7 [c#3,d3] c#3!7", I: "[c3,c#3] c3!3 [b2,c3] b2!7 [g2,b2] g2!3",
  J: "[g2,a2,e3] [a2,e3]!3 [a2,e3]@12", // A7 A5
  K: "[e2,b3,e4,g#4]@3 [e2,e3] [e2,e3,b3,e4,g#4]@2 [e2,e3] [a2,a3,e4,a4]@2 [a2,e4,a4] [a2,a3,e4,a4]@3 [a2,e4,a4] [a2,a3,e4,a4]@2, e3 ~@15", // E A5
  L: "[[e2,e3,b3,e4,g#4]@24 ~ [e2,e3,b3]@2 ~@5]/2", // E E5
})).s("gm_distortion_guitar").gain(0.3).pan(0.1)

// chords · distortion guitar · soft notes
const distortion_guitar_soft_2 = note(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@18 A ~ A ~ A ~ A ~@18
>`.pickRestart({
  A: "~ [b3,e4]@2 [b3,e4]@2 [b3,e4]@2 [b3,e4]", // E5
})).s("gm_distortion_guitar").gain(0.2).pan(0.1)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@12 A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B C B A B ~@43
>`.pickRestart({
  A: "b2@4 b2@3 b2 a2@2 a2@4 a2@2", B: "e2 e2@2 e2@5", C: "b2@4 b2@3 ~ [a2,b2]@2 a2@4 a2@2",
})).s("gm_electric_guitar_muted").gain(0.56).pan(0.6)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@56 A@2 B@2 C D@2 E@2 F G F G H G F G ~@18>".pickRestart({
  A: "[~@10 b3@17 ~@5, e2@27 ~@5, ~@2 e3@25 ~@5, ~ g#3@6 ~, ~@6 e4@21 ~@5]/2",
  B: "[~@9 c#4@7, a2@15 ~, ~@2 c#4@11 ~ d4@16 ~@2, ~@4 e4@5 ~ e4@20 ~@2, ~@3 a4@12 ~]/2",
  C: "~@5 b3@3, e2@15 ~, ~ e3@7, ~ g#3@3, ~@3 e4@5",
  D: "[~@5 f#4@4 ~@4 a4@3, d3@17 ~@15, ~ f#4@4 ~@4 f#4@4 ~@3, ~@4 a4@5 ~@11 a4@5 ~@7, ~@6 d5@15 ~ d5@10]/2",
  E: "[~@5 e4@10 ~, a2@15 ~, ~ c#4@11 ~@4, ~@4 e4@5 ~@23, ~@3 a4@12 ~]/2", F: "b2@4 b2@3 b2 a2@2 a2@4 a2@2",
  G: "e2 e2@2 e2@5", H: "b2@4 b2@3 ~ [a2,b2]@2 a2@4 a2@2",
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.6)

// other · taiko drum
const taiko_drum = note(`<
  [a#5@2 ~ a#5 a#7@2 a#5@2 ~ a#7 ~@2 a#7@2 ~ a#7]
  [a#5@2 ~ a#5 a#7@2 a#5@2 a#7!2 ~@2 a#7@2 ~ a#7]
  [a#5@2 ~ a#5 a#7@2 a#5@2 ~ a#7 ~@2 a#7@2 ~ a#7]!2
  ~@87
>`).s("gm_taiko_drum").gain(0.3)

// other · taiko drum · soft notes
const taiko_drum_soft = note(`<
  [~@8 a#7 ~ a#5@2 ~@4]
  [~@5 a#5 ~@2]
  [~@8 a#7 ~ a#5@2 ~@4]!2
  ~@58
  [g#1 ~@3 g#1 ~@3 g#1 ~@3 g#1 ~@3]!3
  ~@26
>`).s("gm_taiko_drum").gain(0.2)

// chords · percussive organ
const percussive_organ = note("<~@20 A B A B A B A B ~@12 A B A B A B A B ~@17 A B A B A B A B ~@18>".pickRestart({
  A: "e7@4 e7@3 ~ d7@2 e7@2 d7@2 e7@2, b2 a2", B: "e7@8 d7@2 e7@5 ~, [e2,b6]@15 ~",
})).s("gm_percussive_organ").gain(0.24)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@20 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@18 A ~ A ~ A ~ A ~@19>".pickRestart({
  A: "b6@15 ~",
})).s("gm_percussive_organ").gain(0.14)

// other · dulcimer
const dulcimer = note("<~@57 A ~ B ~ A ~ B ~@27>".pickRestart({
  A: "b4 ~@7", B: "b4 ~@15",
})).s("gm_dulcimer").gain(0.39)

// bass · bandoneon
const bass_2 = note("<[e1 e1@2 a0@2 a0@2 a0]!4 ~@87>").s("gm_bandoneon").gain(0.64)

// chords · synth strings 1
const synth_strings_1 = note("<~@56 A@2 B C D E@2 F@2 ~@26>".pickRestart({
  A: "[[b3,e4,g#4]@15 ~]/2", B: "[c#4,e4,a4]@7 ~", C: "[e4,a4,c#5]@7 ~", D: "[b3,e4,g#4]@7 ~",
  E: "[[a3,d4,f#4]@15 ~]/2", F: "[[c#4,e4,a4]@7 ~]/2",
})).s("gm_synth_strings_1").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~@4 A@7 B A@15 C A@3 B A@15 C A@7 B D ~@8 A@7 C A@7 B A@7 B E F>".pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@3 x ~", B: "x ~@2 x ~@2 x ~@3 x ~@5", C: "x ~@2 x ~@2 x ~ x ~@7", D: "x",
  E: "x ~@4 x!2 ~@3 x!2 ~@4", F: "~@7 x!2 ~@7",
})).gain(0.72)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@3 A B@8 ~@15 C B@4 ~@15 C B@8 ~@8 A ~@7 C B@16 ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@9 x ~@5 x", C: "~@11 x ~@4",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@7 B ~@19 B ~@23 B ~@7 C D ~@15 B ~@7 B ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@11 x ~@4", C: "x!8", D: "x",
})).gain(0.32)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@63 [x!4 ~@4] ~@27>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B C@2 A B C@2 A B C@2 A B C ~@5 A B C@2 A B C@2 A B C@2 A B C ~@18 A B C@2 A B C ~@19
>`.pickRestart({
  A: "~ x!13 ~@2", B: "x!6 ~@2 x!6 ~@2", C: "x!14 ~@2",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@8 x!5 ~@3] ~@60 [~@3 x] ~@25 [~ x ~@6]>").gain(0.64)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@63 [~@4 x!6 ~ x ~ x ~@2] ~@27>").gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@3 [~ x] ~@87>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@8 B ~@3 B ~@3 B ~@3 B ~@2 C A@4 B ~@3 B ~@3 B ~@3 B ~@2 C A@8 B ~@8 B ~@3 B ~@2 C A@16 D E
>`.pickRestart({
  A: "x!4", B: "x", C: "x!3 ~", D: "x ~@4 x!11", E: "x!2 ~@6 x ~@7",
})).gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@56 [~ x ~ x]!8 ~@27>").gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@8 ~@16 A@4 ~@16 A@8 ~@17 A@16 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.48)

// … 12 more lines

More by U2