Strudelify

Please

U2

KeyB majorTempo100 bpm
0:00/0:00
// Please — U2
// 100 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A@3 B A C A B A D ~@6 E ~@3 E ~@11 F@4 G@4 H@3 I@2 H@2 J@2 K L M@2 K L N@2 O P Q R O P Q F@4 S@5 T U V W X Y Z AA AB
  AA AC AA AB AA AC AA AB AA AC AA AB AD AE AA AB AD AE AA AB AF@8 AG AH AI AG@2 AH AI AJ AK@3 AL AM ~@4
>`.pickRestart({
  A: "b3@10 ~ a3 ~@2 a3 ~, ~@5 b3 b3@2", B: "~@2 a3 f#3 ~ a3 ~ f#3, b3", C: "b3@10 ~ a3 b3 a3!2 ~, ~@10 b3@2 ~ b3@3",
  D: "d4", E: "b3",
  F: "[b3@6 ~@8 f#4@2 ~@6 b3@2 ~@10 f#4@2 ~@2 b3@2 c#4@2 ~@2 d4@8 ~@2 b3 ~@5 b3@4, ~@3 b3@5 ~@6 b3@4 ~@14, ~ c#4 ~ c#4 ~@3 c#4, ~@3 d4@4 ~@9]/4",
  G: "[b3@6 ~@8 f#4@2 ~@6 b3@2 ~@10 f#4@2 ~@2 b3@2 c#4@2 ~@2 d4@8 ~@2 b3 ~@3 b3 ~ b3@4, ~@3 b3@5 ~@6 b3@4 ~@14, ~ c#4 ~ c#4 ~@3 c#4, ~@3 d4@4 ~@9]/4",
  H: "b3@10 ~ a3 ~@2 a3@2, ~@5 b3 b3@2",
  I: "[~@6 f#3@2 ~@8 b3@10 ~ a3 ~@2 a3@2, b3@8 ~@5 b3 b3@2, ~@2 a3@3 a3@5 ~@6]/2",
  J: "[~@6 f#3@2 ~@8 b3@10 ~ a3 ~@2 a3@2, b3 b4, ~@2 a3@3 a3@5 ~@3 b3 b3@2]/2",
  K: "b3@10 ~ a3 ~@2 a3@2, c#5, ~@5 b3 b3@2", L: "b3@10 ~ a3 ~@2 a3@2, e5, ~@5 b3 b3@2",
  M: "[~@6 f#3@2 ~@8 b3@10 ~ a3 ~@2 a3@2, [b3,d5] b4, ~@2 a3@3 a3@5 ~@3 b3 b3@2]/2", // Bm
  N: "[~@3 f#3 ~@4 b4@8, [b3,d5] ~, ~@2 a3@3 a3@5 ~@6]/2", O: "c#5", P: "e5", Q: "d5", R: "b4",
  S: "[b3@6 ~@8 f#4@2 ~@6 b3@2 ~@10 f#4@2 ~@2 b3@2 c#4@2 ~@2 d4@8 ~@2 b3 ~@3 b3 ~@5 b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2, ~@3 b3@5 ~@6 b3@4 ~@12 b3@8 ~@2, ~ c#4 ~ c#4 ~@3 c#4 ~@2, ~@3 d4@4 ~@9 b4@4]/5",
  T: "b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2, c#5",
  U: "b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2, e5",
  V: "b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2 b2 a2 f#2 a2, d5",
  W: "~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2, b4, b2!4",
  X: "~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2, c#5, b2!4",
  Y: "~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2, e5, b2!4",
  Z: "~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2 ~ a2 f#2 a2, d5, b2!4", AA: "~@6 b4@2 ~ b4 ~@6, [b2,b3], ~@4 a4 ~@3",
  AB: "f#4 a4 ~ f#4 a4 g4 f#4 a4 ~ f#4 a4 ~ a4 b4 ~@2", AC: "f#4 a4 ~ f#4 a4 g4 f#4 a4 ~@2 f#4@2 e4@2 d4@2",
  AD: "~@7 f#4, b3", AE: "~ a4 ~ f#4 a4 g4 f#4 a4 ~@2 f#4@2 e4@2 d4@2, f#4 ~@7",
  AF: "[b3@3 ~@4 f#4@2 ~@6 f#4 ~@7 f#4 e4 ~@2 f#4 f#4@4, ~@3 b3@5 ~@3 b3@5 ~@3 b3@5 ~@8, ~@2 c#4@2 ~@2 c#4@2 ~@2 c#4@2 ~ e4@2 ~, ~@3 d4@4 d4@4 d4@4 ~]/4",
  AG: "b3 ~@4 d4 ~ b3, ~ b3@3 b3@2 ~@2, ~@2 d4@3 ~@3", AH: "b3!2 c#4 ~ b3 c#4 ~ b3", AI: "b3!2 e4 ~ b3 e4 ~ b3",
  AJ: "b3 ~@4 d4 ~ d4, ~ b3@3 b3@2 b3@2, ~@2 d4@3 ~@3", AK: "e4@4 e4@2 d4 ~@3 d4 ~ b3 ~ d4@2, ~@7 e4@9",
  AL: "e4@4 e4@2 d4 ~@3 d4 ~ b3 ~ a3@2, ~@7 e4@9", AM: "b3 ~@7",
})).s("gm_electric_guitar_clean").gain(0.64).pan(0.7)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~@24 A B C D@2 E@2 F@2 ~@23 A B C D@2 E@2 F@2 ~@15 A B C D@2 E@2 D@2 B C D@2 E@2 D@2 B C D@2 G ~@25
>`.pickRestart({
  A: "b4", B: "~@3 g5 ~@2 f#5@2, f#5 g5", C: "e5", D: "[~@3 e5 ~@4 b4@8, f#5 e5 ~@2, ~@3 d5@2 ~@3]/2",
  E: "[~@3 g5 ~@4 e5@8, f#5 g5 ~@2, ~@3 f#5@2 ~@3]/2", F: "[~@3 e5 ~@2 d5@4 ~@6, f#5 e5 ~@2]/2", G: "f#5",
})).s("gm_drawbar_organ").gain(0.17).pan(0.3)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B A B A B A B C D 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 D A E A E A E A E F E A E F G A G
  F G A G F E A E F E A E C ~@29 C H I J C H I J C H I J C H I J ~@9
>`.pickRestart({
  A: "b1 d2 b1 d2 e2 d2 b1 a1", B: "b1 d2 b1 d2 e1 f1 g1 a1", C: "b1", D: "~@7 a1", E: "b1 d2 b1 d2 e1 f#1 g1 a1",
  F: "~ d2 ~ d2 e2 d2 ~ a1, b1 b1@2 b1", G: "b1 d2 b1 d2 e1 [f1,f#1] g1 a1", H: "a1", I: "g#1", J: "g1",
})).s("gm_electric_bass_pick").gain(0.64)

// drums · kick
const kick = s("bd").struct("<A@8 ~@4 A@28 ~@4 A@28 ~@8 B@26 C@20 ~>".pickRestart({
  A: "x ~@2 x ~@6 x ~@5", B: "x!4", C: "x!2",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@8 ~@4 A@28 ~@4 A@28 ~@8 B@8 C B C B C B C B C B C D E F G@2 H ~ I@3 J I@3 J I@3 J I@3 J I@3 J ~
>`.pickRestart({
  A: "x!6 ~@2", B: "x!6 ~@2 x!6 ~@2", C: "~@3 x ~ x!9 ~@2", D: "x!6 ~@5 x ~ x!3", E: "x!4 ~ x ~@2 x!4 ~ x!3",
  F: "x ~ x!2 ~ x ~@2 x ~ x!2 ~ x ~@2", G: "x!16", H: "x!15 ~", I: "~ x ~ x!3 ~ x", J: "x!2 ~ x!3 ~ x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@8 ~@4 A@27 B ~@4 A@27 B ~@7 C D@7 E F ~ F ~ F ~ F ~ F ~ F G ~ E ~@2 H I J@3 ~ J@3 ~ J@3 ~ J@3 ~ J@3 ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2", C: "~@14 x!2", D: "~@6 x!2 ~@6 x!2", E: "~@6 x!2 ~@8", F: "~ x ~@6", G: "~@5 x ~@2",
  H: "~@15 x", I: "x!9 ~ x!2 ~ x ~@2", J: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@3 A ~@27 A ~@3 A ~@33 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4>".pickRestart({
  A: "x",
})).gain(0.64)

stack(electric_guitar_clean, drawbar_organ, bass, kick, snare, hihat, open_hat, crash)

More by U2