Strudelify

My Best Friend's Girl

The Cars

KeyF majorTempo120 bpm
0:00/0:00
// My Best Friend's Girl — The Cars
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar muted · "Rhythm Guitar"
const electric_guitar_muted = note(`<
  A B A B C D A B A B A B A B A B E F E F E F E F G H G H G H E F E F E F E F E F E F E F E F E F E F G H G H G H E F E
  F G H G H G H E F E F E F E F E F E F E F E F E F E F G H G H G H E F E F E F E F E F E F E F E F I
>`.pickRestart({
  A: "[f2,c3]!3 [f2,c3]@2 [f2,c3]!3", // F5
  B: "[bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]!2", // Bb5 C5
  C: "[f2,c3]!2 [c3,f3] [f2,c3]@2 [f2,c3] [c3,f3] [f2,c3]", // F5
  D: "[c3,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]!2", E: "[f2,c3]!8",
  F: "[bb2,f3]!4 [c3,g3]!4", G: "[bb2,f3]!8", H: "[c3,g3]!8", I: "[f2,c3] ~@7",
})).s("gm_electric_guitar_muted").gain(0.26)

// chords · drawbar organ · "Keyboard"
const drawbar_organ = note(`<
  ~@16 A B A B A B A B C D C D C D ~@4 A B A B A B A B A B A B A B A B C D C D C D ~@14 A B A B A B A B A B A B A B A B
  C D C D C D ~@17
>`.pickRestart({
  A: "[f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~ [f4,a4] ~", // F
  B: "[f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~", // Bb5 C5
  C: "[f4,bb4] f4 [f4,bb4] f4 [f4,bb4] f4 [f4,bb4] f4", D: "[g4,c5] g4 [g4,c5] g4 [g4,c5] g4 [g4,c5] g4",
})).s("gm_drawbar_organ").gain(0.31)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@16 A B A B A B A C D E D E D E A B A B A B A B A B A B A B A B A B A B D E D E D E A B A B D E D E D E A B A B A B A
  B A B A B A B A B A B A B D E D E D E A B A B A B A B A B A B A B A B F
>`.pickRestart({
  A: "f1!8", B: "bb1!4 c2!4", C: "bb1!4 c2!2 g1 a1", D: "bb1!8", E: "c2!8", F: "f1 ~@7",
})).s("gm_electric_bass_finger").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@16 A@7 B A@17 B A@17 B A@17 B A@7 B A@22 C>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x ~@4", C: "x",
})).gain(0.31)

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

// drums · clap
const clap = s("cp").struct("<A B A B A B A B A B A B A B A C ~@93>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~ x!2 ~", C: "~@2 x!2 ~@4",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@16 [x!8]!7 [x!4 ~@4] [x!8]!84 ~>").gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@15 [~@6 x!2] ~@7 [~@6 x!2] ~@85>").gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct("<~@41 A ~@17 A ~@17 A ~@7 A ~@23>".pickRestart({
  A: "~@6 x!2",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@7 A ~ A ~ A ~@13 A ~@7 A ~ A ~ A ~@5 A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A
>`.pickRestart({
  A: "x",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@15 [~@8 x ~ x!2 ~@4] ~@25 [~@8 x ~ x!2 ~@4] ~@67>").gain(0.51)

stack(electric_guitar_muted, drawbar_organ, bass, kick, snare, clap, hihat, low_tom, mid_tom, crash, high_tom)

More by The Cars