Strudelify
Take Me to the River cover art

1978 · More Songs About Buildings and Food

Take Me to the River

Talking Heads

KeyE majorTempo100 bpm
0:00/0:00
// Take Me to the River — Talking Heads
// 100 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "organ" named as an organ, played on drawbar organ (its piano patch is not one); ch 2 "bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

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

// chords · drawbar organ · "organ"
const drawbar_organ = note(`<
  A B A C A C A C A C A C D E F G H I ~ J K I ~ J K A B A C A C A C A C A C D E F G H I ~ J K I ~ J K L M L M N@4 I ~ J
  K I ~ J K A B A C A C A C A C A C D E F G H I ~ J K I ~ J K A B A C O@2 ~@2
>`.pickRestart({
  A: "[e4,b4]!2 [f#4,c#5] ~ [g4,d5] ~@2 [e4,b4]", B: "[e4,b4]!2 [f#4,c#5] ~ [g4,d5] ~ [f#4,c#5] [e4,b4]",
  C: "[e4,b4]!2 [f#4,c#5] ~ [e4,f#4,a4,d5]@2 [c#4,e4,a4,c#5]@2", D: "~ [e4,g4,c5,e5]@3", E: "~ [d4,g4,b4,d5]@3",
  F: "~ [e4,a4,c#5,e5]@3", G: "~ [g4,b4,d5,g5]@3", H: "[g4,b4,d5,g5]", I: "~@4 d4 c#4 ~@2", J: "~@4 d4 c#4 b3 e3",
  K: "e3 ~@7", L: "[e4,g#4,c#5,e5]", M: "[e4,a4,c#5,e5]", N: "[g3,d4,g4]", O: "[b3,e4,g#4,b4]",
})).s("gm_drawbar_organ").gain(0.32)

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D C D C D C D C D E F G H@2 A B A B A B A B A B C D C D C D C D C D E F G H@2 A B A B A B A B I J I J K H@3 A B
  A B A B A L A B C D C D C D C D C D E F G H@2 A B A B A B A B A B C D M@2 ~@2
>`.pickRestart({
  A: "e2!2 f#2 e2 g2 ~ f#2 e2", B: "e2!2 f#2 e2 g2 e2 f#2 e2", C: "e2!2 f#2 e2 g2 ~@2 e2",
  D: "e2!2 f#2 e2 [g2,d3,a3]@2 [f#2,c#3]@2", E: "~ e3@3 e3@4, [c2,g2]", F: "~ b3@3 b3@4, [g2,d3]",
  G: "~ c#4@3 c#4@4, [a2,e3]", H: "e2!2 g2 e2!3 g2 e2", I: "c#2@3 g#2 b2@2 c#3 ~", J: "a1@3 e2 g2@2 a2 ~",
  K: "d2!4 e2!2 g2 e2", L: "e2!2 f#2 e2 g2 e2 f#2@2", M: "[e2,b2,e3]",
})).s("gm_electric_bass_finger").gain(0.57)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@2 C A@3 D E F G H G I A@6 J A@2 K A@6 C J A L F M N F B A@7 B F M H F@2 G F E A@5 C A@3 B A J A C A@5 I F@2 N
  M I A@6 O A@2 B A I A I P Q
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "~@2 x!2 ~@4 x!2 ~@4 x ~", C: "x ~ x ~@3 x ~ x ~ x!2 ~ x!3",
  D: "x ~ x ~@3 x ~ x ~ x!2 ~@2 x!2", E: "~ x!2 ~ x!2 ~@2", F: "x ~@2 x!2 ~@2 x", G: "x ~@5 x ~@3 x!2 ~@2 x ~",
  H: "x ~@2 x!3 ~ x", I: "~@9 x ~@6", J: "x!3 ~@3 x ~ x ~ x ~@3 x ~", K: "~@2 x ~ x!2 ~@2 x ~ x ~@5",
  L: "~@2 x ~@5 x ~@5 x!2", M: "x ~@2 x ~ x ~ x", N: "x ~@5 x ~ x ~@2 x ~@2 x ~", O: "x!4 ~@2 x ~ x ~ x ~@3 x ~",
  P: "x ~@5 x ~ x ~@5 x!2", Q: "~@4 x ~@5 x!3 ~@3",
})).gain(0.45)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@3 A ~@37 A ~@7 A ~@17 A ~@24 A ~@6>".pickRestart({
  A: "~@2 x!2 ~@4 x!2 ~@6",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@4 B ~@9 A ~@9 C ~@20 A ~@19 B ~@4 B ~@11 B ~ B ~ D>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~ x ~@6",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@16 A ~@60 A ~@4 A ~@11 A ~ A ~@2>".pickRestart({
  A: "x!4",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@4 B ~@9 A ~@9 C ~@20 A ~@19 B ~@4 B ~@11 B ~ B ~ D>".pickRestart({
  A: "~@3 x ~@4", B: "~@13 x ~@2", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~ x ~@6",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@4 ~@21 A@4 ~@9 A@2 B A@4 ~@21 A@4 ~@15 A ~>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x!2 ~@2 x ~@3",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@11 x ~@14 x ~@30 x ~@41>").gain(0.5)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<A@3 ~ A@7 ~@6 A@9 ~ A@9 ~@6 A@7 ~@9 A@9 ~ A@9 ~@6 A@9 ~ A ~ A ~@3>".pickRestart({
  A: "x!8",
})).gain(0.35)

stack(
  drawbar_organ, bass, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine
)

More by Talking Heads