Strudelify

If God Will Send His Angels

U2

KeyD minorTempo90 bpm
0:00/0:00
// If God Will Send His Angels — U2
// 90 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · electric guitar clean
const electric_guitar_clean = note("<A@2 B@18 ~@93>".pickRestart({
  A: "[~@2 f4@2 ~@4 db4@2 [db3,gb3,bb4]@2 ~ [eb3,b4] [eb3,b4]@2, ~ [db3,bb4]@4 ~@3, ~ bb3@2 bb3 ~@4, ~@2 db4@3 db4@2 ~@9, ~@4 f4@2 ~ f4@2 ~@7]/2", // Gb Abm Gb
  B: "gb4 eb4 bb3 eb4 gb4 eb4 bb3 eb4",
})).s("gm_electric_guitar_clean").gain(0.1)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@2 A B@17 C D C D ~@50 E F G F G F G F G F G F ~@14 H ~@12>".pickRestart({
  A: "[gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5]", // Gb
  B: "[bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5]", // Gb
  C: "[f3,ab3,f4,ab4,db5,f5] [f3,ab3,f4,ab4,db5] [f3,ab3,f4,ab4,db5,f5] [f3,ab3,f4,ab4,db5] [f3,ab3,f4,ab4,db5,f5] [f3,ab3,f4,ab4,db5] [f3,ab3,f4,ab4,db5,f5] [f3,ab3,f4,ab4,db5]", // Db
  D: "[gb3,b3,gb4,b4,eb5,gb5] [gb3,b3,gb4,b4,eb5] [gb3,b3,gb4,b4,eb5,gb5] [gb3,b3,gb4,b4,eb5] [gb3,b3,gb4,b4,eb5,gb5] [gb3,b3,gb4,b4,eb5] [gb3,b3,gb4,b4,eb5,gb5] [gb3,b3,gb4,b4,eb5]", // B
  E: "[gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [db3,f3,ab3,db4,f4,ab4] [db3,f3,ab3,db4,f4] [db3,f3,ab3,db4,f4,ab4] [db3,f3,ab3,db4,f4]", // Gb Db
  F: "[eb3,gb3,b3,eb4,gb4,b4] [eb3,gb3,b3,eb4,gb4] [eb3,gb3,b3,eb4,gb4,b4] [eb3,gb3,b3,eb4,gb4] [eb3,gb3,bb3,eb4,gb4,bb4] [eb3,gb3,bb3,eb4,gb4] [eb3,gb3,bb3,eb4,gb4,bb4] [eb3,gb3,bb3,eb4,gb4]", // B Ebm
  G: "[bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [gb3,bb3,gb4,bb4,db5,gb5] [gb3,bb3,gb4,bb4,db5] [db3,f3,ab3,db4,f4,ab4] [db3,f3,ab3,db4,f4] [db3,f3,ab3,db4,f4,ab4] [db3,f3,ab3,db4,f4]", // Gb Db
  H: "[gb3,bb3,gb4,bb4,eb5,gb5] [gb3,bb3,gb4,bb4,eb5] [gb3,bb3,gb4,bb4,eb5,gb5] [gb3,bb3,gb4,bb4,eb5] [gb3,bb3,gb4,bb4,eb5,gb5] [gb3,bb3,gb4,bb4,eb5] [gb3,bb3,gb4,bb4,eb5,gb5] [gb3,bb3,gb4,bb4,eb5]", // Ebm
})).s("gm_acoustic_guitar_nylon").gain(0.06)

// other · synth strings 1
const synth_strings_1 = note("<~@11 bb4 ~@7 bb4 ~@93>").s("gm_synth_strings_1").gain(0.1)

// bass · fretless bass
const bass = note(`<
  ~@24 A B C@2 A D ~@2 E F G F E F G F E F G F E F G H E F G F I J K J L@2 E F G F I J K J E F G F E F M N E F G F E F G
  H E F G F I J K J E F G F E F I J I J ~ E F G F E F G F E F G F
>`.pickRestart({
  A: "gb2@3 f2@5", B: "eb2 db2", C: "[gb2@3 f2@4 eb2@5 db2@4]/2", D: "eb2", E: "gb2@2 ab2 db2 ~@3 db2",
  F: "f2 gb2 ab2 eb2@2 bb1 b1 db2", G: "f2 gb2 ab2 db2 ~@3 db2", H: "f2 gb2 ab2 eb2@2 ~@3", I: "db2!8", J: "eb2!8",
  K: "f2!8", L: "b1!8", M: "db2!5 eb2!2 db2", N: "db2!7 f2",
})).s("gm_fretless_bass").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@32 A B A B A B A B A B A B A B A B A B A C D E D E@3 A B A B D E D E A B A B F B A B G ~@11 D E D E A B A B F B A B
  G ~@14
>`.pickRestart({
  A: "gb4@3 gb4@3 [gb4,ab4]@3 ab4@2 ~@5", B: "~@3 ab4 bb4 ab4 gb4 eb4", C: "~@6 gb4 ab4 bb4@4 ab4@2 ~@2",
  D: "f4@2 db4 f4 ab4@2 bb4@2 ~@2 ab4@2 f4@2 db4@2, ~@4 f4 ~@3, ~@9 db4@2 ~@5",
  E: "gb4@2 db4 gb4 ab4@2 bb4@2 ~@2 ab4@2 gb4@2 db4@2, ~@4 gb4 ~@3, ~@9 db4@2 ~@5",
  F: "gb4 ~@2 gb4@3 [gb4,ab4]@3 ab4@2 ~@5", G: "gb4 ~@15",
})).s("gm_distortion_guitar").gain(0.16)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@32 A B A B A B A B A B A B A B A B A B A C D E D E@3 A B A B D E D E A B A B A B A B ~@12 D E D E A B A B A B A B
  ~@15
>`.pickRestart({
  A: "~@11 ab4@2 ab4@3", B: "~@4 ab4 bb4 ab4 gb4", C: "~@5 a4 ~ ab4",
  D: "~@2 f4 ~@3 ab4@2 bb4@4 ab4@2 f4@2, ~ db4 ~@2, ~@5 f4@2 ~@9",
  E: "~@2 gb4 ~@3 ab4@2 bb4@4 ab4@2 gb4@2, ~ db4 ~@2, ~@5 gb4@2 ~@9",
})).s("gm_distortion_guitar").gain(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@12
  [x!2 ~@4 x!2 ~@2 x ~@4 x]!62
  ~@4
  [x ~@2 x ~@2 x ~@2 x!2 ~@4 x]!12
  [x!2 ~@4 x!2 ~@2 x ~@4 x]!10
  ~@5
  [x ~@2 x ~@2 x ~@2 x!2 ~@4 x]!8
>`).gain(0.43)

// drums · snare
const snare = s("sd").struct("<~@32 A@7 B A@3 C A@3 B A@17 B A@8 ~@4 A@22 ~@5 A@8>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@10 x",
})).gain(0.43)

// drums · hihat
const hihat = s("hh").struct("<~@32 A@7 B A@3 B A@3 B A@4 C@5 D A@7 B ~@12 A@12 ~@15 A@8>".pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "x!14 ~ x", D: "x!6 ~@10",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@57 A ~@7 B ~@12 C D C D C D C D C D C D ~@15 C D C D C D C D>".pickRestart({
  A: "~@14 x!2", B: "~@11 x ~@2 x!2", C: "~@2 x ~@4 x ~ x ~ x ~@4", D: "~ x ~@3 x ~ x ~@3 x ~@4",
})).gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@52 [~@7 x]!5 [~@3 x!3 ~@2] ~@7 [~ x] ~@47>").gain(0.43)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@12 A@27 B A@3 B A@3 B A@9 C A@7 C A@8 ~@4 D A D A D A D A D A D A@12 ~@4 D A D A D A D A
>`.pickRestart({
  A: "~@3 x ~@5 x ~@2 x ~@3", B: "~@3 x ~@5 x ~@2 x ~@2 x", C: "~@3 x ~@5 x ~@2 x!2 ~@2", D: "~@9 x ~@3 x ~@2",
})).gain(0.21)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@19 A ~@5 A ~@7 A ~@11 A ~@11 A ~@22>".pickRestart({
  A: "x",
})).gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A@4 B@7 ~@35 C@8 ~@12 A@4 C@11 ~@12>".pickRestart({
  A: "~ x ~ x", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", C: "x!8",
})).gain(0.27)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@24
  [~@3 x ~@3 x ~@3 x ~@3 x]!7
  ~@35
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!8
  ~@16
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!11
  ~@12
>`).gain(0.16)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@31 [x!2 ~@6 x!2 ~@6] ~@81>").gain(1.36)

// drums · shaker
const shaker = s("sh").struct("<~@36 [x!2 ~@6 x!2 ~@6]!16 ~@61>").gain(0.43)

stack(
  electric_guitar_clean, acoustic_guitar_nylon, synth_strings_1, bass, distortion_guitar, distortion_guitar_soft, kick,
  snare, hihat, mid_tom, open_hat, high_tom, crash, tambourine, tambourine_soft, cabasa, shaker
)

More by U2