Strudelify
Simply Irresistible cover art

Simply Irresistible

Robert Palmer

KeyA majorTempo141 bpm
0:00/0:00
// Simply Irresistible — Robert Palmer
// 141 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "MUTED GTR" electric guitar muted (copy of ch 3 "OVERDRIVE" overdriven guitar); ch 8 "CHARANG" lead 5 charang (copy of ch 7 "DISTORTION" distortion guitar); ch 13 "SITAR" sitar (copy of ch 14 "SHANNAI" shanai, 0.104 beats late)
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(141/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@6 A B C D E F G H I F J H K L M N O L P Q R S T U V ~ W X Y Z AA X Y AB AC AD E F G H I F J H AE F J H AE F AF AG AH
  AI AJ AK V ~ W X Y Z AA X Y Z AA X Y Z AA X Y Z AL ~@7 W X Y Z AA X Y AM@2 AN AO AP AO AQ AO AR AS AT@2 AU AV AW AX AY
  AZ BA AX BB BC BA AX AY AZ BA AX BB BD AG AH AI AJ AK V BE@2 X Y Z AA X Y Z AA X Y Z AA X Y Z BF BG
>`.pickRestart({
  A: "~@10 e2@2 b2 ~ a2 [e2,f2,g2]", B: "[c2,d2] ~@15, a1", C: "b1@11 ~ b2@2 a2 [e2,f2,g2]",
  D: "[c2,d2] e2 e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2", E: "e2 ~ e2@2 d2@2 ~@2 e2@3 ~@3 g2@2",
  F: "a2 ~ a2@2 g2@2 ~@2 a2@2 a1@2 ~@2 g2@2", G: "a2 ~ a2@2 g2@2 ~@2 a2@3 ~@3 d2@2",
  H: "e2 ~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2", I: "e2 ~ e2@2 d2 ~@3 e2@2 ~@4 g2@2",
  J: "a2 ~ a2@2 g2@2 ~@2 a2@2 ~@4 d2@2", K: "e2 ~ e2@2 d2@2 ~ e2@2 ~@4 g2@2 a2",
  L: "~ a2@2 g2@2 ~@2 a2@2 a1@2 ~@2 g2@2 a2", M: "~ a2@2 g2@2 ~@2 a2@2 ~@4 d2@2 e2",
  N: "~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2 e2", O: "~ e2@2 d2@2 ~@2 e2@2 ~@4 g2@2 a2",
  P: "~ a2@2 g2@2 ~@2 a2@2 ~@4 a1@2 b1", Q: "~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1",
  R: "~ b1@3 ~ b1 ~ b1 ~ b1@2 [g1,a1] ~ g#1@2 a1", S: "~ a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ g1",
  T: "~ g1@3 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2 b1", U: "~@2 b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1@2",
  V: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@3 ~", W: "~@7 d2", X: "e2 ~ e2@2 d2@2 c#2@2 b1@2 e1@2 ~@2 d2@2",
  Y: "e2 ~ e2 ~ d2@2 c#2@2 b1@2 e1@2 ~@2 g2@2", Z: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 g2@2",
  AA: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 d2@2", AB: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 a1@2",
  AC: "b1@3 ~@7 e2 [f2,g2] [a2,b2] a2 g2 [d2,e2,f2]", AD: "[c2,e2] ~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2",
  AE: "e2 ~ e2@2 d2@2 ~@2 e2@2 ~@4 g2@2", AF: "a2 ~ a2@2 g2@2 ~@2 a2@2 ~@4 a1@2",
  AG: "b1 ~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", AH: "b1 ~ b1@3 ~ b1 ~ b1 ~ b1@2 [g1,a1] ~ g#1@2",
  AI: "a1 ~ a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AJ: "g1 ~ g1@3 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2",
  AK: "b1 ~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1@2", AL: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@4",
  AM: "[a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 d2@5 a2 e3@3 a2 d3@3 a2 e3@3 a2]/2",
  AN: "d3@2 a1@2 d2@2 a1@2 d2@3 [b1,c2] [g1,a1] ~@3", AO: "g1 ~ g1 ~ g1@3 ~ g1 ~ g1 ~ g1@2 f#1@2",
  AP: "f1 ~ f1 ~ f1@3 ~ f1 ~ f1@3 ~ f1@2", AQ: "f1 ~ f1 ~ f1@3 ~ f1 ~ f1 ~ f1@2 g1@2",
  AR: "f1 ~ f1 ~ f1@2 ~ f1 f1@2 ~ c2!2 ~ d2@2", AS: "d#2@3 a#2 f3@3 a#2 d#3@3 a#2!2 ~ [d#2,a#2] ~",
  AT: "[c#2@3 g#2 d#3@3 g#2 c#3@3 g#2!2 ~ b1@16 ~ d#2]/2", AU: "d#2@2 f2@2 g#2@2 f2@2 d#2@3 ~ g#2 f#2 e2 [b1,c#2,d2]",
  AV: "a1 ~@3 d2 c2 a#1 [f1,g1,g#1] [d#1,f2] d#2 c#2 [g#1,a#1,b1] f#1 ~@3", AW: "e1@3 ~@11 d2@2",
  AX: "e2 e1 d2 ~ e2 ~@2 g2", AY: "a2@2 a1@3 ~@9 g2@2", AZ: "a2@2 a1 ~ g2@2 ~@2 a2@2 ~@4 d2@2", BA: "e2 e1 ~@5 d2",
  BB: "a2 a1 ~@5 g2", BC: "a2 a1 g2 ~ a2 ~@2 d2", BD: "a2@2 a1 ~ g2@2 ~@2 a2@2 ~@4 a1@2", BE: "[f1@29 ~ d2@2]/2",
  BF: "a2 ~ a2 ~ g2@2 f#2@2 d2@2 e2 ~ e2@2 d2 ~", BG: "e2@2 d2 ~ e2@2 ~@10",
})).s("gm_fretless_bass").gain(0.49)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@4 A B C D E F G H I J K L M N O P Q R S@2 T@6 U ~@2 V W X Y Z AA AB AC AD G H I J K L AE AF AG AH AI J AJ AK AL AM@2
  D AN AO U ~@2 V W X Y Z AA AB@2 Z AA AB@2 Z AA AB@2 ~@8 Z AA AB@2 Z AA AP@3 AQ AR AS AT ~@23 AM@2 D AN AO U AU AV Z AA
  AB@2 Z AA AB@2 Z AA AB@2 Z AA AB AW AX
>`.pickRestart({
  A: "~@7 [d3,a3,d4]", B: "[e3,b3] e4 [e3,b3] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4]@4 [e3,b3,e4] ~ [d3,a3,d4]@2",
  C: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4]@4 [e3,b3,e4] ~@3", D: "[a2,e3,a3]@15 ~", E: "[b2,f#3,b3]@15 ~",
  F: "~ [e3,b3,e4] ~ [e3,b3]!2 ~@3 [e3,b3,e4]@4 [e3,b3,e4] ~@3", G: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@4 ~@4",
  H: "[a2,e3,a3] ~ [a2,e3] ~ [e3,a3] ~@3 [a2,e3,a3]@6 ~@2, ~@4 a2@3 ~@9", // A5
  I: "[a2,e3,a3] ~ [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3,a3]@6 ~@2", J: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@8",
  K: "[e3,e4] ~ [e3,b3] ~ [e3,b3,e4] ~@3 [e3,b3,e4]@5 ~@3", L: "[a2,a3]@2 [a2,e3]@2 [a2,e3] ~@3 [a2,e3,a3]@8, e3 ~@15",
  M: "[a2,a3]@2 [a2,e3]@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@4 e3 ~@2 e3, e3 ~@15", // A A5
  N: "[b3,e4] ~ [e3,b3] e3 b3@2 ~ [e3,b3,e4]@8 [e3,b3,e4]", O: "~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@4 ~@4 [a2,e3]",
  P: "~ [a2,e3] ~ a2@4 [a2,e3,a3]@8 [a2,e3,a3], ~@3 a3@2 ~@11, ~@3 e3 ~@12", // A5
  Q: "~ [a2,e3,a3] ~ [a2,a3]@3 ~ [a2,e3,a3]@4 ~@4 [e3,b3], ~@3 e3 ~@12", // A5 A A5 E5
  R: "~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@8 [e3,b3]", // E5
  S: "[~ [e3,b3,e4] ~ [e3,b3]@2 ~@2 [e3,b3]@4 ~@4 [a2,e3]@2 [a2,e3,a3] ~ [a2,e3,a3]@2 ~@2 [a2,a3]@7 ~ [a2,e3], ~@23 e3@5 ~@4]/2", // E5 A5 A A5
  T: "[~ [a2,e3,a3] ~ [a2,e3]@2 ~@2 [a2,e3,a3]@5 ~@3 [b2,f#3,b3]@30 ~@2 [a2,e3,a3]@15 ~ [g2,d3,g3]@14 ~@2 [b2,f#3,b3]@14 ~@3]/6", // A5 B5 A5 G5 B5
  U: "[g2,d3,g3]@7 ~", V: "[e3,b3,e4] ~ [e3,b3]@2 [e3,b3] ~@3 [e3,b3,e4]@8",
  W: "[e3,b3,e4] ~ [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3]@6 ~@2", // E5
  X: "[a2,e3,a3] ~ [a2,e3] ~ [a2,e3,a3] ~@3 [e3,a3]@6 ~@2, ~ a2", // A5
  Y: "[a2,e3,a3] ~ [a2,e3]@2 a2@3 ~ [a2,e3,a3]@6 ~@2, ~@4 e3 ~@11", // A5
  Z: "[e3,b3] ~ [e3,b3] ~ [e3,b3,e4] ~@3 [e3,b3,e4]@8", AA: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@6 ~@2",
  AB: "[a2,e3]@2 [a2,e3] ~ [a2,a3]@3 ~ [a2,e3,a3]@7 ~, ~@4 e3 ~@11", AC: "[b2,f#3,b3] ~@3",
  AD: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@4 [e3,b3,e4] ~@3", // E5
  AE: "[a2,a3]@2 [a2,e3]@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@4 e3 ~@3, e3 ~@15", // A A5
  AF: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@8", AG: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@4 ~@4",
  AH: "[a2,e3] ~ [a2,e3] ~ a2@4 [a2,e3,a3]@8, ~@2 a3 ~@5, ~@4 e3 ~@11", // A5
  AI: "[a2,e3,a3] ~ [a2,e3,a3] ~ [a2,a3]@3 ~ [a2,e3,a3]@4 ~@4, ~@4 e3 ~@11", // A5 A A5
  AJ: "[e3,b3] ~ [e3,b3,e4] ~ [e3,b3]@2 ~@2 [e3,b3]@4 ~@4", // E5
  AK: "[a2,e3]@2 [a2,e3,a3] ~ [a2,e3,a3]@2 ~@2 [a2,a3]@7 ~, ~@8 e3@5 ~@3", // A5 A
  AL: "[a2,e3] ~ [a2,e3,a3] ~ [a2,e3]@2 ~@2 [a2,e3,a3]@5 ~@3", AM: "[[b2,f#3,b3]@15 ~]/2", AN: "[g2,g3]@7 ~, d3@3 ~",
  AO: "[b2,f#3,b3]@7 ~", AP: "[[a2,e3]@2 [a2,e3] ~ [a2,a3]@3 ~ [a2,e3,a3]@5 ~ d3@30 ~@4, ~@4 e3 ~@9 a3@28 ~@6]/3",
  AQ: "g3@3 b3@2 ~ c4 ~ b3@7 ~", AR: "a3 ~ a#3 ~ a3@11 ~", AS: "g3 ~ g#3@2 g3@11 ~", AT: "f3 g3 f3 d3 f3@4",
  AU: "f3@15 ~", AV: "d3 f3 f#3 g#3 g3@2 a3 ~ g3@7 ~", AW: "[a2,e3]@2 [a2,e3] ~ [a2,e3,a3]@2 ~@2 d3@2 e3@2 e3@2 d3@2",
  AX: "e3 d3 e3 ~@5",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.7)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@5 A@2 B C D E F@2 G H I J K L@2 M@2 N@2 O ~@8 P Q R S T Q R U V E F@2 G H I J W X Y Z AA E AB AC ~@8 P Q R S T Q R
  AD AE AF R S AG Q R S ~@8 AH Q R S AI AJ@4 AK@2 AL@2 AM@2 AN@3 AO AP AQ AR AS AT AU AV AW AX AY AZ AS BA AY AV AS AX
  ~@6 BB@2 AH Q R S AH Q R S AH Q R S AH Q BC BD BE
>`.pickRestart({
  A: "[~@4 b2@3 ~@2 e3@2 ~@2 [b2,e3]@5 ~@3 [b2,e3]@2 ~@2 e3@2 ~ [b2,e3]@2 ~@2, ~@4 b2 ~@7 b2 ~@3]/2", // E5
  B: "~ e3@14 ~, a2@15 ~", C: "~ [b2,f#3]@14 ~", D: "e3@2 ~ [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3]@2 ~ [e3,b3]@4",
  E: "~@4 [e3,b3] ~@3 [e3,b3]@5 ~@3", // E5
  F: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@6 ~@2 [a2,e3] ~@3 [a2,e3,a3]@5 ~@3]/2", // A5
  G: "[e3,b3]@2 [e3,b3]@2 [e3,b3] ~@3 [e3,b3] ~@3 [e3,b3,e4]@4", H: "~@4 [e3,b3] ~@3 [e3,b3,e4]@5 ~@3",
  I: "[a2,e3,a3]@2 [a2,e3]@2 [a2,e3] ~@3 [a2,e3] ~@3 [a2,e3]@4", J: "~@4 [a2,e3] ~@3 [a2,e3,a3]@5 ~@3",
  K: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~ e3 b3 ~@3 e4@4, ~@11 [e3,b3]@5", // E5
  L: "[~@3 [e3,b3] ~@3 [e3,b3]@6 ~@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@5]/2", // E5 A5
  M: "[~@3 [a2,e3] ~@3 [a2,e3]@5 ~@3 [e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@5]/2", // A5 E5 E
  N: "[~@3 [e3,b3] ~@3 [e3,b3]@5 ~@3 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3,a3]@5]/2", // E5 A5
  O: "~@3 [a2,e3] ~@3 [a2,e3,a3]@4 ~@5", P: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~", Q: "d3 b2 d3 e3@3 ~ a2",
  R: "[a2,e3,a3]@6 ~ a2", S: "[a2,e3,a3]@7 ~", T: "[e3,b3] ~@3 [e3,b3]@2 ~@2 b3@7 ~", U: "[f#3,b3] ~@7",
  V: "e3 [e3,b3]!2 ~ [e3,b3] ~ [e3,b3]@2", W: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,b3,e4]@4",
  X: "~@4 [e3,b3] ~@3 [e3,b3]@6 ~@2", Y: "[a2,e3]@2 [a2,e3] ~ [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@4",
  Z: "~@4 [a2,e3] ~@3 [a2,e3]@5 ~@3", AA: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@4",
  AB: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3,a3]@4", AC: "~@4 [a2,e3] ~@3 [a2,e3,a3]@4 ~@4",
  AD: "[a2,e3,a3]@13 ~@3", AE: "[e3,b3,e4] ~@3 [e3,b3]@2 ~@2 [e3,b3]@8, ~@4 e4@3 ~", AF: "d3 a#2 d3 e3@3 ~ a2",
  AG: "[e3,b3] ~ [e3,b3,e4] ~ e3@4, ~@4 b3@3 ~", AH: "[e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@7 ~",
  AI: "[e3,b3,e4]@2 ~@2 [e3,b3]@2 ~@2 [e3,b3]@7 ~", AJ: "[d3 b2 d3 e3@3 ~ [a2,e3,a3]@7 ~ [d3,a3,d4]@15 ~@2]/4",
  AK: "[g2@3 d3@2 g4 e5@2 g3 f4@2 c5 f5@14 d5@5 g5]/2",
  AL: "[f5 e5 d5 c#5 c5 a#4 g4 c5 c5@2 c#5 c5 d5!2 f5 g5@14 ~ f5@2]/2", AM: "[g5 f5 g5@2 [b3,d#4]@16 f4@12]/2",
  AN: "[~@2 g5@10 g#5 ~ e5@6 g5 ~ d#5@5 ~ f5 ~ c#5@5 b4@3 ~ a4@4 g4@2 ~ [g4,a4] f4]/3", // Gsus2
  AO: "e4@3 ~ d#4@2 c#4@2 ~ b3 c#4 d#4 f4 d#4 c#4 b3", AP: "a3 ~@3", AQ: "~@4 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4] ~@5",
  AR: "[b2,e3,b3,e4] ~@5 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4]@2 ~@2", AS: "~@2 [e3,a3,e4,a4] ~@2 [e3,a3,e4,a4] ~@2",
  AT: "[e3,a3,e4,a4] ~@5 [e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4]@2 ~@2", AU: "~@2 [b2,e3,b3,e4] ~@2 [b2,e3,b3,e4] ~@2",
  AV: "[b2,e3,b3,e4] ~@5 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4] ~@3", AW: "~@4 [e3,a3,e4,a4] ~@5 [e3,a3,e4,a4]@2 ~@4",
  AX: "[e3,a3,e4,a4] ~@5 [e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4] ~@3", AY: "~@4 [b2,e3,b3,e4] ~@5 [b2,e3,b3,e4] ~@5",
  AZ: "[b2,e3,b3,e4] ~@5 [b2,e3,b3,e4] ~@5 [b2,e3,b3,e4]@2 ~@2", // E5
  BA: "[e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4] ~@3", BB: "[a4@6 b4@5 ~ d5@6 e5@5 ~ g5@8]/2",
  BC: "[a2,e3,a3]@12 ~@2 a2 ~", BD: "[a2,e3,a3]@7 ~ d3@2 e3@2 e3@2 d3@2", BE: "e3 d3 e3 ~@5",
})).s("gm_distortion_guitar").gain(0.38).pan(0.3)

// chords · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note(`<
  ~@5 A ~@3 B C D@2 E F G H I J K L M N O ~@9 P ~@3 Q ~ R ~ S C D@2 E F G H I T U V W X Y ~@9 P ~@3 Q ~ R ~ Z R ~@2 AA R
  ~@10 AB ~@3 AC ~@39 AB ~@3 AB ~@3 AB ~@3 AB ~@4
>`.pickRestart({
  A: "~@5 e3@2 ~@9", B: "b3@2 ~@7 e4@2 ~ e4@4", C: "~@8 e4@5 ~@3", D: "[a3@4 ~@8 a3@6 ~@2 a3 ~@11]/2",
  E: "e4@2 ~@2 e4 ~@3 e4 ~@7", F: "~@4 e4 ~@11", G: "~@8 a3 ~@3 a3@4", H: "~@4 a3 ~@11", I: "~@8 e4 ~@7",
  J: "~@3 e4 ~@3 e4@6 ~@3", K: "~@3 a3@2 ~@2 a3 ~@3 a3@5", L: "~@3 a3 ~@3 a3@5 ~@4", M: "~@7 e4 ~@3 b3@5",
  N: "~@3 e4 ~@3 e4@5 ~@4", O: "~@7 a3 ~@8", P: "~@4 e4@3 ~", Q: "e4 ~@3 e4@2 ~@2 e3@8, ~@4 e4@3 ~", R: "~@7 e3",
  S: "b3 ~@3 e4 ~ e4@2", T: "~@4 e4 ~@3 e4@6 ~@2", U: "~@4 a3@2 ~@2 a3 ~@3 a3@4", V: "~@4 a3 ~@3 a3@5 ~@3",
  W: "~@8 e4 ~@3 b3@4", X: "~@4 e4 ~@3 e4@5 ~@3", Y: "~@8 a3 ~@7", Z: "~@2 e4 ~@5", AA: "e4 ~@3 e4@3 ~",
  AB: "~@8 b3@7 ~", AC: "~@4 e4@2 ~@2 e4@7 ~",
})).s("gm_distortion_guitar").gain(0.16).pan(0.3)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@10 A ~@3 A ~@2 B@2 ~@2 C@2 ~ D@6 E ~@4 F G ~@5 A ~@3 A ~@3 A ~@3 A ~@2 H@2 I J K E ~@55 A ~@3 A ~@2 H@2 I J K E ~@4
  F G ~@2 F G ~ L M ~@2 N M ~@2
>`.pickRestart({
  A: "[b4,e5,a5]@2 ~@2 [b4,e5,a5]@3 ~@9", B: "[~@16 e5@2 ~ [b4,e5,a5]@3 ~@10, ~@15 [b4,a5]@2 ~@15]/2",
  C: "[~@15 [b4,e5,a5]@2 ~@2 [b4,e5,a5]@3 ~@10]/2", // Esus4
  D: "[~@15 [b3,d#4,f#4]@32 [a3,c#4,e4]@15 ~ [d3,g3,b3]@15 ~ [d#4,f#4,b4]@15 ~@2]/6", E: "[d4,g4,b4]@13 ~@3",
  F: "~@6 [e4,b4,e5] [f#4,d5,f#5]", G: "[g4,e5,g5]@2 ~@2 [g4,e5,g5]@3 ~@9", H: "[[b3,d#4,f#4]@31 ~]/2",
  I: "[a3,c#4,e4]@15 ~", J: "[d3,g3,b3]@15 ~", K: "[d#4,f#4,b4]@15 ~", L: "~@2 [e3,e4,e5]@2 ~@2 [b2,b3,b4]@3 ~@7",
  M: "~@4 [e4,e5]@2 [f#4,d5,f#5]@2 [g4,e5,g5]@2 ~@2 [g4,e5,g5]@3 ~", N: "~ [b2,b3,b4] ~ [e3,e4,e5] ~@4, ~@2 a3 ~@13",
})).s("gm_pad_poly").gain(0.49).pan(0.2)

// other · distortion guitar · "DISTORTION"
const distortion_guitar_2 = note("<~@98 A@3 B C@3 D E F G ~@22 H@3 ~@16>".pickRestart({
  A: "[~@3 g2@3 d3@2 ~ e5@2 g3 f4@2 c5 f5@14 d5@5 g5 f5 e5 d5 c#5 c5 a#4 g4 c5 c5@2 c#5 c5 d5, ~@4 g4 ~@19]/3",
  B: "d5 f5 g5@14", C: "[~ f5@2 g5 f5 g5@2 [b3,d#4]@16 f4@13 ~ g5@10 g#5]/3", D: "~ e5@6 g5 ~ d#5@5 ~ f5",
  E: "~ c#5@5 b4@3 ~ a4@4 g4@2", F: "~ [g4,a4] f4 e4@3 ~ d#4@2 c#4@2 ~ b3 c#4 d#4 f4", G: "d#4 c#4 b3 a3@4 ~@9",
  H: "[~@3 a4@6 b4@5 ~ d5@6 e5@5 ~ g5@8 ~@13]/3",
})).s("gm_distortion_guitar").gain(0.27).pan(0.9)

// other · distortion guitar · "DISTORTION"
const distortion_guitar_3 = note("<~@98 A@2 B C@5 D E F ~@22 G H@2 ~@16>".pickRestart({
  A: "[~@6 g2@3 d3@2 ~ e5@2 g3 f4@2 c5 f5@14, ~@11 g4@2 ~@19]/2", B: "d5@5 g5 f5 e5 d5 c#5 c5 ~@2 c5 c5@2",
  C: "[c#5 c5 ~ d5 f5 g5@14 ~ f5@2 g5 f5 g5@2 [b3,d#4]@16 f4@13 ~ g5@10 g#5 ~ e5@6 g5 ~ d#5@4]/5", // B
  D: "~@2 f5 ~ c#5@5 b4@3 ~ a4@3", E: "~ g4@2 ~ g4 f4 e4@3 ~ d#4@2 c#4@2 ~ b3", F: "c#4 d#4 f4 d#4 c#4 b3 a3@4 ~@6",
  G: "~@3 a4@3 b4@2", H: "[~@2 d5@6 e5@5 ~ g5@8 ~@10]/2",
})).s("gm_distortion_guitar").gain(0.22).pan(0.1)

// other · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft_2 = note("<~@100 [~@11 a#4 g4 ~@3] [~@2 d5 ~@13] ~@5 [~@4 a4 ~@11] ~@42>")
  .s("gm_distortion_guitar").gain(0.11).pan(0.1)

// other · shanai · "SHANNAI"
const shanai = note("<~ [~@12 e4!2 ~ e4] [e4!16]!2 [e4!13 ~@3] ~@145>").s("gm_shanai").gain(0.11)

// other · shanai · "SHANNAI" · soft notes
const shanai_soft = note("<[~ e4!15] [e4!12 ~@2 e4 ~] ~@148>").s("gm_shanai").gain(0.05)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A ~ B C D E D E D E D E F G H G H G H G I@4 J K L A D E D M D E D C D E D E D E D E D E D E D E D E N@5 K L A D E
  D M D E D O D E D E D E D P D E D E Q E R S D E D E D E@2 T U E@8 T U C D E D E D E D E D E D E D E D E N@5 K L A D E
  D E D E D E D E D E D E D@2 V
>`.pickRestart({
  A: "~ x ~@2", B: "x", C: "x ~@9 x!2 ~@4", D: "x!2", E: "x ~@3 x ~@2 x", F: "x ~@6 x ~@7 x", G: "~@7 x ~@5 x ~ x",
  H: "~@7 x ~@7 x", I: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", J: "~ x ~@3 x ~ x ~ x ~@2 x ~ x ~", K: "x!2 ~ x!4 ~",
  L: "~ x ~@2 x ~@2 x", M: "x ~@3 x ~ x!2", N: "x!2 ~ x!5", O: "x ~@2 x ~ x ~ x", P: "x ~@3 x!2 ~ x", Q: "x!5 ~@3",
  R: "x!8", S: "x!5 ~ x ~", T: "~@5 x ~@2", U: "~ x ~ x ~@4", V: "x!3 ~@5",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A ~@3 A B@8 C D@10 E F G H I B@6 J K B@20 L G H I B@7 M B@15 N B@7 O P B@8 O P K B@20 L G H I B@15 N Q
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@6 x ~@4", D: "~@3 x ~@7 x ~@4", E: "~@3 x ~@7 x ~@3 x",
  F: "x ~@2 x ~@3 x ~@4 x ~@3", G: "x!3 ~", H: "x ~@2 x ~@2 x ~", I: "~ x ~@6", J: "~@4 x ~@7 x ~@2 x", K: "x ~@2 x",
  L: "x!2 ~@2 x ~@3 x ~@3 x ~@3", M: "~ x!3", N: "~@2 x ~ x!4", O: "~@2 x ~ x ~@2 x", P: "x ~ x ~ x!4", Q: "x!3 ~@5",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A@8 B C D@10 E F ~@2 G A@5 F ~ G A@20 F ~@2 G A@6 H A@15 I G A@5 F ~@2 G A@6 F ~@3 A@21 F ~@2 G A@14 J ~
// … 18 more lines

More by Robert Palmer