Strudelify

Jerry Was a Race Car Driver

Primus

KeyE minorTempo124 bpm
0:00/0:00
// Jerry Was a Race Car Driver — Primus
// 124 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 52, 4/4 at bar 54) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · electric bass pick · "Bass (Les Claypool)"
const electric_bass_pick = note(`<
  A@3 B A@5 C D A@4 E A@4 F@4 A@9 G@3 F@3 E A@3 H I J I K I L I M ~ N O@12 P@4 O@7 Q R S T U V W X Y@5 R@2 Z
>`.pickRestart({
  A: "[c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] c3 c#3 d#3@2", // Cdim G5 Cdim
  B: "[c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] e3@2 c3@2", // Cdim G5 Cdim
  C: "[g2,c4,f#4] ~@2 [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] c3 c#3 d#3@2", // C G5 Cdim
  D: "[c4,f#4] ~ g2 [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] c3 c#3 d#3@2", // Cdim G5 Cdim
  E: "[c4,f#4] g2 ~ [d4,g4] ~@3 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] c3 c#3 d#3@2", // Cdim G5 Cdim
  F: "[c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] [e3,a3]@4", // Cdim G5 Cdim A5
  G: "[c4,f#4] g2 ~ [d4,g4] g2 ~@2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4] c3 c#3 d#3@2", // Cdim G5 Cdim
  H: "[c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~@8", // Cdim G5 Cdim
  I: "e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [g3,c4]!2 [g#3,c#4] [a#3,d#4]@2", // C5 C#5 D#5
  J: "e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~@2 [g3,c4] [g#3,c#4] [a#3,d#4]@2", // C5 C#5 D#5
  K: "e2 g2 f#2 e2 a2 g2 f#2 e2 ~ [a#3,d#4]!5 [a#3,d#4]@2", L: "e2 g2 f#2 e2 a2 g2 f#2 e2!2 d2@4 d#2@3",
  M: "e2 g2 f#2 e2 a2 g2 f#2 e2 ~@8", N: "~@4 [c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4]",
  O: "c3 c#3 d#3@2 [c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4]", // Cdim G5 Cdim
  P: "[e3,a3]@4 [c4,f#4] g2 ~ [d4,g4] a#2 g#2 g2 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4]", // A5 Cdim G5 Cdim
  Q: "c3 c#3 d#3@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [g3,c4]", // C5
  R: "[g3,c4] [g#3,c#4] [a#3,d#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [g3,c4]", // C5 C#5 D#5 C5
  S: "[g3,c4] [g#3,c#4] [a#3,d#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [c4,f4]", // C5 C#5 D#5 F5
  T: "g4 d#4 [f4,a#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2!2 d2@3", U: "~ d#2@3 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [g3,c4]",
  V: "[g3,c4] [g#3,c#4] [a#3,d#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ [a#3,d#4]!3", // C5 C#5 D#5
  W: "[a#3,d#4]!2 [a#3,d#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [f#3,b3]", // D#5 B5
  X: "[f#3,b3]!2 [a3,d4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2@2 d2@3", // B5 D5
  Y: "[d3@4 ~@4 [e4,a4]!2 ~@2 [c4,f#4]!4 [e4,a4]!3 [c4,f#4]!5 [e4,a4]!4 [c4,f#4]!4 [e4,a4]!4 [c4,f#4]!4 [d#4,g#4]!4 [c4,f#4]!4 [d#4,g#4]@2 c3@2 e2@8 e3@8 e2 g2 f#2 e2 a2 g2 f#2 e2 ~ e2 ~ [g3,c4], ~ b1@12 ~@7]/5", // A5 Cdim A5 Cdim A5 Cdim A5 Cdim …
  Z: "[g3,c4] [g#3,c#4] [a#3,d#4]@2 e2 g2 f#2 e2 a2 g2 f#2 e2 ~@4", // C5 C#5 D#5
})).s("gm_electric_bass_pick").gain(0.45)

// chords · distortion guitar · "Guitar (Ler Lalonde)"
const distortion_guitar = note(`<
  ~@2 A B C D E D F G H I ~@8 J K J L C D E M ~@8 N O N P Q D E R S@3 T S@2 U T ~ V@2 W X Y Z AA AB AC AD AE AF AG AH AI
  AJ AK AL AM AN AO ~@3 AP AQ@10 AR AS AQ@2 AT
>`.pickRestart({
  A: "[d#4,g#4]@2 [g4,c5] ~@5", B: "[a4,d5]@2 [g4,c5] ~@3 [g#5,d6]!2", C: "[a5,d#6]@3 d#6@2 a5 d#6 a5",
  D: "[g#5,d6,g6]@6 g#5 [d6,g6]@3 g#5@2 [d6,g6]@2 [g#5,d6]@2", E: "[a5,d#6]@6 a5 d#6@3 a5@2 d#6@2 a5@2",
  F: "[a5,d#6]@4 d#6@2 a5 d#6@3 a5@2 d#6@2 a5@2", G: "[g#5,d6]@2 [g#5,d6] g#5@2 [d6,g6] g#5 [g#5,d6]",
  H: "[a5,d#6]@4 a5@2 a5 d#6@3 a5@2 d#6@2 a5@2", I: "[g#5,d6,g6]@4 [g#5,d6]@2 [g#5,d6] [d6,g6]@8 ~",
  J: "d5 g4@2 d#5 g4@2 d5@2 d#5 g4@2 d5 d#5@2 d#5 g4", K: "d5 g4@2 d#5 g4@2 d5@2 d#5 g4@2 d5 [c5,f#5]@2 f#5@2",
  L: "d5 g4@2 d#5 g4@2 d5 g4 e5 g4@2 a5 [c5,f#5]@3 [g#5,d#6]", M: "d6@4 a5@2 [a5,d6] [d6,g6]@7 ~@2",
  N: "d5 g4@2 d#5 g4@2 d5@2 d#5 g4@2 d5 g4@2 d#5@2", O: "d5 g4@2 d#5 g4@2 d5@2 d#5 g4@2 d5 c6@3 ~",
  P: "d5 g4@2 d#5 g4@2 d5@2 d#5 g4 ~@2 [c5,f#5]@2 ~ g#5", Q: "a5@3 d#6@2 [a5,d#6] d#6!2",
  R: "[g#5,d6]@2 [g#5,d6] [d6,g6]!5 ~@8", S: "[e3,b3]@3 [e3,b3] [e3,b3]@3 [e3,b3] ~ [e3,b3] ~@6",
  T: "[e3,b3]@3 [e3,b3] [e3,b3]@3 [e3,b3] ~@8", U: "[e3,b3]@2 [e3,b3]!6 ~ [e3,b3] ~@6",
  V: "[~@4 c6 a5@14 ~@3 a5 [b5,c#6] d#6 f6 g6@2 ~ g6 f#6 e6]/2", W: "f#6@4 ~@2 g6 f6 e6 d6 e6 d6 c6 b5 c6 b5",
  X: "a5 b5 a5 [g5,a5] f5@6 f5 [c5,c6]@3 ~@2", Y: "[c5,c6]@4 ~@2 e5 f#5 e5 e5@2 e5 d5 e5 f5 g#5",
  Z: "a5 b5 c6@8 c6 b5@5", AA: "~@4 d6 c6 b5 a5 d#6 d6 c6 [b5,c#6] e6 d#6 c#6 [b5,d6]",
  AB: "f6 e6 d6 [c#6,d6] ~ e6 f6!3 d6 c6 f6 c6 [c#6,f#6] d6 c6", AC: "c6 f6 c6 g6 [d6,g6]@12",
  AD: "d6@2 c#5@2 c6@2 ~ d5 ~ a5 c6 ~ f#6 c7 ~@2", AE: "g#6@3 ~@3 a6 [f6,g6] d#6 [b5,c#6] b5 [g5,a5] d6@2 d#6@2",
  AF: "d#6@2 e6@3 ~ b4 ~, ~@2 c6 ~@5", AG: "[a3,d4]@4 b4 a4@2 e5 g4!2 d5@2 e5 g4!2 [g4,d5]",
  AH: "e5@2 e5 g4 d5 g4!2 d#5 g4!2 d5 g4 d#5 g4 a4@2", AI: "[c5,f#5]@2 ~@2 d5 g4!2 d#5 g4!2 d5 g4 d#5 g4@2 d5",
  AJ: "~@2 d#5 g4 d5 g4@2 d#5 g4@2 d5 g4 d#5 g4 a4@2", AK: "[c5,f#5]!2 [a5,d#6]@3 d#6@2 a5",
  AL: "d#6@2 [a5,d#6]@2 [g#5,d6]@6 g#5 [d6,g6]@3 g#5@2", AM: "[d6,g6]@2 g#5@2 a5@6 a5 d#6@3 a5@2",
  AN: "[a5,d#6]@2 [a5,d#6]@2 [g#5,d6]@4 ~@2 [g#5,d6] [d6,g6] ~@4", AO: "[a3,d4,g4] ~@7",
  AP: "~@4 [e4,b4]@3 [e4,b4]!2 [e4,b4]@2 [e4,b4] ~ [e4,b4] ~@2", AQ: "~@4 [e4,b4]@3 [e4,b4]!5 ~ [e4,b4] ~@2",
  AR: "~@4 [e4,b4]@3 [e4,b4]!5 ~ [e4,b4] ~ [e4,b4]", AS: "[e4,b4]!2 [e4,b4]@2 [e4,b4]@3 [e4,b4]!5 ~ [e4,b4] ~@2",
  AT: "~@4 [e4,b4]@3 [e4,b4] [e4,b4]@3 [e4,b4] ~@4", // E5
})).s("gm_distortion_guitar").gain(0.33)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@2 B@3 C B@3 D E@7 F G F G F B@3 H E@7 I G@4 B@3 J K L K@4 L M N O P@10 Q R S@3 P@3 Q T P@3 U V@7 W@3 ~ V@3 W
>`.pickRestart({
  A: "~ x ~@2 x ~@11", B: "x ~@2 x ~ x ~ x", C: "x ~@5 x ~@3 x!2 ~ x!3", D: "x ~@2 x!3 ~@2", E: "x ~@9 x ~@3 x!2",
  F: "x ~@9 x!2 ~@4", G: "x ~@9 x!2 ~@2 x ~", H: "x", I: "x ~@4 x ~@2", J: "x ~@4 x ~@10",
  K: "~@3 x ~@2 x!2 ~ x ~ x ~@3 x", L: "~@3 x ~@2 x!2 ~ x ~ x ~@4", M: "~ x!3 ~ x!2 ~@9", N: "~@13 x ~ x",
  O: "~ x ~ x!2 ~@5 x ~@3 x ~", P: "~ x!2 ~@2 x ~ x", Q: "~@2 x ~ x ~@5 x ~@3 x!2", R: "~@4 x ~@9 x!2",
  S: "~@2 x ~ x ~@9 x!2", T: "~@2 x ~@2 x ~ x", U: "~@2 x ~@4 x ~@2 x!2 ~ x ~ x", V: "~@7 x ~@2 x!2 ~ x ~ x",
  W: "~@5 x!3 ~ x!2 ~@5",
})).gain(0.59)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B C@7 D E@7 F E@4 C@3 G E@7 H E@4 C@3 I J@7 K L M@12 N O@3 M@4 P M@3 Q@8 R S@2 T U Q@2 V
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "x ~@2 x ~@7 x!2 ~@3", C: "~@4 x ~@2 x ~@4 x ~@3", D: "~@4 x ~@2 x ~@4 x!4", E: "~ x ~ x",
  F: "~@4 x ~@7 x!4", G: "~@4 x ~@3 x!2 ~ x!2 ~@3", H: "~@4 x ~@6 x!2 ~@3", I: "~@4 x ~ x!2 ~@8", J: "x!2 ~ x",
  K: "x ~@3 x ~@2 x ~@8", L: "~@3 x", M: "x ~@7 x ~@2 x ~@4", N: "x!4 ~@4 x ~@7", O: "x!2", P: "x!4 ~@4 x ~@2 x ~@4",
  Q: "x!3 ~", R: "x ~@3 x ~@3 x ~@2 x ~ x ~@2", S: "~@4 x ~@3 x ~@2 x ~ x ~@2", T: "~@4 x ~ x!6 ~ x!3",
  U: "x!3 ~ x ~@3 x ~@7", V: "x ~@3 x ~@3 x ~@2 x ~@4",
})).gain(0.59)

// drums · low tom
const low_tom = s("lt").struct("<~@27 [~@15 x] ~@7 [~@15 x] ~@57>").gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@12 [x!4]!8 ~@8 [x!4]!7 [x!3 ~] ~@57>").gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 [~@7 x] ~@7 [~@7 x] ~@57>").gain(0.59)

// drums · open hat
const open_hat = s("oh").struct("<~@2 [~ x ~@2 x ~@11]!2 ~@8 x ~@80>").gain(0.59)

// drums · high tom
const high_tom = s("ht").struct("<~@27 [~@13 x ~@2] ~@7 [~@13 x ~@2] ~@57>").gain(0.59)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@3 A ~@11 A@4 ~@4 A ~@7 A@4 ~@4 B@7 ~@14 C@4 ~@9 A@8 ~@2 C ~ A@3>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.59)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A B@3 A B@2 C ~@8 A@4 B@3 D ~@8 A@4 B@3 D C@7 D ~ A B@11 E F@3 B@4 A B@4 A@7 ~@4 A@3 G
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x!2 ~@2", E: "~@2 x!2", F: "x ~ x!2", G: "~ x!2 ~",
})).gain(0.59)

stack(electric_bass_pick, distortion_guitar, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride)

More by Primus