Strudelify

Rebel Yell

Billy Idol

KeyB minorTempo168 bpm
0:00/0:00
// Rebel Yell — IDOL BILLY
// 168 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 177 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): JAZZ GTR.
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.

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@4 A B A C A D A E F@4 G H G H G H G I J H G H G H G K L@2 M@2 N@2 O@2 L@2 M@2 N@2 P@2 Q@4 G H G H G H G I J H G H G
  H G K L@2 M@2 N@2 O@2 L@2 M@2 N@2 R S A B A C A B A C A B A C A B A T U@3 V L@2 M@2 N@2 O@2 L@2 M@2 N@2 P@2 ~@40 L@2
  M@2 N@2 O@2 L@2 M@2 N@2 P@2 ~
>`.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] ~@2 [f#3,b3,f#4] ~ [f#3,b3]", I: "[f#3,b3,f#4] ~ [f#3,b3,f#4] ~ [d2,d3]!2 [a1,a2]!2",
  J: "[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
  K: "[f#3,b3,f#4] ~ [f#3,b3,f#4] ~ [d3,a3,d4]@2 [a2,e3,a3]@2", // B5 D5 A5
  L: "[~@10 f#4@2 f#4@2 f#4@7 f4 [f3,b3,d#4,e4] ~ [a2,e3,a3]@2 [b2,f#3,b3]@2 a3@2 a3 [a#2,f3,a#3], [b2,f#3,b3]@23 a#2@2 ~@3 [a2,e3]@4]/2", // Fm7b5 A5 B5 A#5 B5 A5
  M: "[b3@9 ~ f#4@2 f#4@2 f#4@6 f4 e4 [a#2,f3,d#4]@2 [a2,e3,a3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@2 [a#2,f3,f#3,a#3,b3] [b2,c3,c#3,g3,g#3], [b2,f#3]@23 ~@9, ~@5 b3@2 b3@5 ~@4]/2", // A#sus4 A5 B5 A5 F#maj7 B5
  N: "[~@10 f#4@2 f#4@2 f#4@6 f4 [g#3,c#4,e4] [c#3,f#3,g3,b3,c4,d#4] [e3,f3,a3,a#3] [a2,d3,a3]@2 [b2,e3,b3]@2 [a2,d3,a3]@4, [d3,a3,d4]@11 ~@5]/2", // C#m Fmaj7 D5 E5 D5
  O: "[[g2,d3,g3]@23 ~ [d3,a3,d4]@4 [a2,e3,a3]@4]/2", P: "[[g2,d3,g3]@23 ~ [d3,a3,d4]@4 [a2,e3]@4, ~@28 a3 ~@3]/2",
  Q: "[~@9 d4 ~ d4@2 ~@8 f4 [d#4,e4] ~ [b2,f#3,a3]@2 [b2,f#3,a3]@2 [b2,f#3,a3]@2 [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]@11 f3 ~@16 [e3,b3,e4,f#4] ~ [g#3,d#4] ~, ~@13 d4@7 ~@2 b3@8 ~@29 [a3,e4]@2 ~@3, ~ b5@3, ~@23 a#2@2 ~@5 b2@25 ~@9]/4", // Emaj7 B7 B5 Esus2 C#dim D5 A#5 G5 …
  R: "[g2,d3,g3]", S: "[d3,g3] ~ [d3,g3] ~@3 e2 f#2, g2!2 ~@2", T: "~@2 [d3,a3,d4] [a2,e3], ~@12 a3 ~@3",
  U: "[[b2,f#3,b3]@22 [a2,e3,a3] [b2,f#3,b3]]/3", V: "~@4 [b2,f#3,b3]@3 ~@5 [b2,f#3,b3]@3 ~",
})).s("gm_distortion_guitar").gain(0.21)

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

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 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 R H S T 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 ~
>`.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: "a1@2 a1@2 a1@2 a1 ~ a1@2 a1@2 a1@2 a1@2", S: "g1@3 ~ g1@3 ~ g1@3 ~ g1@4", T: "e1@4 e1@2 e1@2 d2@2 d2@2 a1@2 a1 ~",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · electric guitar muted · "MUTED GTR" · D5
const electric_guitar_muted = note(`<
  [[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~]!4
  [[a4,d5] ~ [a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]@2]
  [~ [a4,d5] ~ [a4,d5] ~@4]
  ~@94
  [[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~]!4
  ~@73
>`).s("gm_electric_guitar_muted").gain(0.36)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@12 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 ~
>`.pickRestart({
  A: "[[f#3,b3,d4]@127 ~]/8", B: "[a3,d4,f#4,a4]/2", C: "[[b3,f#4]@6 [a3,d4] [e3,a3], [g3,d4]@11 ~@5]/2",
  D: "[[f#3,b3], d4@31 ~]/4", E: "[d4,f#4,b4,d5]/4", F: "[[d4,f#4,a4,d5]@31 ~]/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@127 ~]/8",
})).s("gm_string_ensemble_1").gain(0.42)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  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 ~@17
>`.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,a3,a#3] [c3,c#3,g3,g#3]]/2", // D#5 Dmaj7 Csus4 E D#maj7 C#maj7
  O: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3]@2 [d3,a3]@4 [b2,f#3] ~ [b2,f#3,b3]@2", // 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.36).pan(0.6)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@4 A B A@3 B A@2 ~@72 C D C@3 D C@3 D C@3 D C E ~@77>".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.3)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@103 [b2@2 ~ f#3@2 ~ a3 b3] ~@73>").s("gm_electric_guitar_jazz").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~@4 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@49 ~>".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",
})).gain(0.54)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@11 A ~@27 B ~@6 C D ~@27 B ~@23 A ~@11 B ~@6 C D ~@47 E ~@6 C F ~>".pickRestart({
  A: "~@3 x ~@4", B: "~@13 x!2 ~", C: "~@15 x", D: "~@3 x ~ x!3 ~@8", E: "~ x ~@7 x ~@3 x ~@2", F: "~@9 x ~@6",
})).gain(0.36)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 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 ~
>`.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 ~@2",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 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 ~
>`.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",
})).gain(0.42)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@4 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 ~
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "~@3 x",
})).gain(0.42)

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

More by Billy Idol