Strudelify
Love Me Tender cover art

Viva Elvis

Love Me Tender

Elvis Presley

KeyD♭ majorTempo82 bpm
0:00/0:00
// Love Me Tender — Elvis Presley
// 82 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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.

// bass · acoustic bass
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R G H Q S T U V W X Y Z AA AB AC Q AD T AE Q AF C L I AG AH AI AJ AK AL@2 AM AN AO
  ~
>`.pickRestart({
  A: "db2@4 ~@2 db2@2 ab2@4 db2@3 ~", B: "eb2@5 ~ eb2 ~ bb1@3 ~ eb2@3 ~", C: "ab1@5 ~ ab1 ~ eb2@4 ab1@3 ~",
  D: "db2@5 ~ db2@2 ab2@3 ~ ab1@3 ~", E: "db2@4 ~@2 db2@2 ab2@3 ~ db2@3 ~", F: "eb2@5 ~ eb2@2 bb1@3 ~ eb2@4",
  G: "ab1@4 ~@2 ab1@2 eb2@4 ab1@3 ~", H: "db2@5 ~ db2@2 ab2@4 ab1@4", I: "db2@5 ~ db2 ~ c2@5 ~ c2@2",
  J: "bb1@5 ~ bb1 ~ ab1@5 ~ ab1@2", K: "gb1@5 ~ db2@2 gb2@4 gb1@4", L: "db2@2 ~ db2 ab2@2 ab1@2",
  M: "db2@5 ~ db2 ~ d2@5 ~ d2@2", N: "eb2@5 ~ eb2 ~ eb2@4 bb1@4", O: "ab1@5 ~ ab1 ~ eb2@4 ab1@4",
  P: "db2@4 ~@2 db2@2 ab2@4 ab1@3 ~", Q: "db2@5 ~ db2@2 ab2@4 db2@3 ~", R: "eb2@5 ~ bb1@2 eb2@3 ~ eb2@3 ~",
  S: "eb2@5 ~ eb2 ~ eb2@4 bb1@3 ~", T: "ab1@5 ~ ab1@2 eb2@4 ab1@3 ~", U: "db2@5 ~ db2@2 ab2 ~ ab2@2 ab1@3 ~",
  V: "db2@5 ~ db2@2 c2@5 ~ c2@2", W: "bb1@5 ~ bb1@2 ab1@5 ~ ab1@2", X: "gb1@5 ~ db2@2 gb2@4 db2@3 ~",
  Y: "db2@4 ~@2 ab1@2 db2 ~ db2@3 ~ ab1@2", Z: "db2@5 ~ db2@2 d2@5 ~ d2@2", AA: "eb2@5 ~ bb1@2 eb2@5 ~ eb2@2",
  AB: "ab1@4 ~@2 ab1@2 bb1@3 ~ c2@3 ~", AC: "db2@5 ~ db2@2 ab2 ~ ab2 ~ ab1@3 ~", AD: "eb2@5 ~ bb1@2 eb2@4 bb1@4",
  AE: "db2@4 ~@2 db2@2 ab2 ~ ab2@2 ab1@3 ~", AF: "eb2@5 ~ eb2@2 bb1@4 eb2@4", AG: "bb1@5 ~ bb1 ~ ab1@4 ~@2 ab1@2",
  AH: "gb1@5 ~ db2@2 gb2@6 gb1@2", AI: "db2@5 ~ ab1@2 db2 ~ db2@3 ~ ab1@2", AJ: "db2@5 ~ db2 ~ d2@5 ~ d2 ~",
  AK: "eb2@6 bb1@2 eb2@5 ~ eb2@2", AL: "[ab1@25 ~@7]/2", AM: "db2@5 ~ db2@2 ab2@4 db2@4", AN: "a1@5 ~ a1@2 b1@5 ~ b1@2",
  AO: "db2@7 ~",
})).s("gm_acoustic_bass").gain(0.16)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A B C@3 B D@2 E@2 F G@2 H I@3 B J K@2 B L@2 E@2 M N@2 O P@3 B Q@3 B R S T U V@3 W X@2 S Y Z@2
>`.pickRestart({
  A: "[db4,f4,ab4,db5]@15 ~", B: "[eb4,g4,bb4,eb5]@15 ~",
  C: "[[db4,db5]@6 [c4,c5]@9 ~ [db4,f4,db5]@31 ~, ab4@47 ~, gb4@5 ~@11]/3", // Db C Db
  D: "[db5@7 [c4,c5]@8 ~ f4@7 ~ f4@6 ~@2, ab4@31 ~, gb4@14 ~@2 db5@15 ~, db4@5 ~@11 db4@13 ~@3]/2", // C
  E: "[[ab4,db5]@8 [a4,c5,eb5]@7 ~ [bb4,d5]@6 ~@2 [b4,db5]@6 ~@2, [f4,f5]@15 ~, ~@8 ab4@7 ~]/2", // Db5 Adim Bb Bsus2 F
  F: "[bb4,db5,f5]@7 ~ [a4,db5,eb5]@8, gb4@7 ~", // Bbm Ebm7b5
  G: "[[ab4,db5,f5]@22 ~@2 d5@2 [d5,f5]@5 ~, f4@24 bb4@7 ~, ~@24 gb5 ~@7]/2", H: "[g4,bb4,db5,eb5]@15 ~",
  I: "[[db4,db5]@5 ~ [c4,c5]@9 ~ [db4,f4,db5]@31 ~, ab4@23 ~, gb4@5 ~@11]/3", // Db C Db
  J: "[db4,db5]@6 [c4,c5]@9 ~, [gb4,ab4]@15 ~", K: "[[db4,f4,ab4,db5]@31 ~]/2",
  L: "[[db4,db5]@7 ~ [c4,c5]@8 [db4,f4,db5]@15 ~, ab4@31 ~, gb4@15 ~@17]/2", // Db C Db
  M: "[bb4,db5,f5]@8 [a4,db5,eb5]@7 ~, gb4@15 ~", // Bbm Ebm7b5
  N: "[[f4,ab4,db5,f5]@23 ~ gb4@3 f5@4 ~, ~@24 [bb4,d5]@7 ~, ~@12 gb5 ~@3]/2", O: "eb5@4 eb4@3 ~, [g4,bb4]@7 ~",
  P: "[[db4,db5]@5 ~ [c4,c5]@9 ~ [db4,f4,db5]@31 ~, ab4@47 ~, gb4@5 ~@11]/3", // Db C Db
  Q: "[[db4,db5]@6 c5@10 [db4,f4,db5]@31 ~, ab4@47 ~, gb4@5 ~@11, ~@3 c4@4 ~@17]/3", // Db
  R: "[db4,gb4,ab4,db5]@7 ~ [c4,gb4,ab4,c5]@7 ~", S: "[db4,f4,ab4,db5]@7 ~",
  T: "[ab4,db5]@8 [a4,c5,eb5]@7 ~, f5@15 ~, db4@5 ~@11", U: "[bb4,d5,f5]@7 ~ [b4,db5,f5]@7 ~, ab4@7 ~",
  V: "[[gb4,bb4,db5,f5]@6 ~ [gb4,a4,eb5]@8 ~ [ab4,f5]@23 ~ [gb4,gb5]@3 f5@4 ~, ~@7 db5@31 ~@2 [bb4,d5]@7 ~, ~@8 f4@9 ~@7]/3", // Gbmaj7 Ebdim Db Gb Bb
  W: "~@8 eb4@5 ~@3, [g4,bb4,eb5]@7 ~", // Eb
  X: "[[db4,gb4,ab4,db5]@4 c4@4 f5@20 eb5@3 ~, ~@4 c5@2 ~@2 [ab3,eb4,ab4,c5]@23 ~]/2", // Dbsus4 Ab
  Y: "[db4,e4,a4,db5] [eb4,gb4,b4]", Z: "[[db4,f4,ab4,db5]@9 ~@7]/2",
})).s("gm_synth_strings_1").gain(0.04).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@2 B C A D E C A F G H I J K L A D B M N A B O A P Q R S T U V N W B X Y Z U X Y AA Q R AB AC AD AE@2 N AF AG ~
>`.pickRestart({
  A: "db4@4 [f4,ab4,db5]@4 ab3@4 [f4,ab4,db5]@3 ~", B: "eb4 [g4,bb4,eb5] bb3 [g4,bb4,eb5]",
  C: "ab3@4 db5@2 c5@2 ab3@4 [gb4,ab4,c5]@3 ~, ~ [gb4,ab4] ~@2", D: "db4@4 [f4,ab4,db5]@3 ~ ab3@4 [f4,ab4,db5]@3 ~",
  E: "eb4@4 [g4,bb4,eb5]@3 ~ bb3@4 [g4,bb4,eb5]@3 ~", F: "db4 [ab4,db5,f5] f4 [a4,c5,eb5,f5]",
  G: "~@4 [ab4,bb4,d5,f5]@4 ~@4 [ab4,b4,db5,f5]@3 ~, bb3@3 ~ ab3@3 ~", H: "gb3 [gb4,bb4,db5,f5] gb3 [gb4,a4,db5,eb5]",
  I: "db4@4 [ab4,db5,f5]@4 ab3@4 [ab4,db5,f5]@3 ~", J: "db4@4 [ab4,db5,f5]@3 ~ bb3@4 [f4,ab4,bb4,d5]@3 ~",
  K: "eb4@4 [g4,bb4,eb5]@4 bb3@4 [g4,bb4,eb5]@3 ~", L: "ab3@2 db5 c5 ab3@2 [gb4,ab4,c5]@2, ~ [gb4,ab4] ~@2",
  M: "~@4 db5@2 c5@2 ~@4 [gb4,ab4,c5]@3 ~, ab3@3 ~ ab3@3 ~, ~ [gb4,ab4] ~@2", N: "db4 [f4,ab4,db5] ab3 [f4,ab4,db5]",
  O: "ab3@4 db5@2 ~@2 ab3@4 [gb4,ab4,c5]@3 ~, ~@2 [gb4,ab4]@3 ~@3, ~@3 c5@2 ~@3", // Ab7 Gbsus2
  P: "~@4 [ab4,db5,f5]@3 ~@5 [a4,c5,eb5,f5]@4, db4@3 ~ c4@3 ~", // Db F7
  Q: "~ [ab4,bb4,d5,f5] ~ [ab4,b4,db5,f5], bb3@3 ~ ab3@3 ~", // Bb7 Db7
  R: "~ [gb4,bb4,db5,f5] ~ [gb4,a4,db5,eb5], gb3@3 ~ gb3@3 ~", // Gbmaj7 Ebm7b5
  S: "~@4 [ab4,db5,f5]@4 ~@4 [ab4,db5,f5]@3 ~, db4@7 ~ ab3@6 ~@2", // Db
  T: "~@4 [ab4,db5,f5]@3 ~@5 [ab4,bb4,d5,f5]@4, db4@3 ~ bb3@3 ~", U: "~ [g4,bb4,eb5] bb3 [g4,bb4,eb5], eb4@3 ~@5",
  V: "~@4 db5 ~ c5@2 ab3@4 [gb4,ab4,c5]@3 ~, ab3 ~, ~ [gb4,ab4] ~@2", // Ab7 Gbsus2
  W: "db4@4 [f4,ab4,db5]@4 ~@4 [f4,ab4,db5]@3 ~, ~@4 ab3@3 ~", // Db
  X: "ab3@2 db5 c5 ab3@2 [gb4,ab4,c5]@2, ~@4 [gb4,ab4]@5 ~@7", Y: "db4 [f4,ab4,db5] ~ [f4,ab4,db5], ~@4 ab3@3 ~",
  Z: "~@4 [f4,ab4,db5]@4 ab3@4 [f4,ab4,db5]@3 ~, db4@3 ~@5", AA: "~ [ab4,db5,f5] ~ [a4,c5,eb5,f5], db4@3 ~ c4@3 ~",
  AB: "db4 [ab4,db5,f5] ~ [ab4,db5,f5], ~@4 ab3@3 ~", AC: "~ [ab4,db5,f5] bb3 [f4,ab4,bb4,d5], db4@3 ~@5",
  AD: "~@2 [g4,bb4,eb5]@2 eb4@2 [g4,bb4,eb5] ~, eb4@3 ~@5", AE: "[[db4,db5] [c4,c5]@5 ~@2, [gb4,ab4]@3 ~]/2",
  AF: "~ [e4,a4,db5] b2 [eb4,gb4,b4], a3@3 ~@5", AG: "~@6 db5@9 ~, db3@7 ~, ~ f4@7, ~@4 ab4@11 ~",
})).s("gm_acoustic_guitar_steel").gain(0.11).pan(1)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!46 x ~ [x ~@2 x!2 ~@3] [x ~@2 x!2 ~@2 x] x ~>").gain(0.22)

// drums · rim
const rim = s("rim").struct("<~ A@7 B C@8 A@3 B A@3 B C@8 A@3 B A@3 B ~@12>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~ x ~@2",
})).gain(0.27)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 C D E F C F G D C D@2 C D@2 C D@4 G D@4 F D@2 F D@2 F@2 H F D@4 ~@6 I ~@5
>`.pickRestart({
  A: "x ~@2 x", B: "x ~ x!3 ~ x ~", C: "x ~ x!3 ~ x!2", D: "x!8", E: "x ~ x!5 ~", F: "x ~ x!6", G: "x!5 ~ x!2",
  H: "x!7 ~", I: "x",
})).gain(0.22)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B@2 C ~ D E C E F ~ C ~@2 C ~@2 C ~@4 F ~@4 E ~@2 E ~@2 E@2 G E ~@16
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "~ x ~@3 x ~ x", C: "~ x ~@3 x ~@2", D: "~ x ~@5 x", E: "~ x ~@6", F: "~@5 x ~@2", G: "~@7 x",
})).gain(0.16)

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

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

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@41 A B C A C D ~@2 C E ~@2>".pickRestart({
  A: "~ x ~@5 x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~ x ~ x", D: "~ x ~@6", E: "~ x ~@3 x ~ x",
})).gain(0.16)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!46 ~@2 [~@3 x]!2 ~@2>").gain(0.38)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A B A@3 B A@4 B A@2 B A@8 B A@13 B@3 A@7 ~@2 A@2 ~@2>".pickRestart({
  A: "~@6 x!2", B: "~@7 x",
})).gain(1.11)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@2 A ~@3 A ~@4 A ~@2 A ~@8 A ~@13 A@3 B ~@8 B@2 ~@2>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2",
})).gain(0.83)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B A C@2 A@5 D A@4 D A D@5 A E D@3 A D A@2 D A E D A D@3 A D@6 ~@2 C D ~@2
>`.pickRestart({
  A: "~@3 x!2 ~ x ~@9", B: "~@3 x!2 ~@11", C: "~@2 x!2 ~@4", D: "~@2 x!3 ~ x ~@9", E: "~@2 x!3 ~@11",
})).gain(0.22)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~ A B A C@2 A@5 ~ A@4 ~ A ~@5 A D ~@3 A ~ A@2 ~ A D ~ A ~@3 A ~@8 C ~@3
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~ x ~@4", C: "~@2 x!2 ~@12", D: "~@3 x ~@4",
})).gain(0.11)

// drums · claves
const claves = s("clave:2").struct("<~ [~@2 x!2 ~@4]!46 ~@2 [~@2 x!2 ~@4]!2 ~@2>").gain(1.34)

stack(
  bass, synth_strings_1, acoustic_guitar_steel, kick, rim, snare, hihat, hihat_soft, crash, ride, ride_soft, tambourine,
  cabasa, cabasa_soft, shaker, shaker_soft, claves
)

More by Elvis Presley