Strudelify

Johnny B. Goode

Elvis Presley

KeyB♭ majorTempo172 bpm
0:00/0:00
// Johnny B. Goode — Elvis Presley
// 172 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172/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 · overdriven guitar
const overdriven_guitar = note(`<
  A B C D E F G F H I J K L ~@12 M ~ M ~ M ~ M ~ N ~@15 O ~ O ~ O ~ P ~ Q R ~ S T U V W X Y Z AA AB AC@2 AD T U AE AF AG
  AH AI AJ AK AL AM AN ~@12 AO AP AO AP AO AP AO AQ AR ~ AS AT@2 ~
>`.pickRestart({
  A: "~@5 c4 f4 g4", B: "[e4,a4] [f4,bb4]!2 [e4,a4] [f4,bb4]!2 [e4,a4] [f4,bb4]", C: "[f4,bb4] ab4 g4 f4 db4 d4 bb3!2",
  D: "[e3,a3] [f3,bb3]!6 [bb3,d4]", E: "[bb3,d4] [d4,f4] [d4,g4] [d4,f4] d4 bb3 g3 ~", F: "eb4 ~ f4 eb4 ~ f4 eb4 ~",
  G: "[f4,bb4] eb4 ~ f4 eb4 ~ f4 ~", H: "f4 eb4 ~ f4 eb4 ~ [f4,bb4] ~", I: "eb4 ~ bb4 ab4 g4 f4 c5 bb4",
  J: "ab4 g4 f4 eb4 db4 ~ bb4 ab4, ~@10 d4@3 ~@3, ~@11 f4@2 ~@3", K: "~ [f4,bb4] eb4 [f4,bb4] eb4 [f4,bb4] eb4 db4",
  L: "bb3 ~@7", M: "~@2 [e4,g4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,bb4]@5 ~",
  N: "~ [e4,g4] [f4,ab4]!3 [f4,bb4]@2 [eb4,g4]", O: "~ [e4,g4] [f4,ab4]!2 [e4,g4] [f4,ab4] [e4,g4] ~",
  P: "~ [e4,g4] [f4,ab4]!2 [e4,g4] [f4,ab4]!2 ~", Q: "~ [e4,g4] [f4,ab4]!2 [e4,g4] [f4,ab4] [e4,g4] [f4,ab4]",
  R: "[e4,g4] [f4,ab4] [e4,g4] ~@5", S: "~@10 g3 ab3 f4@2 eb4@2",
  T: "[f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3@2", // Bb5 Eb Db
  U: "[f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3 ~", // Bb5 Eb Db
  V: "[f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3@2 [f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3@2", // Bb5 Eb Db Bb5 Eb Db
  W: "[f4,bb4] [bb3,eb4] [f4,bb4] [bb3,eb4] [f4,bb4] [bb3,eb4] [f4,bb4] [bb3,eb4]", X: "~ eb4 ~ bb4 ab4 bb4 c5 bb4",
  Y: "ab4@2 g4@2 [f4,bb4]@2 eb4@2 db4@2 ~@2 bb4@2 bb4 ~, ~@5 d4 ~@2, ~@11 f4@3 ~@2", Z: "bb4 g4 f4 d4 [f4,bb4] bb4!3",
  AA: "bb4 g4 f4 d4 [f4,bb4] g4 f4 d4", AB: "bb4 [f4,bb4]!4 [eb4,g4] db4 bb3",
  AC: "[~@2 [eb4,g4]@2 ~@2 [eb4,g4]@3 ~ [eb4,g4]@3 ~ [eb4,g4]@4 [eb4,g4] ~@5 [d4,gb4]@2 [db4,f4]@2 bb3@2 bb3@2]/2", // Eb D Db
  AD: "[db4,f4] [f3,bb3]@2 ~@5", AE: "[f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3 ~ [f4,bb4]@2 [eb4,g4] ~ [db4,f4]@2 bb3@2",
  AF: "[db4,f4] ~ [eb4,g4]@2 [eb4,g4]@2 [eb4,g4]@3 ~ [eb4,g4]@4 ~@2", // Db Eb
  AG: "~@2 [eb4,ab4] ~ [f4,bb4] [eb4,ab4] ~ [f4,bb4]", AH: "[eb4,ab4] ~ [f4,bb4] [eb4,ab4] ~ [f4,bb4] [eb4,ab4] ~",
  AI: "[f4,bb4] ~ [eb4,ab4] ~ [f4,bb4] [eb4,ab4] ~ [f4,bb4]", AJ: "[eb4,ab4] ~ [f4,bb4] [eb4,ab4] ~ [f4,bb4]!3",
  AK: "[ab4,db5] [f4,bb4] [g4,c5] [f4,bb4] [e4,ab4] [eb4,g4] [db4,f4] bb3", // Db5 Bb5 C5 Bb5 E Eb Db
  AL: "[eb4,ab4] [f4,bb4] [eb4,ab4] [f4,bb4] [eb4,ab4] [f4,bb4] [eb4,ab4] db4", // Ab5 Bb5 Ab5 Bb5 Ab5 Bb5 Ab5
  AM: "~ [f3,bb3] [f4,bb4] ~ [f4,bb4]!2 [eb4,g4] db4", AN: "bb3@3 ~@13", AO: "~@5 [e4,g4] [f4,ab4]!2",
  AP: "[f4,ab4] [f4,bb4] [f4,ab4] ~@5", AQ: "[f4,ab4]@2 [f4,bb4]@2 [f4,ab4]@2 ~@4 [eb4,gb4]@3 ~ [e4,g4]@2",
  AR: "[f4,ab4] ~@9 [f4,ab4]@2 [f4,ab4]@2 [f4,bb4]@2", AS: "[bb2,f3,bb3]!2 ~@2 [bb2,f3,bb3]!2 ~@2",
  AT: "[[bb2,f3,bb3]@2 [bb2,f3,bb3] ~@3 [bb2,f3,bb3]@25 ~]/2", // Bb5
})).s("gm_overdriven_guitar").gain(0.37)

// bass · acoustic bass
const bass = note(`<
  ~@3 A ~ B C D@2 E F G@2 H I J K L M H I N@2 O I P Q H I L R H I N S H I G T U V W X O I Y Z O I J H AA H W AB O I AC@2
  O I AD AE AD ~ AF AG H AH AI AJ H I AK AL AM AN AO AP H AQ AR S AS AT AU D O I AV AW O I AC@2 H I AX AY@2 H AZ BA H I
  S@2 H BB@2 ~
>`.pickRestart({
  A: "bb1 ~@7", B: "eb3@2 eb3 ~ g2@3 ~ bb2@3 ~ c3@3 ~", C: "eb3@2 eb3 ~ bb2@2 g2 ~ eb2@3 ~ g2@2 a2 ~", D: "bb2!2 f2 g2",
  E: "f2 c3 f2 g2", F: "eb2@2 bb2@2 eb2@2 g2 a2", G: "bb2@2 d3 eb3 f3 f2 g2 a2", H: "bb2 g2 f2 g2", I: "bb1 d2 f2 g2",
  J: "bb2 d3 f3 f2", K: "bb2!2 f2 bb2", L: "eb2 g2 bb2 c3", M: "eb3 g2 eb3 g2", N: "c3 d3 c3 g2", O: "bb2 g2 f2 d2",
  P: "bb2@2 d3@2 f3@2 f2 g2", Q: "bb2!2 d2 g2", R: "db3@4 eb3@2 e3 ~ f3@2 f2@2 g2@2 a2@2", S: "c3 d3 f2 g2",
  T: "bb2 g2 f2 bb1", U: "bb2@2 d3 eb3 f3@2 f2@2", V: "bb2 c3 bb2!2", W: "eb3@2 g2@2 bb2 g2 eb2@2",
  X: "eb2@2 g2 a2 bb2@2 g2 a2", Y: "f2 c3 db3 d3 eb3@2 f2 g2", Z: "f2 c3 db3 d3 eb3@2 g2 a2",
  AA: "bb2@2 d3 eb3 f3@2 g2 a2", AB: "eb2@2 g2 bb2 eb3@2 g2 a2", AC: "c3 d3 c3 f2", AD: "bb1 ~@3", AE: "eb2 ~@3",
  AF: "eb2@2 g2 ~ bb2@4 g2@4 bb2@2 g2 ~", AG: "eb2@4 g2@4 eb2@4 g2@2 a2 ~", AH: "bb1@4 d2@4 f2@4 g2@2 g2 ~",
  AI: "f2@4 g2@2 a2 ~ c3@4 g2@4", AJ: "c3@4 d3@2 eb3 ~ f3@4 g2@2 a2 ~", AK: "bb2 ~@3", AL: "eb2 ~@2 f2",
  AM: "bb2 ~ bb2 ~", AN: "bb2@4 bb2@2 bb2 ~ bb2@2 bb2 ~ bb2@4", AO: "eb2@4 g2@4 bb2@2 g2 ~ eb2@4",
  AP: "g2@4 ~@2 g2 ~ bb2@2 g2 ~ eb2@2 g2 ~", AQ: "c3@4 d3@4 f2@4 g2@2 bb2 ~",
  AR: "c3@4 d3@2 eb3 ~ f3@2 g3 ~ a2@2 bb2 ~", AS: "bb2 g2 eb3 e3", AT: "f3 bb2 f2 g2", AU: "bb2 d3 f3 d3",
  AV: "eb3 bb2 eb2 bb2", AW: "eb3@4 bb2@4 db3@4 g2@2 a2 ~", AX: "bb2@4 d3@2 eb3 ~ f3@4 g2@2 a2 ~",
  AY: "bb2@4 d3@4 f3@4 g2@2 a2 ~", AZ: "eb2@2 eb2 ~ g2@4 bb2@2 g2 ~ eb2@4", BA: "g2 bb2 eb3 g2",
  BB: "[bb2@4 ~@2 bb2 ~@5 bb1@20]/2",
})).s("gm_acoustic_bass").gain(0.29)

// chords · piano
const piano = note(`<
  ~@5 A B C@2 D C E F ~@4 G H I J K L@7 M@2 N O@2 P Q@2 ~ R S T U V@5 W@2 X@2 Y@2 Z@2 AA AB@4 AC AD ~@2 AE AF@2 AG AH
  AI@2 AJ AK ~@3 AL@2 AM@2 AN@4 ~ AO@2 AP@2 ~@5 AQ@3 AR AS AT AU AV AW AX AY AZ BA BB BC@3
>`.pickRestart({
  A: "bb5 ~ [eb5,bb5] ~ [eb5,bb5] ~ [eb5,bb5] ~, eb5 ~@15", B: "[db6,f6] ~ [eb6,g6] ~ [db6,f6] ~@3",
  C: "[d6,f6] ~ [eb6,g6] ~ [d6,f6] ~@3", D: "[f6,bb6] ~@7",
  E: "[d6,f6]@2 ~ bb5 g6@2 ~ bb5 [d6,f6]@2 ~ bb5 [eb6,g6]@2 ~ bb5, ~@4 eb6 ~@11", // Dm Eb
  F: "[d6,f6]@2 ~ [bb4,f5] ~@3 [bb4,f5]@8 ~", G: "g6 ~@2 g6 ~ [eb6,g6] ~@2 [eb6,g6] ~@2 g6 ~ [eb6,g6] ~@2",
  H: "[eb6,ab6]@7 ~@9", I: "d5@8 [d6,f6]@3 bb5 [eb6,g6]@3 bb5", J: "[d6,f6]@3 bb5 [bb5,eb6]@3 [bb5,d6] ~@8",
  K: "a5@3 ~@13",
  L: "[~@7 a5@5 ~@3 [d6,f6]@5 [eb6,g6]@4 [d6,f6]@7 [d6,f6]@5 [c6,eb6]@3 [bb5,d6]@5 ~@3 [f5,ab5]@13 ~@3 [f5,ab5]@5 [eb5,g5]@4 [d5,f5]@3 bb4 ~@3 [f5,ab5]@13 ~@3 [f5,ab5]@5 [eb5,g5]@4 [d5,f5]@3 bb4 [bb5,d6] [d6,f6] ~ [eb6,g6], ~@15 db6 ~@15 db6 ~@40 db5 ~@31 db5 ~@7]/7", // Dm Eb Dm Cm Bb Fm Eb Dm …
  M: "[[f6,ab6]!2 ~ [f6,ab6]!3 ~ [f6,ab6]!3 ~ [f6,ab6] [f6,ab6]@3 [f6,ab6]@5 [eb6,g6]@2 db6 [d6,f6]@4 [f5,ab5,bb5]!2 [ab5,bb5] ~ [f5,ab5,bb5]]/2", // Fm Eb Dm Bb7 Absus2 Bb7
  N: "[f5,ab5,bb5]@3 [f5,ab5,bb5]@2 [f5,ab5,bb5]@3 [f5,ab5,bb5]@3 [f5,ab5,bb5]@2 [f5,ab5,bb5]@3", // Bb7
  O: "[[f5,ab5,bb5]@3 [f5,ab5,bb5]@2 [f5,ab5,bb5]@3 [f5,ab5,bb5]@4 [d6,f6]@3 [eb6,g6]@5 [d6,f6]@4 ~@7 [f5,ab5,bb5]]/2", // Bb7 Dm Eb Dm Bb7
  P: "[ab5,bb5]@4 [eb6,g6]@2 db6 [d6,f6]@5 [eb5,bb5]@4", // Absus2 Eb Dm Eb5
  Q: "[~@3 [f5,ab5] bb4@4 [f5,ab5]@4 [eb5,g5]@2 db5 [d5,f5]@4 [f4,f5]@4 [f4,f5]@3 gb5 [g5,bb5]@3 gb5 [g5,bb5]]/2", // Fm Eb Dm F Gm
  R: "[d6,f6]@3 ~ [eb6,g6]@3 ~ [d6,f6]@3 ~ [g5,bb5]@3 ~", S: "[ab5,db6,f6]@3 ~ [eb6,g6]@2 ~ [db6,f6]@4 ~@4 bb5",
  T: "[db6,f6]@3 ~ [eb6,g6]@2 ~ [db6,f6] ~@4 g6!2 ~ g6", U: "g6!2 ~ g6!3 ~ g6!3 ~ g6!2 ~@2 f6",
  V: "[~@4 [eb6,g6]@3 ~ [d6,f6]@3 ~ [c6,eb6]@2 ~ [bb5,d6]@4 ~ [g5,bb5]@3 ~ [bb5,d6]@3 ~ eb6@2 ~ [bb5,d6]@3 ~ [d6,f6]@2 ~@2 [d6,f6]@4 ~ [eb6,g6]@2 ~ [eb6,g6]@4 ~ [eb6,g6]@3 ~@8 [d6,f6]@4 ~ g6@2 ~ [d6,f6]@4 ~@5, ~@68 eb6 ~@11]/5", // Eb Dm Cm Bb Gm Bb Dm Eb …
  W: "[[f5,ab5]@2 ~ bb4@2 ~@2 bb4 [f5,ab5]@3 ~ [eb5,g5]@2 ~ [d5,f5]@3 ~ [f4,f5]@2 ~@2 [f4,f5] ~@3 [bb5,bb6] [d6,d7]@2 ~ [eb6,eb7]]/2", // Fm Eb Dm F Bb D Eb
  X: "[[f6,f7]!2 ~ [f6,f7]!3 ~ [f6,f7]!3 ~ [f6,f7]!2 ~@2 [f6,f7]@4 ~ [eb6,eb7]@3 ~ [db6,db7]@2 ~ [bb5,bb6]@4 ~]/2", // F Eb Db Bb
  Y: "[[f6,f7]!2 ~ [f6,f7]!3 ~ [f6,f7]!3 ~ [f6,f7] f6@2 ~ [f6,f7]@4 ~ [eb6,eb7]@3 ~ [eb6,eb7]@2 ~ [bb5,bb6] [db6,db7]@2 ~ [eb6,eb7], ~@12 f7 ~@19]/2", // F Eb Bb Db Eb
  Z: "[[f6,f7]@3 ~ [eb6,eb7]@3 ~ [db6,db7]@2 ~ [bb5,bb6]@3 ~ [f6,f7]@4 ~ [eb6,eb7]@2 ~ [db6,db7] [bb5,bb6]@3 ~ [db6,db7]@2 ~ [eb6,eb7]]/2", // F Eb Db Bb F Eb Db Bb …
  AA: "~@3 bb4@3 ~ bb4 [f5,ab5]@3 ~ [eb5,g5]@2 ~ [d5,f5]", // Fm Eb Dm
  AB: "[~@3 [d6,f6]@4 ~ [d6,f6]@3 ~ eb6@2 ~ [eb6,g6]@10 ~@6 [d6,f6,bb6]@4 ~ [eb6,g6]@2 db6 [d6,f6]@3 db6 c6 [eb5,bb5]@3 [d5,bb5]@8 ~ [ab5,c6]@3 ~ [bb5,d6]@2 ~ [f5,bb5]]/4", // Dm Eb Bb Eb Dm Eb5 Gm Ab …
  AC: "~@3 [bb4,bb5] [bb4,bb5]@2 ~ [bb4,bb5] [bb4,bb5]@2 ~ [bb4,bb5] [bb4,bb5]@2 ~ [db5,db6]", AD: "[eb6,eb7]@3 ~@13",
  AE: "~@3 [db6,f6] [c6,eb6]@2 ~ bb5 [bb5,db6]@3 ~ [eb6,eb7]@2 ~ [eb6,eb7]", // Db Cm Bbm Eb
  AF: "[[eb6,eb7]!2 ~ [eb6,eb7]!3 ~ [eb6,eb7]!3 ~ [eb6,eb7] [eb6,eb7]@2 ~ [g6,g7]@4 ~@4 f6 g6@2 ~ bb5@3 ~ [eb6,g6]]/2", // Eb G Eb
  AG: "[d6,f6]@2 ~ [eb6,g6]@2 [db6,f6] d6 ~ [eb6,g6]@2 ~ [d6,f6]@2 [eb6,g6] ~@2, db6 ~@10 db6 ~@4", // Dm Eb Db Eb Dm Eb
  AH: "[d6,f6]@2 ~ [eb6,g6]@2 [db6,f6] d6 ~ bb5@3 ~ [d6,f6]@2 ~ [eb6,g6], db6 ~@15", // Dm Eb Db Dm Eb
  AI: "[[d6,f6]@3 ~ [d6,f6]@2 ~ [eb6,g6] [c6,eb6]@6 ~ [g6,c7]@3 ~ [g6,c7]@3 ~ [g6,c7] [eb6,ab6]@2 ~@2 [eb6,g6]@3 ~, ~@15 gb6 ~@3 gb6 ~@12]/2", // Dm Eb Cm C5 Ab5 Eb
  AJ: "[d6,f6]@3 ~ [d6,f6]@2 ~ [d6,f6] [e6,g6]@2 ~@2 [eb6,g6]@2 ~ [d6,f6], db6 ~@7 eb6 ~@7", // Dm Em Eb Dm
  AK: "~@3 [f4,f5]@3 ~ [f4,f5]@7 ~@2", AL: "[~@15 [eb4,g4,bb4]@4 ~ [gb5,bb5]@3 ~ [f5,ab5]@2 ~ [eb5,g5]@4 ~]/2",
  AM: "[[gb5,bb5]@3 ~ [f5,ab5]@2 ~ [eb5,g5]@4 ~@4 [bb4,bb5]@12 ~@5]/2", // Gb Fm Eb Bb
  AN: "[~@3 [g4,db5]@3 ~ [g4,db5] [g4,db5]@3 ~ [g4,db5]@2 ~ [a4,eb5,g5]@10 ~@5 db6 [d6,f6]@4 ~ [eb6,g6]@2 db6 [d6,f6]@4 ~ [eb5,bb5,eb6]@2 ~ [d5,bb5]@4 ~@13]/4", // Gdim Am7b5 Dm Eb Dm Eb5 Gm
  AO: "[~@14 db6 [d6,f6]@5 [eb6,g6]@4 [d6,f6]@4 ~@4]/2", AP: "[d6,f6] [eb6,g6] [d6,f6] ~, db6 ~@15",
  AQ: "[~@14 db6 [d6,f6]@5 [eb6,g6]@4 [d6,f6]@4 [c6,eb6]@2 ~ [bb5,d6]@3 ~ [f4,f5]@3 ~ [f4,f5]@3 ~ [f4,f5]@3 ~ [f4,f5]]/3", // Dm Eb Dm Cm Bb F
  AR: "~@3 [d6,f6] [d6,f6]@2 ~ [d6,f6] [db6,f6]@2 ~ [d6,f6] [d6,f6]@2 ~ [d6,f6]", // Dm Db Dm
  AS: "[d6,f6]@2 ~ [d6,f6] [d6,f6]@2 ~ [d6,f6] [db6,f6]@2 ~ [d6,f6] [c6,f6]@2 ~ [bb5,f6]", // Dm Db Dm F5 Bb5
  AT: "[db6,f6]@2 ~ [d6,f6] [d6,f6]@2 ~ [d6,f6] [db6,f6]@2 ~ [d6,f6] [d6,f6]@2 ~ [d6,f6]", // Db Dm Db Dm
  AU: "[db6,f6]@2 ~ [d6,f6] [d6,f6]@2 ~ [d6,f6] ~@3 db6 ~@3 db6", // Db Dm
  AV: "~@4 db6@2 ~ d6 db6@2 ~ [db6,f6] [db6,f6]@2 ~ [db6,f6]", AW: "[db6,f6]@2 ~ [db6,f6] [eb6,g6]@2 ~ db6 bb5@4 ~@4",
  AX: "~@2 [d7,f7] [c7,eb7]", AY: "[d7,f7]@4 [c7,eb7]@2 ~ [bb6,d7]@3 ~ bb6!2 db7 ~ eb7",
  AZ: "[db7,f7] [d7,f7] ~ [eb7,g7] [db7,f7] [d7,f7] ~ [eb7,g7] [db7,f7] [d7,f7] ~ [eb7,g7] [db7,f7] [d7,f7] ~ [eb7,g7]", // Db Dm Eb Db Dm Eb Db Dm …
  BA: "[db7,f7]@2 ~ [eb7,g7] ~@3 [a7,b7] [e7,f7,g7] [b6,c7,d7] [f6,g6,a6] [b5,c6,d6,e6] [f5,g5,a5] [d5,e5] ~ [bb3,bb4]", // Db Eb Asus2 Em Bm F Cmaj7 F …
  BB: "[bb3,bb4]@2 ~ [bb3,bb4] ~@3 [bb3,bb4] bb4@2 ~ [bb3,bb4] ~@3 [bb3,bb4], ~@8 bb3 ~@7", // Bb
  BC: "[[bb3,bb4]@2 ~@5 [d3,ab3,c4]@27 ~@14]/3", // Bb Dm7b5
})).s("gm_piano").gain(0.27)

// chords · piano · soft notes
const piano_soft = note("<~@5 A B@3 C B ~@6 D E F G H I ~@7 J ~@2 K L ~@71 M ~@4>".pickRestart({
  A: "~@2 [eb5,bb5] ~@3 [eb5,bb5] ~@3 [eb5,bb5] ~@3 [eb5,bb5] ~", B: "~@3 bb5 ~@3 bb5 ~@3 bb5 ~@3 bb5",
  C: "~@3 [f6,bb6] ~@3 [f6,bb6] ~@8", D: "eb6 ~@2 eb6 ~@7 eb6 ~@4", E: "~@7 [eb6,g6]@5 ~@4", F: "[ab5,bb5] ~",
  G: "~@15 [f5,a5,c6]", H: "[f5,c6]@3 [f5,a5,c6]@5 [f5,a5,c6]@3 [f5,a5,c6]@5",
  I: "[f5,a5,c6]@4 [f5,a5,c6]@3 [f5,c6]@5 ~@4", J: "~@13 f5 ~@2", K: "~@12 [f5,ab5,bb5]!2 ~@2", L: "f5 ~@3",
  M: "~@7 c8 ~@8",
})).s("gm_piano").gain(0.17)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@5 A B C D E F C G C D C D H B C D E I C D C D C D H J C D E@2 C D C D C K L M C D E@2 C D C D C K A N C D I E C D O
  P O ~ A B C D E@2 C K O P O ~ H B C D E I C K C D C D H J C D E@2 C D C K C D L M C D E@2 Q R@2 ~
>`.pickRestart({
  A: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3] ~ [eb3,c4]@2 [eb3,bb3] ~", // Eb5 Cm Eb5 Cm Eb5
  B: "[eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2", // Eb5 Cm Eb5 Cm Eb5
  C: "[bb2,f3]!2 [bb2,g3] [bb2,f3]!3 [bb2,g3] [bb2,f3]", // Bb5 Eb Bb5 Eb Bb5
  D: "[bb2,f3]@2 [bb2,f3]@2 [bb2,g3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,g3]@2 [bb2,f3] ~", // Bb5 Eb Bb5 Eb Bb5
  E: "[f3,c4]@2 [f3,c4]@2 [f3,d4]@2 [f3,c4] ~ [f3,c4]@2 [f3,c4]@2 [f3,d4] ~ [f3,c4]@2", // F5 Dm F5 Dm F5
  F: "[eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3] ~", // Eb5 Cm Eb5 Cm Eb5
  G: "[bb2,f3]@2 ~ f3 g3@2 f3@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,g3]@2 [bb2,f3] ~, ~@2 bb2@3 ~@11", // Bb5 Eb Bb5
  H: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,c4] ~ [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,c4]@2 [eb3,bb3] ~", // Eb5 Cm Eb5 Cm Eb5
  I: "[f3,c4]@2 [f3,c4]@2 [f3,d4]@2 [f3,c4] ~ [f3,c4] ~ [f3,c4]@2 [f3,d4] ~ [f3,c4]@2", // F5 Dm F5 Dm F5
  J: "[eb3,bb3]@2 [eb3,bb3] ~ [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2", // Eb5 Cm Eb5 Cm Eb5
  K: "[bb2,f3]@2 [bb2,f3]@2 [bb2,g3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3] ~ [bb2,g3]@2 [bb2,f3] ~", // Bb5 Eb Bb5 Eb Bb5
  L: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,c4]@2 [eb3,bb3] ~", // Eb5 Cm Eb5 Cm Eb5
  M: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4] ~ [eb3,bb3]@2", // Eb5 Cm Eb5 Cm Eb5
  N: "[eb3,bb3]@2 [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2 [eb3,bb3] ~ [eb3,bb3]@2 [eb3,c4]@2 [eb3,bb3]@2", O: "[bb2,f3] ~@7",
  P: "[eb3,bb3] ~@7", Q: "[bb2,f3]@2 [bb2,f3]@3 ~@3 [bb2,f3]@2 [bb2,f3]@3 ~@3",
  R: "[[bb2,f3]@2 [bb2,f3]@3 ~ [bb2,f3]@22 ~@4]/2", // Bb5
})).s("gm_electric_guitar_muted").gain(0.24)

// chords · piano
const piano_2 = note("<~@17 A B ~@42 C D E F ~@8 G H G I ~@6 J K ~@22 L M ~@2>".pickRestart({
  A: "~ [eb3,g3] ~@2 [eb3,g3] ~@2 [eb3,g3] ~ [eb3,g3] ~@2 [eb3,g3] ~@2 [eb3,g3]", // Eb
  B: "~ [eb3,g3] ~@2 [eb3,g3]@2 ~ [eb3,g3]@5 ~@4", C: "~@4 [bb2,g3]@3 ~@9", D: "[eb3,bb3]@3 ~@13",
  E: "[bb2,d3,ab3]@3 ~@13", F: "~@11 [bb2,f3] [bb2,f3]@3 ~", G: "[bb3,ab4] ~@7", H: "[eb4,g4] ~@7",
  I: "~@3 [bb3,ab4] [bb3,ab4]@2 ~ [bb3,ab4]@3 ~ [bb3,ab4] [bb3,ab4]@4", J: "~@3 [d4,f4,bb4] ~@4 [d4,f4,bb4]@2 ~@6",
  K: "[d4,f4,bb4]@3 ~@4 [d4,ab4]@9, ~@6 bb3@9 ~", L: "[f3,bb3]@2 ~ [f3,bb3] ~@4 [f3,bb3]@2 ~ [f3,bb3] ~@4",
  M: "[f3,bb3]@2 ~ [f3,bb3] ~@3 [f3,bb3]@7 ~@2", // Bb5
})).s("gm_piano").gain(0.27).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@3 A ~ B@56 A@2 ~@2 B@8 A@2 B@33 C ~@2>".pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x ~@4",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@3 A B C@56 ~@2 D E C@8 A@2 D F C@31 G ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~ x", D: "x!2", E: "x!4", F: "x ~@3 x ~@3 x ~@2 x!2 ~@3", G: "~ x ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@5 [x!4]!56 ~@4 [x!4]!8 ~@4 [x!4]!31 [x ~@2 x ~@4] ~@2>").gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@4 A B C@2 D C B C@50 ~@4 C@8 ~@4 C@30 E F ~@2>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@11 x", C: "~@7 x ~@7 x", D: "~@7 x ~@3 x ~@3 x", E: "~ x ~ x ~ x ~ x", F: "~ x ~@6",
})).gain(0.15)

stack(overdriven_guitar, bass, piano, piano_soft, electric_guitar_muted, piano_2, kick, snare, crash, ride)

More by Elvis Presley