Strudelify
Rebel Rouser cover art

Ze Best - Duane Eddy

Rebel Rouser

Eddy Duane

KeyG majorTempo198 bpm
0:00/0:00
// Rebel Rouser — Eddy Duane
// 198 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(198/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@17 A@4 B@2 A@6 C@2 A@6 B@2 A@6 C@2 A@2 D@4 E@2 D@6 F@2 D@2 G@4 C@2 G@6 H@2 G@2 I@4 F@2 I@6 J@2 I@6 F@2 I@6 J@2 I@6
  F@2 K
>`.pickRestart({
  A: "e2 b1", B: "a1 e2", C: "b1 f#2", D: "f2 c2", E: "a#1 f2", F: "c2 g2", G: "f#2 c#2", H: "c#2 g#2", I: "g2 d2",
  J: "d2 a2", K: "g2@5 ~@11",
})).s("gm_acoustic_bass").gain(0.38)

// other · tenor sax
const tenor_sax = note(`<
  ~@33 A B A B A B A B A B A B A B A B C D C D C D C D C D C D C D C E F@2 G H I@2 J K L M N O P Q@3 ~@16 R S R S R S R
  S R S R S R S R S T S T U V S ~
>`.pickRestart({
  A: "~@2 e4@4 c#4 ~", B: "e4@3 ~@13", C: "~@2 f4@4 d4 ~", D: "f4@3 ~@13", E: "f4@3 ~ f4@4",
  F: "[f#4@3 f#4@8 ~ f4@4]/2", G: "f#4@3 f#4@5", H: "~ f#4!3", I: "[g#4@8 f#4@11 ~ f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@4]/2",
  J: "c#5 f#4", K: "~@4 f#4@2 f#4 ~ f#4@2 f#4 ~ f#4@4", L: "a#4 f#4", M: "~@4 f#4@2 f#4 ~ a#4@4 b4@4",
  N: "a#4 f#4 f#4@2", O: "~@3 f#4@2 f#4@2 ~ a#4@3 b4@2 c5@2 ~", P: "c5@7 ~",
  Q: "[a#4@4 f#4@2 f#4 ~ a#4@12 f#4@2 f#4@5 ~ d#4@2 f#4@9 ~@9]/3", R: "~@2 g4@4 e4 ~", S: "g4@3 ~@13",
  T: "~@2 a4@9 ~ g4@3 ~", U: "g4@3 ~@5", V: "~ g4@2 ~",
})).s("gm_tenor_sax").gain(0.38).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@17 [x!2]!103>").gain(0.59)

// drums · clap
const clap = s("cp").struct("<~@17 [~ x ~ x]!102 [~ x ~@2]>").gain(0.39)

// drums · snare
const snare = s("sd").struct("<~@16 A B@15 C B@15 C B@15 C B@15 C B@15 C B@15 C B@6 D>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x ~@2",
})).gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@17 A@15 B A@15 B A@15 B A@15 B A@15 B A@15 B A@6 B>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@7>".pickRestart({
  A: "~@3 x",
})).gain(0.52)

stack(bass, tenor_sax, kick, clap, snare, hihat, open_hat)