Strudelify

Everlasting Love

U2

KeyE majorTempo126 bpm
0:00/0:00
// Everlasting Love — U2
// 126 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@4 A B C D A B C D E@4 F@15 G H A B C D A B C D A B C D E@2 F@15 G H A B C D A B C D A B C D A B C D A I J K A I J K
  L@3 A B C D A B C D A B C D A B C D M
>`.pickRestart({
  A: "e2@2 ~@2 e2@2 ~ e2!2 ~ e2@3 ~ e2 ~", B: "d#2@2 ~@2 d#2@2 ~ d#2!2 ~ d#2@3 ~ d#2 ~",
  C: "c#2@2 ~@2 c#2@2 ~ c#2!2 ~ c#2@2 ~@2 c#2 ~", D: "f#2@2 ~@2 f#2@2 ~ f#2 b1 ~ b1@3 ~ b1@2",
  E: "e2!2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2!2 ~ b1 ~", F: "a1!2 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1!2 ~ e1 ~", G: "f#1",
  H: "b1@10 b1 c#2 e2 c#2 e2@2", I: "c2@2 ~@2 c2@2 ~ c2!2 ~ c2@3 ~ c2 ~", J: "a1@2 ~@2 a1@2 ~ a1!2 ~ a1@2 ~@2 a1 ~",
  K: "b1@2 ~@2 b1@2 ~ b1!2 ~ b1@3 ~ b1@2", L: "c2/3", M: "e2 ~",
})).s("gm_synth_bass_2").gain(0.42)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@79 A B@3 C B@3 C ~@20>".pickRestart({
  A: "~@12 e5 [g5,a5] [b5,c6,d6] [e6,f6]", B: "[b6 ~ a6, e6, g6@2 ~, ~ c7@2]/3", C: "e6 d#6, [f#6,b6]",
})).s("gm_percussive_organ").gain(0.28).pan(0.6)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@4 A B C D A B C D ~@4 C E@2 C@2 E@2 C@2 E@2 C@2 E@2 F G H I J K H I J K H I J K ~@2 L E@2 C@2 E@2 C@2 E@2 C@2 E@2 F
  G H I J K H I J K H I J K H I J K M N O P@2 Q R M S@3 H I J K H I J K H I J K H I J K T
>`.pickRestart({
  A: "[b3,e4,g#4]", B: "[b3,d#4,f#4]", C: "[a3,c#4,e4]", D: "[a3,c#4,e4] [b3,d#4,f#4]", E: "[a3,d4,f#4]/2",
  F: "[c#4,f#4]", G: "[b3,d#4]", H: "[e4,g#4,b4]", I: "[d#4,f#4,b4]", J: "[c#4,e4,a4]", K: "[c#4,f#4,a4] [d#4,f#4,b4]",
  L: "c#4", M: "b4", N: "c5@3 b4", O: "a4", P: "b4/2", Q: "c5", R: "d5@3 c5", S: "[g3,c4,e4]/3", T: "[e4,g#4,b4] ~",
})).s("gm_pad_poly").gain(0.37).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A B A C D E F C G ~@10 H I@4 J@3 K L M@2 N@2 M@2 N@2 M@2 N@2 ~@9 H I@4 J@3 K L M@2 N@2 M@2 N@2 M@2 N@2 M@2 N@2 O
  P@2 L O P@2 L ~@2 Q R@2 S@2 T@2 S@2 T@2 S@2 T@2 S@2 ~
>`.pickRestart({
  A: "~@2 b4 c#5", B: "b4 g#4", C: "b4 g#4 e4 f#4", D: "e4@3 ~ b4@2 c#5@2", E: "b4 f#5", F: "e5@2 b4 c#5", G: "e4 ~",
  H: "~@3 a5", I: "[e6@15 a5]/4", J: "[e6,a6]/3", K: "[f#5,c#6,f#6]", L: "[b5,f#6,b6]", M: "[e6 f#6, [b5,b6]]/2",
  N: "[e6@2 ~ [b5,b6], [a5,a6]@3 ~, ~ f#6]/2", O: "[b5,e6,b6]", P: "[g6 a6, [c6,c7]]/2",
  Q: "~@8 [e4,f4] [f#4,g4,g#4] [a4,a#4,b4] [c5,c#5,d5] [d#5,e5,f5,f#5] [g5,g#5] [a5,a#5,b5] [c6,c#6,d6]", // Fmaj7 G#maj7
  R: "[e6 d#6, b5, d#6 ~@31]/2", S: "[[a5,c#6]@3 [f#5,b5]]/2", T: "[e6 d#6, b5]/2",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.6)

// other · synth brass 1 · "SYNBRASS 1" · F# E D# F# E D#
const synth_brass_1 = note(`<
  ~@31
  [[f#4,f#5]@3 [f#4,f#5]]
  [[e4,e5] [d#4,d#5]]
  ~@29
  [[f#4,f#5]@3 [f#4,f#5]]
  [[e4,e5] [d#4,d#5]]
  ~@44
>`).s("gm_synth_brass_1").gain(0.33).pan(0.4)

// other · pad sweep · "SWEEP PAD"
const pad_sweep = note("<A@4 ~@104>".pickRestart({
  A: "[[b1,b2]@63 ~]/4", // B
})).s("gm_pad_sweep").gain(0.57)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A B C ~@12 D E F G D E F G D E F G D E F H I ~@14 D E J G D E F G D E F G D E F H I ~@44
>`.pickRestart({
  A: "~@5 b4 e5 f#5", B: "b5 e6 f#6 b6 f#6 e6 b5 f#5", C: "e5 b4 e5 f#5 b5 e6 f#6 b6",
  D: "~@2 [e4,a4] ~@2 [e4,a4] ~@2 [e4,a4]@2 ~ [e4,a4] ~@2 a4@2, ~@14 e4 ~", // A5
  E: "~@2 a4@2 ~ [f#4,a4] ~@2 [f#4,a4]@2 ~ [f#4,a4] ~@2 a4@2, ~@2 f#4 ~@11 f#4 ~", // F#m
  F: "~@2 [f#4,a4] ~@2 a4@2 ~ [f#4,a4]@2 ~ [f#4,a4] ~@2 [f#4,a4]@2, ~@5 f#4 ~@10", // F#m
  G: "~@2 [e4,a4] ~@2 [e4,a4] ~@2 [e4,a4]@2 ~ [e4,a4] ~@2 [e4,a4] ~", // A5
  H: "~@2 [f#4,a#4] ~@2 [f#4,a#4] ~@2 [f#4,a#4]@2 ~ [f#4,a#4] ~@2 a#4@2, ~@14 f#4 ~", // F#
  I: "~@2 b4@2 ~ [f#4,b4] ~@2 [f#4,b4]@2 ~ [f#4,b4] ~@2 b4@2, ~@2 f#4 ~@11 f#4 ~", // B5
  J: "~@2 f#4@2 ~ a4@2 ~ [f#4,a4]@2 ~ [f#4,a4] ~@2 [f#4,a4]@2, ~@2 a4 ~@2 f#4 ~@10", // F#m
})).s("gm_piano").gain(0.28).pan(0.4)

// other · synth bass 2 · "+SYNBASS 4"
const synth_bass_2 = note(`<
  ~@2 A B A B C D A B C D ~@2 E@2 F@15 G H A B C D A B C D A B C D ~@2 F@3 I J F@6 K J F@2 G H A B C D A B C D A B C D A
  B C D A L M B A L M B M@3 A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "b3!3 ~ b3 ~ b3 ~@2 b3 ~ b3!5", B: "b3!3 ~ b3 ~ b3 ~@2 b3!7", C: "a3!3 ~ a3 ~ a3 ~@2 a3 ~ a3!5",
  D: "a3!3 ~ a3 ~ a3 ~@2 b3!7", E: "~ e2!3 ~ e2!3 ~ e2!7", F: "~ a2!3 ~ a2!3 ~ a2!7", G: "~ f#2!3 ~ f#2!3 ~ f#2!7",
  H: "~ b2!3 ~ b2!3 ~ b2!7",
  I: "~ a2 [a2,a6] [a2,e6] [a5,a6] [a2,e6,a6] [a2,a5,e6] [a2,a5,a6] [a5,e6] [a2,e5,a5] [a2,a5,e6] [a2,e5] [a2,a5,e6] [a2,e5,a5] [a2,a4,e5] [a2,e5]", // A A5 A A5 A A5
  J: "a4 [a2,e5] [a2,a4] [a2,e5] a4 [a2,e5] [a2,a4] a2 ~ a2!7", // A5 A A5 A
  K: "~ a2 [a2,a5] [a2,e6] a5 [a2,a5,e6]!2 [a2,a5] [a5,e6] [a2,e5,a5] [a2,a5,e6] [a2,e5] [a2,a5,e6] [a2,e5,a5] [a2,a4,e5] [a2,e5]", // A A5 A A5
  L: "c4!3 ~ c4 ~ c4 ~@2 c4!7", M: "c4!3 ~ c4 ~ c4 ~@2 c4 ~ c4!5",
})).s("gm_synth_bass_2").gain(0.33).pan(0.6)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@12 A@4 ~@29 B@2 ~@61>".pickRestart({
  A: "[e3@31 ~]/4", B: "e3/2",
})).s("gm_string_ensemble_2").gain(0.28).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@4 A@8 B ~ A@2 C@15 A@14 B ~ C@16 A@25 B ~@2 A@16 B>".pickRestart({
  A: "x!4", B: "x", C: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.64)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!84 ~@3 [~ x ~ x ~ x ~ x]!16 ~>").gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@18 A@3 ~@3 A ~@3 A ~@3 A ~@9 A ~@6 A@3 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 A ~@3 A ~@3 A ~@3 A
  ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@8 ~@21 A@12 ~@19 A@24 ~@3 A@16 B>".pickRestart({
  A: "x ~ x ~ x!12", B: "x",
})).gain(0.26)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@4 A@8 ~@21 A@12 ~@19 A@24 ~@3 A@16 ~>".pickRestart({
  A: "~ x ~ x ~@12",
})).gain(0.13)

stack(
  bass, percussive_organ, pad_poly, string_ensemble_1, synth_brass_1, pad_sweep, piano, synth_bass_2, string_ensemble_2,
  kick, snare, hihat, open_hat, crash, tambourine, tambourine_soft
)

More by U2