Strudelify
Drive cover art

1984 · Heartbeat City

Drive

The Cars

KeyE♭ minorTempo86 bpm
0:00/0:00
// Drive — The Cars
// 86 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "A.PIANO 1"
const piano = note(`<
  ~@24 A B C@2 A B C@2 A B C@2 A B C@2 ~@4 D E ~@8 A B C@2 A B C@2 ~@4 D E D ~@4 D E ~@4
>`.pickRestart({
  A: "[eb4,gb4,b4] ~", B: "[eb4,gb4,bb4] ~", C: "[b3,eb4,gb4] ~", D: "[gb4,b4,eb5] ~", E: "[gb4,bb4,eb5] ~",
})).s("gm_piano").gain(0.36)

// bass · electric bass finger · "FINGERDBAS"
const bass = note("<A@16 B C B C A@20 B C B C A@3 B A B D E F@2 A@8 B C B C A@3 B C B C A@5 G>".pickRestart({
  A: "b1 ~@2 b1 ~@2 b1@4 ~@6", B: "ab1 ~@2 ab1 ~@2 ab1@4 ~@6", C: "db2 ~@2 db2 ~@2 db2@4 ~@6",
  D: "eb2 ~@2 eb2 ~@2 eb2@4 ~@6", E: "e2 ~@2 e2 ~@2 e2@4 ~@6", F: "gb1 ~@2 gb1 ~@2 gb1@4 ~@6", G: "b1 ~",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@4 A B A@3 B A@3 B A@2 C D C E A B A@3 B A@3 B A@3 B A@3 B A@2 C D C E A B F G F G H I F J A B K L A B A@2 C D C E A
  B A C D C E A B F@3 M
>`.pickRestart({
  A: "~ [gb3,b3,eb4] ~@2 [gb3,b3,eb4] ~@2 [gb3,b3,eb4]@5 ~@4", // B
  B: "~ [gb3,bb3,eb4] ~@2 [gb3,bb3,eb4] ~@2 [gb3,bb3,eb4]@5 ~@4", // Ebm
  C: "~ [ab3,b3,eb4] ~@2 [ab3,b3,eb4] ~@2 [ab3,b3,eb4]@5 ~@4", // Abm
  D: "~ [f3,ab3,db4] ~@2 [f3,ab3,db4] ~@2 [f3,ab3,db4]@5 ~@4", // Db
  E: "~ [ab3,db4,f4] ~@2 [ab3,db4,f4] ~@2 [ab3,db4,f4]@5 ~@4", // Db
  F: "[gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~", // B
  G: "[ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~", // Abm
  H: "[gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~", // Ebm
  I: "[ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~", // E
  J: "[gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,b3,db4] ~ [gb3,b3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~", // Gb Gbsus4 Gb
  K: "~ [gb3,b3,eb4] ~@2 [gb3,b3,eb4] ~@2 [gb3,b3,db4]@5 ~@4", // B Gbsus4
  L: "~ [eb3,gb3,b3] ~@2 [eb3,gb3,b3] ~@2 [eb3,gb3,b3]@5 ~@4", M: "[eb3,gb3,b3] ~",
})).s("gm_pad_poly").gain(0.3)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A B C@2 A B C@2 ~@4 A B C@2 ~ D ~ D ~@2 C@2 E@4 ~@4 A B C@2 A B C@2 ~ D ~ D ~@2 F ~ F ~@5 A B C@2 A B C@2 ~ D ~ D ~@4
  D ~ D ~@2 G@4
>`.pickRestart({
  A: "b4", B: "bb4", C: "gb4/2", D: "ab4", E: "[eb4@63 ~]/4", F: "gb4", G: "[gb4@55 ~@9]/4",
})).s("gm_string_ensemble_2").gain(0.14).pan(0.9)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@49 A@2 B C@2 ~@25>".pickRestart({
  A: "[~@12 ab5@15 ~@5]/2", B: "b5@2 ~ bb5@2 ~ ab5@2", C: "[~@7 gb5@6 ~@3]/2",
})).s("gm_electric_guitar_jazz").gain(0.3)

// other · celesta
const celesta = note("<~@4 A B A@2 ~@14 A@2 ~@22 C ~ C ~ D ~ C E ~@21 A@3 F>".pickRestart({
  A: "b5 ~ db6 eb6 b5 ~ eb6 db6 ~@8", B: "bb5 ~ db6 eb6 b5 ~ eb6 db6 ~@8", C: "db6 eb6 ~@2 db6 b5 ~@2 db6 eb6 ~@6",
  D: "db6 eb6 ~@2 db6 bb5 ~@2 db6 eb6 ~@6", E: "bb5 ~@5 b5 ~@5 db6 ~@3", F: "b5 ~@15",
})).s("gm_celesta").gain(0.27)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@2 x ~@9]!78 x>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<A@23 B A@16 B@4 A@9 B A@8 B@3 C A@2 D B@3 A B@2 A@2 B ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~ x ~@2 x ~@7 x!2 ~@2",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<[~@10 x ~@2 x ~@2]!72 ~ [~@10 x ~@2 x ~@2]!5 ~>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!78 ~>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@68 [~@6 x ~ x!2 ~ x ~@2 x!2] ~@3 [~@9 x!2 ~@2 x!3] ~@4 [~@8 x!2 ~@3 x!3] ~>")
  .gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@68 [~@5 x ~@10] ~@3 [~@2 x!2] ~@4 [~@8 x ~@2 x ~@4] ~>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@15 A ~@3 A ~@9 A ~@7 A ~@3 A ~ A@2 ~@3 A ~ A ~@2 A
>`.pickRestart({
  A: "x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<A@4 B@4 A@14 B@2 A@17 B@3 A@2 B@4 A@3 B A@9 B@3 A@4 B@2 A@2 B@4 ~>".pickRestart({
  A: "~@4 x!5 ~@7", B: "~@2 x!6 ~@8",
})).gain(0.23)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<A@4 ~@4 A@14 ~@2 A@17 ~@3 A@2 ~@4 A@3 ~ A@9 ~@3 A@4 ~@2 A@2 ~@5>".pickRestart({
  A: "~@9 x!2 ~@5",
})).gain(0.14)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@24
  [~@5 x ~@4 x ~@3 x ~]
  [~@5 x ~@5 x ~@2 x ~]!15
  ~@14
  [~@5 x ~@4 x ~@3 x ~]
  [~@5 x ~@5 x ~@2 x ~]!7
  ~@17
>`).gain(1.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@2 x!7 ~@7]!78 ~>").gain(1.83)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@9 x ~@6]!78 ~>").gain(0.91)

// drums · rim
const rim = s("rim").struct("<~@24 [~ x ~@7 x ~@5 x]!16 ~@14 [~ x ~@7 x ~@5 x]!8 ~@17>").gain(0.23)

stack(
  piano, bass, pad_poly, string_ensemble_2, electric_guitar_jazz, celesta, kick, snare, clap, hihat, mid_tom, high_tom,
  crash, tambourine, tambourine_soft, congas, cabasa, cabasa_soft, rim
)

More by The Cars