Strudelify

Wooden Heart

Elvis Presley

KeyE♭ majorTempo142 bpm
0:00/0:00
// Wooden Heart — Elvis Presley
// 142 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Harpsichord" named as a piano, played on harpsichord (its acoustic guitar steel patch is not one); ch 3 "Alpenhorn" named as a brass, played on brass section (its acoustic bass patch is not one)
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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 · harpsichord
const harpsichord = note(`<
  A B C D E F G H G I J K L@2 E F G H G I J M N O P Q R S T U V@2 E F G W G I J M X Y B C D E F G H G I J K L@2 E F G H
  G I J M N O P Q R S T U V@2 E F G W G I J M Z@2
>`.pickRestart({
  A: "[eb4,g4,bb4]@2 [eb4,g4,bb4]!2 [eb4,ab4,c5]@2 [eb4,ab4,c5]!2", B: "[eb4,g4,bb4]!2 [eb4,ab4,c5] [c4,eb4,ab4]",
  C: "[eb4,g4,bb4]@2 [eb4,g4,bb4]!2 [eb4,ab4,c5]@2 [c4,eb4,ab4]!2", D: "[eb4,g4,bb4] ~ [g3,bb3,eb4] [ab3,d4,f4]",
  E: "~ [g3,bb3,eb4] g4 [eb4,g4,bb4], g4 ~", F: "~ [ab3,c4,eb4] ab4 [d4,ab4,c5], ab4 ~",
  G: "~@3 c5 bb4@2 [c4,eb4,ab4]@2, bb4@3 ~@5, ~ [eb4,g4] ~@2", H: "~ [g3,bb3,eb4] ~ [g3,bb3,eb4], g4",
  I: "~ [g3,bb3,eb4] g4 [bb3,eb4,g4,bb4], g4 ~", J: "~ [ab3,c4,eb4] ab4 [ab3,c4,eb4,g4], ab4 ~",
  K: "~ [ab3,d4] ~ [d4,ab4], f4 bb4", // Abdim Ddim
  L: "[~@2 [g3,bb3,eb4]!2 [g3,c4,eb4]@2 [g3,c4,eb4]!2 [g3,bb3,eb4]@2 ~@2 [ab3,c4,eb4]@2 [ab3,bb3,f4]@2, g4@3 ~]/2", // Eb Cm Eb Ab Bb7
  M: "~ [ab3,d4] ~ [ab3,d4], f4 g4", N: "~@2 [g3,bb3]!2 [f3,c4]@2 [f3,ab3]!2, eb4",
  O: "[g3,bb3,eb4] ~ [g3,bb3,eb4] [bb3,eb4,g4]", P: "~ [ab3,c4,eb4] ~ [ab3,c4,eb4,g4], f4@3 ~",
  Q: "~ [ab3,d4,f4] ~ [ab3,bb3,d4,f4], ab4@3 ~", R: "~ [bb3,eb4] ~ [ab3,d4,f4,ab4], g4@3 ~",
  S: "~ [bb3,eb4,g4] bb4 [bb3,eb4,g4,bb4], bb4 ~", T: "~ [c4,eb4,ab4] ~ [c4,eb4,ab4], c5!2",
  U: "~ [eb4,ab4,c5] d5 [eb4,ab4,c5], eb5 ~", // Ab
  V: "[~ [c4,g4] ~ [db4,g4] [d4,ab4] ~ [ab3,c4,eb4] [ab3,bb3,f4], bb4@5 ~@3]/2", // C5 Dbdim Ddim Ab Bb7
  W: "~ [g3,bb3,eb4] ~ [g3,bb3,eb4,g4], g4@3 ~", X: "~@2 [g3,bb3]!2 c4@2 ab3@2, eb4",
  Y: "[eb4,g4,bb4]@2 [eb4,g4,bb4]!2 [eb4,ab4,c5]@2 [eb4,ab4,c5]!2, [g3,bb3] ~", // Eb Ab Gm
  Z: "[~@2 [g3,bb3]!2 c4@2 ab3@2 [g3,bb3]@4 [eb4,g4,bb4,eb5]@2 ~@2, eb4@3 ~]/2", // Gm Eb
})).s("gm_harpsichord").gain(0.4).pan(0)

// other · brass section · "Alpenhorn"
const brass_section = note(`<
  A@3 B C D C E C F G H C I C D C E C F G H J K L H C M N O P Q C D C E C F G H J A@3 B C D C E C F G H C I C D C E C F
  G H J K L H C M N O P Q C D C E C F G H J R
>`.pickRestart({
  A: "eb3 bb3 c4 ab3", B: "[eb3,bb3] ~@3", C: "eb3 ~ bb2 ~", D: "f3 ~ bb2 ~", E: "eb3 bb2 c3 bb2", F: "eb3 ~ bb2 eb3",
  G: "f3 ~ f3 ~", H: "bb2 ~ bb2 ~", I: "eb3 bb2 c3 d3", J: "eb2 ~ ab2 c3", K: "eb3 bb2 g2 eb2", L: "f2 ~ f2 ~",
  M: "eb2 ~ g2 ~", N: "ab2 ~ eb2 ~", O: "ab2 ~ c3 ~", P: "eb3 ~ e3 ~", Q: "f3 bb2 c3 d3", R: "eb3 bb2 eb2 ~",
})).s("gm_brass_section").gain(0.4).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@39 [x!2] [x!4] ~@40>").gain(0.36)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@5 A ~@9 B ~ C ~@3 A ~@11 C ~@3 C ~@8 A ~@9 B ~ C ~@3 A ~@11 C ~@3 C ~@3 C
>`.pickRestart({
  A: "~@9 x ~@6", B: "~ x ~@14", C: "~@5 x ~@6 x ~@3",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct("<~@2 [~ x ~ x]!39 ~@2 [~ x ~ x]!40>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@15 [~@3 x ~@12] ~@40 [~@3 x ~@12] ~@26>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@30 B A ~@8 A ~@30 B A ~@7>".pickRestart({
  A: "x", B: "~@7 x ~@8",
})).gain(0.26)

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

stack(harpsichord, brass_section, kick, rim, snare, snare_soft, hihat, open_hat, crash, ride)

More by Elvis Presley