Strudelify

Hot Rod Lincoln

Commander Cody

KeyE majorTempo125 bpm
0:00/0:00
// Hot Rod Lincoln — Commander Cody
// 125 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@3 A B@2 C D@2 E F C D@2 E F C G@2 H@2 C I@2 E F J K L@2 C D@2 E F C D@2 E F C D@2 E F C D@2 M F N O@2 F@2 J K P@2 C
  D@2 F@2 C D@2 M F C D@2 F@3 C O@2 Q R@4 S@3
>`.pickRestart({
  A: "~@2 a1@3 ~ e1@4 a1@4 e1@2", B: "[a1@2 b1@4 f#1@3 ~ b1@4 f#1@4 e2@3 ~ b1@4 e1@4 e2@2]/2", C: "~ e1@2 b1@2 e2@2 b1",
  D: "[~@2 a1@4 e1@3 ~ a1@4 e1@4 b1@4 f#1@4 b1@4 f#1@2]/2", E: "~ e2@2 b1@2 e2@2 b1", F: "~@2 e2@4 b1@3 ~ e2@4 b1@2",
  G: "[~@2 a1@3 ~ e1@3 ~ a1@4 e1@4 b1@4 f#1@4 b1@4 f#1@2]/2", H: "[~@2 e2@4 b1@4 e2@4 b1@4 e2@4 b1@3 ~ e2@4 b1@2]/2",
  I: "[~@2 a1@4 e1@3 ~ a1@4 e1@4 b1@4 f#1@4 b1@4 f#1@2, ~@2 f#8 ~@29]/2", J: "~@2 e1@3 ~ b1@3 ~ e2@4 b1@2",
  K: "e2@2 a1@3 ~ e1@3 ~ a1@4 e1@2", L: "[a1 ~ b1@4 f#1@3 ~ b1@4 f#1@4 e2@3 ~ b1@4 e2@3 ~ b1@2]/2",
  M: "~@2 e2@3 ~ b1@4 e2@4 b1@2", N: "~@2 e1@4 b1@4 e2@3 ~ b1@2",
  O: "[~@2 a1@4 e1@3 ~ a1@4 e1@4 b1@4 f#1@3 ~ b1@4 f#1@2]/2",
  P: "[a1 ~ b1@3 ~ f#1@3 ~ b1@4 f#1@4 e2@3 ~ b1@4 e2@3 ~ b1@2]/2", Q: "~@2 e2@3 ~ b1@3 ~ e1@2 ~@4",
  R: "[~@2 e1@2 ~@6 e1@2 ~@2 e2@6 b1@2 e2@2 b1 ~ e1@3 ~ b1@4 e2@3 ~ b1@2 e2 ~ a1@3 ~ e1@4 a1@4 e1@2 a1@2 b1@4 f#1@2]/4",
  S: "[~@2 b1@4 f#1@4 e2@3 ~ b1@4 e1@4 e2@19 ~@7]/3",
})).s("gm_acoustic_bass").gain(0.41)

// chords · piano
const piano = note(`<
  ~@3 A B C ~@4 D ~@4 D ~@4 D ~@4 D E F G H I ~@3 D ~@4 D ~@4 D ~@4 D ~@4 D E F G H I ~@3 D ~@4 D ~@4 D@2 ~@3 J K L M N
  O P@2
>`.pickRestart({
  A: "~@4 [a2,e3,a3,c#4,e4] ~@3 [a2,e3,a3,c#4,e4] ~@3 [a2,e3,a3,c#4,e4] ~@3", // A
  B: "[a2,e3,a3,c#4,e4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3", // A B
  C: "[b2,b3,d#4,f#4] ~@2 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5]@3", // B C#m7
  D: "~@3 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5]@3", // C#m7
  E: "~@4 [e3,g#3,b3,c#4,e4] ~@3 [e3,g#3,b3,c#4,e4] ~@3 [e3,b3,c#4,e4] ~@3", // C#m7
  F: "[e3,b3,c#4,e4] ~@3 [a2,a3,c#4,e4] ~@3 [a2,a3,c#4,e4] ~@3 [a2,a3,c#4,e4] ~@3", // C#m7 A
  G: "[a2,a3,c#4,e4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3", // A B
  H: "[b2,b3,d#4,f#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3 [e3,b3,e4,g#4] ~@3", I: "[e3,b3,e4,g#4] ~@15",
  J: "~@14 [e2,g#3,b3,e4] ~, ~@7 c#4", K: "~@6 [e2,g#3,b3,c#4,e4] ~@7 [e2,g#3,b3,c#4,e4] ~",
  L: "[e2,g#3,b3,c#4,e4] ~ [e2,g#3,b3,c#4,e4] ~ [e2,g#3,b3,c#4,e4] ~ [e2,g#3,b3,c#4,e4] ~ [e2,g#3,b3,c#4,e4] ~@3 [g#3,b3,c#4,e4] ~@3", // C#m7
  M: "[g#3,b3,c#4,e4] ~@3 [g#3,b3,c#4,e4] ~@3 [g#3,b3,c#4,e4] ~@3 [a2,e3,a3,c#4,e4] ~@3", // C#m7 A
  N: "[a2,e3,a3,c#4,e4] ~@3 [a2,e3,a3,c#4,e4] ~@3 [a2,e3,a3,c#4,e4] ~@3 [b2,b3,d#4,f#4] ~@3", // A B
  O: "[b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@2 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5] ~", // B C#m7
  P: "[~@2 [g#4,b4,c#5,e5] ~@2 [g#4,b4,c#5,e5]@15 ~@12]/2", // C#m7
})).s("gm_piano").gain(0.36)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~@3 A B C D E F G H I E F G H I E F G H I E F G H@2 J K L M E F G H I E F G H I E F G H I E F G H I E F G H@2 J K L M
  E F G H I E F G H I E F G H@2 I E F N O P Q R S T ~
>`.pickRestart({
  A: "~@4 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3", // A5
  B: "[a2,e3,a3] ~@3 [b2,f#3,b3] ~@3 [b2,f#3,b3] ~@3 [b2,f#3,b3] ~@3", // A5 B5
  C: "[b2,f#3,b3] ~@2 [g#3,b3,c#4,e4] ~@2 [g#3,b3,c#4,e4] ~@3 [g#3,b3,c#4,e4] ~@2 [g#3,b3,c#4,e4]@2 ~", // B5 C#m7
  D: "~@4 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3", // E
  E: "[e3,g#3,b3] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3 [e3,a3,c#4] ~@3", // E A
  F: "[e3,a3,c#4] ~@3 [f#3,b3,d#4] ~@3 [f#3,b3,d#4] ~@3 [f#3,b3,d#4] ~@3", // A B
  G: "[f#3,b3,d#4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3", // B E
  H: "[g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3", // E
  I: "[g#3,b3,e4] ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3", // E
  J: "[g#3,b3,e4] ~@3 [a2,e3,a3,c#4] ~@3 [a2,e3,a3,c#4] ~@3 [a2,e3,a3,c#4] ~@3", // E A
  K: "[a2,e3,a3,c#4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3 [b2,b3,d#4,f#4] ~@3", // A B
  L: "[b3,d#4,f#4] ~@3 g#3 ~@3 [g#3,b3] ~@3 [g#3,b3] ~@3", // B G#m
  M: "[g#3,b3] ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3 [e3,g#3,b3] ~@3", N: "[f#3,b3,d#4] ~@13 [e2,e3,b3] ~",
  O: "~@6 [e2,e3,b3] ~@6 e2 e3@2", P: "e2@2 e3@2 e2@2 e3 ~ e2 ~@3 [g#3,b3,e4] ~@3",
  Q: "[g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,c4,e4] ~@3 [a2,e3,a3] ~@3", // E A5
  R: "[a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [b2,f#3,b3] ~@3", // A5 B5
  S: "[b2,f#3,b3] ~@3 [b2,f#3,b3] ~@3 [b2,f#3,b3] ~@2 [g#3,b3,c#4,e4] ~@2 [g#3,b3,c#4,e4] ~", // B5 C#m7
  T: "~@2 [g#3,b3,c#4,e4] ~@2 [g#3,b3,c#4,e4]@2 ~@9", // C#m7
})).s("gm_acoustic_guitar_nylon").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@6 C A B@3 C A B@3 C A B@3 C A B@7 C A B@3 C A B@3 C A B@3 C A B@3 C A B@7 C A B@3 C A B@3 C D A B@2 E F G B@3
  H ~
>`.pickRestart({
  A: "~ x!2 ~@3 x ~@3 x ~@3 x ~", B: "~ x ~ x ~ x ~ x", C: "~@2 x ~@2 x!2 ~@2 x ~ x ~ x ~ x",
  D: "~ x!2 ~@2 x!2 ~@2 x ~ x ~ x ~ x", E: "~ x ~ x ~@3 x", F: "~@6 x ~@3 x ~@2 x!2 ~", G: "~ x!2 ~ x!2 ~ x",
  H: "~@2 x ~@2 x ~@10",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct("<~@3 A@2 B C A@71 D E F A@2 G H ~>".pickRestart({
  A: "x!4", B: "x!2 ~ x ~ x ~@2", C: "~ x ~@2 x ~@3 x ~@3 x ~@3", D: "x ~ x ~ x!2 ~@2", E: "~ x ~@5 x",
  F: "x ~@5 x ~ x!2 ~@2 x ~@3", G: "x ~ x ~ x ~ x!2", H: "~@2 x!4 ~@10",
})).gain(0.51)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A ~@2 B C ~@72 D E ~@2 F G ~>".pickRestart({
  A: "~@15 x", B: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", C: "x", D: "~@13 x ~@2", E: "~@4 x!2 ~ x ~@8", F: "~@10 x ~@2 x ~@2",
  G: "x!2 ~@14",
})).gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@84 x ~>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D@7 E D@4 E D@4 E D@4 E D@8 E D@4 E D@4 E D@4 E D@4 E D@8 E D@4 E D@4 E@2 D@3 F G H D@2 I J ~
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "~@3 x ~@3 x", C: "~ x!3", D: "x!8", E: "x!4", F: "x!4 ~@3 x", G: "~@3 x ~ x ~@2",
  H: "x ~@4 x!3", I: "x!7 ~", J: "x ~@2 x ~@12",
})).gain(0.51)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@3 A B@6 C B@4 C B@4 C B@4 C B@8 C B@4 C B@4 C B@4 C B@4 C B@8 C B@4 C B@4 C@2 B@3 D ~ E B@3 F ~
>`.pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~@2", B: "~ x ~@3 x ~@3 x ~@3 x ~@2", C: "~ x ~@3 x ~@10", D: "~ x ~@3 x ~@3 x ~@6",
  E: "~@13 x ~@2", F: "~ x ~@14",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@84 [~ x ~@6] ~>").gain(0.51)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B ~@7 C ~@4 C ~@4 C ~@4 C ~@8 C ~@4 C ~@4 C ~@4 C ~@4 C ~@8 C ~@4 C ~@4 C@2 ~@3 D E ~@3 F G ~
>`.pickRestart({
  A: "~@3 x", B: "x", C: "~@2 x ~@3 x ~@3 x ~@2 x ~@2", D: "~@4 x!2 ~@2", E: "~ x ~@5 x", F: "~@7 x",
  G: "~@2 x ~ x!2 ~@10",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct("<~@80 [~@5 x ~@2] ~@3 [~@5 x ~@10] ~>").gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@55 [~ x ~ x ~ x ~ x]!4 ~@21 [~@5 x ~ x] [~ x ~ x ~ x ~ x]!2 [~ x ~ x ~@4] ~@2>")
  .gain(0.51)

stack(
  bass, piano, acoustic_guitar_nylon, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash,
  ride
)