Strudelify

Stuck On You

Elvis Presley

KeyG majorTempo132 bpm
0:00/0:00
// Stuck On You — Elvis Presley
// 132 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 · piano
const piano = note(`<
  ~ A@8 B@2 C@3 D E ~ A@4 B@2 C@3 D E ~ B@2 F@4 G ~ A@4 B@2 C@3 D E ~ B@2 F@4 G ~ A@4 B@2 C@3 D E ~ H D E ~ H D E I@2 ~
>`.pickRestart({
  A: "[~@6 [g#3,d#4] e4@2 ~ [g3,b3,d4]@3 ~@5 [g#3,d#4] e4@2 ~ [g3,b3,d4]@4 ~@4 [a3,c4,e4]@3 ~ [g3,b3,d4]@4 ~@4 [g#3,d#4] e4@2 ~ [g3,b3,d4]@5 ~@3 [g#3,d#4] e4@2 ~ [g3,b3,d4]@5 ~@3 [g#3,d#4] e4@2 ~ [g3,b3,d4]@4 ~@4 [g#3,d#4] e4@2 ~ [g3,b3,d4]@5 ~@3 [a3,c4,e4]@2 ~@2 [g3,b3,d4] ~, ~@6 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [g#3,d#4] ~@11 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [g#3,d#4] ~@5, ~@19 d#4 ~@76]/4", // G#5 G G#5 G Am G G#5 G …
  B: "[~@4 [c4,e4,g4] ~ [c4,f4,a4]@3 ~ [c4,e4]@5 ~ e4 ~ [c4,f4,a4]@3 ~ [c4,e4,g4]@5 ~ [c4,e4,g4] ~ g#4 a4@2 ~ [c4,e4,g4]@5 ~ [c4,e4,g4] ~ [c4,f4,a4]@3 ~ [c4,e4,g4] ~, ~@6 g#4 ~@2 g4@5 ~@4 g#4 ~@11 [c4,f4]@3 ~@9 g#4 ~@5]/2", // C F C F C F C F5
  C: "[~@6 [g#3,d#4] e4@2 ~ [g3,b3,d4]@3 ~@5 [g#3,d#4] e4@2 ~ [g3,b3,d4]@4 ~@4 [a3,c4,e4]@3 ~ [g3,b3,d4]@4 ~@4 [g#3,d#4] e4@2 ~ [g3,b3,d4]@5 ~ d4 ~ [f#4,a#4] [g4,b4]@2 ~ [f#4,a4]@5 ~ d4 [f#4,a#4] [d4,g4,b4]@3 ~ d4 ~, ~@6 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [g#3,d#4] ~@11 [a3,c4]@3 ~@27, ~@19 d#4 ~@34 d4@3 ~ d4@3 ~@11]/3", // G#5 G G#5 G Am G G#5 G …
  D: "[c4,e4,g4,a#4] ~@5", E: "[g3,b3,d4]@4 ~@2 [g3,b3,d4]@5 ~@13, a#3 ~@5 a#3 ~@17",
  F: "[~@6 [g#3,d#4] e4@2 ~ [g3,b3,d4]@3 ~@5 [g#3,d#4] e4@2 ~ [g3,b3,d4]@4 ~@4 [a3,c4,e4]@3 ~ [g3,b3,d4]@4 ~@4 [g#3,d#4] e4@2 ~ [g3,b3,d4]@5 ~ [c4,e4,g4] ~ [c4,f4,a4]@3 ~ [c4,e4]@5 ~ e4 ~ [c4,f4,a4]@3 ~ [c4,e4,g4]@5 ~ [c4,e4,g4] ~ g#4 a4@2 ~ [c4,e4,g4]@5 ~ [c4,e4,g4] ~ [c4,f4,a4]@3 ~ [c4,e4,g4] ~, ~@6 [a3,c4]@3 ~@9 [a3,c4]@3 ~@9 [g#3,d#4] ~@11 [a3,c4]@3 ~@33 [c4,f4]@3 ~@15, ~@19 d#4 ~@34 g#4 ~@2 g4@5 ~@4 g#4 ~@23 g#4 ~@5]/4", // G#5 G G#5 G Am G G#5 G …
  G: "[c4,d4,f#4,a4]@5 ~@19", // D7
  H: "~@4 d4 ~ [f#4,a#4] [g4,b4]@2 ~ [f#4,a4]@5 ~ d4 [f#4,a#4] [d4,g4,b4]@3 ~ d4 ~, ~@6 d4@3 ~ d4@3 ~@11", // F# G F#m F# G
  I: "[~@2 [d4,d5] [e4,e5]@2 [g4,b4,f5,g5]@19]/2", // D E G7
})).s("gm_piano").gain(0.38).pan(0.4)

// bass · acoustic bass
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U V W X Y N O Z AA AB AC AD AE AF AG AH AI AJ E AK I AL W AM AN AO O AP AQ
  AR AS AT AU AV AW AX AY AZ S BA I BB W BC BD N BE BF Y N BG BH Y N BG BI@2 ~
>`.pickRestart({
  A: "g2@10 ~@2 d2@3 ~@3 d2@3 ~@3", B: "g2@6 g2@4 d2@4 ~@2 d2 ~ e2@3 ~ d2@2", C: "g1@2 ~@2 d2 ~ d2 ~",
  D: "g2@6 ~@4 d2@4 ~@2 d2 ~ e2@3 ~ d2@2", E: "g2@5 ~ e2@5 ~ d2@5 ~ b1@5 ~", F: "g1@5 ~ e2@5 ~ d2@3 ~ d2 ~ b1@4 d2 ~",
  G: "g1@4 ~@2 b1@5 ~ d2@5 ~ e2@4 ~@2", H: "g2@3 ~ g2 ~ f2@5 ~ e2@3 ~ e2 ~ d2@4 ~@2", I: "c2@5 ~ e2@5 ~ g2@5 ~ a2@5 ~",
  J: "a#2@5 ~ a2@5 ~ g2@5 ~ e2@5 ~", K: "g1@5 ~ g2@5 ~ d2@5 ~ b1@4 ~@2", L: "g1@4 ~@2 g1@5 ~ g2@3 ~ d2 ~ e2@3 ~ d2 ~",
  M: "d2@5 ~ d3@4 ~@2 d2@5 ~ d2@5 ~", N: "c2@5 ~@19", O: "g2@2 ~ g2@2 ~@7",
  P: "~@4 d2 ~ d2@3 ~ d2 ~ d2@3 ~@3 e2@3 ~@3, ~@16 c2@5 ~@3", Q: "g2@4 ~@2 e2@5 ~ d2@5 ~ b1@5 ~",
  R: "g1@4 ~@2 e2@5 ~ d2@4 ~@2 b1@4 ~@2", S: "g1@5 ~ b1@5 ~ d2@5 ~ e2@5 ~", T: "g2@6 e2@5 ~ d2@5 ~ b1@4 ~@2",
  U: "c2@5 ~ e2@5 ~ g2@5 ~ a2@4 ~@2", V: "a#2@5 ~ a2@5 ~ g2@3 ~ g2 ~ e2@4 ~@2", W: "g1@5 ~ g2@5 ~ d2@5 ~ d2@5 ~",
  X: "g2@5 ~ e2@5 ~ d2@5 ~ b1@4 ~@2", Y: "d2@5 ~ b2@5 ~ a2@5 ~ d2@5 ~", Z: "~@4 g2@2 f2@3 ~ f2@2 e2@3 ~ e2@2 d2@5 ~",
  AA: "c2@3 ~ c2 ~ e2@5 ~ g2@5 ~ e2@5 ~", AB: "c2@5 ~ a2@5 ~ g2@4 ~@2 e2@5 ~", AC: "g1@4 ~@2 b1@5 ~ d2@5 ~ e2@5 ~",
  AD: "g2@3 ~ g2 ~ e2@5 ~ d2@5 ~ b1@5 ~", AE: "c2@5 ~ e2@5 ~ g2@5 ~ e2@5 ~", AF: "c2@5 ~ a2@5 ~ g2@5 ~ e2@4 ~@2",
  AG: "d2@5 ~@19", AH: "~@6 d2@5 ~ e2@5 ~ f#2@3 ~@3", AI: "g2@5 ~ g2@5 ~ d2@5 ~ d2@5 ~",
  AJ: "g2@5 ~ g2@3 ~ e2 ~ d2@3 ~ d2 ~ e2@3 ~ d2@2", AK: "g1@5 ~ b1@4 ~@2 d2@3 ~ g2 ~ f2@5 ~",
  AL: "a#2@5 ~ a2@5 ~ g2@3 ~ d2 ~ e2@4 d2@2", AM: "g2@5 ~ e2@5 ~ d2@4 d2@2 b1@4 c2@2",
  AN: "d2@4 ~@2 b2@5 ~ a2@3 ~ d2 ~ d2@5 ~", AO: "c2 ~@5", AP: "~@4 g2@2 f2@3 ~ f2@2 e2@3 ~ e2@2 d2@3 ~ d2@2",
  AQ: "c2@5 ~ e2@5 ~ g2@4 g2@2 e2@3 ~ g2 ~", AR: "a#2@4 ~@2 a2@3 ~ e2 ~ g2@3 ~ g2@2 e2@3 ~@3",
  AS: "g1@4 ~@2 a#1@4 b1@2 d2@5 ~ e2@3 ~ d2 ~", AT: "g2@5 ~ e2@3 ~ e2 ~ d2@5 ~ b1@5 ~",
  AU: "c2@5 ~ e2@5 ~ g2@5 ~ e2@4 g2@2", AV: "c2@5 ~ a2@3 ~ e2 ~ g2@3 ~ g2@2 e2@4 ~@2", AW: "d2 ~@5",
  AX: "d2@2 ~@4 d2@5 ~ e2@5 ~ f#2@5 ~", AY: "g1@3 ~ g1 ~ b1@5 ~ d2@5 ~ b1@3 ~ d2 ~",
  AZ: "g2@5 ~ e2@5 ~ d2@4 d2 ~ b1@5 ~", BA: "g2@5 ~ f2@5 ~ e2@5 ~ d2@5 ~", BB: "a#2@5 ~ a2@4 ~@2 g2@4 d2 ~ e2@5 ~",
  BC: "g2@5 ~ e2@5 ~ d2@5 ~ b1@3 ~ b1 ~", BD: "d2@5 ~ b2@3 ~ b2@2 a2@3 ~ a2 ~ d2@4 ~@2", BE: "g2@4 ~@2 g2@5 ~@13",
  BF: "~@3 b1@2 ~ c2@2 ~ e2@2 ~", BG: "g2@3 ~@3 g2@5 ~@13", BH: "~@6 g2@5 ~ b1@5 ~ c2@4 ~@2",
  BI: "[g2@3 ~ e2@2 d2@3 ~ g1@38]/2",
})).s("gm_acoustic_bass").gain(0.38)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C@2 A B C@2 D@2 A B E F G H A B C@2 D@2 A B E F G I J@6 K ~ A B C@2 D@2 A B E F G I J@6 K ~ A B C@2 D@2 A B E F
  G L E F G M E F G ~@3
>`.pickRestart({
  A: "g2@3 ~ g2 ~ c3@3 ~ b2@2 g2@3 ~ g2 ~ c3@2 ~@2 b2@2", B: "g2@3 ~ g2 ~ c3@3 ~ b2@2 g2@3 ~ g2 ~ c3@3 ~ b2@2",
  C: "g2@3 ~ g2 ~ c3@3 ~ b2@2 g2@3 ~ g2 ~ c3@3 ~ b2 ~", D: "g2@3 ~ g2 ~ a2@3 ~ g2 ~ g2@3 ~ g2 ~ a2@3 ~ g2 ~",
  E: "~@4 a2 ~ b2@3 ~ a2@3 ~@3 a2 ~ b2@3 ~ a2 ~", F: "g2 ~@5", G: "g2@2 ~ g2@2 ~@7",
  H: "~@4 d2 ~ d2@3 ~ d2 ~ d2@4 d2 ~ e2@3 ~ d2 ~", I: "~@4 g2 ~ f2@3 ~ f2 ~ e2@3 ~ e2 ~ d2@3 ~ d2@2",
  J: "[g2@2 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@3 ~ g2@5 ~ g2 ~ a2@3 ~ g2@5 ~@3 a2@3 ~ g2@5 ~ g2 ~ a2@3 ~ g2@5 ~ g2 ~ a2@3 ~ g2@4 ~@2 g2 ~ a2@2 ~@2 g2 ~]/6",
  K: "[d2,a2] ~@5", L: "~@6 g2@3 ~ g2 ~ a2@3 ~ a2 ~ b2@4 ~@2", M: "~@6 g2@3 ~ g2 ~ b2@3 ~ b2 ~ c3@4 ~@2",
})).s("gm_electric_guitar_muted").gain(0.38).pan(0.9)

// chords · rock organ
const rock_organ = note(`<
  ~@3 A B ~@4 C@2 D@2 E F ~@2 G@4 C@2 D@2 E F ~@2 H@2 I@2 H@2 J ~ G@4 C@2 D@2 E F ~@2 H@2 I@2 H@2 J ~ G@4 C@2 D@2 E F
  ~@2 E F ~@2 E F ~ K@2 ~
>`.pickRestart({
  A: "~@2 [b4,d5,g5] [c5,e5,a5]@2 [b4,d5]@2 ~@5, ~@5 g5 ~@6", B: "~@2 [b4,d5,g5] [c5,e5,a5]@2 [b4,d5,g5] ~@6",
  C: "~@2 [e5,g5,c6] [f5,a5,d6]@2 [e5,g5,c6] ~@6", D: "~@2 [d5,g5,b5] [e5,a5,c6]@2 [d5,g5,b5] ~@6",
  E: "~@2 [d5,f#5,a5] [e5,g5,b5]@2 [d5,f#5,a5]@7", F: "[c5,e5,g5] ~@5",
  G: "~@2 [d5,g5,b5] [e5,a5,c6]@2 [d5,g5,b5]@2 ~@5", H: "[c5,e5,g5,c6]/2", I: "[g4,d5,g5,b5]/2",
  J: "[d5,f#5,a5,d6] ~@3", K: "[~@5 [d5,f5,g5,b5]@19]/2",
})).s("gm_rock_organ").gain(0.28).pan(0.6)

// chords · piano
const piano_2 = note(`<
  ~ A@2 B C A@2 B C D E F@2 G H I J A@2 B C D E F@2 G H I K D E F@2 D E L M A@2 B C D E F@2 G H I K D E F@2 D E L M A@2
  B C D E F@2 G H I N G H I O G H I P@2 ~
>`.pickRestart({
  A: "[[g2,d3]@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [g2,e3]@2 d3@2 ~@2 [g2,d3] ~ [g2,e3]@3 ~ e3@2 d3@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [g2,e3]@2 d3@2 ~@2 [g2,d3] ~ [g2,e3]@3 ~ [g2,e3] ~, ~@22 g2@5 ~@21]/2", // G5 C G5 C G5 C G5 C
  B: "[g2,d3]@3 ~ g2@2 [g2,e3]@3 ~ [g2,e3] ~ [g2,d3]@3 ~ g2@2 [g2,e3]@3 ~ e3@2, ~@4 d3 ~@11 d3 ~@5 g2 ~", // G5 C G5 C
  C: "[g2,d3]@3 ~ d3 ~ e3@3 ~ [g2,e3] ~ [g2,d3]@3 ~ g2@2 [g2,e3]@3 ~ [g2,e3] ~, ~@4 g2@4 ~@8 d3 ~@7", // G5 C G5 C
  D: "c2@3 ~ c2@2 [c2,a2]@3 ~ [c2,a2] ~ [c2,g2]@3 ~ c2@2 [c2,a2]@3 ~ a2@2, ~@4 g2 ~@11 g2 ~@5 c2 ~", // F C5 F
  E: "[c2,g2]@3 ~ g2 ~ a2@3 ~ [c2,a2] ~ [c2,g2]@3 ~ c2@2 [c2,a2]@3 ~ [c2,a2] ~, ~@4 c2@4 ~@8 g2 ~@7", // C5 F C5 F
  F: "[[g2,d3]@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [g2,e3]@2 [g2,d3]@2 ~@2 [g2,d3] ~ [g2,e3]@3 ~ e3@2 d3@3 ~ [g2,d3] ~ [g2,e3]@3 ~ [g2,e3]@2 [g2,d3]@2 ~@2 [g2,d3] ~ [g2,e3]@3 ~ [g2,e3] ~, ~@22 g2@5 ~@21]/2", // G5 C G5 C G5 C G5 C
  G: "[d2,a2]@3 ~ [d2,a2] ~ [d2,b2]@3 ~ [d2,b2] ~ [d2,a2]@3 ~ [d2,a2] ~ [d2,b2]@3 ~ [d2,b2] ~", H: "[c2,g2] ~@5",
  I: "[g2,d3]@4 ~@2 [g2,d3]@5 ~@13", // G5
  J: "~@4 [d2,d3]@2 [d2,d3]@4 d2@2 [d2,d3]@3 ~ [d2,d3] ~ [d2,d3]@3 ~ [d2,d3]@2, ~@10 d3 ~@13", // D
  K: "~@6 [g1,g2]@3 ~ [g1,g2] ~ [a1,a2]@3 ~ [a1,a2] ~ [b1,b2]@5 ~", L: "[d2,a2,d3]@5 ~@19",
  M: "[d2,d3] ~ [d2,d3] ~ [d2,d3]@2 d2@2 [d2,d3] ~ [d2,d3]@2 [d2,d3] ~ [d2,d3]@2 d3@2 [d2,d3] ~ [d2,d3] ~ [d2,d3]@2, ~@6 d3 ~@9 d2 ~@7", // D
  N: "~@6 [b1,g2]@5 ~ [c2,a2]@5 ~ [e2,b2]@5 ~", O: "~@3 g1@2 g2 b1@2 b2 c2@2 c3",
  P: "[[g2,g3]@3 ~ [e2,e3]@2 [d2,d3]@4 [f3,b3,d4]@38, ~@5 [g1,g2]@16 ~@3]/2", // G E D Bdim G
})).s("gm_piano").gain(0.33).pan(0.2)

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

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@13 B C D A@9 B C D ~@6 B ~ A@9 B C D ~@6 B ~ A@9 B C D A B C D A B C ~@3
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x", C: "x!2 ~@2", D: "~ x!3",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@36 [~@2 x] ~@42>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@36 [~ x!3] ~@19 [~@6 x!6] ~@22>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@76 [~@15 x!5 ~ x!3] [x!6 ~ x!4 ~ x!2 ~ x ~@8] ~>").gain(0.35)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@76 [~@7 x ~@4] [~@16 x ~@2 x ~ x ~@2] ~>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@76 [~@5 x ~@6] ~@2>").gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~@29
  [x ~@2 x ~ x!2 ~@2 x ~ x]!2
  [x ~@2 x ~@2 x ~@2 x ~ x]!4
  ~@14
  [x ~@2 x ~ x!2 ~@2 x ~ x]!2
  [x ~@2 x ~@2 x ~@2 x ~ x]!4
  ~@24
>`).gain(0.35)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@29
  [~ x ~@2 x ~]!2
  [~@2 x ~@2 x ~@2 x ~@3]!4
  ~@14
  [~ x ~@2 x ~]!2
  [~@2 x ~@2 x ~@2 x ~@3]!4
  ~@24
>`).gain(0.2)

stack(
  piano, bass, electric_guitar_muted, rock_organ, piano_2, kick, snare, snare_soft, hihat, low_tom, mid_tom, open_hat,
  open_hat_soft, crash, ride, ride_soft
)

More by Elvis Presley