Strudelify

Tonight She Comes

The Cars

KeyF majorTempo145 bpm
0:00/0:00
// Tonight She Comes — The Cars
// 145 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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 guitar muted · "Rhythm guitar"
const electric_guitar_muted = note(`<
  ~@4 A B C D A B C E@2 A B C D A B C D A B F D A B C D A B C D A B C D A B F D A B G D A B C B H D H D H D H B H D H
  D@2 A B C D A B C D A B F D A B C B I@8 J@8 A K@8 L@4 K@4 L@4 M@4 K@4 M@4 N C D O P@2
>`.pickRestart({
  A: "[f2,c3]!8", B: "[c3,g3]!8", C: "[g2,d3]!8", D: "[bb2,f3]!8", E: "[bb2,f3]!2 [bb2,g3]!2 [bb2,ab3]!2 [bb2,g3]!2",
  F: "[d3,a3]!8", G: "[a2,f3]!8", H: "[a2,e3]!8",
  I: "[[c3,g3]!7 ~ [a2,e3]!8 [bb2,f3]!8 [a2,e3]!8 [bb2,f3]!8 [a2,e3]!8 [bb2,f3]!8 [a2,e3]!8, ~@7 [c3,g3]@57]/8", // C5 A5 Bb5 A5 Bb5 A5 Bb5 A5 …
  J: "[[c3,g3]!7 ~ [a2,e3]!8 [bb2,f3]!8 [a2,e3]!8 [bb2,f3]!8 [bb2,f3]!8 [bb2,f3]!8 [bb2,f3]!8, ~@7 [c3,g3]@57]/8", // C5 A5 Bb5 A5 Bb5 C5
  K: "[[c3,g3]!7 ~ [g2,d3]!8 [bb2,f3]!8 [f2,c3]!8, ~@7 g3@25, ~@7 c3@17 ~@8]/4", // C5 G5 Bb5 F5
  L: "[[c3,g3]!7 ~ [d3,a3]!8 [bb2,f3]!8 [f2,c3]!8, ~@7 g3@25, ~@7 c3@17 ~@8]/4", // C5 D5 Bb5 F5
  M: "[[c3,g3]!7 ~ [a2,f3]!8 [bb2,f3]!8 [f2,c3]!8, ~@7 g3@25, ~@7 c3@17 ~@8]/4", N: "[c3,g3]!6 [c3,g3]@2",
  O: "bb2@3 a2@3 g2@2", P: "f2/2",
})).s("gm_electric_guitar_muted").gain(0.26)

// other · epiano2 · "Kybd 1"
const epiano2 = note("<A B C@2 ~@3 D ~@3 D@2 ~@15 D ~@7 D E ~@63 D E ~@6 D ~@19 D F G@2>".pickRestart({
  A: "[f2,f3]", B: "[c3,c4]", C: "[g2,g3]/2", D: "[f4,f5]!2 [g4,g5]!2 [ab4,ab5]!2 [g4,g5]!2", E: "[f4,f5] ~@7",
  F: "bb4!3 a4!3 g4!2", G: "[c4,f4,a4,c5]/2",
})).s("gm_epiano2").gain(0.31)

// other · overdriven guitar · "Lead guitar"
const overdriven_guitar = note(`<
  ~@12 A ~@43 B C D E F G H@3 I J@3 K L M N O P@3 Q R S ~@6 B C D E F T U V W@2 ~@34 X Y@2
>`.pickRestart({
  A: "f3!2 g3!2 ab3!2 g3!2", B: "c3!2 [c3,e3,g3,c4]@2 c3!2 [c3,e3,g3,c4]@2", C: "c5 a4", D: "bb4@2 c5 bb4",
  E: "a4@2 c5 e5", F: "f5 d5", G: "bb4@2 bb5!2, ~@8 a5 ~@3 a5 ~@3",
  H: "[a5 f3 f5 f3 f4 g4 a4 c5@5 [c5,d5] c5 a4 g4@6 f5!2 g5]/3", I: "f5 d5!2 c5 bb5@2 bb5@2, ~@8 a5 ~@3 a5 ~@3",
  J: "[a5 f3 f5 f3 f4 g4 a4 c5@5 d5 c5 a4 g4@6 a4 c5 d5]/3", K: "d5 c5 bb4 f4 d5 c5 bb4 f4 bb4@2 d5@2 c5 bb4 a4 g4",
  L: "f4@2 c5@2 bb4 a4 g4 f4 d5@2 c5@2 bb4 a4 g4 f4", M: "c5@3 g4@3 [eb4,e4]@2 ~ e5@7, b4 ~@2 gb4 ~@5 eb5 ~@6",
  N: "d5@2 f5@2 e5 f5 e5 d5 a5@2 f5@2 d5@2 c5@2", O: "bb4@3 d5@3 [e5,f5]@2 ~ d6@7, a4 ~@2 db5 ~@5 db6 ~@6",
  P: "[c6@4 f5 g5 a5 c6@5 d6 c6 a5 g5@8 gb4]/3", Q: "~ c5!2 ~ c5!2 ~ c5, g4@3 g4@3 g4@2",
  R: "e5 c5!3 f5 c5!3 d5 c5!3 e5 c5!3", S: "a5!4", T: "bb4 f4", U: "d5 bb4", V: "f4 d4", W: "f4/2",
  X: "bb3 d4 f4 a3 c4 f4 g3 c4", Y: "[f3,a3,c4]/2",
})).s("gm_overdriven_guitar").gain(0.41)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B C D A B C D E A B C D A B C D A B F D A B C D A B C D A B C D A B F D A F G D A B C B G D G D G D G B G D G
  D@2 A B C D A B C D A B F D A B C B@2 G D G D G D G B G D G D@4 A B C D A B C D A B F D A B C D A B F D A B G D A B C
  D A B G D A B C D H I@2
>`.pickRestart({
  A: "f1", B: "c2", C: "g1", D: "bb1", E: "f2!2 g2!2 ab2!2 g2!2", F: "d2", G: "a1", H: "bb1@3 a1@3 g1@2", I: "f1/2",
})).s("gm_electric_bass_finger").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@3 A B@8 C B@15 C B@19 C B@7 D B@4 E B@24 D B@6 E B@36 ~@3>".pickRestart({
  A: "~@4 x!4", B: "x!2 ~ x!3 ~ x", C: "x!2 ~ x!2 ~@3", D: "x!2 ~@2 x!2 ~@2", E: "x!2 ~@6",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@3 A B@8 C B@15 C B@19 C B@12 D B@31 D B@15 C B@11 C B@8 E F ~>".pickRestart({
  A: "~@4 x!4", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "~@4 x ~@7 x!4", E: "~ x!2 ~ x!2 ~ x", F: "x",
})).gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@61 [~@6 x!3 ~ x ~@5] ~@31 [~@6 x!3 ~ x ~@5] ~@36 [x ~@2 x ~@2 x ~] ~@2>").gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@29 A ~@19 A ~@3 A ~@2 B A ~@4 A ~@16 A ~@3 A ~@2 B A ~@6 A ~@36 A ~>".pickRestart({
  A: "x", B: "~ x ~ x",
})).gain(0.36)

stack(electric_guitar_muted, epiano2, overdriven_guitar, bass, kick, snare, hihat, mid_tom, crash)

More by The Cars