Strudelify

Unchained Melody

The Shadows

KeyG majorTempo101 bpm
0:00/0:00
// Unchained Melody — The Shadows
// 101 bpm, 6/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/3)

// 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 · "ACOU BASS"
const bass = note(`<
  A B C D E F G H A B I J K L G M A B C D E F G H A B I J K L G M A B G H C D N O E F G P A B A B Q R S T S U V W X U S
  Y S Z AA AB A AC C D E F G H A B I J K L K L A AC C D E F G H A B I J K L K L A B G H C D N O E F G P A AC C D E F AD
  ~@2
>`.pickRestart({
  A: "g2@17 ~@3 g2@2 ~@2", B: "g2@9 ~@3 g2@10 ~@2", C: "e2@17 ~@3 e2@2 ~@2", D: "e2@3 ~ e2@3 ~",
  E: "c2@17 ~@3 c2@2 ~@2", F: "c2@5 ~ c2@5 ~", G: "d2@17 ~@3 d2@2 ~@2", H: "d2@5 ~ d2@5 ~", I: "e2@18 ~@2 e2@3 ~",
  J: "e2@10 ~@2 e2@9 ~@3", K: "d2@17 ~@3 d2@3 ~", L: "d2@10 ~@2 d2@9 ~@3", M: "d2@10 ~@2 d2@7 ~@5",
  N: "b1@17 ~@3 b1@2 ~@2", O: "b1@3 ~ b1@3 ~", P: "d2@10 ~@2 d2@3 ~ e2@3 ~ f#2@3 ~", Q: "c2@3 ~@2 c2",
  R: "d2@13 ~@7 d2@4", S: "c2@7 ~@3 c2@2", T: "a#1@4 ~ a#1", U: "d2@7 ~@3 d2@2", V: "g2@7 ~@3 g2 ~", W: "g2@3 g1 a1 b1",
  X: "c2@13 ~@7 c2@4", Y: "a#1@7 ~@3 a#1@2", Z: "d2@15 ~@5 d2@4", AA: "g2@5 ~ g2@5 ~", AB: "d2@5 ~ d2 ~ e2 ~ f#2 ~",
  AC: "g2@9 ~@3 g2@3 ~ g2@3 ~ f#2@3 ~", AD: "g2@17 ~@7",
})).s("gm_acoustic_bass").gain(0.57)

// other · orchestral harp · "HARP"
const orchestral_harp = note(`<
  A B C D E F G H A@2 C@2 G@3 H A B C D E F G H A@2 C@2 G@3 H A I G H C@2 J@2 E F G H A@2 K L E G E M E N A O E G E P E
  Q A@3 B C D E F G H A@2 C@2 G@4 A B C D E F G H A@2 C@2 G@4 A I G H C@2 J@2 E F G H A B C D E F ~@3
>`.pickRestart({
  A: "g3 b3 d4 g4 d4 b3", B: "g3@4 b3@4 d4@4 g4@3 ~ g3@4 f#3@3 ~", C: "e3 g3 b3 e4 b3 g3",
  D: "e4@4 b3@4 g3@4 e3@4 g3@4 b3@3 ~", E: "c3 e3 g3 c4 g3 e3", F: "c3@4 e3@4 g3@4 c4@4 g3@4 e3 ~@3",
  G: "d3 f#3 a3 d4 a3 f#3", H: "d3@4 f#3@4 a3@4 d4@4 a3@4 f#3 ~@3", I: "g3@4 b3@4 d4@4 g4@3 ~ d4@4 b3@3 ~",
  J: "b2 d3 f#3 b3 f#3 d3", K: "g3@3 ~ f4@3 ~ d4@3 ~ f4@3 ~ d4@3 ~ b3@4",
  L: "g3@4 f4@2 ~@2 d4@3 ~ f4@3 ~ d4@3 ~ b3@2 ~@2", M: "a#2 d3 f3 a#3 ~ d3, ~@2 f3",
  N: "d3@4 f#3@4 a3@4 d4@4 a3@4 f#3@3 ~", O: "g3@4 b3@4 d4@4 g4@4 d4@4 b3@3 ~", P: "a#2 d3 f3 a#3 f3 d3",
  Q: "d3 f#3 a3 d4 ~ f#3, ~@16 a3@7 ~",
})).s("gm_orchestral_harp").gain(0.29).pan(0.8)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B C D E F G H I J K L H M N@2 A B C D E F G H I J K L H M N@2 A B G H C D O P E F G H A B Q@2 F R F S F R A Q F R F
  S F R A T@3 ~@51
>`.pickRestart({
  A: "[d3,g3,b3]@4 [d3,g3,b3]@4 [g3,b3]@4 [d3,g3]@8 [g3,b3]@3 ~, ~@3 b3 ~@2", // G G5 G
  B: "[d3,g3,b3]@4 g3@4 [g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@3 ~", // G
  C: "[e3,g3,b3]@4 [g3,b3]@4 [g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [g3,b3]@3 ~", // Em G Em G
  D: "[e3,g3,b3]@4 [g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@3 ~", // Em G Em
  E: "[e3,g3,c4]@4 [g3,c4]@4 [g3,c4]@4 [e3,g3,c4]@4 [e3,g3,c4]@4 [e3,g3,c4]@3 ~", // C C5 C
  F: "[e3,g3,c4]@4 [e3,g3,c4]@4 [g3,c4]@4 [e3,g3,c4]@4 [e3,g3,c4]@4 [e3,g3,c4]@3 ~", // C C5 C
  G: "[f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 f#3@4 [f#3,a3,d4]@3 ~", // D
  H: "[f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@3 ~", // D
  I: "[d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@3 ~", // G
  J: "[d3,g3,b3]@4 [g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@4 [d3,g3,b3]@3 ~", // G
  K: "[e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 b3@4 [e3,g3,b3]@3 ~", // Em
  L: "[e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@4 [e3,g3,b3]@3 ~", // Em
  M: "[f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,d4]@3 ~", // D
  N: "[f#3,a3,d4]@4 [f#3,d4]@4 [f#3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@3 ~", // D
  O: "[b2,d3,f#3]@4 [d3,f#3]@4 [d3,f#3]@4 [b2,d3,f#3]@4 [b2,d3,f#3]@4 [d3,f#3]@3 ~", // Bm D Bm D
  P: "[b2,d3,f#3]@4 [d3,f#3]@4 [b2,d3,f#3]@4 [b2,d3,f#3]@4 [b2,d3,f#3]@4 [b2,d3,f#3]@3 ~", // Bm D Bm
  Q: "[d3,f3,b3]@4 f3@4 [f3,b3]@4 [d3,f3,b3]@4 [d3,f3,b3]@4 [d3,f3,b3]@3 ~", // Bdim Fdim Bdim
  R: "[f#3,a3,d4]@4 [f#3,a3,d4]@4 [a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@4 [f#3,a3,d4]@3 ~", // D D5 D
  S: "[d3,f3,a#3]@4 [d3,f3,a#3]@4 [f3,a#3]@4 [d3,f3,a#3]@4 [d3,f3,a#3]@4 [d3,f3,a#3]@3 ~", // A# A#5 A#
  T: "[[d3,g3,b3]!2 [g3,b3] [d3,g3]@2 [g3,b3]@12 ~, ~@3 b3 ~@14]/3", // G G5 G
})).s("gm_acoustic_guitar_nylon").gain(0.21)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  A B C D E F G ~@2 H I ~@2 J K@2 A B C D E F G ~@2 H I ~@2 J K@2 A B G ~ C D L M E F G ~ A B@3 F N F O F N A B F N F O
  F N A P@3 ~@51
>`.pickRestart({
  A: "~@8 d3@4 ~@4 b3@4 d3@3 ~", B: "~ [d3,b3] d3 ~@3", C: "~@4 e3@4 e3@4 ~@8 e3@3 ~", D: "~ e3 ~@4", E: "~ e3!2 ~@3",
  F: "~@2 e3 ~@3", G: "~@4 [a3,d4] ~", H: "~ d3 ~@4", I: "~@4 [e3,g3] ~", J: "~@8 a3@4 ~@8 a3@3 ~", K: "~ a3!2 ~@3",
  L: "~@4 b2@4 b2@4 ~@8 b2@3 ~", M: "~ b2 ~@4", N: "~@2 f#3 ~@3", O: "~@2 d3 ~@3", P: "[~@2 d3 ~ b3 d3@12 ~]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.14)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@14 A@8 B@2 C@2 D@8 E F@6 G@7 H I J K H L M N H I J K H O@2 P@8 Q@8 R@7 S@2 C@2 D@8 E T@8 U@3 V@6 ~
>`.pickRestart({
  A: "[~@11 d3@12 f#3@12 a3@12 b3@24 d4@12 g4@24 b3@12 e4@12 g4@24 c4@12 a4@12 g4@12 f#4]/8",
  B: "[~@11 d4@12 b4@12 a4@12 ~]/2", C: "[~@11 b4@12 d5@12 g5@13]/2", D: "[~@11 b4@12 e5@12 g5@12 a5@96 g5@48 f#5]/8",
  E: "~@11 d5@12 f#5", F: "[~@11 a5@12 g5@48 f#5@48 [g5,c6]@25, ~@23 b5@97 ~@24]/6",
  G: "[~@23 a5@48 b5@96 e5, ~@23 d6@144 ~]/7",
  H: "f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5!2",
  I: "g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 e5",
  J: "f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 e5 f#5 d5",
  K: "e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5 d5 e5!2",
  L: "g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5!2",
  M: "a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5",
  N: "a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 g5 a5 e5",
  O: "[g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 f#5 g5 g5@25]/2",
  P: "[~@23 g5@144 f#5@25]/8", Q: "[a5@23 [g5,b5]@96 [f#5,a5]@73]/8",
  R: "[~@23 b4@24 d5@12 g5@24 b4@12 e5@12 g5@24 c5@12 a5@12 g5@12 f#5]/7", S: "[~@11 d5@12 b5@12 a5@12 ~]/2",
  T: "[~@11 a5@12 g5@48 f#5@48 [g5,c6]@48 [a5,d6]@25, ~@23 b5@96 ~@73]/8", U: "[~@23 a5@12 g5@24 f#5@12 f#5]/3",
  V: "[~@11 e5@34 ~@2 b5@12 a5@36 [g5,b5,g6]@48 ~]/6", // G
})).s("gm_string_ensemble_2").gain(0.22).pan(0.2)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A@2 B@2 C@2 D@2 A@2 B@2 D@4 A@2 B@2 C@2 D@2 A@2 B@2 D@4 A@2 D@2 B@2 E@2 C@2 D@2 A@2 F@2 C D C G C D H@2 C D C G C D
  H@2 A@2 B@2 C@2 D@2 A@2 B@2 D@4 A@2 B@2 C@2 D@2 A@2 B@2 D@4 A@2 D@2 B@2 E@2 C@2 D@2 A@2 B@2 C ~@4
>`.pickRestart({
  A: "~@12 [b3,d4,g4] ~@11", B: "~@12 [g3,b3,e4] ~@11", C: "~@12 [e3,g3,c4] ~@11", D: "~@12 [f#3,a3,d4] ~@11",
  E: "~@12 [d3,f#3,b3] ~@11", F: "~@12 [b3,d4,f4] ~@11", G: "~@12 [d3,f3,a#3] ~@11", H: "~@12 [d3,g3,b3] ~@11",
})).s("gm_overdriven_guitar").gain(0.28).pan(0.7)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<~@31 A@4 B@2 C@4 D@7 ~@15 E@8 F@8 G@8 H@8 A@4 B@2 I@7 ~@9>".pickRestart({
  A: "[~@23 g2@48 f#2@12 d2@12 f#2]/4", B: "[~@11 a2@12 g2@24 a2]/2", C: "[~@12 g2@11 d2@48 c2@25]/4",
  D: "[~@23 d2@48 g2@96 ~]/7", E: "[~@23 g2@144 f#2@25]/8", F: "[~@23 g2@48 e2@48 d2@73]/8",
  G: "[~@23 b3@48 ~@48 c3@48 [d3,f#3]@25, ~@23 g3@96 ~@73, ~@71 e3@97 ~@24]/8", // D
  H: "[~@23 b3@48 e3@48 [f#3,a3]@73, ~@23 g3@96 ~@73]/8", I: "[~@11 g2@12 d2@48 c2@48 d2@48 ~]/7",
})).s("gm_string_ensemble_2").gain(0.48).pan(0.8)

// chords · tremolo strings · "TREMOLOSTR"
const tremolo_strings = note("<~@48 A B A C A B D@2 A B A C A B E@2 ~@53>".pickRestart({
  A: "[c5,e5]", B: "[d5,f#5]", C: "[a#4,d5]", D: "[g5,b5]/2", E: "[b4,g5]/2",
})).s("gm_tremolo_strings").gain(0.15).pan(0.7)

// other · brass section · "BRASS 1"
const brass_section = note("<~@96 A B ~@2 C D ~ E F G ~@2 H I J K L ~@4>".pickRestart({
  A: "~@16 d4 ~@3 d4 ~@3", B: "g4@12 d4@11 ~", C: "~@16 b3 ~@3 b3 ~@3", D: "e4 b3", E: "~@8 b3@3 ~ d4@8 f#4@4",
  F: "e4 ~", G: "~@2 c4 e4@2 g4", H: "~ b3", I: "d4", J: "~ g3", K: "b3@11 ~", L: "c4",
})).s("gm_brass_section").gain(0.45).pan(0.8)

// other · timpani
const timpani = note(`<
  ~@94
  [d2 ~@3 d2 ~@3 d2 ~@3 d2 ~@3 d2 ~@3 d2 ~@3]!2
  ~@18
  [g2 ~@17 g2!2 ~ g2!3]
  [g2!2 ~ g2 ~ g2!3 ~ g2!7 ~ g2!5 ~ g2]
  [g2 ~@23]
>`).s("gm_timpani").gain(0.33)

// other · timpani · soft notes
const timpani_soft = note("<~@114 [~ g2 ~ g2!5 ~ g2!5 ~ g2!3 ~@6] ~@2>").s("gm_timpani").gain(0.13)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@14 A@2 ~@8 B@2 C@2 D@4 ~@16 E F G H I J K L M N O P M Q R@2 S@2 T@2 U V W@2 X Y Z AA AB@2 AC AD S@2 T@2 U V W@2 X Y
  Z AA AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA@2 ~
>`.pickRestart({
  A: "[[d1,d2]@47 ~]/2", B: "[g3@5 b3 g3@6, g2]/2", C: "[e3@5 g3 e3@6, e2]/2",
  D: "[d3@20 f#3@4 ~@44 f#3@4 d3@13 ~@11, d2@29 ~@3, ~@6 d3@11 ~@7, ~@48 d1@37 ~@11]/4",
  E: "~ e3 g3 [c3,c4] g3 e3, c2@23 ~, c3 ~@2", F: "d3 f#3 a3 [d3,d4] a3 [d2,f#3], d2@3 ~",
  G: "c3 e3 g3 c4 g3 [c2,e3], c2@3 ~", H: "a#2 d3 f3 a#3 ~ [a#1,d3], a#1@2 f3",
  I: "c3 e3 g3 [c3,c4] ~ [c2,e3], c2@15 ~ g3@8", J: "d3 f#3 a3 d4 ~ d2, d2@16 a3@7 ~, ~@10 f#3 ~",
  K: "g3 b3 d4 [g3,g4] d4 b3, g2@17 ~@3 g2@2 ~@2", L: "g3@2 b3@2 d4@2 [g3,g4]@2 d4@2 b3 ~, g2",
  M: "c3 e3 g3 [c3,c4] ~ [c2,e3], c2@2 g3", N: "d3 f#3 a3 [d3,d4] a3 [d2,f#3], d2@17 ~@7",
  O: "~ e3 g3 [c3,c4] g3 [c2,e3], c2@17 ~@7, c3 ~@2", P: "a#2@4 d3@4 f3@4 [a#2,a#3]@4 ~@4 d3@3 ~, a#1, ~@2 f3",
  Q: "d3 f#3 a3 [d3,d4] ~ d2, d2@2 a3, ~@10 f#3 ~", // D
  R: "[g3@4 b3@4 d4@4 [g3,g4]@4 d4@4 b3@4 ~@4 b3@4 d4@4 [g3,g4]@4 d4@4 b3 ~@3, g2@15 ~, ~@3 g3 ~@2]/2", // G
  S: "[[b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [g2,b3,d4,g4] ~@3, g2@22 ~@2 g2@17 ~@7, g3@9 ~@3 g3@4 ~@4 g3@12 ~@4 g3@4 ~@8, g4 ~@5 g4 ~@5 g4 ~@11]/2", // Bm G Bm G Bm G
  T: "[[g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [e2,g3,b3,e4] ~@3, e2@21 ~@3 e2@17 ~@7, e3@7 ~@5 e3@4 ~@4 e3@12 ~@4 e3@3 ~@9]/2", // Em
  U: "[e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3, c2@11 ~, c3@7 ~@5 c3@4 ~@4 c3@2 ~@2", // C
  V: "[e3,g3] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3] ~@3 [e3,g3,c4] ~@3 [c3,e3,g3,c4] ~@3, c2@5 ~, c4 ~@5 c3@2 ~@4, ~@6 c4 ~@5", // Em C Em C
  W: "[[f#3,a3] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3] ~@3 [f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3, d2@20 ~@4 d2@15 ~@9, d3@7 ~@5 d3@4 ~@4 d3@12 ~@4 d3@4 ~@8, d4 ~@5 d4 ~@11 d4 ~@5]/2", // F#m D F#m D F#m D
  X: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3, g2@5 ~, ~@6 g3@2 ~@2 g3 ~", // G
  Y: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [g2,b3,d4,g4] ~@3, g2 ~, g3@8 ~@4 g3@3 ~@9", // G
  Z: "[g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [e3,g3,b3,e4] ~@3, e2@19 ~@5, e3@4 ~@8 e3@3 ~@9", // Em
  AA: "[g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [e2,e3,g3,b3,e4] ~@3, e2@17 ~@7, e3 ~@2 e3 ~@2", // Em
  AB: "[[f#3,a3] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3, d2@10 ~@2 d2@9 ~@3, d3@4 ~@8 d3@3 ~@5 d3@11 ~@5 d3@4 ~@8, d4 ~@23]/2", // F#m D
  AC: "[f#3,a3,c4] ~@3 [f#3,a3] ~@3 [f#3,a3,d4] ~@3 [f#3,a3,d4] ~@3 [a3,d4,f#4,a4] ~@3 [d4,f#4,a4,d5] ~@3, d2@7 ~, d3@4 ~@8 d3@3 ~@5 d3@2 ~@2, d4 ~ d4 ~@9", // F#dim F#m D
  AD: "[f#4,a4,d5,f#5] ~@7 [a4,d5,f#5,a5] ~@3 [f#5,a5,c6,d6] ~@11, d2@3 ~, d3@5 ~@7 d3@3 ~@9", // D D7
  AE: "[d2,d3,f#3,a3,d4]@3 ~@5 [f#3,a3,d4] ~@3 [d3,d4]@2 ~@6 [d3,f#3,a3,d4] ~@3, ~@2 d2@3 ~, ~@12 [f#3,a3] ~@11", // D F#m
  AF: "[d3,f#3,a3] ~@7 [f#3,a3,d4] ~@3 [d3,d4,f#4]@2 ~@6 [d3,a3,d4] ~@3, [d2,d4] ~@3 d2@4 ~@4, ~@12 a3 ~@11", // D D5 D
  AG: "[d2,d3,a3]@4 [d4,f#4] ~@3 [d3,d4,f#4] ~@3 [d2,d3,d4,f#4] ~@3 [d2,d3,d4,f#4] ~@3 [d2,d3,d4,f#4] ~@3, d4@3 ~@5 d2@2 ~@14, f#4 ~@23", // D5 D
  AH: "[d2,d3,d4,f#4] ~@3 [d2,d3,d4,f#4] a6@2 [d6,f#6] [d2,d3,d4,f#4] ~ f#6 d6 [d2,d3,f#4,a4,d5] a6@2 f#6 [d2,d3,f#4,a4,d5] a6@2 ~ [d2,d3,f#4,a4,d5,d6] ~@3, ~@4 d7@2 ~@2 d7@2 ~@2 d7@2 ~@2 d7@3 ~@5, ~@9 a6@2 ~@4 d6@2 ~@2 f#6@2 ~@3", // D
  AI: "[d4,g4]@2 ~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3, g2@5 ~, g3@4 ~@8 g3@3 ~@5 g3@2 ~@2, b3 ~@23", // G5 G
  AJ: "[b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4] ~@3 [b3,d4,g4] ~@3 [g2,b3,d4,g4] ~@3, g2@2 ~, g3@7 ~@5 g3@4 ~@8, g4 ~@5 g4 ~@5", // Bm G Bm G
  AK: "[a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3, d2@5 ~, d3@4 ~@8 d3@4 ~@4 d3@3 ~", // D
  AL: "[a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3, d2@8 ~@2 [d2,d3] ~, d3 ~@2 d3 ~@2", // D
  AM: "[b3,d4,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [e3,b3,e4,g4] ~@3, e2@19 ~@5, e3@2 ~@4 e3 ~@5", // Em7 Em
  AN: "[b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [e2,b3,e4,g4] ~@3, e2@7 ~@5, e3 ~@2 e3 ~@2", // Em
  AO: "[b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3, b1@3 ~, b2@2 ~@4 b2@2 ~@2 b2 ~", // Bm
  AP: "[b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3, b1@9 ~ [b1,b2] ~, b2@7 ~@5 b2@4 ~@8", // Bm B
  AQ: "[g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3, c2@17 ~@7, c3@7 ~@5 c3@4 ~@4 c3@2 ~@2", // C
  AR: "[g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3, c2@9 ~ [c2,c3] ~, c3@7 ~@5 c3@4 ~@8", // C
  AS: "[a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3, d2@7 ~, d3@7 ~@5 d3@4 ~@4 d3@2 ~@2", // D
  AT: "[d4,f#4]@2 ~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3, d2@7 ~, d3@2 ~@4 d3@5 ~, a3 ~@23", // D
  AU: "[b3,d4] ~@3 [b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3, g2@5 ~, g3@7 ~@5 g3@4 ~@4 g3@2 ~@2, g4 ~ g4 ~@3 g4 ~@5", // Bm G Bm G
  AV: "[b3,d4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4] ~@3 [b3,d4,a4] ~@3 [b3,d4,g4] ~@3, g2@13 ~@7 g2@2 ~@2, g3@8 ~@4 g3@7 ~@5, g4 ~@5 g4 ~@5", // Bm G Bm Bm7 G
  AW: "[g3,b3] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3, e2@5 ~, e3@2 ~@4 e3@2 ~@2 e3 ~, e4 ~@11", // G Em
  AX: "[g3,b3] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3, e2@13 ~@7 e2@2 ~@2, e3@7 ~@5 e3@8 ~@4, e4 ~@11", // G Em
  AY: "[g3,c4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3, c2@19 ~@5, c3@7 ~@5 c3@4 ~@4 c3@2 ~@2, e4 ~@11", // C5 C
  AZ: "[g3,c4,d#4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4] ~@3 [c4,d#4,g4] ~@3 [c4,d#4,a4] ~@3 [c4,d#4,g4] ~@3, c2@7 ~@3 c2 ~, c3@8 g4@2 ~@2 c3@9 ~@3", // Cm Adim Cm
  BA: "[g1,g2,d4,g4,b4]/2", // G
})).s("gm_piano").gain(0.3).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@64 A B A@15 B A@12 C@2 A B A@3 B A@3 B A@3 B A@3 C D ~ D>".pickRestart({
  A: "x ~@4 x", B: "x ~@3 x!2", C: "x!6", D: "x",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@64 A@7 B A@15 B A@6 C D A@17 D ~@3>".pickRestart({
  A: "~ x", B: "~@2 x!4", C: "~@4 x!2", D: "x!6",
// … 23 more lines

More by The Shadows