Strudelify

I Will Follow

U2

KeyE♭ majorTempo155 bpm
0:00/0:00
// I Will Follow — U2
// 155 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(155/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.

// other · guitar harmonics · "guitarra 1"
const guitar_harmonics = note("<~@80 A B C B A B C B A B C B A B C B ~@39>".pickRestart({
  A: "eb3@15 ~", B: "bb3", C: "eb4",
})).s("gm_guitar_harmonics").gain(0.31)

// chords · overdriven guitar · "guitarra 2"
const overdriven_guitar = note(`<
  ~@4 A B A C ~@4 A B A C ~@12 A B A C ~@8 D E F G H E F I@2 B A C ~@12 D E F G H E F I@2 B A C ~@28 J B A C ~@4 D E F G
  H E F I@2 B A C ~@4 A B A C ~@3
>`.pickRestart({
  A: "[eb4,bb4]!8", B: "[eb4,ab4]!4 ~@3 eb5, ~ eb4, ~@2 ab4!2, ~@5 eb5@2 ~",
  C: "[eb4,ab4]!2 ~@4 db5@2, ~ eb4@3, ~ ab4 ab4@2, ~@3 eb5@2 eb5@3", D: "~ eb4@2 ab4@2 eb4@3, bb3",
  E: "~@2 eb4@4 gb4@4 eb4@5 ~, bb3@15 ~", F: "~@2 eb4@4 ab4@4 eb4@5 ~, bb3@15 ~", G: "~ eb4@2 gb4@2 eb4@2 ~, bb3@15 ~",
  H: "~ eb4@2 bb4@2 eb4@3, bb3@15 ~",
  I: "[~@2 eb4@4 gb4@4 eb4@3 ~@3 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4] ~, bb3]/2", // Eb5
  J: "[eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4] ~", // Eb5
})).s("gm_overdriven_guitar").gain(0.36)

// chords · overdriven guitar · "guitarra 3"
const overdriven_guitar_2 = note(`<
  A B C D ~@4 C B C D ~@12 C B C D ~@12 E@7 F@2 ~@3 C B C D ~@8 E@7 F@2 ~@3 C B C D ~@16 G H I J I J I J ~@4 C B C D K@8
  ~@4 C B C D ~@4 C B L
>`.pickRestart({
  A: "[eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4]@2 [eb4,bb4] ~", // Eb5
  B: "[eb4,ab4]!4 ~@3 eb5, ~ eb4, ~@2 ab4!2, ~@5 eb5@2 ~", C: "[eb4,bb4]!8",
  D: "[eb4,ab4]!2 ~@4 db5@2, ~ eb4@3, ~ ab4 ab4@2, ~@3 eb5@2 eb5@3", E: "[eb3,bb3]", F: "[eb3,bb3]/2",
  G: "bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~", H: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~",
  I: "[eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~", // Eb5
  J: "[eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~", // Ab5
  K: "[eb3,bb3] ~@15", L: "[eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4]@4 ~@8",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · "guitarra 4"
const overdriven_guitar_3 = note("<~@16 A B C@2 A B C@2 ~@8 A B C@2 A B C@2 ~@16 A B C@2 A B C@2 ~@71>".pickRestart({
  A: "eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4@2", B: "~@5 bb3@3, ab3@5 ~@3, ~@3 eb4@5",
  C: "[~ eb4@2 ab4@2 ~@2 db4@9, bb3, ~@5 eb4@11]/2",
})).s("gm_overdriven_guitar").gain(0.36)

// bass · electric bass finger · "baixo"
const bass = note(`<
  ~@8 A B C D A B C E A F A F A F A F A B C D A B C E A F A F A F A F G H G H G H G H A B C D A B C E A F A F A F A F G
  H G H G H G H A B C D A B C E I J I K I L I M I N I J I L I O I J I K I K I K A B C D A B C E G H G H G H G H A F A F
  A B C D A B C E A B P
>`.pickRestart({
  A: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", B: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  C: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2", D: "ab2@3 db2@3 db2@2", E: "ab2@6 db2@5 ~ db2@4",
  F: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", G: "eb2 ~ eb2@2 bb2@2 eb2 ~ eb2@2 bb2@2 eb2@2 bb2@2",
  H: "ab2 ~ ab2@2 eb3@2 ab2 ~ ab2@2 eb3@2 ab2@2 eb3@2", I: "eb1", J: "bb1@3 ~ bb1@2 db2@3 ~ db2@2 bb1@4",
  K: "bb1@4 bb1@2 db2@3 ~ db2@2 bb1@4", L: "gb1@3 ~ gb1@2 db2@3 ~ db2@2 gb1@4",
  M: "gb1@3 ~ gb1@2 db2@2 ~@2 db2@2 gb1@4", N: "bb1@2 bb1 db2 ~ db2 bb1@2", O: "gb1@2 gb1 db2 ~ db2 gb1@2",
  P: "eb2 ~ eb2@5 ~@9",
})).s("gm_electric_bass_finger").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 ~ B C B@3 C B@3 C B C B C B@3 C B@3 C B@3 C B C B C B@11 C B@3 C B@3 C B C B C B@11 C B@3 C B@2 A@18 B@5 ~ B C
  B@3 C B@11 C B@3 C B@3 C B@3 D E
>`.pickRestart({
  A: "x!4", B: "x!2", C: "x ~ x!2", D: "x ~@3 x ~@2 x", E: "x!2 ~@6",
})).gain(0.36)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@80 [x!4]!18 ~@37>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~ B ~ C ~@95 C ~@31>".pickRestart({
  A: "~@15 x", B: "x ~@5 x ~@5 x ~@2 x", C: "x!2 ~@2 x!2 ~@2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@27 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~
  B ~
>`.pickRestart({
  A: "~@2 x!2", B: "~@5 x ~@2",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@3 [~@2 x!6] [x!8]!3 [x!2 ~@2 x!2 ~@2] ~@95 [x!2 ~@2 x!2 ~@2] ~@31>").gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@23 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A B A
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.31)

stack(
  guitar_harmonics, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_3, bass, kick, snare, hihat, hihat_soft,
  mid_tom, open_hat, high_tom, crash
)

More by U2