Strudelify

Love Me

Elvis Presley

KeyF majorTempo107 bpm
0:00/0:00
// Love Me — Elvis Presley
// 107 bpm, 6/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/3)

// 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 · piano · "LOVEME"
const piano = note(`<
  ~@2 A@4 B@4 C@4 ~ D E ~ F@4 G@4 H@4 ~ I J ~@2 K@2 ~@2 L@2 ~@2 M@2 ~@2 N O ~ F@4 G@4 C@4 ~ I J ~@2 K@2 ~@2 L@2 ~@2 P@2
  ~@2 Q@2 ~ F@4 G@4 C@4 ~ R@3
>`.pickRestart({
  A: "[f4@4 eb4@3 ~, [a3,c4]@7 ~]/4", B: "[[f3,bb3,d4]@7 ~]/4", C: "[~@32 g4@31 ~, [g3,c4,e4]@63 ~]/4",
  D: "[f3,b3,eb4]", E: "[g3,bb3,c4,e4]@11 ~@5", F: "[~@32 eb4@23 ~@9, [a3,c4,f4]@55 ~@9]/4",
  G: "[[f3,bb3,d4,f4]@7 ~]/4", H: "[~ g4, [g3,c4,e4]]/4", I: "[bb3,d4]", J: "[a3,c4]@3 ~@13",
  K: "[[f3,bb3,d4]@11 ~@5]/2", L: "[[f3,a3,c4]@25 ~@7]/2", M: "[[g3,b3,d4]@3 ~]/2", N: "[g3,c4,e4]",
  O: "[g3,bb3,c4,e4]@3 ~@5", P: "[[g3,b3,d4]@31 ~]/2",
  Q: "[[c3,g3,c4,e4]@15 ~ [g3,bb3,c4,e4]@4 ~@12, ~@15 c3@5 ~@12]/2", R: "[[bb3,d4]@19 [g3,bb3]@5 [f3,a3]@24]/3",
})).s("gm_piano").gain(0.05)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B@2 C D E D F G H G I J K L ~ M N O P Q R S T U I V W X Y Z ~ AA AB AC AD AE AF AG AH AI AJ AK AJ AL AM AN ~ M N
  O P Q R S T U I V W X Y Z ~ AA AB AC AD AE AF AG AH AI AJ AK AJ AL AM AN ~ AO AP C AQ AR R S T U I V W X ~@3
>`.pickRestart({
  A: "f1@15 ~", B: "f2@7 ~", C: "f2@15 ~", D: "bb2@7 ~", E: "bb2@13 ~@3", F: "bb2", G: "c2@8 e2 ~@4 e2@3",
  H: "g2@8 e2@5 g2@3", I: "g2@8 a2@7 ~", J: "f2 a2", K: "c3@8 eb3@7 ~", L: "c1", M: "f2@7 ~ a2 ~@4 a2@3",
  N: "c3@8 a2@5 c3@2 ~", O: "f2@7 ~ a2 ~@4 a2@2 ~", P: "c3@8 d3@7 ~", Q: "bb2 g2", R: "f2@7 ~ d2@8",
  S: "bb1@8 d2 ~@4 d2@3", T: "f2@8 d2@7 ~", U: "c2@7 ~ e2 ~@4 e2@3", V: "c2@6 ~@2 e2 ~@4 e2@2 ~", W: "g2@8 a2@5 ~@3",
  X: "f2@7 ~@9", Y: "bb2@3 ~@5", Z: "f1@3 ~@13", AA: "bb1@7 ~ d2 ~@4 d2@2 ~", AB: "f2@8 g2@5 f2@3",
  AC: "bb1@8 d2 ~@4 d2@2 ~", AD: "f2@7 ~ g2@5 f2@2 ~", AE: "f1@8 a1 ~@4 a1@3", AF: "c2@8 a1@5 c2@3",
  AG: "f1@7 ~ a1 ~@4 a1@3", AH: "c2@7 ~ a1@5 c2@3", AI: "g1@8 ~ b1 ~@3 b1@2 ~", AJ: "d2@7 ~ b1@5 d2@3",
  AK: "g1@7 ~ b1 ~@4 b1@3", AL: "c2@8 e2 ~@4 e2@2 ~", AM: "g2@7 ~ e2@5 g2@3", AN: "c2 ~@15", AO: "f1@12 f1@3 ~",
  AP: "f2@11 ~@2 f2 ~@2", AQ: "eb2@8 ~ c2@7", AR: "bb1 g2",
})).s("gm_acoustic_bass").gain(0.43)

// chords · piano
const piano_2 = note(`<
  ~@2 A@6 B@2 C D E@2 F ~@3 G H I@3 J K@2 L@2 M@2 N O P ~ Q@2 R@2 S@2 T@2 U@2 V@2 W X Y ~ Z H I@3 J K@2 L@2 M@2 N O P ~
  Q@2 R@2 AA@2 AB@2 U@2 AC@2 W AD Y ~ Z H I@3 J K@2 L@2 M@2 N ~@3
>`.pickRestart({
  A: "[[a3,c4,f4]@6 ~@2 [a3,c4,f4] ~@4 [a3,c4,f4]@2 ~ [a3,c4,f4]@6 ~@2 [a3,c4] ~@4 [a3,c4,f4]@2 ~ [a3,c4,f4]@6 ~@2 [a3,c4,eb4,f4] ~@4 [a3,c4,eb4,f4]@2 ~ [a3,c4,eb4]@6 ~@2 [a3,c4,eb4,f4] ~@4 [f1,a3]@3 [bb3,d4]@5 ~@3 [bb3,d4,f4] ~@4 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@6 ~@2 [bb3,d4,f4] ~@4 [bb3,d4]@2 ~, f1@57 ~@4 [c4,eb4] ~@2 bb1@24 ~@8, ~@48 f4@4 ~@9 f4@8 ~@24 f4 ~@2]/6", // F Am F F7 Adim F7 F Bb …
  B: "[[bb3,d4,f4]@7 ~ [bb3,d4,f4] ~@4 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@7 ~ [bb3,d4,f4] ~@4 [bb3,d4]@3, bb2@29 f4 ~@2]/2", // Bb
  C: "[g3,c4,e4]@6 ~@2 [g3,c4,e4] ~@4 [g3,c4,e4] ~@2, c2@12 ~ g2@3", // C
  D: "[g3,c4,e4]@6 ~@2 [g3,c4,e4] ~@4 [c4,e4] ~@2, c3@15 ~, ~@13 g3@2 ~", // C
  E: "[[g3,c4,e4]@5 ~@3 [g3,c4,e4] ~@4 [g3,bb3,c4,e4]@2 ~ [g3,bb3,c4]@6 ~@2 [g3,bb3,c4,e4] ~@4 [g3,bb3,e4] ~@2, c2@25 ~@7, ~@16 e4@4 ~@9 c4@2 ~]/2", // C C7 Edim
  F: "[f1,a3,c4,f4]@15 ~", G: "[a3,c4,f4]@6 ~@2 [a3,c4,f4] ~@4 [a3,c4,f4]@2 ~, f2@15 ~",
  H: "[a3,c4,f4]@7 ~ [a3,c4,f4] ~@4 [a3,c4,f4]@2 ~, f2@13 ~@3", // F
  I: "[[a3,c4,f4]@6 ~@2 [a3,c4,eb4,f4] ~@4 [a3,c4,eb4,f4]@2 ~ [a3,c4,eb4,f4]@6 ~@2 [a3,c4] ~@4 [f2,a3]@3 [bb3,d4]@5 ~@3 [bb3,d4,f4] ~@4 [d4,f4] ~@2, f2@24 ~@5 f4@9 ~@7 bb3@2 ~, ~@29 [c4,eb4] ~@2 bb2@13 ~@3]/3", // F F7 Am F Bb Dm Cm
  J: "[bb3,d4,f4]@3 ~@5 [bb3,d4,f4] ~@7, d3@5 ~@3", // Bb
  K: "[[bb3,d4,f4]@6 ~@2 [bb3,d4,f4] ~@7 [bb3,d4,f4]@5 bb3 ~@2 [bb3,d4] ~@4 bb3@2 ~, bb2@10 ~@3 d3@11 bb2@7 ~, ~@29 d4 ~@2]/2", // Bb
  L: "[[g3,c4,e4]@4 ~@4 [g3,c4,e4] ~@4 [g3,c4]@2 ~ [g3,c4,e4]@6 ~@2 [g3,c4,e4] ~@4 [g3,c4,e4] ~@2, c3@24 ~@5 g2@3, ~@13 e4 ~@18]/2", // C C5 C
  M: "[[g3,c4]@6 ~@2 [g3,c4,e4] ~@4 [g3,c4]@2 ~ [g3,c4]@6 ~@2 [g3,bb3,c4,e4] ~@4 e4@2 ~, c2@7 ~, e4@4 ~@9 e4 ~@2 [bb3,e4]@4 ~@9 bb3 ~@2]/2", // C5 C C5 C7 Bbdim
  N: "[f3,a3,c4]@13 ~@3, f2@5 ~@3", O: "[f3,bb3,d4]@3 ~, [bb1,bb2]@5 ~@3", P: "[f1,f2] ~@7",
  Q: "[[f3,bb3,d4]@6 ~@2 [f3,bb3,d4] ~@4 [f3,bb3,d4]@3 [f3,bb3,d4]@6 ~@2 [f3,bb3] ~@4 [bb3,d4] ~@2, [bb1,bb2]@29 f2@2 ~]/2", // Bb Bb5 Bb
  R: "[[f3,bb3,d4]@6 ~@2 [f3,bb3,d4] ~@4 [f3,bb3,d4]@2 ~ [f3,bb3,d4]@6 ~@2 [f3,bb3,d4] ~@4 [bb3,d4] c2@2, bb1@31 ~, ~@29 f3@2 ~]/2", // Bb
  S: "[[c4,f4]@5 ~@3 [a3,c4] ~@4 [a3,c4]@2 ~ [a3,c4,f4]@6 ~@2 [a3,c4,f4] ~@4 [a3,c4] ~@2, f1@15 ~, a3@7 ~@6 f4 ~@18]/2", // F5 Am F Am
  T: "[[a3,c4,f4]@7 ~ [a3,c4] ~@4 [a3,c4]@2 ~ [a3,c4,f4]@6 ~@2 [a3,c4,f4] ~@4 c4@2 ~, f1, ~@13 f4 ~@15 a3 ~@2]/2", // F Am F
  U: "[[g3,b3,d4]@7 ~ [g3,b3] ~@4 g3@2 ~ [g3,b3]@6 ~@2 [g3,b3]@2 ~@3 d2@3, g1@29 ~@3, ~@13 b3 ~@18]/2", // G
  V: "[[g3,b3]@6 ~@2 [g3,b3,d4] ~@4 [g3,b3,d4] ~@2 [g3,b3,d4]@6 ~@2 [g3,b3,d4] ~@4 b3 ~@2, g2, d4 ~@7]/2", // G
  W: "[g3,c4,e4]@6 ~@2 [g3,c4,e4] ~@4 [g3,c4] ~@2, c2@13 g2@2 ~", // C C5
  X: "[g3,c4]@5 ~@3 [g3,c4,e4] ~@4 g2@3, c3@12 ~ g3 ~@2, e4 ~@15", Y: "[g3,c4,e4] ~@15, c2 ~@7",
  Z: "[a3,c4]@6 ~@2 [a3,c4,f4] ~@4 [a3,c4,f4]@2 ~, f2@15 ~", // Am F
  AA: "[[c4,f4]@5 ~@3 [a3,c4] ~@4 [a3,c4]@2 ~ [a3,c4,f4]@6 ~ [a3,c4] f4 ~@4 [a3,c4] ~@2, f1@15 ~, a3@7 ~@6 f4 ~@18]/2", // F5 Am F Am
  AB: "[[a3,c4,f4]@7 ~ [a3,c4] ~@4 [a3,c4]@2 ~ [a3,c4,f4]@6 ~@2 [a3,c4,f4] ~@5 a3 ~, f1, ~@13 f4 ~@15 c4@2 ~]/2", // F Am F
  AC: "[[g3,b3]@6 ~@2 [g3,b3,d4] ~@4 [g3,b3,d4] ~@2 [g3,b3,d4]@6 ~@2 [g3,b3,d4] ~@5 b3 ~, g2, d4 ~@7]/2", // G
  AD: "[g3,c4]@5 ~@3 [g3,c4,e4] ~@5 g3 ~, c3@12 ~ g2@3, e4 ~@15", // C5 C
})).s("gm_piano").gain(0.23)

// drums · snare
const snare = s("sd").struct("<~@2 A@23 B A@6 ~@2 A@2 ~ A@11 ~@2 A B A@2 B A@9 ~@2 A@14 ~@2 A@12 C ~@3>".pickRestart({
  A: "~ x", B: "x!2", C: "x",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@15 A ~@3 B ~@2 B ~@8 B ~@4 C ~@61>".pickRestart({
  A: "~@11 x ~@4", B: "x", C: "~ x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@30 ~@2 B A ~ A@3 B A@2 B A@2 B A ~@2 A@13 B ~@2 B A@2 B A@2 B A@2 B A@2 B A ~@2 A@12 ~@4
>`.pickRestart({
  A: "~ x", B: "x!2",
})).gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A@3 ~@2 A@5 ~ A@6 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A ~@2 A B A@3 ~ A@2 ~ A@2 ~ A@2 ~ A ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A ~@2
  A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~@3
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.32)

stack(piano, bass, piano_2, snare, snare_soft, hihat, hihat_soft)

More by Elvis Presley