Strudelify

A Celebration

U2

KeyC majorTempo165 bpm
0:00/0:00
// A Celebration — U2
// 165 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(165/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 · lead 5 charang
const lead_5_charang = note(`<
  ~@3 A@16 B ~ B ~ A@16 B ~ B ~ C D@2 E F G H I J K L@2 M@2 N@2 C D@2 O F G H P A@40 B ~ B
>`.pickRestart({
  A: "[~ c4@2 ~@4 c4@2 ~@5 g3@2, c3, ~@2 g3@3 g3@2 ~, ~@3 c4]/2", B: "[c3,f3,c4] [c3,g3,c4]!4 ~@3",
  C: "c5@2 a#5@3 ~ [d#5,a5]@5 ~ d#5@4", D: "[~@2 c5@6 ~@8 d#5@2 a#5@3 ~ [d#5,a5]@5 ~ d#5@4, ~@5 c5@4 ~@7]/2",
  E: "~@2 d#5@6 ~@2 d#5@5 ~", F: "c5@2 a#5@3 ~ a5@5 ~ d#5@4", G: "~@2 c5@6 ~@2 [c5,d#5]@2 [c5,d#5]@3 ~",
  H: "c5@2 a#5@3 ~ a5@4 c5@2 d#5@2 c5@2", I: "~@2 c5@2 d#5@2 c5@3 ~@6 a#3", J: "~@2 d#4 ~@5, [c3,g3,c4]@3 ~@5",
  K: "~@15 a#2", L: "[[c3,f3,c4]@29 ~@2 a#3]/2", M: "[~@2 d#4 ~@4 [c4,g4]@7 ~@2, [c3,g3,c4]@3 ~@13]/2",
  N: "[[c3,f3,c4]@13 ~ [c3,f3,c4]@14 ~@4]/2", O: "~@2 f5@5 ~ c5@6 ~@2", P: "~@2 c5@2 d#5@2 c5@3 ~@7",
})).s("gm_lead_5_charang").gain(0.31)

// chords · lead 5 charang · soft notes
const lead_5_charang_soft = note(`<
  ~@3 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 A B A B ~@4 C ~ C ~ D ~ E ~@9 C ~ C ~ D ~ E ~ A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "~@3 c4@4 ~", B: "~ c4@3 ~@4", C: "~@5 a5 ~@2", D: "d#5@2 ~@4 d#5@5 ~@5", E: "d#5 ~@7",
})).s("gm_lead_5_charang").gain(0.15)

// bass · electric bass pick
const bass = note(`<
  ~@3 A@2 B C A@2 B C A@2 B C A@2 B C D ~ D ~ A@2 B C A@2 B C A@2 B C A@2 B C D ~ D ~ E@2 F@2 E@2 F@2 G@2 H@2 G@2 H@2
  E@2 F@2 E@2 F@2 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D ~ D
>`.pickRestart({
  A: "[c2@25 ~@3 c2@3 ~]/2", B: "f1@13 ~@3", C: "a#1@5 ~ a#1@5 ~ a#1@3 ~", D: "a#1 c2!4 ~@3",
  E: "c2@2 c2@3 ~ c2@2 c2@2 c2@3 ~ c2@2", F: "f1@2 f1@3 ~ f1@2 f1@2 f1@3 ~ f1@2",
  G: "[c2@5 ~ a#1@2 a#1@3 ~ c2@15 ~@5]/2", H: "[f1@5 ~ f1@2 f1@22 ~@2]/2",
})).s("gm_electric_bass_pick").gain(0.36)

// chords · lead 5 charang
const lead_5_charang_2 = note("<~ A B ~@16 A B A B ~@16 A B A B ~@64 A B ~>".pickRestart({
  A: "~@12 [a4,a#4,c5] ~@3", B: "~@4 [a4,a#4,c5] ~@7 [a4,a#4,c5] ~@3",
})).s("gm_lead_5_charang").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~ A B@17 C D C D B@16 C D C D B@8 E ~ E ~ E ~ E ~ B@46 C D C D@2>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@3", C: "x!2 ~ x!3 ~ x", D: "x!2 ~ x!3 ~@2", E: "x!2 ~@6 x ~@7",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct("<~ A@50 B ~ B ~ B ~ B ~ A@50 C>".pickRestart({
  A: "~ x ~ x", B: "x ~ x ~@3 x!2", C: "~ x ~@2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@51 A ~ A ~ A ~ A ~@52>".pickRestart({
  A: "~@7 x!2 ~@7",
})).gain(0.31)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@52 A ~ A ~ A ~ A ~@51>".pickRestart({
  A: "~@3 x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 A B A B A B A B ~@51>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~@2 x ~@7",
})).gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<~@52 A ~ A ~ A ~ A ~@51>".pickRestart({
  A: "~ x ~@6",
})).gain(0.36)

// drums · ride
const ride = s("rd").struct(`<
  ~@3 A@5 B A B A B A B A B A B ~@4 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 ~ C ~ C ~ C ~ C A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "x ~ x!6", B: "x!8", C: "~@4 x!4",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C ~ C ~ C ~ C ~
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x!2 ~@2",
})).gain(0.2)

stack(
  lead_5_charang, lead_5_charang_soft, bass, lead_5_charang_2, kick, snare, low_tom, low_tom_soft, mid_tom, high_tom,
  ride, crash
)

More by U2