Strudelify
Just What I Needed cover art

1978 · The Cars

Just What I Needed

The Cars

KeyE majorTempo130 bpm
0:00/0:00
// Just What I Needed — The Cars
// 130 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "Synth" lead 1 square (copy of ch 3 "Lead guitar" overdriven guitar); ch 6 "Mute Guitar" electric guitar muted (copy of ch 1 "Bass" electric bass pick)
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// other · overdriven guitar · "Lead guitar"
const overdriven_guitar = note(`<
  ~@20 A ~ A ~ A ~ A ~@2 B@8 C ~@15 D@8 ~@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G@3
>`.pickRestart({
  A: "b3 ~ c#4 ~ e4 ~ b3@6 ~@2 a3@2",
  B: "[~@4 e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 c#5 [c5,d#5]@5 e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 e4 [a3,c#4]@5 e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 c#5 [c5,d#5]@5 e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 e4 [a3,c#4]]/8", // D#m E Cm D#m E A D#m E …
  C: "c#4 b3 a3 b3 ~@4", D: "[~@8 b3 ~ c#4 ~ e4 ~ b3@6 ~@2 a3@2 ~@8]/2",
  E: "[e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 c#5 [c5,d#5]@5]/2", // D#m E Cm
  F: "[e4 b3 g#4 [d#4,f#4]@3 b4 [e4,g#4]@3 e4 [a3,c#4]@5]/2", G: "[e4 b3 g#4 [d#4,f#4]@3 b4 [c#4,g#4,c#5]@17]/3",
})).s("gm_overdriven_guitar").gain(0.36)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar_2 = note("<A@2 B@2 ~@16 C D E F G H E I@2 ~@24 J@2 K L M N@2 O@2 ~@18>".pickRestart({
  A: "~@12 [b2,e3,g#3,b3,e4,g#4]@3 ~", B: "~@6 [b2,e3,g#3,b3,e4,g#4]!2",
  C: "[b3,e4,g#4]@4 ~@2 [b3,d#4,f#4]@6 ~@2 [a3,c#4,e4] ~", // E B A
  D: "[a3,c#4,e4]@4 ~@2 [c#4,e4,g#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~", // A C#m B
  E: "[b3,e4,g#4]@3 [b3,d#4,f#4] [b3,d#4,f#4]@3 [a3,c#4,e4]", F: "[a3,c#4,e4]@3 [c#4,e4,g#4] [c#4,e4,g#4]@4",
  G: "[e4,g#4,b4]@3 [d#4,f#4,b4] [d#4,f#4,b4]@3 [c#4,e4,a4]", // E B A
  H: "[c#4,e4,a4]@3 [c#4,e4,g#4]@2 [b3,d#4,f#4] [b3,d#4,f#4]@2", I: "[[a3,c#4,e4]@3 [c#4,e4,g#4]@9 ~@4]/2",
  J: "[~@8 [b3,e4,g#4]@4 ~@2 [b3,d#4,f#4]@6 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@4 ~@2 [c#4,e4,g#4]@2]/2", // E B A C#m
  K: "~@2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,e4,g#4]@6 [b3,d#4,f#4]@2", // B E B
  L: "[b3,d#4,f#4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [c#4,e4,g#4]", M: "[c#4,e4,g#4]@4 [e4,g#4,b4]@3 [d#4,f#4,b4]",
  N: "[[d#4,f#4,b4]@3 [c#4,e4,a4] [c#4,e4,a4]@3 [c#4,e4,g#4]@2 [b3,d#4,f#4] [b3,d#4,f#4]@2 [b3,e4,g#4]@3 [b3,d#4,f#4]]/2", // B A C#m B E B
  O: "[[b3,d#4,f#4]@3 [a3,c#4,e4] [a3,c#4,e4]@3 [c#4,e4,g#4]@9]/2", // B A C#m
})).s("gm_overdriven_guitar").gain(0.31)

// bass · distortion guitar · "Guitar"
const bass = note(`<
  A@2 B C ~@16 D E F G F H F I J K L M L M L M L N ~@12 O P Q R@8 S T U V U V U V U V U V U V U V W@2 ~
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 e2@2 e2@2 e2@2", C: "e2!8",
  D: "b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1@2", E: "a1 ~@5 c#2@4 b1@2 b1 ~@3", F: "b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~",
  G: "a1@4 ~@2 c#2@7 ~@3", H: "a1@6 c#2@4 b1@2 b1 ~@3", I: "a1@3 ~@3 c#2 ~ c#2@7 ~", J: "~@8 c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  K: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ e2@2 e2 ~ e2 ~ b1@2", L: "b1 ~ b1 ~ b1 ~ c#2@2 c#2 ~ c#2 ~ c#2 ~ g#1@2",
  M: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ e2@2 e2 ~ e2 ~ b1@2", N: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ e2@2 e2@2 e2@2 e2@2",
  O: "e2 ~ e2 ~ e2 ~ e2 ~ b1 ~ b1 ~ b1 ~ b1 ~", P: "b1 ~ b1 ~ b1 ~ b1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~",
  Q: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  R: "[a1 ~ a1 ~ a1 ~ a1 ~ b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1@2 a1 ~@5 c#2@4 b1@2 b1 ~@3 b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~ a1@4 ~@2 c#2@7 ~@3 b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~ a1@6 c#2@4 b1@2 b1 ~@3 b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~ a1@3 ~@3 c#2 ~]/8",
  S: "c#2@7 ~@9", T: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", U: "e2@2 e2 ~ e2 ~ b1@2 b1 ~ b1 ~ b1 ~ c#2@2",
  V: "c#2 ~ c#2 ~ c#2 ~ g#1@2 g#1 ~ g#1 ~ g#1 ~ g#1 ~", W: "[e2@2 e2 ~ e2 ~ b1@2 b1 ~ b1 ~ b1 ~ c#2@18]/2",
})).s("gm_distortion_guitar").gain(0.38)

// bass · electric bass pick · "Bass"
const bass_2 = note(`<
  A@2 B C D E F G H E F G I E F G J K L M N O P Q R O R S T U V W V W V W V X Y Z AA AB AC Z AA AD AE Z AA AF AG AH AI
  AJ@8 AK F AL AM AL AM AL AM AL AM AL AM AL AM AL AM AN@2 ~
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 e2@2 e2@2 e2@2", C: "e2!8", D: "e2!7 ~",
  E: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", F: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  G: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~", H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~@3 e2 ~",
  I: "e2 ~ e2 ~ e2 ~@7 e2 ~ e2 ~", J: "~@2 e2 ~@5 e2 ~@7", K: "~@2 b1 ~@11 b1 ~",
  L: "g#1 ~ g#1 ~ g#1 ~@3 g#1 ~ g#1 ~ g#1 ~ g#1 ~", M: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~@3 a1 ~",
  N: "b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1@2", O: "a1@3 c#2@2 b1 b1@2", P: "b1 ~ c#2 ~ e2 ~ b1@5 ~@3 a1 ~",
  Q: "a1@4 ~@2 c#2@7 ~@3", R: "b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~", S: "a1@3 ~@3 c#2 ~ c#2@7 ~",
  T: "~@8 c#2 ~ c#2 ~ c#2 ~ c#2 ~", U: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ e2@2 e2@2 e2@2 b1@2", V: "b1!3 c#2!4 g#1",
  W: "g#1!4 e2!3 b1", X: "g#1!4 e2!4", Y: "e2@2 e2@2 e2@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~",
  Z: "b1 ~ b1 ~ b1 ~ b1 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", AA: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~",
  AB: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ e2 ~ e2 ~ e2 ~ e2 ~", AC: "e2 ~ e2 ~@3 e2 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  AD: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ e2 ~ e2 ~ e2 ~@3", AE: "~@4 e2 ~ e2 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  AF: "g#1 ~ g#1 ~ g#1 ~ g#1 ~@3 e2 ~@5", AG: "e2 ~@9 b1 ~@5", AH: "~@6 b1 ~ g#1 ~ g#1 ~ g#1 ~@3",
  AI: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  AJ: "[a1 ~ a1 ~@3 a1 ~ b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1@2 a1@6 c#2@4 b1@2 b1@4 b1 ~ c#2 ~ e2 ~ b1@5 ~@3 a1 ~ a1@4 ~@2 c#2@7 ~@3 b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~ a1@6 c#2@4 b1@2 b1@4 b1 ~ c#2 ~ e2 ~ b1@6 ~@2 a1 ~ a1@3 ~@3 c#2 ~]/8",
  AK: "c#2@7 ~@9", AL: "e2!3 b1!4 c#2", AM: "c#2!3 g#1!5", AN: "[e2!3 b1!4 c#2@9]/2",
})).s("gm_electric_bass_pick").gain(0.18)

// bass · electric bass pick · "Bass" · soft notes
const bass_soft = note("<~@4 A ~@3 B ~@3 C ~@3 D E F G ~@18 H ~@3 I ~@2 J K ~@2 L M N ~ O ~@26>".pickRestart({
  A: "~@7 e2", B: "~@12 e2 ~@3", C: "~@6 e2 ~ e2 ~ e2 ~@5", D: "e2 ~@3 e2 ~ e2 ~@3 e2 ~ e2 ~ e2 ~",
  E: "b1 ~@3 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~@3", F: "~@6 g#1 ~@9", G: "~@12 a1 ~@3", H: "~@3 e2 ~@4", I: "~@4 e2 ~@11",
  J: "~@14 e2 ~", K: "e2 ~ e2 ~@13", L: "~@8 e2 ~@3 e2 ~ e2 ~", M: "~@2 e2 ~ e2 ~ e2 ~ b1 ~@3 b1 ~ b1 ~",
  N: "b1 ~ b1 ~ b1 ~@9 g#1 ~", O: "~@4 a1 ~@11",
})).s("gm_electric_bass_pick").gain(0.14)

// drums · kick
const kick = s("bd").struct("<[x!8]!4 [x ~@2 x!2 ~@3]!33 [x ~@2 x!2 ~@2 x] [x ~@3 x ~@2 x]!40 x ~>").gain(0.37)

// drums · snare
const snare = s("sd").struct(`<
  A@2 B@2 C@16 D C D C D C D@2 C D@2 C@3 D C@18 E C E C E C E@2 C E@2 C@3 E C@3 E C@3 E C@2 F ~
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2", C: "~ x ~ x", D: "~ x!2 ~@3 x ~", E: "~@2 x ~@2 x!2 ~", F: "x",
})).gain(0.46)

// drums · clap
const clap = s("cp").struct(`<
  A@2 B@2 ~@16 C ~ C ~ C ~ C@2 ~ D C ~@3 C ~@18 E F E F E F E G F E@2 F ~@2 E F ~@2 E F ~@2 E F ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2", C: "~@3 x!2 ~@3", D: "~@3 x ~@4", E: "~@7 x", F: "x", G: "x ~@6 x",
})).gain(0.46)

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

// drums · open hat
const open_hat = s("oh").struct("<~@78 x ~>").gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  A@2 B@2 ~@16 C ~ C ~ D ~ D C ~@2 D ~@3 D ~@18 E ~ E ~@2 F ~ G ~@3 F ~@3 F ~@3 F ~@3 F ~ F ~
>`.pickRestart({
  A: "~@3 x", B: "~@6 x!2", C: "x!2 ~@2", D: "~ x", E: "~@2 x!2", F: "x", G: "x ~ x!2",
})).gain(0.46)

// drums · ride
const ride = s("rd").struct("<~ [~@3 x] ~@76 x ~>").gain(0.46)

stack(overdriven_guitar, overdriven_guitar_2, bass, bass_2, bass_soft, kick, snare, clap, hihat, open_hat, crash, ride)

More by The Cars