Strudelify

Frankie and Johnny

Elvis Presley

KeyC majorTempo138 bpm
0:00/0:00
// Frankie and Johnny — Elvis Presley
// 138 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 72 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · "A.PIANO 1"
const piano = note(`<
  ~@24 A B C D E F G H I J K L A M C D E N G H I J K L A B C D E O G H P J K L A M C D E N G H P J Q R
>`.pickRestart({
  A: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 c3@2", // C Adim
  B: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~", // C
  C: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 c3 ~", // C Adim
  D: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@5 ~ [g3,a#3,e4]@4 ~@2 [g3,a#3,e4]@4 c3@2", // C Edim
  E: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@5 ~ [a3,c4,d#4]@4 c3 ~", // Adim
  F: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 c3 ~", // Adim
  G: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [f3,b3,d4]@4 ~@2 [f3,b3,d4]@4 c3 ~", // C Bdim
  H: "[e3,g3,c4]@5 ~ [e3,g3,c4]@4 c3 ~ [e3,a3,c4]@4 ~@2 [e3,a3,c4]@3 ~ c3 ~", // C Am
  I: "[f3,b3,d4]@5 ~ [f3,b3,d4]@4 c3 ~ [f3,a3,d4]@5 ~ [f3,a3,d4]@4 c3 ~", J: "[f3,b3,d4] ~@5",
  K: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@4 c3 ~", // C F
  L: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [f3,b3,d4]@5 ~ [f3,b3,d4]@4 ~@2", // C Bdim
  M: "[g3,c4,e4]@5 ~ [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~", // C
  N: "[a3,c4,d#4]@5 ~ [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@3 ~ c3 ~", // Adim
  O: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@3 ~ c3 ~", // Adim
  P: "[f3,b3,d4]@5 ~ [f3,b3,d4]@4 c3 ~ [f3,a3,d4]@4 ~@2 [f3,a3,d4]@4 c3 ~", // Bdim Dm
  Q: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 c3 ~", // C F
  R: "[g3,c4,e4]@2 ~@4 [g#3,c#4,f4]@3 ~ [g3,c4,e4]@8 ~@6", // C C# C
})).s("gm_piano").gain(0.25).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C B D E B F G H I B A B J B D E B F K H I B A B J B D L B F G H M B A B J B D L B F G H M B A B J B D L B F K H M
  B A B C B D L B F K H M N
>`.pickRestart({
  A: "c2@5 ~ e1@5 ~ f1@6 a1@5 ~", B: "c2@3 a1@3 g1@3 a1@2 g1", C: "c2@6 e1@5 ~ f1@6 a1@6", D: "f1 a1 c2 d2",
  E: "d#2@6 d2@6 c2@5 ~ a1@6", F: "c2@5 ~ c2@6 a1@5 ~ a1@6", G: "g1@5 ~ g1@5 ~ d2@5 ~ d2@5 ~", H: "g1@5 ~@19",
  I: "c2@6 e1@6 f1@6 a1@5 ~", J: "c2 e1 f1 a1", K: "g1@5 ~ g1@6 d2@5 ~ d2@5 ~", L: "d#2@5 ~ d2@6 c2@5 ~ a1@6",
  M: "c2@6 e1@6 f1@5 ~ a1@5 ~", N: "~@6 c#2@3 ~ c2@8 ~@6",
})).s("gm_acoustic_bass").gain(0.35)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K L A B C D E F G H M J N L O B C D P@2 G H I J K L A Q C R P@2 G H I J K L O B C R P F G H M J K
  L O B C R P F G H S J T U
>`.pickRestart({
  A: "[g3,c4,e4]@2 ~ [g3,c4,e4]@2 c3 [a3,c4,d#4]@2 ~ [a3,c4,d#4]@2 c3", // C Adim
  B: "[g3,c4,e4]@5 ~ [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~", // C
  C: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3@2 [a3,c4,d#4]@5 ~ [a3,c4,d#4]@4 c3 ~", // C Adim
  D: "[g3,c4,e4]@5 ~ [g3,c4,e4]@5 ~ [g3,a#3,e4]@4 ~@2 [g3,a#3,e4]@4 c3@2", // C Edim
  E: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@5 ~ [a3,c4,d#4]@4 c3 ~", // Adim
  F: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@3 ~ c3 ~", // Adim
  G: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [f3,b3,d4]@4 ~@2 [f3,b3,d4]@3 ~ c3 ~", // C Bdim
  H: "[e3,g3,c4]@5 ~ [e3,g3,c4]@4 c3 ~ [e3,a3,c4]@4 ~@2 [e3,a3,c4]@3 ~ c3 ~", // C Am
  I: "[f3,b3,d4]@5 ~ [f3,b3,d4]@4 c3 ~ [f3,a3,d4]@5 ~ [f3,a3,d4]@4 c3 ~", J: "[f3,b3,d4] ~@5",
  K: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@4 ~ c3", // C F
  L: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@3 ~ c3 ~ [f3,b3,d4]@5 ~ [f3,b3,d4]@4 ~@2", // C Bdim
  M: "[f3,b3,d4]@5 ~ [f3,b3,d4]@4 c3 ~ [f3,a3,d4]@4 ~@2 [f3,a3,d4]@4 c3 ~", // Bdim Dm
  N: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@4 c3 ~", // C F
  O: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 c3@2", // C Adim
  P: "[a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 ~@2 [a3,c4,d#4]@4 c3 ~", // Adim
  Q: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~", // C
  R: "[g3,c4,e4]@5 ~ [g3,c4,e4]@4 ~@2 [g3,a#3,e4]@4 ~@2 [g3,a#3,e4]@4 c3@2", // C Edim
  S: "[f3,b3,d4]@5 ~ [f3,b3,d4]@3 ~ c3 ~ [f3,a3,d4]@4 ~@2 [f3,a3,d4]@4 c3 ~", // Bdim Dm
  T: "[g3,c4,e4]@4 ~@2 [g3,c4,e4]@4 c3 ~ [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 c3 ~", // C F
  U: "[g3,c4,e4]@2 ~@4 [g#3,c#4,f4]@3 ~ [g3,c4,e4]@8 ~@6", // C C# C
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.8)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@3 A ~@3 B ~ A ~@3 A ~@7 A ~@5 A ~@3 B ~ A ~@3 A ~@7 A ~@5 A ~@3 B ~ A ~@3 A ~@7 A ~@2
>`.pickRestart({
  A: "~@2 x", B: "~@8 x ~@2 x",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@11 [~@10 x!2] ~@23 [~@10 x!2] ~@23 [~@10 x!2] ~@11 [~ x!2 ~@9]>").gain(0.4)

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

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  A B ~ C D ~ E A@2 B A F A E A@3 G B@2 E B A F A B ~ C D ~ E A@2 B A F A E A@3 G B@2 E B A F A B ~ C D ~ E A@2 B A F A
  E A@3 G B@2 E B A H
>`.pickRestart({
  A: "~@5 x ~@5 x", B: "~@5 x ~@2 x ~@3", C: "~@7 x ~@3 x", D: "~@11 x", E: "~@5 x ~@2 x ~@2 x", F: "~@5 x ~@6",
  G: "~@2 x ~@5 x ~@2 x", H: "~ x ~@4",
})).gain(0.25)

stack(piano, bass, acoustic_guitar_steel, kick, snare, snare_soft, low_tom, crash, ride, ride_soft)

More by Elvis Presley