Strudelify

Frag' Maria

Roy Black

KeyA majorTempo98 bpm
0:00/0:00
// Frag' Maria — Roy Black
// 98 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/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 · synth bass 1 · "SYNTH BAS"
const bass = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA@3 AB X@2 AC AD AE AF AG AH AE AI AJ AK AL AE AM AN AE AI AO
  AP AQ AR AM AS AT AU AA U AB AV W Y AW AA S AX V W X AY AZ BA AU@2 BB BC AV BD BE BF BB AU BG BH BI BJ BK BL J BM BN
  BO BP ~
>`.pickRestart({
  A: "a1@2 ~@4 a1@3 ~ e1@5 ~", B: "a1@3 ~@3 a1@3 ~ a1@4 ~@2", C: "c#2@2 ~@4 c#2@2 ~@2 c#2@5 ~",
  D: "d2@3 ~@3 d2@2 ~@2 d2@6", E: "a1@3 ~@3 a1@2 ~ a1@2 a1 b1@2 c#2@2", F: "d2@3 ~@3 d2@3 ~ d2@6",
  G: "a1@2 ~@4 a1@7 ~ a1@2", H: "b1@3 ~@3 b1@3 ~ b1@5 ~", I: "e1@3 ~@3 e1@2 ~ e1 ~ e1 e2@2 e1@2",
  J: "a1@3 ~@3 a1@3 ~ a1@5 ~", K: "c#2@3 ~@3 c#2@3 ~ c#2@4 ~@2", L: "d2@4 ~@2 d2@3 ~ d2@4 ~@2",
  M: "a1@4 ~@2 a1@2 ~ a1 ~ a1 b1@2 c#2@2", N: "d2@3 ~@3 d2@3 ~ d2@5 ~", O: "c#2@4 ~@2 c#2@3 ~ c#2@5 ~",
  P: "b1@4 ~@2 b1@3 ~ b1@6", Q: "e1@4 ~@2 e1@2 ~ e1@4 ~ e1@2", R: "e1@5 ~@3", S: "a1@4 ~@2 a1@7 ~@3",
  T: "a1@5 ~ a1@8 ~@2", U: "a1@5 ~ a1@9 ~", V: "b1@5 ~ b1@4 a1@2 g#1@2 d1@2", W: "e1@4 ~@2 e1@7 ~@3",
  X: "e1@2 ~ e1@4 ~", Y: "d1@4 ~@2 d1@9 ~", Z: "a1@6 f#1@2 e1@5 ~ e1@2", AA: "a1@5 ~ a1@7 ~@3",
  AB: "b1@2 ~ b1@2 a1 f#1 d1", AC: "d1@4 ~@2 d1@7 ~@3", AD: "a1@2 ~ a1@2 f#1 e1@2", AE: "a1@4 ~@2 a1@3 ~ a1@5 ~",
  AF: "g#1@5 ~ g#1@3 ~ g#1@5 ~", AG: "f#1@5 ~ f#1@4 g#1@2 a1@4", AH: "d1@4 ~@2 d1@4 e1@5 ~",
  AI: "c#2@5 ~ c#2@3 ~ c#2@5 ~", AJ: "d2@5 ~ d2@3 ~ d2@5 ~", AK: "a1@5 ~ a1@2 ~ a1@2 a1 b1@2 c#2@2",
  AL: "d2@4 ~@2 d2@3 ~ d2@5 ~", AM: "b1@4 ~@2 b1@3 ~ b1@5 ~", AN: "e1@4 ~@2 e1@2 ~ e1 ~ e1 e2@2 e1@2",
  AO: "d2@5 ~ d2@3 ~ d2@6", AP: "a1@5 ~ a1@2 ~ a1@3 b1@2 c#2@2", AQ: "d2@4 ~@2 d2@3 ~ d2@6",
  AR: "c#2@5 ~ c#2@3 ~ c#2@6", AS: "e1@4 ~@2 e1@2 ~ e1@3 ~@2 e2@2", AT: "e1 ~", AU: "a1@2 ~ a1@3 ~@2",
  AV: "e1@2 ~ e1@3 ~@2", AW: "a1@6 f#1@2 e1 ~ e1@3 ~ e1@2", AX: "a1@2 ~ a1@4 ~", AY: "d1@2 ~ d1@4 ~",
  AZ: "a1@5 ~ a1@7 ~ f#1@2", BA: "e1 ~ e1@2 f#1@2 e1@2 b1@2 e1@2 f#1@2 e1@2", BB: "a1@3 ~@3 a1@6 ~@4",
  BC: "b1@3 ~@3 b1@4 a1@2 g#1@2 d1@2", BD: "e1@3 ~@3 e1@6 ~@4", BE: "d1 ~@2 d1@3 ~@2", BF: "a1@3 ~@3 a1@6 e1@2 f#1@2",
  BG: "a1@3 ~@3 a1@7 ~@3", BH: "b1 ~@2 b1@2 a1 g#1 d1", BI: "e1@2 ~ e1@2 ~@3", BJ: "e1@3 ~@3 e1@7 ~@3",
  BK: "d1@3 ~@3 d1@6 ~@4", BL: "a1 ~@2 a1@2 f#1 e1@2", BM: "g#1@4 ~@2 g#1@3 ~ g#1@5 ~", BN: "f#1@2 ~ f#1@2 g#1 a1@2",
  BO: "d1@4 ~@2 d1@3 ~ e1@5 ~", BP: "a1@9 ~@7",
})).s("gm_synth_bass_1").gain(0.54)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@3 B C@2 D@4 E F@4 G@2 H I J@3 E K@3 L@3 M N@2 O@2 P@3 M Q R S T@2 U V@2 H I W@4 X@2 Y I Z@3 AA AB@3 AC@3 M AD@2 AE@2
  AF@3 M AG@2 AH@2 AI@4 M AJ@2 AK@5 M AL@2 S AM AN AO AP@3 ~
>`.pickRestart({
  A: "[[a4,c#5]@9 ~ [c#5,e5]@3 ~ [b4,d5]@8 [a4,c#5]@26, e4@23 ~]/3", B: "[d4,b4], f#4@7 ~",
  C: "[[g#4,b4]@9 ~ [b4,d5]@3 ~ [a4,c#5]@7 ~ [g#4,b4]@9 ~, e4@31 ~]/2", D: "[[d4,f#4]@16 [c#4,e4]@47 ~, a4]/4",
  E: "[c#4,e4,g#4]", F: "[[d4,f#4]@16 [c#4,e4]@16 f#4@16 [c#4,e4]@15 ~, a4, ~@16 d4@7 ~@9]/4",
  G: "[[d4,f#4]@16 [e4,g#4]@15 ~, b3@15 ~]/2", H: "[c#4,e4,a4]@15 ~", I: "[c#4,e4,g#4]@15 ~",
  J: "[[d4,f#4] [c#4,e4] [d4,f#4], a4@47 ~]/3", K: "[[d4,f#4]@16 [e4,g#4]@21 ~@3 [c#5,e5]@4 [b4,d5]@4, b3@3 ~]/3",
  L: "[[a4,c#5]@11 ~ [c#5,e5]@3 ~ [b4,d5]@6 [a4,c#5]@25 ~, e4@23 ~]/3", M: "[f#4,b4,d5]@15 ~",
  N: "[[g#4,b4]@11 ~ [b4,d5]@3 ~ [a4,c#5]@6 [g#4,b4]@9 ~, e4@31 ~]/2", O: "[[d4,f#4]@8 [c#4,e4]@7 ~, a4@15 ~]/2",
  P: "[c#5@11 ~ [c#5,e5]@3 ~ [b4,d5]@5 ~ [a4,c#5]@25 ~, e4@23 ~, a4@7 ~@17]/3", Q: "g#4@12 d5@3 ~, [e4,b4]",
  R: "[e4,a4,c#5]@5 ~ [e4,g#4,b4]@9 ~", S: "[d4,f#4,a4]@15 ~", T: "[[c#4,e4,a4]@31 ~]/2",
  U: "[b3,e4,g#4]@15 ~, c#3@3 ~@5", V: "[[a3,d4,f#4]@24 [b3,e4,g#4]@7 ~]/2",
  W: "[[d4,f#4]@15 ~ e4@16 [d4,f#4]@15 ~ [c#4,e4]@15 ~, a3@63 ~, ~@8 c#4@7 ~@17]/4", // D C#m
  X: "[[d4,f#4] g#3, b3@15 ~, ~@8 e4@7 ~]/2", Y: "[a3,c#4,e4]@15 ~",
  Z: "[[d4,f#4]@15 ~ [c#4,e4]@16 [d4,f#4]@16, a4@47 ~]/3", AA: "[e4,g#4], c#4@7 ~",
  AB: "[[d4,f#4]@4 [e4,g#4]@5 ~ [c#5,e5] [b4,d5], b3@3 ~]/3", // D E C#m Bm
  AC: "[[a4,c#5]@11 ~ [c#5,e5]@4 [b4,d5]@6 [a4,c#5]@25 ~, e4@23 ~]/3", // A C#m Bm A
  AD: "[[g#4,b4]@11 ~ [b4,d5]@4 [a4,c#5]@6 [g#4,b4]@10, e4@31 ~]/2", AE: "[f#4@8 [c#4,e4]@7 ~, a4@31 ~, d4@7 ~@9]/2",
  AF: "[c#5@11 ~ [c#5,e5]@3 ~ [b4,d5]@6 [a4,c#5]@26, e4@47 ~, a4@5 ~@11]/3", // C#m Bm A
  AG: "[g#4@12 d5@3 ~ [a4,c#5]@6 [g#4,b4]@9 ~, e4@31 ~, b4 ~]/2", AH: "[[d4,f#4]@14 ~@2 [c#4,e4]@15 ~, a4@31 ~]/2",
  AI: "[[b3,b4,e5]@16 [a4,c#5]@11 ~ [c#5,e5]@3 ~ [b4,d5]@6 [a4,c#5]@25 ~, e4@63 ~]/4", // E5 A C#m Bm A
  AJ: "[g#4@11 ~ [b4,d5]@4 [a4,c#5]@6 [g#4,b4]@10, e4@31 ~, b4@9 ~@23]/2", // Bm A G#m
  AK: "[[d4,f#4]@15 ~ c#4@16 [a4,c#5]@11 ~ [c#5,e5]@4 [b4,d5]@6 [a4,c#5]@26, a4@31 ~@49, ~@8 e4@31 ~]/5", // D A C#m Bm A
  AL: "[[e4,g#4,b4]@11 ~ [b4,d5]@3 ~ [a4,c#5]@5 ~ [g#4,b4]@9 ~, ~@12 e4@19 ~]/2", AM: "[c#4,e4,a4]",
  AN: "[c#4,e4,a4] [c#4,e4,a4]@15", AO: "g#4, b3@7 ~, e4 ~@15", AP: "[[a3,d4,f#4]@24 [b3,g#4]@7 ~ [c#4,a4]@16, ~ e4]/3",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.4)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@2 A@2 ~ B@2 C@2 ~@8 D ~@7 E ~@3 F D ~@2 G@2 ~@2 H@2 ~@2 I ~@4 J ~@5 K E D ~@7 L M ~@2 N O ~@2 P ~@3 Q@2 ~@3 R L ~@2
  S@2 ~@2 T ~@3 H@2 ~@2 U@2 ~@3 E ~
>`.pickRestart({
  A: "[~@7 b4@9]/2", B: "[~@12 g#4@13 ~@7]/2", C: "[e5@23 ~@9]/2", D: "e5@7 ~", E: "e5@13 ~@3", F: "~@5 a4 b4@2",
  G: "[~@10 g#4@2 ~@2 e5@15 ~@3, ~@6 a4@5 ~@5]/2", H: "[~@10 a4@2 b4@2 e5@13 ~@5]/2", I: "~@3 e5@5", J: "e5@11 ~@5",
  K: "~@3 b4", L: "e5@3 ~", M: "e5@7 ~@9", N: "~@6 a4 b4", O: "e5", P: "~ g#4 a4 e5@5",
  Q: "[~@6 a4@2 b4@2 e5@11 ~@11]/2", R: "~ b4@2 ~, ~@2 b3@11 ~@3", S: "[~@5 a4 b4 e5@9]/2",
  T: "~ g#4 a4 e5@5, ~@6 a4 ~@9", U: "[~@2 g#4@2 a4 ~ b4@2 e5@10 ~@14]/2",
})).s("gm_acoustic_guitar_steel").gain(0.32)

// other · flute
const flute = note(`<
  A@2 B@2 C@2 D@2 ~@18 E F G H I J K@2 L M N H O P Q@2 R@3 S ~@16 T E U V W I J X@2 E Y V H I Z AA@2 T L AB G AC I J
  AD@2 AE M G W I Z AF@2 AG@3 AH AI ~
>`.pickRestart({
  A: "[c#5 ~ c#5@2 ~@2 c#5@3 ~ e5@3 ~ d5@6 ~@2 c#5@6 ~@4]/2", B: "[a4@3 ~ g#4@2 a4@3 ~ e4@3 ~ d4@14 ~@4]/2",
  C: "[b4 ~ b4@2 ~@2 b4@3 ~ d5@3 ~ c#5@7 ~ b4@8 ~@2]/2", D: "[f#4 ~ f#4@2 ~@2 f#4@4 e4@3 ~ e4@18]/2",
  E: "c#5@3 ~ c#5 ~ c#5@6 e5@3 ~", F: "d5@3 c#5@4 ~", G: "a4@4 g#4@2 a4@6 e4@3 ~", H: "d4@15 ~",
  I: "b4@3 ~ b4 ~ b4@6 d5@4", J: "c#5@6 b4@9 ~", K: "[f#4 ~ f#4@2 ~@2 f#4@4 e4@3 ~ e4@13 ~@5]/2",
  L: "c#5@3 ~ c#5 ~ c#5@6 e5@4", M: "d5@3 c#5@5", N: "a4@3 ~ g#4@2 a4@6 e4@3 ~", O: "b4@3 ~ b4 ~ b4@6 d5@3 ~",
  P: "c#5@5 ~ b4@9 ~", Q: "[f#4 ~ f#4@3 ~ f#4@4 e4@3 ~ e4@16 ~@2]/2",
  R: "[c#5@4 b4@2 c#5@3 ~ e5@4 b4@5 ~ a4@2 b4@3 ~ e5@4 a4@7 ~ f#4@3 ~ g#4@2 a4 ~ c#5 ~]/3",
  S: "c#5@4 b4@2 a4@2 b4@2 e5@5 ~", T: "~@2 e5 d5", U: "d5@5 ~ c#5@8 ~@2", V: "a4@4 g#4 ~ a4@6 e4@3 ~", W: "d4@7 ~",
  X: "[f#4@3 ~ f#4 ~ f#4@4 e4@3 ~ e4@17 ~]/2", Y: "d5@5 ~ c#5@9 ~", Z: "c#5@3 b4@4 ~",
  AA: "[f#4 ~ f#4@2 ~@2 f#4@4 e4@3 ~ e4@11 ~@7]/2", AB: "d5@6 c#5@9 ~", AC: "d4",
  AD: "[f#4@2 f#4@2 ~@2 f#4@4 e4@3 ~ e4@17 ~]/2", AE: "c#5@3 ~ c#5 ~ c#5@5 ~ e5@4",
  AF: "[f#4 ~ f#4@2 ~@2 f#4@4 e4@3 ~ e4@16 ~@2]/2",
  AG: "[c#5@4 b4@2 c#5@4 e5@4 b4@6 a4@2 b4@4 e5@4 a4@8 f#4@2 f#4@2 g#4@2 a4@3 ~]/3", AH: "c#5@2 b4 a4 b4 e5@3",
  AI: "c#5 ~",
})).s("gm_flute").gain(0.32).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@26 A B A C D E F A@2 G A C D H I A ~@21 A G A C J E I A@2 G A C D E I A K A G A C J E I A@2 G A C J E I A ~@6
>`.pickRestart({
  A: "~@2 [e4,a4,c#5] ~@5 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@4", B: "~@2 [e4,b4,d5] ~@5 [d4,e4,a4,c#5] ~@2 [e4,a4,c#5] ~@4",
  C: "~@2 [f#4,b4,d5] ~@5 [f#4,b4,d5] ~@2 [f#4,b4,d5] ~@4", D: "~@2 [e4,g#4,d5] ~@5 [e4,g#4,b4] ~@2 [e4,g#4,b4] ~@4",
  E: "~@2 [e4,a4,c#5] ~@5 [e4,g#4,b4] ~@2 [e4,g#4,b4] ~@4", F: "~@2 [d4,f#4,a4] ~@5 [f#4,a4,d5] ~@2 [f#4,a4,d5] ~@4",
  G: "~@2 [e4,b4,d5] ~@5 [e4,a4,c#5] ~@2 [e4,a4,c#5] ~@4", // E7 A
  H: "~@2 [e4,a4,c#5] ~@5 [e4,g#4,b4] ~@2 [e4,g#4,b4] ~@2 [e4,g#4,b4] ~", // A E
  I: "~@2 [f#4,a4,d5] ~@5 [f#4,a4,d5] ~@2 [f#4,a4,d5] ~@4", J: "~@2 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@2 [e4,g#4,b4] ~@4",
  K: "~@8 [e4,b4,e5] ~@2 [e4,b4,e5] ~@4", // E5
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.4)

// chords · marimba
const marimba = note(`<
  A@2 B C D@2 E@2 F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN@3 AO AP AQ AR AS Q
  AT AU AV AW AX AY AZ BA BB BC BD@2 BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF
  CG CH CI CJ CK CL@3 CM CN ~
>`.pickRestart({
  A: "[c#5 ~ c#5 ~@3 c#5@2 ~@2 e5@3 ~ d5@7 ~ c#5@7 ~@3]/2", B: "a4@3 ~ g#4 ~ a4@2 ~@2 e4@4 d4@2",
  C: "~@4 b4@2 c#5@3 ~ d5@4 ~@2, d4@3 ~@5, ~ f#4@2 ~@5", D: "[b4 ~ b4@2 ~@2 b4@2 ~@2 d5@2 ~@2 c#5@8 b4@7 ~@3]/2",
  E: "[f#4 ~ f#4@2 ~@2 f#4@2 ~@2 e4@2 ~@10 b4@4 c#5@5 ~, ~@14 e4@4 e4@13 ~, ~@16 c#4@7 ~@9, ~@20 a4@11 ~]/2",
  F: "a3 ~@5 a3 ~@3 e3@3 ~@3", G: "a3 ~@5 a3 ~@3 a3@3 ~@3", H: "c#4 ~@5 c#4 ~@9",
  I: "[a3,d4] ~@5 [a3,d4] ~@3 [a3,d4]@2 ~@4", // D5
  J: "c#4 ~@5 c#4@3 a3 ~ a3 a3@2 a3 ~, a3@6 a3 ~@9, ~@2 b3@4 ~@4 b3@2 b3 ~@3, ~@4 e4@11 ~",
  K: "d4 ~@5 [a3,d4] ~@5 [a3,d4] ~@3", L: "[a3,c#4] ~@5 [a3,c#4] ~@3 b3@2 ~@2 a3@2, ~@2 a3 c#4",
  M: "b3@6 b3 ~@3 b3@3 ~ b3 ~", N: "[b3,e4] ~@3 b3@2 e4@3 [b3,e4] b3 [b3,e4] e3@2 [b3,e4] ~, ~@2 e3@4 b3 ~@9",
  O: "a3 ~@3 b3@2 c#4@4 [a3,c#4] ~@5, c#4 ~@3, ~@2 a3@4 a3 ~@9", P: "[c#4,e4] ~@5 [c#4,e4] ~@3 [c#4,e4] ~@5",
  Q: "[a3,d4] ~@5 [a3,d4] ~@9", R: "[a3,c#4] ~@5 [a3,c#4] ~@2 a3 ~ a3 b3 ~ a3 ~, ~@2 a3@4 e4@9 ~, ~@4 b3@6 c#4@5 ~",
  S: "[a3,d4] ~@5 [a3,d4] ~@3 [a3,d4] ~@5", // D5
  T: "e4@2 ~@2 c#4@2 [g#3,c#4] ~@3 g#3@2 [g#3,c#4] ~ c#4@2, c#4 ~ g#3@4 e4@6 ~@4, ~@10 c#4 ~@5", // C#5
  U: "d4@5 ~ d4@3 ~ [b3,d4] ~@3 d4 ~, b3 ~@5 b3 ~@3 c#4@3 ~@3", // Bm
  V: "e4 ~ b3@2 e4@2 b3@2 f#4@2 b4 ~ a4@2 [g#4,g#5] ~, ~@2 b4 ~ e5 ~ b4 ~ f#5 ~ b3@4 ~@2, ~@12 a5 ~@3", // G#
  W: "[b3,b5] ~@15, b4@3 ~@5", X: "~@2 c#4@2 ~@2 a4@3 ~ c#4@2 e4@2 c#4@2, ~@4 e4@5 ~@7",
  Y: "a4@2 c#4@2 ~@2 a4@3 ~ c#4@2 e4@2 c#4@2, ~ e4 ~@2", Z: "a4 c#4 e4 a4@2 c#4 e4 ~",
  AA: "d5@2 f#5@2 b4@2 c#5@3 ~ d5@5 ~, d4@3 ~@5, ~ f#4@2 ~@5, ~@4 b5 ~ c#6 ~@3 d6 ~@5",
  AB: "~@2 e4@2 g#4@2 e4@4 ~@2 e4@2 g#4 ~, b3@2 ~@3 b3@2 ~", AC: "~@2 e4@3 ~ g#4@4 b3@2 e4@2 g#4 ~, b3 ~@3",
  AD: "~@2 f#4@4 ~@4 f#4@3 ~@3, d4@2 ~ d4@3 ~@2",
  AE: "c#5 ~ e5 ~ a4@2 b4@4 c#5@4 ~@2, c#4@5 ~@3, ~ e4@4 ~@3, ~@4 a5 ~ b5 ~@3 c#6@2 ~@4", AF: "a3 c#4 e4 a4 ~ e4 a4 ~",
  AG: "~@2 c#4@2 e4@2 a4@3 ~ c#4@2 e4@2 a4 ~", AH: "a4@3 ~ e4@2 a4@2 ~@2 e4@2 a4@2 e4 ~",
  AI: "d5 ~ [f#4,f#5] ~ [b4,b5] ~ c#5@3 ~ [d5,d6]@4 ~@2, d4@6 c#6 ~@9", AJ: "~@2 e4@2 g#4@2 b4@2 ~@2 e4@2 g#4@2 b4 ~",
  AK: "~@2 e4@2 g#4@2 b4@2 ~@2 e4@2 g#4@2 e4 ~", AL: "~@3 a4 ~ d4 f#4 ~, ~@2 d4@5 ~@9, ~ f#4 ~@2",
  AM: "c#5 ~ e5 ~ [a4,a5] ~ b4@4 c#5@4 ~@2, c#4@3 ~@5, ~@2 e4@4 b5 ~@3 c#6 ~@5", // A
  AN: "[c#5@3 ~ b4 ~ c#5@3 ~ e5@3 ~ b4@6 a4@2 b4@3 ~ e5@3 ~ a4@6 ~@2 [d4,f#4] ~ f#4 ~ [e4,g#4] ~ [f#4,a4] ~ c#5 ~]/3", // D E F#m
  AO: "c#5@3 ~ b4@2 a4 ~@3 e5@5 ~, ~@8 b4@7 ~", AP: "[e3,a3] ~@5 [e3,a3] ~@3 [e3,a3] ~@5",
  AQ: "c#4 ~@5 [g#3,c#4] ~@3 c#4 ~@5", AR: "[a3,d4] ~@5 [a3,d4] ~@3 d4 ~@5",
  AS: "[a3,c#4] ~@5 a3@2 ~ a3 ~ a3 c#4@2 a3 ~, ~@6 c#4 ~ b3@4 b3 ~@3, ~@5 e4@3", // A
  AT: "[a3,c#4] ~@5 [a3,c#4] ~ a3@2 c#4@4 a3@2, ~@10 a3 ~@5", AU: "b3@6 [f#3,b3] ~@3 [b3,d4] ~ [f#3,b3] ~@3, f#3 ~@15",
  AV: "[b3,e4] ~@3 e4@2 [b3,e4] ~@2 [e3,b3] e4@2 b3@2 [e3,b3] ~, ~ b3@2 b4@4 ~, ~@12 e4 ~@3", // E5
  AW: "[e3,a3] ~@5 [e3,a3]@2 ~@2 [e3,a3] ~@5, ~@2 a3@4 e4@7 ~@3, ~@4 c#4@9 ~@3", // A5
  AX: "g#3@2 ~@2 c#4@2 [g#3,c#4] ~@3 [g#3,c#4]@2 ~@4, c#4 ~ g#3@4 e4@7 ~@3", // C#5
  AY: "d4@2 ~@2 d4@2 [a3,d4] ~@3 [a3,d4]@2 ~@4, a3 ~ a3@4 f#4@7 ~@3", // D5
  AZ: "[a3,c#4] ~@3 [c#4,e4] ~ a3 ~@2 a3 ~ a3 b3 ~ a3 ~, ~ a3@2 c#4@4 ~, ~ b3@2 ~, ~@10 e4@5 ~", // A C#m
  BA: "[a3,d4] ~@5 d4 ~ d4@2 [a3,d4] ~@5, ~@6 a3@4 f#4@5 ~", // D5
  BB: "[g#3,c#4] ~@3 c#4@2 c#4 ~@3 [g#3,c#4] ~ [c#4,e4] ~@3, e4 g#3@4 ~@3, ~@3 e4@3 ~@2", // C#5 C#m
  BC: "b3 ~ f#3@2 b3@2 [f#3,b3] ~@3 [f#3,b3] ~ [b3,d4] ~ d4@2, d4@2 ~ d4 ~ c#4@2 ~", // B5 Bm
  BD: "[e4@2 b3@2 e4@2 [e4,b4] ~ f#5 e3 e5 e3 [b3,e4,a5] ~ [e3,g#5] ~ [b3,e4,b5] ~@5 e3!2 [b3,e4] ~ e4 ~ e5 ~@3, b3 ~ b4 ~ e5 ~ b3@2 f#4@2 b3@2 a4@2 g#4@8 ~@10, ~@8 b4@3 ~@5]/2", // E5 Esus4 E E5
  BE: "~@3 a4 ~@2 a4@2, ~@2 c#4@5 ~@9, ~@2 e4@2 ~ e4@3", BF: "~@6 a4@3 ~@3 a4@4, ~@4 e4@4 ~@2 e4@5 ~",
  BG: "~ c#4 e4 a4 ~@2 a4 ~, ~@5 e4@2 ~",
  BH: "d5 ~ f#5 ~ b4@2 c#5@4 d5@4 ~@2, d4@3 ~@5, ~ f#4@2 ~@5, ~@4 b5 ~ c#6@2 ~@2 d6@2 ~@4",
  BI: "~@2 e4@2 g#4@2 e4@5 ~@5", BJ: "~ e4 ~ g#4@2 e4 g#4 e4, ~@2 b4@3 ~@3",
  BK: "d4 f#4 ~@3 f#4@2 ~, ~@2 d4@3 ~@3, ~@3 a4@4 ~",
  BL: "c#5 ~ e5 ~ a4@2 b4@4 c#5@5 ~, c#4@9 ~@7, ~@2 e4@7 ~@7, ~@4 a5 ~ b5 ~@3 c#6 ~@5",
  BM: "~@2 c#4@2 e4@2 a4@4 e4@2 a4@3 ~", BN: "~@4 e4@2 a4@4 e4@2 a4@3 ~", BO: "~@2 e4 a4 ~ e4 a4 ~, ~ c#4@2 ~@5",
  BP: "d5 ~ f#5 ~ b4@2 c#5@3 ~ d5@5 ~, d4@3 ~@5, ~ f#4@2 ~@5, ~@4 b5 ~ c#6 ~@3 d6 ~@5",
  BQ: "~@2 e4@2 ~@2 e4@3 ~ e4@2 g#4@2 ~@2, ~@2 b4@3 ~@3", BR: "~ e4 ~ e4 ~ e4 g#4 ~, ~@2 b4@3 ~@3",
  BS: "d4@2 ~@4 a4@7 ~@3, ~@2 f#4@11 ~@3, ~ d4@2 ~",
  BT: "c#5 ~ e5 ~ a4@2 b4@4 c#5@5 ~, c#4@3 ~@5, ~ e4@2 ~@5, ~@4 a5 ~ b5 ~@3 c#6 ~@5",
  BU: "~ b3 e4 b3 f#4 b3 a4 g#4, ~@2 e4 ~ b4 ~ e5 ~@3 b5 ~ e6 ~@3", BV: "e4@4 ~ e4 a4@2", BW: "~@2 e4 a4 ~ e4 a4@2",
  BX: "~ e4@2 a4 ~ e4 a4 ~, c#4 ~@3",
  BY: "d5@2 f#5@2 b4@2 c#5@3 ~ d5@5 ~, d4@7 ~@9, ~ f#4@2 ~@5, ~@4 b5 ~ c#6 ~@3 d6 ~@5",
  BZ: "~@2 e4@2 g#4 ~ b4@2 ~@2 e4@2 b4@3 ~", CA: "~@4 e4@2 b4@2 ~@2 g#4@2 e4@3 ~",
  CB: "~@2 f#4@2 ~@6 f#4@3 ~@3, ~@2 d4@3 ~@3, ~@3 a4@4 ~",
  CC: "c#5 ~ e5 ~ a4@2 b4@4 c#5@4 ~@2, c#4@7 ~@9, ~ e4@3 ~@4, ~@4 a5 ~ b5 ~@3 c#6 ~@5",
  CD: "~@2 c#4@2 e4@2 a4@3 ~ e4@2 a4@2 ~@2", CE: "~@2 e4@4 a4 ~@3 e4@2 a4@3 ~",
  CF: "~@2 c#4@2 e4@2 a4 ~@3 e4@2 a4@2 ~@2",
  CG: "d5 ~ f#5 ~ b4@2 c#5@4 d5@5 ~, d4@3 ~@5, ~ f#4@2 ~@5, ~@4 b5 ~ c#6 ~@3 d6 ~@5",
  CH: "~@2 e4@2 g#4 ~ b4 ~@3 e4@2 b4@3 ~", CI: "~@4 e4@2 b4 ~@3 e4@2 b4@2 ~@2",
  CJ: "~@6 d5@3 ~@7, d4 ~, ~ f#4@3 ~@4, ~@4 a4@5 ~@7",
  CK: "c#5 e5 a4 b4@2 c#5@2 ~, c#4@3 ~@5, ~ e4@2 ~@5, ~@4 a5 ~ b5 ~@3 c#6 ~@5",
  CL: "[c#5@3 ~ b4 ~ c#5@3 ~ e5@3 ~ b4@5 ~ [a4,b4] ~ b4@3 ~ e5@3 ~ a4@6 ~@2 [d4,f#4] ~ f#4@2 [e4,g#4] ~ [f#4,a4] ~ [a4,c#5] ~, ~@40 d4 ~@7]/3", // Asus2 D E F#m A
  CM: "[a4,c#5]@3 ~ b4@2 a4 ~ b4@2 e5@5 ~", CN: "[a4,c#5]@7 ~@9, a5 ~@15",
})).s("gm_marimba").gain(0.28).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@3 B A@3 B A@3 B A@3 B C D@16 A@3 E A@3 B A@3 B A@3 B A@3 B C D@20 F D@12 A@3 E G ~
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@5 x ~@2 x ~@6", C: "x ~@5 x!2 ~@8", D: "x ~@2 x!2 ~@3", E: "x ~@2 x ~ x ~@2",
  F: "x ~@2 x!2 ~ x ~", G: "x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@9 A@16 B C@15 D ~@4 A@16 B C@33 A@4 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~ x", D: "~@4 x ~@5 x ~ x ~@2 x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@25 [~@7 x] ~@36 [~@7 x] ~@16 [~@6 x!2] ~@22>").gain(0.45)
// … 21 more lines

More by Roy Black