Strudelify
Rebel Yell cover art

1984 · Rebel Yell

Rebel Yell

Billy Idol

KeyB minorTempo168 bpm
0:00/0:00
// Rebel Yell — Billy Idol
// 168 bpm, 4/4, key B minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 201 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 26.
setcpm(168/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 · electric bass finger
const bass = note(`<
  ~@6 A B C D A B C E F@7 G H I A J F@3 G H I A K F@4 H@2 A L F@4 H@2 A L F@7 G H I A J F@3 G H I A K F@4 H@2 A L F@4
  H@2 A M A B C@2 A B C@2 A B C@2 A B C E N@3 O F@4 H@2 A L F@4 H@2 A L ~@8 P@3 Q H@2 R S F@4 H@2 A K F@4 H@2 A K F@4
  H@2 A K F@4 H@2 A L F@4 H@2 A L F@4 H@2 A L F@4 H@2 A L T@4 ~@3
>`.pickRestart({
  A: "g1!8", B: "f#1!8", C: "e1!8", D: "e1!7 f#1", E: "e1!4 d2@2 a1@2", F: "b1!8", G: "b1!7 a1", H: "a1!8",
  I: "a1!7 g1", J: "g1!4 d2!2 a1!2", K: "e1!4 d2!2 a1!2", L: "g1!4 d2@2 a1@2", M: "g1 ~ g1 ~@3 e1 f#1",
  N: "[b1@22 a1 b1]/3", O: "~@2 b1 ~@3 b1 ~", P: "b1@3 ~ b1@3 ~ b1@3 ~ b1@3 ~", Q: "b1@3 ~ b1@3 ~ b1@2 b1@2 b1@2 b1@2",
  R: "g1@3 ~ g1@3 ~ g1@3 ~ g1@4", S: "e1@4 e1@2 e1@2 d2@2 d2@2 a1@2 a1 ~", T: "[b1@29 ~ a1 b1]/4",
})).s("gm_electric_bass_finger").gain(0.45)

// other · percussive organ
const percussive_organ = note("<~@6 A B A@3 B A@2 ~@72 C D C@3 D C@3 D C@3 D C E ~@99>".pickRestart({
  A: "[f#5,f#6] [e5,e6] [f#5,f#6] [b5,b6] [f#5,f#6] [d5,d6] [f#5,f#6] [b5,b6]", // F# E F# B F# D F# B
  B: "[f#5,f#6] [c#5,c#6] [f#5,f#6] [a5,a6] [f#5,f#6] [c#5,c#6] [f#5,f#6] [a5,a6]", // F# C# F# A F# C# F# A
  C: "[f#5,f#6] ~ [e5,e6] ~ [f#5,f#6] ~ [b5,b6] ~ [f#5,f#6] ~ [d5,d6] ~ [f#5,f#6] ~ [b5,b6] ~", // F# E F# B F# D F# B
  D: "[f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [a5,a6] ~ [f#5,f#6] ~ [c#5,c#6] ~ [f#5,f#6] ~ [a5,a6] ~", // F# C# F# A F# C# F# A
  E: "[f#5,f#6] ~ [e5,e6] ~ [f#5,f#6] ~ [b5,b6] ~@9", // F# E F# B
})).s("gm_percussive_organ").gain(0.35)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@14 A@8 B@2 C@2 D@4 B@2 C@2 E@4 F@2 G@2 E@4 F@2 G@2 A@8 B@2 C@2 D@4 B@2 C@2 E@4 F@2 G@2 E@4 F@2 H I ~@20 E@4 F@2 G@2
  E@4 F@2 G@2 ~@24 J@8 K@8 E@4 F@2 G@2 E@4 F@2 G@2 E@4 F@2 G@2 E@4 F@2 G@2 ~@7
>`.pickRestart({
  A: "[f#3,b3,d4]/8", B: "[a3,d4,f#4,a4]/2", C: "[[g3,b3,d4,f#4]@6 [a3,d4] [e3,a3]]/2", D: "[f#3,b3,d4]/4",
  E: "[d4,f#4,b4,d5]/4", F: "[d4,f#4,a4,d5]/2", G: "[[g4,b4]@6 a4 [e4,a4,e5], [d4,d5]@7 ~]/2", H: "[d4,g4,b4,d5]",
  I: "[d4,g4,b4,d5] ~ [d4,g4,b4,d5] ~@5", J: "[~ [b3,d4,f#4]@127]/8", K: "b3/8",
})).s("gm_string_ensemble_1").gain(0.35)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@6 A B A C A D A E F@4 G@7 H I G@6 J K@2 L@2 M@2 N@2 O@2 P@2 Q@2 N@2 R@4 G@7 H I G@6 J K@2 S@2 Q@2 T@2 U@2 V@2 Q@2 W
  X A B A C A B A C A B A C A B A Y Z@3 AA U@2 V@2 Q@2 T@2 U@2 S@2 Q@2 N@2 ~@40 U@2 S@2 Q@2 T@2 U@2 S@2 Q@2 N@2 U@2 S@2
  Q@2 AB@2 U@2 V@2 Q@2 N@2 AC@4 ~@3
>`.pickRestart({
  A: "~@6 [d3,a3,d4] [e3,a3,e4]", B: "~@10 [e2,b2,e3]@3 ~ [e2,b2,e3]@2", C: "~@5 [e2,b2,e3] ~ [e2,b2,e3]",
  D: "~@10 [e3,b3,f#4]@3 ~ [e3,b3,f#4]@2", E: "~@2 [e3,b3,f#4] [e3,a3,f#4]", F: "[b2,f#3,b3]/4",
  G: "[f#3,b3,f#4]@2 ~@2 [f#3,b3,f#4]@2 ~@4 [f#3,b3,f#4]@2 ~@2 [f#3,b3] ~", // B5
  H: "[f#3,b3,f#4] ~ [f#3,b3,f#4] ~ [d2,d3]!2 [a1,a2]!2", // B5 D A
  I: "[b2,f#3,b3,f#4]@2 ~@2 [f#3,b3,f#4]@2 ~@4 [f#3,b3,f#4]@2 ~@2 [f#3,b3] ~", // B5
  J: "[f#3,b3,f#4] ~ [f#3,b3,f#4] ~ [d3,a3,d4]@2 [a2,e3,a3]@2", // B5 D5 A5
  K: "[~@10 f#4@2 f#4@2 f#4@7 f4 [f3,b3,d#4,e4] a#2 [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@3 [a#2,f3,a3,a#3], [b2,f#3,b3]@23 ~@9]/2", // Fm7b5 A5 B5 A5 A#maj7 B5
  L: "[b3@9 ~ f#4@2 f#4@2 f#4@7 [e4,f4] [a#2,f3,d#4] ~ [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@2 [a#2,f3,a#3] [b2,c3,f#3,g3,b3], [b2,f#3]@23 ~@9, ~@5 b3@2 b3@5 ~@4]/2", // Fmaj7 A#sus4 A5 B5 A5 A#5 Cmaj7 B5
  M: "[[c#3,g#3] ~@9 f#4@2 f#4@2 f#4@7 [g#3,c#4,e4,f4] [c#3,f#3,g3,b3,c4,d#4] [f3,a3,a#3] [a2,d3,e3,a3] ~ [b2,e3,b3]@2 [a2,d3,a3]@4, [d3,a3,d4]@5 ~@3]/2", // C#5 C# A#maj7 Asus4 E5 D5
  N: "[[g2,d3,g3]@6 [d3,a3,d4] [a2,e3,a3]]/2", // G5 D5 A5
  O: "[~@10 f#4@2 f#4@2 f#4@7 f4 [f3,b3,d#4,e4] a#2 [a2,e3,a3] ~ [b2,f#3,b3]@2 [a2,e3,a3]@3 [a#2,f3,a3,a#3], [b2,f#3,b3]@21 ~@11]/2", // Fm7b5 A5 B5 A5 A#maj7 B5
  P: "[b3@9 ~ f#4@2 f#4@2 [b3,f#4]@7 [e4,f4] [a#2,f3,d#4] ~ [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@2 [a#2,f3,a#3] [b2,c3,f#3,g3,b3], [b2,f#3]@11 ~@5, ~@5 b3@2 ~@9]/2", // B5 Fmaj7 A#sus4 A5 B5 A5 A#5 Cmaj7 …
  Q: "[[c#3,g#3] ~@9 f#4@2 f#4@2 f#4@7 [g#3,c#4,e4,f4] [c#3,f#3,g3,b3,c4,d#4] [f3,a3,a#3] [a2,d3,e3,a3] ~ [b2,e3,b3]@2 [a2,d3,a3]@4, [d3,a3,d4]@21 ~@11]/2", // C#5 C# A#maj7 Asus4 E5 D5
  R: "[~@9 d4 ~ d4@2 ~@8 f4 [f3,b3,d#4,e4] a#2 [b2,f#3,a3] ~ [b2,f#3,a3]@2 [b2,f#3,a3]@2 [b2,f#3,b3]@23 [e3,f#3,b3] [c#3,g3,c#4] [d3,a3,d4] ~ [a#3,f4]@2 ~@2 [g3,d4]@2 [f#3,c#4], [b2,f#3,b3]@21 ~@35 [e3,b3,e4,f#4]@2 ~ [a3,e4]@2 ~@3, ~@13 d4@7 ~@40 [g#3,d#4]@2 ~@2, ~ b5@3]/4", // Fm7b5 B7 B5 Esus2 C#dim D5 A#5 G5 …
  S: "[b3@10 f#4@2 f#4@2 [b3,f#4]@7 [e4,f4] [a#2,f3,d#4] ~ [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@2 [a#2,f3,a#3] [b2,c3,f#3,g3,b3], [b2,f#3]@21 ~@11, ~@5 b3@2 ~@9]/2", // B5 Fmaj7 A#sus4 A5 B5 A5 A#5 Cmaj7 …
  T: "[[g2,d3,g3]@6 [a3,d4] [a2,e3,a3], ~@24 d3 ~@7]/2", // G5 D5 A5
  U: "[~@10 f#4@2 f#4@2 f#4@7 f4 [f3,b3,d#4,e4] a#2 [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@3 [a#2,f3,a3,a#3], [b2,f#3,b3]@21 ~@11]/2", // Fm7b5 A5 B5 A5 A#maj7 B5
  V: "[b3@9 ~ f#4@2 f#4@2 [b3,f#4]@7 [e4,f4] [a#2,f3,d#4] ~ [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@2 [a#2,f3,a#3] [b2,c3,f#3,g3,b3], [b2,f#3]@21 ~@11, ~@5 b3@2 ~@9]/2", // B5 Fmaj7 A#sus4 A5 B5 A5 A#5 Cmaj7 …
  W: "[g2,d3,g3]", X: "[d3,g3] ~ [d3,g3] ~@3 e2 f#2, g2!2 ~@2", Y: "~@2 [d3,a3,d4] [a2,e3,a3]",
  Z: "[[b2,f#3,b3]@22 [a2,e3,a3] [b2,f#3,b3]]/3", AA: "~@4 [b2,f#3,b3]@3 ~@5 [b2,f#3,b3]@3 ~",
  AB: "[[g2,d3,g3]@23 ~ [d3,a3,d4]@4 [a2,e3,a3]@4]/2", AC: "[[b2,f#3,b3]@30 [a2,e3,a3] [b2,f#3,b3]]/4",
})).s("gm_distortion_guitar").gain(0.35)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@35 A ~ B C D ~@3 E ~ B C D ~@3 E ~@19 A ~ B C D ~@3 A ~ B C D ~@23 A ~ B C D ~@3 A ~ B C D ~@43 A ~ B C D ~@3 A ~ B
  C D ~@3 A ~ B C D ~@3 A ~ B C D ~@9
>`.pickRestart({
  A: "~@7 [a#3,d4] c#4@2 ~@6", B: "~@7 d4 c#4@2 ~@5 c4", C: "c#4 ~@15", D: "~@6 c3 [a#2,b2,d4] c#4 ~@7",
  E: "~@7 [a#3,d4] c#4 ~@7", // A#
})).s("gm_distortion_guitar").gain(0.2)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@2 A@4 B ~@95 A@4 ~@88 A@3 C D ~@2>".pickRestart({
  A: "[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~", // D5
  B: "[a4,d5] ~ [a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]@2", // D5
  C: "[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5]@2", // D5
  D: "a4 ~ [a4,d5]@2 a4 ~ [a4,d5]@2 a4 ~ [a4,d5]@3 ~ [a4,d5]@2", // D5
})).s("gm_electric_guitar_muted").gain(0.35)

// chords · electric guitar muted · soft notes · D5
const electric_guitar_muted_2 = note(`<
  ~@7
  [~ [a4,d5] ~ [a4,d5] ~@4]
  ~@190
  [~@12 a4 ~@3]
  [a4 ~ [a4,d5]@2 a4 ~ [a4,d5]@2 a4 ~ [a4,d5]@2 a4 ~ [a4,d5]@2]
  [a4 ~ [a4,d5]@2 ~@12]
>`).s("gm_electric_guitar_muted").gain(0.15)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A@4 ~@9 B@3 ~@68 C D E@2 F D E@2 F D E@2 F D E G A@3 H I J K L M@2 N@2 O P Q@6 ~@39 R ~@32 A@3 ~@4
>`.pickRestart({
  A: "b2@2 ~@4 f#3@2 ~@4 a3@2 b3 ~", B: "[a4@23 ~]/3", C: "[g2,g3]!8", D: "[f#2,f#3]!8", E: "[e2,e3]!8",
  F: "g3 [g2,g3]!7", G: "[e2,e3]!4 e2 ~@3", H: "~@2 e4@4 d4 e4", I: "f#4@3 f#4 b4 f#4 b4 f#4",
  J: "b4@2 b4@10 [a#3,f4,a#4] [g#3,a3,d#4,e4,a4] [g3,c#4,d4,g4,g#4] [f3,f#3,f#4]", K: "[c#3,c#4], f#3 ~@15",
  L: "d3 e3 f#3 a3 b3 d4 a3 b3", M: "a4@10 a3@3 b3@2 ~",
  N: "[a4@6 f#4 e4 d4@2 e4@16 [d#3,a#3,d#4] [c#3,d3,g#3,a3,d4] [c3,f3,f#3,g3,c4,c#4] [a#2,b2,e3,b3] [d3,d#3,a#3] [c3,c#3,g#3,a3]]/2", // D#5 Dmaj7 Csus4 E D#maj7 C#maj7
  O: "[b2,f#3,g3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3]@2 [d3,a3]@4 [b2,f#3] ~ [b2,f#3,b3]@2", // Gmaj7 B5 D5 B5
  P: "~@2 [b2,f#3,b3] ~ [b2,f#3,b3] ~ [b2,f#3,b3]@2 [d3,a3,d4]@4 [b2,f#3,b3] ~@3", // B5 D5 B5
  Q: "[b4 ~ b4 ~ b4 ~ b4 ~ d5@4 b4@2 e5@80 ~@2]/6",
  R: "~@6 [b3,c4,f#4,g4] [c#4,d4,g#4,a4,a#4] [d#4,e4,b4] [d4,d#4,a4,a#4] [c#4,g4,g#4] [b3,c4,f#4] [a3,a#3,e4,f4] [g#3,d4,d#4] [f#3,g3,c#4] [f3,c4]", // Cmaj7 Emaj7 D#maj7 C# B Fmaj7 G# F# …
})).s("gm_overdriven_guitar").gain(0.39).pan(0.6)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@105 [b2@2 ~ f#3@2 ~ a3 b3] ~@91 [b2@2 ~ f#3@2 ~ a3 b3] ~@3>")
  .s("gm_electric_guitar_jazz").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A@7 B A@19 B A@35 B A@15 C A@15 B D E@3 A@16 F G F G F G F A@64 H I ~ J@2 ~@3
>`.pickRestart({
  A: "x!2", B: "x ~ x!2", C: "x!2 ~@2", D: "x!2 ~ x", E: "~ x ~ x", F: "x!2 ~@2 x!2 ~@2", G: "x ~@7 x ~@4 x!3",
  H: "x!2 ~@2 x ~ x ~", I: "x", J: "x!8",
})).gain(0.5)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@5 A ~ B ~ B ~ B ~@21 C ~@7 D ~@7 E ~@3 B ~@15 C ~@7 D ~@7 F ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@13 D ~@7 E ~@39 G ~@7 H
  ~@7 I ~@7 D ~@10 J K ~@3
>`.pickRestart({
  A: "~@6 x!2", B: "~@5 x ~ x", C: "x ~ x ~@3 x!2 ~@8", D: "x ~ x ~@3 x ~@3 x!2 ~@4", E: "x!3 ~@3 x ~@4 x ~ x!3",
  F: "x!2 ~@2", G: "~@5 x!3", H: "x", I: "~ x!2 ~@2 x!3 ~@5 x!3", J: "x ~@2 x ~@2 x ~", K: "x ~@2 x ~@2 x!2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A ~@18 B C ~@6 B D ~@6 B C ~@3 E ~@14 B C ~@6 B D ~@23 B ~@10 B D ~@6 B F ~@46 G H ~@6 B H ~@6 B D ~@6 B@2 I ~@6
>`.pickRestart({
  A: "x ~@2 x", B: "~@3 x", C: "~ x ~@2", D: "~ x!2 ~", E: "~@5 x ~ x", F: "~ x ~ x", G: "~@2 x!2", H: "x!4", I: "x",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 A ~@7 A ~@8 B ~@18 A ~@7 A ~@35 A ~@8 B ~@46 C ~@8 D ~@6 A ~@16>".pickRestart({
  A: "~@14 x!2", B: "~@9 x!2 ~@5", C: "~@11 x!2 ~ x ~", D: "x ~@2 x!2 ~@11",
})).gain(0.35)

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

stack(
  bass, percussive_organ, string_ensemble_1, distortion_guitar, distortion_guitar_soft, electric_guitar_muted,
  electric_guitar_muted_2, overdriven_guitar, electric_guitar_jazz, kick, snare, hihat, low_tom, open_hat, mid_tom,
  crash
)

More by Billy Idol