Strudelify

Rebel Rebel

David Bowie

KeyA majorTempo130 bpm
0:00/0:00
// Rebel Rebel — BOWIE DAVID
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 overdriven guitar (copy of ch 1 overdriven guitar)
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · overdriven guitar
const overdriven_guitar = note(`<
  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 C D E F A B A B A B D G A B A B A B A B A B A B A B A
  B A B A B A B A B C D E F A B A B A B D G A B A B A B A B A B A B A B D G 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 H
>`.pickRestart({
  A: "~@2 e4@2 [d4,e4]@2 c#4 b3, d3@3 ~", B: "~ [b3,e4] ~@2 c#4 b3 g#3 e3, ~@3 e3@4 ~", C: "[a3,e4]@3 ~",
  D: "[d3,a3,d4]@3 ~", E: "[b2,f#3,b3,d4]@3 [b2,f#3]", F: "[e2,e3]!3 [e2,e3,b3]!5", G: "[e2,b2,e3,b3]@3 g2",
  H: "[d3,a3,d4]", // D5
})).s("gm_overdriven_guitar").gain(0.4).pan(0)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  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 ~@4 A B A B A B ~@2 A B A B A B A B A B A B A B A B A
  B A B A B A B ~@4 A B A B A B ~@2 A B A B A B A B A B A B A B ~@2 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: "~@4 a3@2 a3 [g#3,e4]", B: "~ g#3 ~@6",
})).s("gm_overdriven_guitar").gain(0.2).pan(0)

// bass · electric bass finger
const bass = note("<~@7 A B@24 C D E F B@6 G H ~@3 A B@20 C D E F B@6 G H ~@3 A B@10 G H B@2 I@2 B@32 G>".pickRestart({
  A: "~ e2 d2 c#2 b1 a1 g#1 f#1", B: "[d2@2 d2@2 d2 c#2 d2 e2@2 e2@2 e2 b1 d2 c#2 e2]/2", C: "a1@2 a1@2 a1 f#1 a1 c#2",
  D: "d2@2 d2@2 d2 c#2 d2 c#2", E: "b1@2 b1@2 b1 c#2 b1 a1", F: "e1!4", G: "d2", H: "e2",
  I: "[d2@2 d2@2 d2 c#2 d2 e2@2 e3 d3 c#3 b2 a2 g#2 f#2]/2",
})).s("gm_electric_bass_finger").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@38 B@2 A@34 B@2 A@14 B@2 A@36 B>".pickRestart({
  A: "x ~ x ~ x!3 ~", B: "x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<[x!4]!4 ~@129>").gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@3 B A@7 B A@15 B A@3 B A@5 B C D A@3 B A@19 B A@3 B A@5 B C D A@3 B A@9 B C D A@3 B A@3 B A@28 C
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~ x!3 ~ x ~", C: "x", D: "x ~@9 x!3 ~ x ~",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@4 A@38 B@2 A@34 B@2 A@14 B@2 A@36 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@7 A ~@19 A ~@5 A@3 ~@3 A ~@3 A ~@19 A ~@5 A@3 ~@3 A ~@3 A ~@5 A@3 ~@3 A ~@3 A ~@9 A ~@9 A ~ A ~ A ~ A ~
  A
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@36 A B@5 C ~@29 A B@5 C ~@9 A B@5 C ~@38>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.48)

stack(overdriven_guitar, overdriven_guitar_soft, bass, kick, rim, snare, clap, crash, tambourine)

More by David Bowie