Strudelify

Psycho Killer

Talking Heads

KeyA minorTempo110 bpm
0:00/0:00
// Psycho Killer — Talking Heads
// 110 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · piano
const piano = note(`<
  ~@4 A B A B C D E D E D E D F G H@2 F G I@2 J G K@2 J G I@2 J G A B A B E D E D E D E D F G H@2 F G I@2 J G K@2 J G
  I@2 J G L@2 M@2 L@2 M@2 N@2 O@2 P Q P Q P Q P Q G A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "[e4,a4]!8", B: "[e4,a4]!5 [d#4,f#4,c5]@3", C: "[g3,c#4,f#4]", D: "[g3,c#4,e4]@3 [b3,d4,g4]", E: "[g3,c#4,e4]",
  F: "[a3,d4,f4]", G: "[b3,d4,g4]", H: "[a3,c4,e4]", I: "[g3,c4,e4]", J: "[a3,c4,f4]", K: "[c4,e4,a4]",
  L: "[b3,d4,f#4]!4", M: "[b3,d4,g4]!4", N: "[e3,a3,c#4,e4]", O: "[g3,b3,d4,g4]", P: "[a3,c#4,e4]!4",
  Q: "[a3,c#4,e4]!3 [b3,d4,g4]", // A G
})).s("gm_piano").gain(0.4)

// bass · electric bass finger · "bass"
const bass = note(`<
  A B A B A B A C A D A D A D A D E F G H E F I J E F G H E F I J E F A B A B A B A B A B A B E F G H E F I J E F G H E
  F I J E F K L M@2 K L M@2 N O P Q A B A B A B A B F A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "a2!4", B: "a2@2 a2@2 a2 e2 g2@2", C: "a2@2 a2@2 a2 f2 g2@2", D: "a2@2 a2@2 a2 e2 g#2@2",
  E: "f2@2 d2 c2 f2@2 d2 c2", F: "g2@2 e2 d2 g2@2 e2 d2", G: "a2@2 a2 g2 a2@2 a2 g2", H: "a2@2 a2 g2 a2@2 a2@2",
  I: "c2@2 c2 b1 c2@2 c2 b1", J: "c2@2 c2 b1 c2@2 c2@2", K: "f2 e2 d2!2", L: "b1 a1 b1 d2", M: "g2 f2 e2 d2",
  N: "~@2 f2 e2 d2 a1@3", O: "f2 e2 d2 a1 a1@4", P: "a1@2 b2 a2 g2 d2@3", Q: "b2 a2 g2 d2 d2@4",
})).s("gm_electric_bass_finger").gain(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B@18 ~ A ~ A ~ A ~ A ~ A ~ A B@18 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "x!2",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@2 ~ B@3 ~ B@7 ~@2 C@2 ~@73>".pickRestart({
  A: "~@6 x!2", B: "~@3 x", C: "~ x ~@2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B@3 ~ B@7 ~@2 C@2 ~ A ~ A ~ A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~ x",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@22 x ~@7 x ~@76>").gain(0.41)

stack(piano, bass, kick, snare, hihat, open_hat, crash)

More by Talking Heads