Strudelify

Greensleeves

Clayderman Richard

KeyE minorTempo112 bpm
0:00/0:00
// Greensleeves — Clayderman Richard
// 112 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 59 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 B C D E F G@2 H B I J K L M N O@2 P Q R J R S T U V W X Y Z AA AB AC AD AE AF@2 AG@2 AH@2 AI@2 AJ@2 AK@2 AL AM AD
  AN@2 AO@6
>`.pickRestart({
  A: "~@12 g3@6 g2@5 ~, g2@17 ~@7, ~@6 d3@11 ~@7", B: "~@18 d2@5 ~, d2@3 ~, ~@6 a2@17 ~, ~@12 d3@11 ~",
  C: "~@18 b1@5 ~, b1@17 ~@7, ~@6 f#2@11 ~@7, ~@4 b2@3 ~", D: "c2@23 ~", E: "b1@23 ~",
  F: "~@3 b2, e2@23 ~, ~ b2@2 ~, ~@12 e3@11 ~", G: "~@12 e3@5 ~ b2@5 ~, e2@17 ~@7, ~@6 b2@11 ~@7",
  H: "~@18 e2@5 ~, e2@3 ~, ~@2 b2@3 ~@3, ~@12 e3@11 ~", I: "~@18 b1@5 ~, b1@5 ~@3, ~@6 f#2@17 ~, ~@12 b2@11 ~",
  J: "~@18 c2@5 ~, c2@3 ~, ~@6 g2@17 ~, ~@12 c3@11 ~", K: "~@18 a2@5 ~, a2@7 ~@5, ~@3 e3@4 ~@5, ~@12 a3@11 ~",
  L: "~@3 f#3, b2@23 ~, ~ f#3@2 ~, ~@12 a3@11 ~", M: "~@18 b2@5 ~, b2@3 ~, ~@6 f#3@17 ~, ~@12 a3@11 ~",
  N: "[b2,a3]@23 ~", O: "[[b2,a3]@2 ~@5 b2, ~@23 e2@23 ~@2, ~@5 b2@2 ~, ~@36 e3@11 ~]/2",
  P: "~@17 e2@6 ~, e2@5 ~@3, ~@2 b2@3 ~@3, ~@12 e3@11 ~", Q: "~@18 d2@5 ~, d2@17 ~@7, ~@6 a2@17 ~, ~@12 d3@11 ~",
  R: "~@18 b1@5 ~, b1@3 ~, ~@6 f#2@17 ~, ~@12 b2@11 ~", S: "~@7 e3, e2@23 ~, ~@6 b2@12 b2@5 ~, ~@4 e3@3 ~",
  T: "~@3 e2, e2@3 ~, ~ b2@3, ~ e3", U: "~@3 d3, g2, ~ d3@2 ~, ~ b3", V: "~ b3, g2, ~ d3@3",
  W: "~@3 a2, d2, ~ a2@2 ~, ~ d3", X: "~@3 d2, d2@3 ~, ~ a2@3, ~ d3", Y: "~@3 g2, c2, ~ g2@2 ~, ~ c3",
  Z: "~@3 c2, c2@3 ~, ~ g2@3, ~ c3", AA: "~@12 a3@11 ~, b2@23 ~, ~@6 f#3@17 ~", AB: "b2 ~@3", AC: "[b2,a3]",
  AD: "~@19 d3@5, ~ g2@23, ~@7 d3@12 ~@5, ~@13 b3@11", AE: "~@13 b3@11, ~ g2@23, ~@7 d3@17",
  AF: "[~@19 a2@6 ~@18 d2@5, ~ d2@24 d2@18 ~@5, ~@7 a2@12 ~@12 a2@17, ~@13 d3@13 ~@11 d3@11]/2",
  AG: "[~ [c3,g3,b3]@24 [b2,f#3,a3]@23]/2", // Cmaj7 B7
  AH: "[~@25 e3@3 g3@3 b3@17, ~ e2@12 e2@16 ~@19, ~@4 b2@6 b2@6 b2@6 b2@7 ~@19, ~@7 e3@12 e3@6 ~@23]/2",
  AI: "~@11 b4, ~ e4@12 e4@11, ~@2 b4@3 b4@3 b4@3 ~, ~@7 g4@12 g4@5",
  AJ: "[~@22 a4@3 ~@21 a4@2, ~ d4@12 d4@12 d4@12 d4@11, ~@2 a4@3 a4@3 a4@3 ~@3 a4@3 a4@3 a4@3 ~, ~@7 f#4@12 f#4@7 ~@5 f#4@12 f#4@5]/2",
  AK: "[~@22 g4@3 ~@21 f#4@2, ~ c4@12 c4@12 b3@12 b3@11, ~@2 g4@3 g4@3 g4@3 ~@3 f#4@3 f#4@3 f#4@3 ~, ~@7 e4@12 e4@6 ~@6 d#4@12 d#4@5]/2",
  AL: "~@4 b3@3 ~@3 g3@3 e3@2 ~@7 g3@2, ~@7 e3@6 ~@3 g3@6 ~@2, ~@19 b3@5", AM: "~@5 g4@7, ~ e3@23, ~ b3@5, ~@7 e4@17",
  AN: "[~@13 b3@12 ~@18 a2@5, ~ g2@24 d2@23, ~@7 d3@19 ~@5 a2@12 ~@5, ~@37 d3@11]/2",
  AO: "[~@25 [c3,e3]@12 [a2,e3]@6 [a#2,f#3]@7 [b2,a3]@25 ~@10 g3@47 ~@12, ~ d2@18 d2@8 ~@48 e2@56 ~@13, ~@7 a2@20 ~@51 b2@48 ~@18, ~@13 d3@14 ~@55 e3@48 ~@14]/6", // C A5 D#m B7
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  A B C D E F@2 G H I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC AD AE AF@2 AG@7 AH@2 AI@2 AJ@4 AK AL@2 AM@6
>`.pickRestart({
  A: "[b4,d5]@17 ~ [a4,c#5]@2 ~ g4@2 ~, ~@10 b4 ~", B: "f#4@17 ~ d4@5 ~, a4@23 ~, ~@17 f#4@6 ~",
  C: "[b3,d4]@17 ~ e4@3 f#4@3", D: "g4@12 ~@6 e4@5 ~, b3@23 ~, ~@12 f#4@11 ~",
  E: "~@18 d#4@5 ~, b3@23 ~, d#4@3 ~, ~@12 c#4@11 ~", F: "[[g3,e4]@41 ~ e4@5 ~]/2", G: "[e4,g4]@17 ~ [f#4,a4]@5 ~",
  H: "[g4,b4]@14 ~@6 [g4,b4]@3 ~, ~@16 [a4,c5]@7 ~", I: "f#4@18 [d4,f#4]@5 ~, a4@23 ~",
  J: "d4@15 ~@5 f#4@3 ~, b3@23 ~, ~@16 e4@7 ~", K: "[b3,e4]@18 [b3,e4]@5 ~, g4@23 ~",
  L: "e4@7 ~@3 e4@2, c4@23 ~, ~@16 d#4@7 ~", M: "[d#4@18 b3@5 ~@22 f#4@2 ~, f#4@23 ~ b3@23 ~, ~@18 d#4@24 d#4@5 ~]/2",
  N: "a4@2 ~@19 f#5@2 ~, ~@3 b4@6 b4@6 b4@8 ~, ~@6 a4@6 a4@11 ~, ~@18 d#5@5 ~", O: "[b4,d#5,f#5,b5]@4 ~@2 e5 ~",
  P: "~@18 [f#5,a5]@5 ~, [e5,g5]@23 ~", Q: "[g5,b5]@15 ~@5 [g5,b5]@4, ~@16 [a5,c6]@7 ~", R: "f#5@18 f#5@5 ~, a5@23 ~",
  S: "~@5 f#5, [b4,d5]@23 ~, ~@16 e5@7 ~", T: "~@5 [c5,e5], [b4,g5]@23 ~, ~@16 [d5,f#5]@7 ~",
  U: "a4@4 a4 [a4,d#5], d#5@5 ~, ~@16 c#5@7 ~", V: "[g4,e5]", W: "~@7 b5, ~@5 e5@3, ~@3 g5", X: "[d5,d6]",
  Y: "~@3 [b4,b5], [d5,d6], ~ [c#5,c#6]", Z: "~@3 [f#4,f#5], [a4,a5]", AA: "~@5 [f#4,f#5], [d4,d5], ~@2 [e4,e5]",
  AB: "~@3 [e4,e5], [g4,g5]", AC: "~@7 [e4,e5], [e4,e5]@7 ~, ~@3 [d#4,d#5]", AD: "~@3 [d#4,d#5], [f#4,f#5]@23 ~",
  AE: "b4 ~@6 b4, b3!2, ~ e4@4 e4@3, ~ f#4@2 f#4, ~@3 b4@4 ~",
  AF: "[~@22 b5@3 [d5,d6]@23, b4@13 ~@11, ~@3 d#5@9 d#5@13 ~@23, ~@6 f#5@9 f#5@10 ~@23, ~@9 b5@10 a5@7 ~@22]/2", // D
  AG: "[~@19 [b4,b5]@6 ~@18 [f#4,f#5]@6 ~@20 [f#4,f#5]@4 ~@18 [e4,e5]@6 ~@18 [d#4,d#5]@6 [e4,e5]@27 ~@6 e4@3 g4@3 ~@3 e5@5, ~ [d5,d6]@24 [a4,a5]@25 ~@15 [e4,e5]@8 [g4,g5]@24 [d#4,d#5]@18 ~@45 b4@8, ~@13 [c#5,c#6]@13 ~@23 [d4,d5]@25 ~@11 [f#4,f#5]@13 ~@11 [c#4,c#5]@13 ~@46]/7", // B F# E D# E D A E …
  AH: "[~@19 a5@6 ~@21 b5@2, ~ g5@24 b5@21 ~@2, ~@43 c6@5]/2",
  AI: "[~@19 f#5@6 ~@21 f#5@2, ~ a5@24 d5@23, ~@41 e5@7]/2",
  AJ: "[~@19 e5@6 ~@18 d#5@6 ~ e5@24 ~@20 b5@2, ~ b4@25 a4@24 ~@32 g4@9 g5@5, ~ e5@17 ~@7 f#4@24 [g4,b4]@25 ~@5 e4@17, ~@2 g5@24 ~@11 c#5@13 ~@35 b4@11, ~@13 f#5@13 d#5@17 ~@45 e5@8]/4", // G
  AK: "~ [d5,d6]@23", AL: "[~@19 [b4,b5]@6 ~@18 [f#4,f#5]@5, ~ [d5,d6]@24 [a4,a5]@23, ~@13 [c#5,c#6]@13 ~@22]/2",
  AM: "[~@21 f#4@4 [b3,g4]@12 [c4,f#4]@6 [c#4,e4]@6 ~@19 d#4@7 ~@23 b4@3 ~ [e4,g4,b4,e5]@30 ~@12, ~ [d4,d5]@26 ~@22 d#4@19 ~@7 b3@13 b3@14 ~@42, ~@17 e4@10 ~@23 b3@25 g3@27 ~@42, ~@62 c#4@14 e4@15 ~ e4@10 ~@42, ~@95 g4@7 ~@42]/6", // Em Cdim C#m Em D
})).s("gm_piano").gain(0.35)

// bass · fretless bass
const bass = note(`<
  A B C D E F G F H I C J K L M N O P Q I R S T U V W X Y Z AA S AB AC AD AE AF@2 AG AH AI@2 AJ@2 AK@2 AL AM AN AO@2 AE
  AP AQ AR AS AT@4
>`.pickRestart({
  A: "g1@8 ~ g1@3", B: "d2@17 ~ c#2@6", C: "b1@8 ~ b1@3", D: "c2", E: "b1@5 ~ b1@2", F: "e1@11 ~", G: "e1@8 ~ e1@2 ~",
  H: "e1@3 b1", I: "d2@3 c#2", J: "c2@16 ~@2 b1@5 ~", K: "a1@8 ~ a1@3", L: "b1@23 ~", M: "b1@15 ~@3 b1@4 ~@2",
  N: "b1@19 ~@5", O: "b1@17 ~ g1@6", P: "e1@7 ~", Q: "e1@8 ~ e1@3", R: "b1@17 ~ b1@6", S: "c2@8 ~ c2@3",
  T: "b1@7 ~@2 b1@3", U: "e1@23 ~", V: "e1@17 ~ f#1@6", W: "g1@7 ~", X: "g1@3 c#2", Y: "d2@11 ~", Z: "d2@5 ~ d2@2",
  AA: "c2@23 ~", AB: "b1@11 ~", AC: "b1@8 ~ b1@2 ~", AD: "b1@19 a1@5", AE: "~ g1@22 ~",
  AF: "[~@19 b1@6 d2@22 ~, ~ g1@20 ~@27]/2", AG: "~ d2@15 ~@3 d2@5", AH: "~ c2@23",
  AI: "[~ b1@16 ~@2 b1@6 e1@21 ~@2]/2", AJ: "~ e1@20 ~@3", AK: "[~ e1@24 d2@22 ~]/2", AL: "~ d2@23",
  AM: "~ c2@16 ~@2 c2@5", AN: "~ b1@23", AO: "[~ e2@24 e1@17 ~ f#1@5]/2", AP: "~ g1@18 c#2@5", AQ: "~ d2@16 ~@2 d2@5",
  AR: "~ d2@10 ~@2 d2@5 ~ d2@5", AS: "~ c2@12 a1@6 f#1@5", AT: "[~@2 b1@15 ~@3 b1@7 e1@56 ~@13]/4",
})).s("gm_fretless_bass").gain(0.2)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@7 B C D E F G H@2 I@2 J K L M N O P Q@2 R S T U V W X Y Z AA AB AC AD AE AF AG AH AI@2 AJ@2 AK AL AM AN@3 AO@6
>`.pickRestart({
  A: "[[g3,g4]@23 ~ [f#3,d4,f#4]@13 ~@4 f#4@5 ~ [b3,d4]@20 ~@6 g4@22 ~ f#4@19 ~@7 g4@19 ~@2 [b3,e4]@22 ~@3, [b3,d4]@19 ~@4 d3@23 b2@25 c3@23 ~ b2@26 e4@18 ~@29, ~@23 a3@18 d4@3 ~@2 f#3@19 ~@6 [b3,c4]@19 ~@5 [b3,d#4]@20 ~@4 e3@20 ~@3 [e3,g3]@23 ~@3, ~@72 e4@19 ~@29 [g3,b3]@21 ~@27]/7", // G D Bm E5 Bm Cmaj7 B Em …
  B: "~@3 g4, e3@7 ~, ~@6 b3@17 ~, ~ e4", C: "~@2 e4 g4, e3@2 ~, ~ b3@2 ~", D: "~@2 d4 f#4, f#3 ~@2, ~@3 a3@7 ~@2",
  E: "~@2 d4 f#4, b2@3 ~, ~ b3@3", F: "~@2 c4 e4, c3@17 ~@7, ~ g3@3", G: "~ c4 e4 a4, a3",
  H: "[~@6 d#4@6 f#4@5 d#4 a4@6 ~@6 d#4@6 ~@6 d#4@6, b3@31 ~@5 b3@12, ~@24 f#4@13 ~@11]/2",
  I: "[~@4 d#4@2 ~@6 d#4 ~ d#4 f#4, b2@8 a4@5 ~@3, ~@6 b3@26 ~@7 b3@6 ~@3, ~@9 f#4@4 ~@2 f#4@4 ~@5]/2",
  J: "~@3 g4 b4 g4 ~ b3, e3@5 ~, ~@3 b3@7 ~@14, ~@6 e4@5 ~@7 e4@6",
  K: "~@3 g4 b4 g4 e4 b3, e3, ~@3 b3@7 ~@14, ~ e4 ~@2",
  L: "~@6 d4@3 f#4@3 a4@3 ~@3 d4@3 a3@2 ~, d3@23 ~, ~@3 a3@5 ~@7 f#4@8 ~",
  M: "~ b3 ~ f#4 b4 f#4 d4 b3, b2@23 ~, ~@6 d4@7 ~@11", N: "~ b3 ~ e4 g4 e4 c4 b3, c3, ~@6 c4@7 ~@11",
  O: "~@3 a3@3 b3@3 d#4@3 ~@3 d#4@3 b3@3 a3@2 ~, b2, ~@12 f#4@5 ~@7", P: "~ g3 b3 e4 g4 e4 ~ g3, e3@5 ~, ~@3 b3",
  Q: "[~@3 g3@3 b3@3 e4@3 g4@2 ~ e4@2 ~ b4@2 ~ g4@2 ~@4 b3@3 d4@3 g4@3 b4@3 g4@3 ~@3 b3@3, e3@6 g3@5 ~, ~@14 b3@2 ~ g4@2 ~ e4@2 ~ b4@2 ~@17 d4@6]/2",
  R: "~ b3 ~ g4 b4 g4 ~ b3, g3, ~@6 d4@7 ~@5 d4@5 ~",
  S: "~@2 d4 f#4 a4 ~@2 a3, d3@11 ~, ~@3 a3@5 ~@7 f#4@5 ~@4, ~@3 d4", T: "~ a3 d4 f#4 d4 a3 f#3 a3, d3",
  U: "~@3 e4 ~ e4 ~ g3, c3@7 ~, ~@3 g3@10 ~@5 c4@5 ~, ~@6 c4@5 ~ g4@6 ~@6",
  V: "~@9 e4@3 ~@3 e4@3 c4@3 g3@2 ~, c3, ~@3 g3@5 ~@4 g4@5 ~@7, ~@6 c4@7 ~@11",
  W: "~ a3 ~@2 f#4 a4 f#4 d#4, b2@7 ~, ~ b3 ~@2, ~@9 d#4@5 ~@10", X: "b2@7 ~",
  Y: "~@3 b3@3 d#4@3 f#4@3 d#4@4 b3@3 g3@3 b3@2, b2",
  Z: "~@4 b3@3 ~@3 g4@3 b4@3 g4@3 ~@3 b3@2, ~ g3@21 ~@2, ~@7 d4@7 ~@5 d4@5",
  AA: "~@4 b3@3 d4@3 g4@3 b4@3 g4@3 d4@3 g4@2, ~ g3@23",
  AB: "~@4 a3@3 d4@3 f#4@3 a4@3 f#4@3 ~@3 a3@2, ~ d3@22 ~, ~@19 d4@5",
  AC: "~@7 d4@3 f#4@3 a4@3 f#4@3 d4@3 a3@2, ~ d3@23, ~@4 a3@5 ~@15",
  AD: "~@4 b3@3 ~@3 e4@3 g4@3 e4@3 c4@3 b3@2, ~ c3@23, ~@7 c4@5 ~@12",
  AE: "~@7 b3@3 d#4@3 ~@3 d#4@3 b3@3 a3@2, ~ b2@18 ~@5, ~@4 a3@5 ~@4 f#4@6 ~@5",
  AF: "~ [b3,e4]@7 ~@4, ~ g3@12 ~@11, ~ b2@8 ~@15, ~ e2@6 ~@17", // E5
  AG: "~ e4@8 ~@3, ~ e3@20 ~@3, ~ b3@15 ~@8, ~ g3@10 ~@13", AH: "~@2 g4@19 ~@3, ~ [e3,b3,e4]@19 ~@4",
  AI: "[~ [b3,e4]@18 ~@6 [f#3,a3,d4,f#4]@20 ~@3, ~ e3@24 ~@23, ~ g4@22 ~@25]/2", // E5 D
  AJ: "[~ [a3,d4,f#4]@19 ~@6 [e4,g4]@18 ~@4, f#3@9 ~@7, ~@25 c3@23, ~@25 c4@18 ~@5, ~@25 b3@15 ~@8]/2", // D Em
  AK: "~@2 f#4@15 ~@7, ~ b2@22 ~, ~ [b3,d#4]@16 ~@7, ~ a3@11 ~@12", AL: "~ [b3,e4]@23, [e3,g3]@23 ~, ~ g4@21 ~@2",
  AM: "~@2 [e4,g4]@19 ~@3, e3, ~ [g3,b3]@21 ~@2", // Em G
  AN: "[~@10 d4@3 ~@3 d4@3 b3@3 g3@2 ~@10 g4@3 b4@3 g4@3 d4@3 b3@3 ~@9 f#4@3 ~@9 a3@2, ~ g2@26 ~@4 d4@7 ~@17 d4@6 a4@5 ~ d4@5, ~@4 g3@9 ~@12 g3@25 ~@2 a3@11 ~ f#4@8, ~@7 b3@6 g4@8 ~@7 b3@7 ~@14 d3@20 ~@3]/3",
  AO: "[~@4 a3@3 d4@3 ~@6 a3@3 ~@3 a3@2 ~@7 c4@3 e4@3 a4@3 e4@3 f#4@3 ~ c#4@3 ~@3 b3@3 ~@3 f#4@3 a4@4 f#4@3 ~@3 b3@3 ~@7 e4@3 g4@3 ~@4 b3@3 e4@3 g4@3 ~@2 e5@29 ~@12, ~ d3@19 ~@5 c3@18 ~@7 b2@26 ~@68, ~@10 f#4@6 ~@40 d#4@7 ~@6 d#4@5 ~@5 b3@8 ~ b4@7 ~@7 [e4,g4,b4]@29 ~@13, ~@13 d4@5 ~ f#3@7 ~@2 g3@7 ~@40 e3@24 ~@2 [e3,b3]@29 ~@14]/6", // Em E5
})).s("gm_acoustic_guitar_nylon").gain(0.18).pan(0.3)

// chords · ocarina
const ocarina = note(`<
  ~@7 A B@2 C D@3 E F G H@2 I J K L H M N O I@2 K P Q R S@2 T U@2 V W X Y@2 Z AA@2 AB AC AD@2 AE@3 AF AG@5
>`.pickRestart({
  A: "[e4,g4]@11 ~", B: "[~@17 a4@6 ~ d4@14 ~@3 d4@5 ~@2, [e4,g4]@19 ~@4 f#4@18 ~@7]/2", C: "f#4@5 ~ f#4@2, d4@23 ~",
  D: "[g4@17 e4@5 ~@19 g4@6 f#4@18 d#4@5 ~@2, e4@15 ~@8 e4@18 ~@6 d#4@16 ~@9, ~@24 c4@19 ~@29]/3",
  E: "[d#4,f#4]@9 ~ d#4@2, ~@9 b3@2 ~", F: "f#4@3 g4@2 f#4@3 g4@3 f#4@3 g4@3 b4@4 d#5@3", G: "f#5@2 ~",
  H: "[e4,g4] b3 [e4,g4] b3", I: "[d4,f#4] a3 [d4,f#4] a3", J: "[d4,f#4] b3 [d4,f#4] b3", K: "[e4,g4] c4 [e4,g4] c4",
  L: "[d#4,f#4]@5 ~ b3@6 [d#4,f#4]@6 b3@6", M: "[e4,g4]@2 b3@2 [e4,g4] b3 e4 g4", N: "g4 b3 [d4,g4] b3, d4 ~@7",
  O: "[d4,g4] b3 d4 b3, ~@4 g4@3 ~", P: "[e4,g4]@5 c4@6 ~ [e4,g4]@6 c4@6", Q: "[d#4,f#4]@3 b3@3 [d#4,f#4]@3 b3@2 ~",
  R: "b3!2 d#4 f#4 b3!2 d#4 f#4",
  S: "[f#4@3 b4@3 d#5@3 f#5@3 b4@3 ~ d#5@3 f#5@3 d#5@3 [d4,g4]@5 ~ b3@6 [d4,g4]@6 b3@5]/2", // G5
  T: "~ [d4,g4]@6 b3@6 [d4,g4]@6 b3@5", U: "~ [d4,f#4]@6 a3@6 [d4,f#4]@6 a3@5", V: "~ [e4,g4]@6 c4@6 [e4,g4]@6 c4@5",
  W: "~ [d#4,f#4]@6 b3@6 [d#4,f#4]@6 b3@5", X: "~ [e4,g4]@6 b3@6 [e4,g4]@6 b3@5",
  Y: "[~ [e4,g4]@6 b3@6 e4@6 g4@6 e4@3 g4@3 b4@2 ~ g4@3 e4@3 g4@3 b4@3 g4@2]/2", // Em
  Z: "~ e4@3 g4@3 b4@3 g4@3 e4@3 g4@3 b4@3 g4@2",
  AA: "[~ d4@3 f#4@3 a4@3 f#4@3 d4@3 f#4@3 a4@2 ~ f#4@3 d4@3 f#4@3 a4@3 f#4@3 d4@3 f#4@3 a4@3 f#4@2]/2",
  AB: "~ c4@3 e4@3 g4@3 e4@3 c4@3 e4@3 g4@3 e4@2", AC: "~ b3@3 d#4@3 f#4@3 d#4@3 b3@3 d#4@3 f#4@3 d#4@2",
  AD: "[~@4 e4@3 g3@3 b3@3 g3@3 b3@3 e4@3 b3@3 g3@2 ~ g3@3 b3@3 e4@3 g4@3 b4@3 e5@3 g5@2]/2",
  AE: "[~ [b4,d5]@6 g4@6 [b4,d5]@6 g4@6 [b4,d5]@6 g4@6 [b4,d5]@6 g4@6 [a4,d5]@6 f#4@6 [a4,d5]@6 f#4@5]/3", // Bm D5
  AF: "~ [a4,d5]@6 f#4@6 d5@6 f#4@4 ~, ~@13 a4@11", // D5
  AG: "[~ [b3,g4]@12 [c4,f#4]@6 ~@6 d#4@13 c#4@7 ~@6 [g3,e4]@56 ~@13, ~@19 [c#4,e4]@8 ~@18 d#4@8 ~@67, ~@25 b3@39 ~@56]/5", // Em Cdim C C#m
})).s("gm_ocarina").gain(0.1).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A@2 C D C@2 A C@3 E@2 F G F G F@5 H F@2 G I J F J K F@2 L M ~
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "x ~@2 x ~@4", D: "x ~@2 x ~@3 x", E: "~ x ~@8 x ~@13", F: "~ x ~@22", G: "~ x ~@20 x ~",
  H: "~ x ~@10 x ~@11", I: "~ x ~@14 x ~@7", J: "~ x ~@8 x ~@11 x ~", K: "~ x ~@10 x!2 ~@10", L: "~ x ~@6",
  M: "~ x ~ x ~@8",
})).gain(0.19)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@7 A ~@17 B ~@4 B ~@5 C ~@16 C ~@5>".pickRestart({
  A: "x ~@2 x", B: "~@3 x ~@4", C: "~@11 x",
})).gain(0.13)

// drums · snare
const snare = s("sd").struct("<~@25 [~ x]!9 [~@13 x ~@10]!15 ~ [~@13 x ~@10]!5 [~@7 x ~@4] [~@2 x] ~@2>").gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@8 B ~@7 C ~@7 D ~@9>".pickRestart({
  A: "~@5 x!2 ~", B: "~@16 x ~@2 x ~@4", C: "~@16 x ~@2 x ~@2 x ~", D: "~@19 x ~@2 x ~",
})).gain(0.22)

// drums · hihat
const hihat = s("hh").struct("<~@7 A@18 B@4 C B@2 D E F G H G@2 I@2 J ~@17>".pickRestart({
  A: "~ x", B: "x!2 ~ x", C: "x ~@2 x", D: "x ~@3 x!2 ~@2", E: "x!2 ~@2", F: "~@7 x ~@11 x ~@4",
  G: "~ x ~@5 x ~@11 x ~@4", H: "~ x ~@5 x ~@2 x ~@8 x ~@4", I: "~ x ~@5 x ~@5 x ~@5 x ~@4", J: "~ x ~@5 x ~@5 x ~@10",
})).gain(0.22)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@29 A ~@2 A ~@2 B ~ C ~@21>".pickRestart({
  A: "~ x ~@2", B: "~@11 x", C: "~@5 x ~@6",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 [~ x ~@8 x ~@13] ~@9>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A@7 B A C D@4 ~@3 E ~@16>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~ x ~@11 x ~@10", D: "~@13 x ~@10", E: "~ x ~@22",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct("<A B C D E ~ F ~@35 G H@5 I J K@4 I L M N ~>".pickRestart({
  A: "x ~@22 x", B: "x ~@2 x", C: "x ~@20 x!3", D: "x ~@6 x", E: "x ~@5 x!2", F: "x", G: "~@13 x ~@10",
  H: "~ x ~@11 x ~@10", I: "~ x ~@11 x ~@5 x ~@4", J: "~ x ~@22", K: "~ x ~@5 x ~@5 x ~@5 x ~@4",
  L: "~ x ~@5 x ~@2 x ~", M: "~ x ~@6", N: "~ x ~@2",
})).gain(0.19)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<A ~@2 B ~ C ~@41 D E ~@7 F ~@2>".pickRestart({
  A: "~@21 x!2 ~", B: "~@23 x", C: "x ~@6 x", D: "~@11 x", E: "~@7 x ~@16", F: "~@2 x",
})).gain(0.1)

// drums · china
const china = s("cr").struct("<~@50 [~ x ~@22] ~@8>").gain(0.22)

stack(
// … 3 more lines

More by Clayderman Richard