Strudelify

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: edit a riff to change every repeat.

// chords · piano · "Ac Piano"
const piano = note(`<
  ~@4 A B C D E F E D G ~ H ~ H ~ H ~ H ~ I J K@2 L@2 H ~ H ~ M N O P Q R G ~ H ~ H ~ H ~ H ~ I J S@2 T@2 H ~ H ~ M N O
  P Q R G ~ H ~ H ~ H ~ H ~ I J S@2 T@2 H ~ H ~ M N O P Q R A B C D E F E D H ~ H ~ H ~ H ~ H ~ H ~ H ~ I J S@2 T@2 H ~
  H ~ M N O P Q R G ~ H ~ H ~ H ~ H ~ I J S@2 T@2 H ~ H ~ M N O P Q U M N O P Q R A B C D E F E D H ~ H ~ H ~ H ~ H ~ H
  ~ H ~ H ~ H ~ H ~ H ~ H ~ V W X@2
>`.pickRestart({
  A: "~@4 [a3,c#4] ~@5 [a3,g4]@2 ~@4, ~@4 g4@2 ~@4 c#4 ~@5", B: "[a3,g4] ~@7, c#4 ~@15",
  C: "~@4 [a3,c#4,g4]@2 ~@4 [a3,c#4] ~@5, ~@5 g4 ~@2", D: "[a3,c#4] ~@15, g4 ~@7",
  E: "~@4 [a3,c#4] ~@5 [a3,c#4] ~@5, ~@2 g4 ~@2 g4 ~@2", F: "[a3,c#4,g4] ~@15",
  G: "~@4 [a3,c#4] ~@5 [a3,c#4] ~@3 [a3,c#4] ~, ~@2 g4 ~@2 g4 ~ g4", // A
  H: "~@4 [a3,c#4,g4] ~@5 [a3,c#4,g4] ~@3 [a3,c#4,g4] ~", I: "e3@7 ~ d3@7 ~", J: "c3@7 ~ a2@6 ~@2",
  K: "[~@4 [a3,c4,f#4] ~@5 [a3,c4,f#4] ~@3 [a3,c4] ~@17, d3@15 ~, ~@7 f#4 ~@8]/2", // F#dim Am
  L: "[~@4 [a3,c4] ~@5 [a3,c4,f#4] ~@3 [c4,f#4] ~@17, d3@15 ~, ~@2 f#4 ~@4 a3 ~@8]/2", M: "[g2,g3]", N: "[f#2,f#3]",
  O: "[c3,c4]", P: "[b2,b3]", Q: "[a#2,a#3]@15 ~", R: "[a2,a3] ~ e3 ~ f#3 ~ g#3 ~",
  S: "[~@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
  T: "[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
  U: "[a2,e3,a3]@15 ~", V: "a5@3 a4 a5 a4 a5 a4 a5 a4 a5 a4 a5 a4 a5 a4, a4 ~@15",
  W: "a5 a4 ~@2 a5 g5 ~ a5 e5@2 g5 a5 g5 e5 d#5 ~", X: "[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 C B A B C D E F G H E F G H E I J K L M L N E I E I O P Q R S T E F G H E F G H E I J K L M L N E I E I O P Q
  R S T E F G H E F G H E I J K L M L N E I E I O P Q R S T A B C B A B C D E F G H E F G H E F G H E I J K L M L N E I
  E I O P Q R S T E F G H E F G H E I J K L M L N E I E I O P Q R S U O P Q R S T A B C B A B C D E F G H E F G H E F G
  H E F G H E F G H E F G H V@4
>`.pickRestart({
  A: "~@4 a2@2 ~@4 a2@3 ~@3", B: "a2 ~@7", C: "~@2 a2 ~@2 a2 ~@2", D: "a2@2 ~@2 e2@3 ~ f#2@3 ~ g#2@2 ~@2",
  E: "a2@5 ~@3 e2@5 ~@3", F: "a2@2 ~@2 e2@3 ~ f#2@2 ~@2 g#2@2 ~@2", G: "a2@3 ~ e2@3 ~",
  H: "a2@3 ~ e2@3 ~ f#2@2 ~@2 g#2@3 ~", I: "a2@2 ~@2 e2@3 ~ f#2@2 ~@2 a2@2 ~@2", J: "c3@3 ~ b2@3 ~",
  K: "a2@7 ~ a2@4 e2@3 ~", L: "d2@5 ~@3 a1@6 ~@2", M: "d2@3 ~ a1@3 ~ b1@3 ~ c#2@2 ~@2",
  N: "d2@3 ~ a1@3 ~ b1@2 ~@2 c#2@2 ~@2", O: "g1", P: "f#1@15 ~", Q: "c2", R: "b1", S: "a#1",
  T: "a1@2 ~@2 e1@2 ~@2 f#1@2 ~@2 g#1@3 ~", U: "a1@7 ~",
  V: "[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 ~@7 x ~@2 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!2 ~ x ~ x ~", 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