Strudelify
Jeepster cover art

Electric Warrior

Jeepster

T. Rex

KeyA minorTempo194 bpm
0:00/0:00
// Jeepster — T. Rex
// 194 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 196 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(194/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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "Ac Piano"
const piano = note(`<
  ~@4 A B A B A B A B C ~ C ~ C ~ C ~ C ~ D E F@4 C ~ C ~ G H I J K L C ~ C ~ C ~ C ~ C ~ D E M@2 N@2 C ~ C ~ G H I J K
  L C ~ C ~ C ~ C ~ C ~ D E M@2 N@2 C ~ C ~ G H I J K L A B A B A B A B C ~ C ~ C ~ C ~ C ~ C ~ C ~ D E M@2 N@2 C ~ C ~
  G H I J K L C ~ C ~ C ~ C ~ C ~ D E M@2 N@2 C ~ C ~ G H I J K O G H I J K L A B A B A B A B C ~ C ~ C ~ C ~ C ~ C ~ C
  ~ C ~ C ~ C ~ C ~ C ~ P Q R@2
>`.pickRestart({
  A: "~@4 [a3,c#4] ~@5 [a3,c#4] ~@5, ~@2 g4 ~@2 g4 ~@2", B: "[a3,c#4] ~@15, g4 ~@7",
  C: "~@4 [a3,c#4,g4] ~@5 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~", D: "e3@7 ~ d3@7 ~", E: "c3@7 ~ a2@6 ~@2",
  F: "[~@4 [a3,c4,f#4] ~@5 [a3,c4,f#4] ~@3 [a3,c4] ~@17, d3@15 ~, ~@7 f#4 ~@8]/2", G: "[g2,g3]", H: "[f#2,f#3]",
  I: "[c3,c4]", J: "[b2,b3]", K: "[a#2,a#3]@15 ~", L: "[a2,a3] ~ e3 ~ f#3 ~ g#3 ~",
  M: "[~@4 [a3,c4,f#4] ~@5 [a3,c4,f#4] ~@3 [a3,c4] ~@15 c5@2, d3@15 ~, ~@7 f#4 ~@8]/2", // F#dim Am
  N: "[b4@2 ~ a4 [a3,c4,b4] ~ c5 ~ b4@2 [a3,c4,f#4,a4] ~ c5@2 [c4,f#4,a4] ~@17, d3@15 ~, ~@2 f#4 ~@4 a3 ~@8]/2", // Am F#dim
  O: "[a2,e3,a3]@15 ~", P: "a5@3 a4 a5 a4 a5 a4 a5 a4 a5 a4 a5 a4 a5 a4, a4 ~@15",
  Q: "a5 a4 ~@3 [g5,a5] ~ a5 e5@2 g5 a5 g5 e5 d#5 ~", R: "[d5 ~ c5@2 a4@2 g4@2 a4@12 ~@12]/2",
})).s("gm_piano").gain(0.4)

// bass · electric bass finger · "El Bass"
const bass = note(`<
  ~@4 A B A B A B A C D C D C D C D C D E F G H I H I D E D E J K L M N O D C D C D C D C D E F G H I H I D E D E J K L
  M N O D C D C D C D C D E F G H I H I D E D E J K L M N O A B A B A B A C D C D C D C D C D C D C D E F G H I H I D E
  D E J K L M N O D C D C D C D C D E F G H I H I D E D E J K L M N P J K L M N O A B A B A B A C D C D C D C D C D C D
  C D C D C D C D C D C D C Q@4
>`.pickRestart({
  A: "~@4 a2@2 ~@4 a2@3 ~@3", B: "a2 ~@7", C: "a2@2 ~@2 e2@3 ~ f#2@2 ~@2 g#2@2 ~@2", D: "a2@5 ~@3 e2@5 ~@3",
  E: "a2@2 ~@2 e2@3 ~ f#2@2 ~@2 a2@2 ~@2", F: "c3@3 ~ b2@3 ~", G: "a2@7 ~ a2@4 e2@3 ~", H: "d2@5 ~@3 a1@6 ~@2",
  I: "d2@3 ~ a1@3 ~ b1@3 ~ c#2@2 ~@2", J: "g1", K: "f#1@15 ~", L: "c2", M: "b1", N: "a#1",
  O: "a1@2 ~@2 e1@2 ~@2 f#1@2 ~@2 g#1@3 ~", P: "a1@7 ~",
  Q: "[a1@19 ~ a2@2 a2 ~ a2@2 ~ a2@2 g2@2 e2@2 d2@2 c2@2 a1@21 ~@6]/4",
})).s("gm_electric_bass_finger").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  A@11 B A@25 B A@25 B A@25 B A@7 B A@7 B A@21 B A@25 B A@5 B A@7 B A@7 B A@7 B A@3 C A@3 B D E F ~
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x ~@7 x ~@2 x ~@4", D: "x ~@8 x ~ x ~ x!2 ~", E: "x ~ x ~ x ~@2 x ~@2 x ~@5", F: "x",
})).gain(0.58)

// drums · snare
const snare = s("sd").struct(`<
  A@11 B A@25 C A@25 C A@25 C A@7 B A@7 B A@21 C A@25 C A@5 C A@7 B A@7 B A@7 B A@7 D ~@3 E
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~ x!3 ~ x!3 ~ x!3 ~ x", C: "~@4 x ~@2 x!3 ~ x!3 ~ x", D: "~@3 x!2 ~@2 x!2 ~@2 x!2 ~@3",
  E: "~@3 x ~@12",
})).gain(0.58)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B A B A B A B A B A ~ 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 C 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 C 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 C A B A D ~ B A ~@9 A B A B A B A B A B A B A B A B A B A
  B A C 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 C A B A B A C A B A B A B A ~@28 E
>`.pickRestart({
  A: "x", B: "~ x!3", C: "~@2 x!2", D: "~ x ~ x", E: "~@3 x ~@4",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~@98 A B@3 C B@2 ~@63 A B@3 C B@2 ~ A B@3 C B@2 ~@13>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~ x!2",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct("<~@195 [~@5 x ~@10]>").gain(0.58)

// drums · open hat
const open_hat = s("oh").struct("<~@105 x ~@69 x ~@7 x!2 ~@11>").gain(0.58)

// drums · high tom
const high_tom = s("ht").struct("<~@163 [~@3 x] ~@31 [~ x ~@2]>").gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ B ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A@3 ~ A ~ A ~ A ~ B ~@3 A ~@3 B ~@3 A ~@3 A ~ A ~ A
  C A ~ D E B ~
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "~@3 x", D: "x ~@8 x ~ x ~ x!2 ~", E: "x ~ x ~@2 x ~ x ~@2 x ~@5",
})).gain(0.58)

// drums · ride
const ride = s("rd").struct("<~@185 A B C B D B E ~@4>".pickRestart({
  A: "~ x ~@2 x ~@3 x ~@3 x ~@3", B: "x ~ x!2", C: "x!4", D: "x!3 ~", E: "x",
})).gain(0.52)

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

// drums · congas
const congas = s("conga:13").struct("<~@12 [~ x ~ x]!78 ~@8 [~ x ~ x]!62 ~@8 [~ x ~ x]!24 ~@4>").gain(1.86)

// drums · congas
const congas_2 = s("conga:18").struct("<~@161 A B A C A D E ~@28>".pickRestart({
  A: "~@7 x ~@3 x ~@4", B: "~ x ~@2", C: "x ~@3 x ~@6 x ~@4", D: "~@4 x ~@6 x ~@4", E: "x ~@6 x ~@8",
})).gain(1.86)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@167 [~@11 x ~@4] ~@28>").gain(1.03)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@12 A B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A B A@3 B A@3 B A@3 B A@3 B A
  B A B A@3 B ~@8 A B A@3 B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A B A@3 B A@3 B A@3 B A@3 B A B A B A@3 B A B A@3 B ~
  C ~ D ~ C E C A B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@4
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "~@3 x ~ x ~@2", C: "~ x ~ x", D: "~ x ~@2", E: "x",
})).gain(1.86)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct(`<
  ~@13 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A
  ~ A ~@3 A ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~@3 A ~@3 B
  ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(1.03)

stack(
  piano, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine, congas, congas_2,
  congas_soft, congas_3, congas_soft_2
)

More by T. Rex