Strudelify

You Gotta Love Someone

Elton John

KeyE majorTempo106 bpm
0:00/0:00
// You Gotta Love Someone — John Elton
// 106 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@28 A B C D E F G H I J K L M@2 N O P Q R S T U V W X Y Z O T AA Z AB AC AD AE AF AG AH E AI G H I J K L M@2 R AJ AK
  AL R O AM U A F T AN AO F R AP AQ AR AS D AT AU P AV AW AI AX AY AZ BA BB BC AT AR AM BD BE AR P AV BF BG R BH
>`.pickRestart({
  A: "b1@5 ~ b1@9 ~", B: "b1@5 ~ b1@7 ~ b1@2", C: "a1@5 ~ a1@8 b1@2", D: "e2@3 e2@3 g#1 a1",
  E: "b1@5 ~ b1@5 ~ b1@2 f#2@2", F: "b1@5 ~ b1@5 ~ f#2@2 b1@2", G: "e2@5 ~ e2@8 b1@2", H: "e2@5 ~ e2@6 e2@2 d#2@2",
  I: "c#2@6 c#2@7 ~ g#1 ~", J: "c#2@5 ~ c#2@7 ~ g#1 ~", K: "f#1@5 ~ f#1@7 ~ f#1@2", L: "b1@3 ~ a1@3 ~ g#1@3 ~ f#1@3 ~",
  M: "[e1@3 b1@13]/2", N: "e2@5 ~ e2@7 ~ e2 ~", O: "a1@6 a1@7 ~ b1@2", P: "e2@5 ~ e2@6 b1@2 c#2@2", Q: "e2@3 e2@4 b1",
  R: "e2@5 ~ e2@7 ~ b1 ~", S: "a1@5 ~ a1@7 ~ b1 ~", T: "e2@6 e2@7 ~ b1 ~", U: "e2@5 ~ e2@5 ~ g#1@2 a1@2",
  V: "b1@5 ~ b1@7 ~ f#1 ~", W: "b1@5 ~ b1@6 f#1@2 b1@2", X: "e2@6 e2@8 b1 ~", Y: "e2@5 ~ e2@4 b1@2 c#2@2 b1@2",
  Z: "e2@3 e2@5", AA: "e2@5 ~ e2@2 f#2 g#2 b2 c#3 c#3@2 b2@2", AB: "a1@3 a1@5", AC: "e2@3 e2@3 c#3 b2",
  AD: "e2@4 b2@2 e2@5 ~ g#2@2 b2@2", AE: "b1@5 ~ b1@7 ~ b1 ~", AF: "b1@6 b1@9 ~", AG: "a1@6 a1@6 a1 ~ a1 ~",
  AH: "e2@5 ~ e2@4 b1@2 g#1@2 a1@2", AI: "b1@5 ~ b1@3 ~ b1@2 f#2@2 b1@2", AJ: "a1@5 ~ a1@8 b1 ~",
  AK: "e2@5 ~ e2@6 c#2@2 b1@2", AL: "e2@3 e2@3 b1 c#2", AM: "e2@5 ~ e2@8 b1 ~", AN: "e2@6 e2 ~ e2@2 f#2@2 g#1@2 a1@2",
  AO: "b1@5 ~ b1@8 f#1@2", AP: "e2@5 ~ e2@6 g#1@2 a1@2", AQ: "b1@5 ~ b1@8 f#2@2", AR: "b2@5 ~ b2@6 f#2@2 b1@2",
  AS: "e2@5 ~ e2@7 ~ b1@2", AT: "b1@3 b1@4 f#2", AU: "b2@3 b2@3 f#2 b1", AV: "e2@5 ~ e2@5 ~ e2@2 f#2@2",
  AW: "b1@5 ~ b1@8 b1 ~", AX: "e2@6 e2@5 ~ b1@2 c#2@2", AY: "e2@5 ~ c#3@2 b2@2 c#3@2 b2@2 g#2@2",
  AZ: "b1@5 ~ b1@7 ~ g#1 ~", BA: "b1@5 ~ b1@5 ~ c#2@2 b1@2", BB: "e2@5 ~ e2@5 ~ b1@2 c#2@2", BC: "e2@3 e2!2 f#2 e2 f#2",
  BD: "e2@5 ~ e2@4 g#1@2 a1@2 a#1@2", BE: "b1@5 ~ b1@7 ~ f#2@2", BF: "b1@5 ~ b1@8 g#2@2", BG: "b2 c#3 b2 b2@3 b1 c#2",
  BH: "e2@6 e2@5 ~ g#1@2 a1@2",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · piano · "A.PIANO"
const piano = note(`<
  A B C D E F G H I J@2 K L@2 M N O P Q R S J@2 K L@2 M N O P T U V W X Y Z AA AB AC AD@2 I J@2 K L@2 M N O P Q R S J@2
  K L@2 M N AE AF T U V W X Y Z AA AB AC AD@2 I AG@2 AH AI@2 M N AJ P Q R AJ P Q R AJ P Q R AK AL AM@2 AN AO AP@2 AN AO
  AP@2 AN AO AP@2 AN AO AP@2 AN AO AP@2
>`.pickRestart({
  A: "[b3,e4,g#4]@2 ~ b3@2 e3 b3 e4, e2@7 ~, ~@4 e3@5 ~@7, ~@6 g#4@9 ~, ~@3 e4@3 ~@2", // E
  B: "[b3,d#4,g#4]@2 ~ [b3,d#4]@2 ~ b3 d#4, b1@13 ~@3, ~@4 b2@5 ~ b2@4 ~@2, ~@3 f#4@4 ~", // G#m B
  C: "[a3,c#4,e4]@2 ~ [a3,c#4]@2 f#2 a3 f#2, f#1@7 ~, d#4 ~@3 f#2@5 ~@7, ~@6 e4@8 c#4 ~", // A
  D: "a4@2 g#4@2 [a2,f#4]@2 g#4@4 ~@2 b2 ~ b2@2, [a1,c#4,e4]@5 ~ [b1,d#4]@10, d#4 ~@5 [b3,b4,d#5,f#5]@8 ~@2, ~@10 f#4@5 ~", // D A B
  E: "[e4,g#4]@4 e3@2 g#4 ~@3 e4@2 [b3,b4,e5,g#5]@4, e2@15 ~, [b4,e5]@11 ~@5, b3@4 e3@3 ~, e3@3 ~@5 g#4@8", // E E5
  F: "~@3 b3@2 b2 b3 d#4, [b4,d#5], b1@3 d#4@3 ~@2, [b3,d#4,f#4,g#5]@3 f#5@5, ~@2 b2 f#4@4 ~", // B G#m7
  G: "~@6 [a3,c#4]@4 ~@2 a3@2 c#4 ~, [a4,c#5,e5], f#1@7 ~, [a3,c#4,e4]@6 e4@7 ~@3, ~@4 f#2@5 ~ f#2@6", // A
  H: "a4@2 g#4@2 [a2,f#4]@2 g#4@4 ~@2 b2 ~ b2 ~, [a1,c#4,e4]@5 ~ [b1,b3,d#4]@10, ~@10 f#4@5 ~", // D A B
  I: "[b3,e4,g#4]@2 ~ [b3,e4]@2 ~ e3 g#4, [e2,b4,e5]@15 ~, ~@4 e3@6 b3@5 ~, ~@3 g#4@3 e4@2", // E E5
  J: "[[c#4,e4,a4]@2 ~ e4@2 ~ a2 ~@4 [b3,e4,g#4]@2 ~@2 b2, a1@7 ~@3 e3@2 ~ e3@2 ~, ~@4 a2@6 ~@6 e2@15 ~, ~@3 a4@5 [b3,g#4]@3 ~@3 [c#4,e4,a4,c#5,e5,a5]@2, ~@6 c#4@3 ~ c#4@4 e4@8 ~@10]/2", // A E A
  K: "~@2 e3 ~@4 f#4, [e2,b4,e5,g#5]@13 ~@3, [b3,e4,g#4]@3 g#4@3 ~@2, ~@3 [b3,e4]@2 b3@3, ~@2 e3 [b2,e4]", // E E5
  L: "[[b3,e4,g#4]@4 ~@2 [b3,e4]@4 ~@2 e3@2 g#4@2 [c#4,a4]@4 ~@2 [c#4,e4]@3 ~ a3@2 [a2,c#4]@2 e4@2, e2@15 ~ a1@13 ~@3, [b4,e5]@12 e4@9 ~@11, ~@4 e3@5 ~ b3@5 ~@5 a2@7 ~@5, ~@6 g#4@7 ~@9 a4@8 ~@2]/2", // E E5 F#m C#m A E5
  M: "~@3 [b3,e4,g#4]@2 e3 ~ e3, e2@15 ~, [b3,e4,g#4]@3 ~@3 [c#4,e4,a4,c#5,e5,a5]@2, ~ e3 ~@2", // E A
  N: "[b3,e4,g#4]@4 e3@2 b3@2 ~@4 [e4,g#4,b4,e5]@3 ~, [e2,b4,e5,g#5]@13 ~@3, ~@3 g#4@3 ~@2, ~@6 e4@4 b3@5 ~, ~@8 e3@7 ~", // E
  O: "~@3 [f#3,b3,d#4]@2 b2 ~ b2, b1@15 ~, [f#4,b4,d#5]@11 ~@5, [f#3,b3,d#4]@3 ~@3 [g#3,b3,e4,g#4,b4,e5]@2, ~@4 b2@5 ~@7", // B E
  P: "~@6 [f#3,b3,d#4]@4 b2@2 [f#3,b3,d#4]@2 b2 ~, [b1,f#4,a4,d#5]@15 ~, [f#3,b3,d#4]@3 ~@5, ~@4 b2@5 ~@7", // B B7 B
  Q: "~@3 e4@2 e3 ~ e3, e2@15 ~, [c#4,e4,a4,c#5,e5,a5]@3 [b3,g#4,b4,e5,g#5]@3 [a3,c#4,f#4,a4,c#5,f#5]@2, ~@4 e3@5 ~@7", // A E F#m
  R: "~@3 [g#3,b3,e4]@2 e3 ~ e3, e2, [g#4,b4,e5]@7 ~, [g#3,b3,e4]@3 ~@3 [c#4,e4,a4]@2, ~ e3 ~@2", // E A
  S: "[b3,e4,g#4]@2 ~ [b3,e4]@2 ~ e3 g#4, [b4,e5]@15 ~, ~@4 e3@6 b3@5 ~, ~@3 g#4@3 e4@2", // E E5
  T: "~@3 e4@2 e3 ~ e3, e2@15 ~, [a4,c#5]@11 ~@5, [c#4,e4,e5,a5]@3 [c#4,e5,a5]@3 [c#4,e4,a4,c#5,e5,a5]@2, ~@4 e3@5 ~@7", // A
  U: "~@3 [g#3,b3,e4]@2 e3 ~ e3, e2, [g#4,b4,e5]@7 ~, [g#3,b3,e4]@3 ~@3 [b3,e4]@2, ~ e3 ~@2", // E E5
  V: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@2 b2 [b3,d#4,f#4] b2, b1@15 ~, ~ b2 ~@2", // B
  W: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@2 b2 ~ b2, b1@7 ~, ~@4 b2@5 ~@3 [b3,d#4,f#4]@4", // B
  X: "[b3,e4,g#4]@2 ~ b3@2 e3 [c#4,e4,a4] e3, e2@15 ~, ~@4 e3@5 ~@7, ~@3 [e4,g#4]@3 ~@2", // E A E
  Y: "[b3,e4,g#4]@2 ~ [b3,e4,g#4]@2 e3 [b3,e4,g#4] d#3, e2@13 ~@3, ~@4 e3@5 ~@7", // E
  Z: "c#4@2 ~ [c#4,e4,g#4]@2 c#3 [c#4,e4,g#4] c#3, [c#3,e4,g#4]@3 ~@5, ~@4 c#2@11 ~", // C#m
  AA: "[c#4,e4,g#4]@4 ~@2 [c#4,e4,g#4]@4 c#3@2 [c#4,e4,g#4]@2 c#3 ~, c#2@7 ~, ~ c#3 ~@2", // C#m
  AB: "[c#4,f#4,a#4]@4 ~@2 [c#4,f#4,a#4]@4 f#3@2 [c#4,f#4,a#4]@2 f#3 ~, f#2@15 ~, ~@4 f#3@5 ~@7", // F#
  AC: "[b3,b4] [a3,c#4,e4,a4] [g#3,b3,d#4,g#4] [f#3,f#4], [d#4,f#4] ~@5 [a3,c#4] ~", // B A G#m F# D#m A
  AD: "[[e3,g#3,b3,e4]@6 [b2,f#3,b3,d#4]@25 ~]/2", // E B
  AE: "~@3 [f#3,b3,d#4]@2 b2 ~ b2, b1@15 ~, [f#4,b4,d#5]@11 ~@5, [f#3,b3,d#4]@3 ~@3 [f#3,b3,d#4,f#4,b4,d#5]@2, ~@4 b2@5 ~@7", // B
  AF: "~@6 [f#3,b3,d#4]@4 b2@2 [f#3,b3,d#4]@2 b2 ~, [b1,f#4,a4,d#5]@15 ~, [f#3,b3]@3 ~@5, ~@4 b2@5 ~@7", // B B7 B5
  AG: "[[c#4,e4,a4]@2 ~ e4@2 ~ a2 ~@4 [b3,e4,g#4]@2 ~@2 b2, a1@7 ~@3 e3@2 ~ e3@2 ~, ~@4 a2@6 ~@6 e2@15 ~, ~@3 a4@5 [b3,g#4]@3 ~@3 [c#4,e4,a4,c#5,e5,a5]@2, ~@6 c#4@3 ~ c#4@4 e4@7 ~@11]/2", // A E A
  AH: "~@2 e3 ~@4 f#4, [e2,b4,e5,g#5]@13 ~@3, [b3,e4,g#4]@3 g#4@3 ~@2, ~@6 [b3,e4]@4 b3@5 ~, ~@2 e3 [b2,e4]", // E E5
  AI: "[[b3,e4,g#4]@4 ~@2 [b3,e4]@4 ~@2 e3@2 g#4@2 [c#4,a4]@4 ~@2 [c#4,e4]@3 ~ a3@2 [a2,c#4]@2 e4 ~, e2@15 ~ a1@13 ~@3, [b4,e5]@12 e4@9 ~@11, ~@4 e3@5 ~ b3@5 ~@5 a2@7 ~@5, ~@6 g#4@7 ~@9 a4@8 ~@2]/2", // E E5 F#m C#m A E5
  AJ: "[f#3,b3,d#4]@2 ~ [f#3,b3,d#4]@2 b2 ~ b2, b1@15 ~, [f#4,b4,d#5]@11 ~@5, ~@4 b2@5 ~@3 [g#3,b3,e4,g#4,b4,e5]@4", // B E
  AK: "b3@2 ~ [b3,d#4,f#4]@2 b2 [b3,d#4,f#4] b2, b1@15 ~, [b4,d#5,f#5]@13 ~@3, [d#4,f#4]@3 ~@5, ~ b2 ~@2", // B D#m
  AL: "[b3,e4,g#4,b4,e5,g#5]@4 [b3,d#4,f#4,b4,d#5,f#5] ~ [b2,d#4]@4 b2@2 [b3,f#4]@2 b2 ~, b1@7 ~, ~@6 [b3,f#4,b4,d#5,f#5]@6 d#4 ~@3", // E B B5 B
  AM: "[[c#4,e4,a4,c#5,e5,a5]@4 ~@2 [b3,e4,g#4]@4 e3@2 [b3,e4,g#4]@2 ~@2 [c#4,f#4,a4,c#5,f#5,a5]@4 [e3,b3,e4,g#4,b4,e5,g#5] ~ [b3,e4,g#4]@4 e3@2 [b3,e4,g#4]@2 e3 ~, e2@15 ~ e2@14 ~@2, ~@4 e3@5 ~@5 e3@5 ~@3 e3@2 ~@8, ~@6 [b4,e5,g#5]@7 ~@9 [b4,e5,g#5]@7 ~@3]/2", // A E F#m E
  AN: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@2 b2 [b3,d#4,f#4] b2, b1@15 ~, [b4,d#5,f#5]@13 ~@3, ~ b2 ~@2", // B
  AO: "[b3,e4,g#4,b4,e5,g#5]@4 [b2,b3,d#4,f#4,b4,d#5,f#5] ~ [b3,d#4,f#4]@4 b2@2 [b3,d#4,f#4]@2 b2@2, b1@7 ~, ~@3 [b4,d#5,f#5]@3 ~@2, ~@3 b2 ~@4", // E B
  AP: "[[c#4,e4,a4,c#5,e5,a5]@4 ~@2 [b3,e4,g#4]@4 e3@2 [b3,e4,g#4]@2 ~@2 [c#4,e4,a4,c#5,f#5,a5]@4 [e3,b3,e4,g#4,b4,e5,g#5] ~ [b3,e4,g#4]@4 e3@2 [b3,e4,g#4]@2 e3@2, e2@15 ~ e2@15 ~, ~@4 e3@5 ~@5 e3@5 ~@3 e3@3 ~@7, ~@6 [b4,e5,g#5]@9 ~@7 [b4,e5,g#5]@8 ~@2]/2", // A E F#m7 E
})).s("gm_piano").gain(0.54).pan(0.7)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@54 A@2 ~@2 B C D@2 E F G@2 ~@54>".pickRestart({
  A: "[~@6 [e4,b4] ~ [e4,b4] ~ [e4,b4] ~ [e4,b4]@2 [e4,a4]@14 ~@4]/2", B: "~@3 c#5@5",
  C: "~ b4 ~@2 b4 g#4 ~ f#4 e4 c#4 ~ e4 ~ g4@2 f#4, ~@3 g#4@2 ~@7 b4@2 ~@2",
  D: "[e4 f#4 ~ e4@9 ~@2 [c#5,f#5]@4 [b4,e5]@2 g#4@2 f#4 g#4 f#4@2 e4@2 b3@2 c#4 e4]/2", // F#5 E5
  E: "f#4@4 e4 f#4 g#4@4 f#4 g#4 b4@4", F: "~ c#5 e5@4 f#5 e5 g#5@4 g#5@2 a5@2",
  G: "[g#5@2 g#5@7 ~ b4 c#5 e5@8 c#5@2 e5@10]/2",
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.3)

// other · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  ~@20 A@8 B@2 C@2 B@2 D@2 E@2 F G H@2 I@8 B@2 D@2 ~@8 B@2 J@2 B@2 D@2 E@2 F G H@2 K@8 B@2 D@2 B@2 L@2 B@2 D@2 M@2 D@2
  N@2 D@2 N@2 D@2 O@2 L@2 N@2 D@2 O@2 L@2
>`.pickRestart({
  A: "[~@2 [e4,e5]@61 ~]/8", B: "[f#4,f#5]/2", C: "[[e4,e5]@29 ~@3]/2", D: "[[e4,e5]@31 ~]/2", E: "[g#4,g#5]/2",
  F: "[a#4,a#5]", G: "[b4,b5] [a4,a5] [g#4,g#5] [f#4,f#5]", H: "[[e4,e5]@6 [d#4,d#5]@23 ~@3]/2", I: "[e4,e5]/8",
  J: "[[e4,e5]@15 ~]/2", K: "[[e4,e5]@127 ~]/8", L: "[e4,e5]/2", M: "[[f#4,f#5]@31 ~]/2", N: "[b4,b5]/2",
  O: "[[b4,b5]@31 ~]/2", // B
})).s("gm_synth_strings_1").gain(0.56)

// chords · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  A B C D E B C D F G H F I J K L M N O P F G H F I J K L M N Q P R S T U V W X ~@3 F G H F I J K L M N O P F G H F I J
  K L M N Q P R S T U V W X ~@3 U Y Z AA AB AC AD AE AF AG AH AI AF AG AJ L AF AG AK L S AL AM AN AG AO AP AQ AR AO AP
  AQ AR AO AP AQ AR AO AP AQ AR AO AP AQ
>`.pickRestart({
  A: "[b3,e4,g#4]@4 [b3,g#4]@2 [b3,e4,g#4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,g#4] ~", // E
  B: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4] ~ [b3,d#4,f#4]@2 [b3,d#4,f#4] ~", // B
  C: "[a3,c#4,e4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]@4 [a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4] ~", // A
  D: "[a3,c#4,e4]@4 [a3,c#4,e4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@2 [b3,d#4,f#4] ~", // A B
  E: "[b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,g#4] ~", // E
  F: "[b3,e4,g#4]@4 [b3,e4,g#4]@2 [b3,e4,g#4]@4 [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  G: "[c#4,e4,a4]@4 [c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A
  H: "[b3,e4,g#4]@4 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2", // E A
  I: "[b3,e4,g#4]@4 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~ [b3,e4,g#4] ~", // E
  J: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // A
  K: "[b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@4 [b3,e4,g#4] ~ [c#4,e4,a4] ~ [c#4,e4,a4]@2", // E A
  L: "[b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  M: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // B E
  N: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // B
  O: "[c#4,e4,a4]@4 [c#4,e4,a4] ~ [b3,e4,g#4]@4 [b3,e4,g#4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A E A
  P: "[b3,e4,g#4]@2 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]!3", // E
  Q: "[c#4,e4,a4]@4 [c#4,e4,a4] ~ [c#4,e4,a4]@4 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A
  R: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@2 [b3,d#4,f#4] ~", // B
  S: "[b3,d#4,f#4]@4 [b3,d#4,f#4] ~ [b3,d#4,f#4]@4 [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // B
  T: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@4 [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // E A
  U: "[b3,e4,g#4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  V: "[c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~ [c#4,e4,g#4]@4 [c#4,e4,g#4] ~ [c#4,e4,g#4]@2 [c#4,e4,g#4] ~", // C#m
  W: "[c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~ [c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~ [c#4,e4,g#4] ~ [c#4,e4,g#4] ~", // C#m
  X: "[a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~", // F#
  Y: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@4 [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4]@2", // A
  Z: "[b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // E A
  AA: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  AB: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~", // E
  AC: "[c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // A
  AD: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~", // E A
  AE: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  AF: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // B E
  AG: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // B
  AH: "[c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // A E A
  AI: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // E
  AJ: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A E A
  AK: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [c#4,e4,a4]@2 [c#4,e4,a4] ~", // A E A
  AL: "[b3,e4,g#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // E B
  AM: "[c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,g#4] ~", // A E
  AN: "[c#4,e4,a4]@4 [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // A E
  AO: "[b3,e4,g#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // E B
  AP: "[c#4,e4,a4]@3 ~ [c#4,e4,a4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~", // A E
  AQ: "[c#4,e4,a4]@2 ~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 [b3,e4,g#4] ~ [b3,e4,g#4] ~", // A E
  AR: "[b3,d#4,f#4]@2 ~@2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] ~", // B
})).s("gm_acoustic_guitar_nylon").gain(0.36).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@37 A B C D@2 ~@3 E F G H@2 I J K L M N O@2 P Q R ~ S@2 T U V@2 W X Y Z AA AB AC@2 AD AE AF AG AH AI AJ AK AL AM AN
  AO AP@2 AQ@2 AR@2 AS AT ~@2 AU AV ~ AW ~ AX AR@2 AS AT ~@2 AU AV ~ AW ~ AX ~@4
>`.pickRestart({
  A: "~@10 b4@2 d5@2 a4 ~", B: "b4@11 ~@5", C: "[d#5,f#5,b5] ~ [c#5,e5,a5] ~ [b4,d#5,g#5] ~ [a4,c#5,f#5] ~",
  D: "[[g#4,b4,e5]@5 ~ [f#4,b4,d#5]@23 ~@3]/2", E: "~@3 a5@2 a5@2 ~ a5@2 ~@4 g#5@2",
  F: "~@2 e4 ~ g#4@2 b4@2 c#5 ~ f#5@6, ~@3 f#4@2 ~@11", G: "c#5 ~", H: "[~@3 [b5,e6]@4 ~]/2",
  I: "~@10 [b4,e5] ~@3 d#5 e5", J: "d#5@7 ~", K: "[e5,a5]@6 [e5,g#5]@6 e5 ~ e5 f#5",
  L: "e5@4 ~@2 e4 ~ g#4@2 b4@2 c#5@2 b4@2, ~@7 f#4@2 ~@7", M: "g#4@11 ~@5",
  N: "b3@2 c#4@2 e4@2 f#4 e4 g#4@2 f#4 e4 f#4 e4 c#4 ~", O: "[~@4 b3 c#4 e4@5 ~ g#4@2 f#4@5 c#4 e4@2 e4@8 ~@2]/2",
  P: "[e4,g#4]@11 ~ [g#4,b4]@3 ~", Q: "~@3 a5@4 ~, c#5@7 ~, ~@2 e5@5 ~", R: "~@4 f#5@2 e5 ~ b4 c#5 e5 ~ f#5@2 e5@2",
  S: "~@4 [d#5,f#5,b5] ~@5 [d#5,f#5,b5]@5 ~", T: "~@4 [c#5,e5,a5]@7 ~ [c#5,e5,a5]@3 ~",
  U: "[b4,e5,g#5]@5 ~ [c#5,f#5]@2", V: "~@10 [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~", W: "~@10 [e4,b4] ~ [e4,b4] ~ [e4,b4] ~",
  X: "~@2 b4 ~ [e4,b4] ~ [e4,b4] ~ [e4,b4] ~ [e4,b4] ~ [e4,b4]@2 ~@2", Y: "[b3,f#4] ~@3", Z: "~ g#4 b4 c#5@4 ~",
  AA: "e5@3 e5@3 ~@2", AB: "[d#5,f#5,b5]@2 ~@2 [c#5,e5,a5]@3 ~ [b4,d#5,g#5]@3 ~ [a4,c#5,f#5]@2 ~@2",
  AC: "[[g#4,b4,e5]@4 ~@2 [f#4,b4,d#5]@23 ~@3]/2", // E B
  AD: "[b3,e4,g#4]@5 ~ g#4@4 ~@2 g#4@3 ~, ~@3 b3@4 ~, ~@6 e4@2 ~@2 e4@5 ~", AE: "[c#4,e4,a4]@13 ~@3",
  AF: "[b3,e4,g#4]@5 ~ [e4,g#4]@6 e4@3 ~, ~@6 b3@9 ~", AG: "[g#5,b5]@2 ~ [g#5,b5] ~@2 [g#5,b5]@8 ~@2",
  AH: "~@10 f#5 g#5 f#5@2 c#5 ~", AI: "c#5@2 e5 a5@4 ~", AJ: "~@6 f#4 g#4 b4@2 c#5 ~@3 e5 f#5", AK: "e5@7 ~@9",
  AL: "~@12 d#5 e5@3", AM: "d#5@8 f#4 g#4 b4@2 c#5@2 g#5@2", AN: "f#5@4 e5@2 e5@5 ~ g#4@2 b4 ~", AO: "e5@3 ~",
  AP: "[~@4 [b4,d#5]@2 [b4,e5] [b4,d#5]@6 ~@3]/2", AQ: "[~@4 g#4@2 b4 g#4@6 ~@3]/2",
  AR: "[~@8 [b4,d#5]@4 e5@2 d#5@13 ~@5, ~@12 b4@15 ~@5]/2", AS: "~@10 f#4 g#4 b4@2 c#5@2", AT: "e5@5 ~@3",
  AU: "b4 c#5 e5@9 ~@5", AV: "g#5@15 ~", AW: "~@5 [b4,e5]@3", AX: "~@10 e4@2 f#4 g#4 b4 ~",
})).s("gm_electric_guitar_clean").gain(0.54).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@32 A@7 B A C A@31 B A C A@44>".pickRestart({
  A: "x ~@2 x ~@4", B: "x!4", C: "~@3 x",
})).gain(0.6)

// drums · rim
const rim = s("rim").struct("<~@42 [~ x ~ x]!24 ~@10 [~ x ~ x]!15 [~ x ~@2] ~@28>").gain(0.6)

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

// drums · clap
const clap = s("cp").struct("<~@100 [~ x ~ x]!20>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@11 A ~@20 B C D C B C D ~@3 D@8 B D@3 B D@7 B D@3 B C D C B C D ~@3 D@8 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B
// … 75 more lines

More by Elton John