Strudelify
Frag' Maria cover art

1989 · Rosenzeit

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, A@4 for four bars: 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 L N O P Q R@2 S T U V W X R@3 Y V@2 Z AA J AB AC AD J N L AE L J AF AG J N AH AI D N AF
  AJ AK R@2 S Y U V W AL R@2 AM T U V Z AN AO R@2 AP AQ U@2 AR AS AP R AT AU AV U AR AW B AX AY AD AZ ~
>`.pickRestart({
  A: "a1@2 ~@4 a1@3 ~ e1@5 ~", B: "a1@3 ~@3 a1@3 ~ a1@5 ~", 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@4 ~@2 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: "c#2@5 ~ c#2@3 ~ c#2@5 ~", O: "b1@4 ~@2 b1@3 ~ b1@6",
  P: "e1@4 ~@2 e1@2 ~ e1@4 ~ e1@2", Q: "e1@5 ~@3", R: "a1@5 ~ a1@7 ~@3", S: "a1@5 ~ a1@9 ~",
  T: "b1@5 ~ b1@4 a1@2 g#1@2 d1@2", U: "e1@4 ~@2 e1@7 ~@3", V: "e1@2 ~ e1@4 ~", W: "d1@4 ~@2 d1@9 ~",
  X: "a1@6 f#1@2 e1@5 ~ e1@2", Y: "b1@2 ~ b1@2 a1 f#1 d1", Z: "d1@4 ~@2 d1@7 ~@3", AA: "a1@2 ~ a1@2 f#1 e1@2",
  AB: "g#1@5 ~ g#1@3 ~ g#1@5 ~", AC: "f#1@5 ~ f#1@4 g#1@2 a1@4", AD: "d1@4 ~@2 d1@4 e1@5 ~",
  AE: "a1@5 ~ a1@2 ~ a1@2 a1 b1@2 c#2@2", AF: "b1@4 ~@2 b1@3 ~ b1@5 ~", AG: "e1@4 ~@2 e1@2 ~ e1 ~ e1 e2@2 e1@2",
  AH: "d2@5 ~ d2@3 ~ d2@5 ~", AI: "a1@5 ~ a1@2 ~ a1@3 b1@2 c#2@2", AJ: "e1@4 ~@2 e1@2 ~ e1@3 ~@2 e2@2", AK: "e1 ~",
  AL: "a1@6 f#1@2 e1 ~ e1@3 ~ e1@2", AM: "a1@2 ~ a1@4 ~", AN: "a1@5 ~ a1@7 ~ f#1@2",
  AO: "e1 ~ e1@2 f#1@2 e1@2 b1@2 e1@2 f#1@2 e1@2", AP: "a1@2 ~ a1@3 ~@2", AQ: "b1@3 ~@3 b1@4 a1@2 g#1@2 d1@2",
  AR: "d1 ~@2 d1@3 ~@2", AS: "a1@3 ~@3 a1@6 e1@2 f#1@2", AT: "a1@3 ~@3 a1@7 ~@3", AU: "b1 ~@2 b1@2 a1 g#1 d1",
  AV: "e1@2 ~ e1@2 ~@3", AW: "a1 ~@2 a1@2 f#1 e1@2", AX: "g#1@4 ~@2 g#1@3 ~ g#1@5 ~", AY: "f#1@2 ~ f#1@2 g#1 a1@2",
  AZ: "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 E I@3 J K@3 L@3 M N@2 O@2 P@3 M Q R S T@2 U V@2 H E W@4 X@2 Y E I@3 E Z@3 L@3 M N@2 AA@2 P@3
  M AB@2 AC@2 AD@4 M AE@2 AF@5 M AG@2 S AH AI AJ AK@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]@15 ~", F: "[[d4,f#4] [c#4,e4] [d4,f#4] [c#4,e4], a4]/4", G: "[[d4,f#4]@16 [e4,g#4]@15 ~, b3@15 ~]/2",
  H: "[c#4,e4,a4]@15 ~", I: "[[d4,f#4] [c#4,e4] [d4,f#4], a4@47 ~]/3", J: "[c#4,e4,g#4]",
  K: "[[d4,f#4]@16 [e4,g#4]@21 ~@3 [c#5,e5]@4 [b4,d5]@4, b3@3 ~]/3", // D E C#m Bm
  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]@6 [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 ~ [c#4,e4]@16 [d4,f#4]@16 [c#4,e4]@16, a3@63 ~]/4", X: "[[d4,f#4] g#3, b3@15 ~, ~@8 e4@7 ~]/2",
  Y: "[a3,c#4,e4]@15 ~", Z: "[[d4,f#4]@4 [e4,g#4]@5 ~ [c#5,e5] [b4,d5], b3@3 ~]/3",
  AA: "[[d4,f#4]@16 [c#4,e4]@15 ~, a4@15 ~]/2", AB: "[g#4@12 d5@3 ~ [a4,c#5]@6 [g#4,b4]@9 ~, e4@31 ~, b4 ~]/2",
  AC: "[[d4,f#4]@7 ~ [c#4,e4]@8, a4@31 ~]/2", // D C#m
  AD: "[[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
  AE: "[g#4@11 ~ [b4,d5]@4 [a4,c#5]@6 [g#4,b4]@9 ~, e4@31 ~, b4@9 ~@23]/2", // Bm A G#m
  AF: "[[d4,f#4]@16 c#4@16 [a4,c#5]@11 ~ [c#5,e5]@3 ~ [b4,d5]@6 [a4,c#5]@25 ~, a4@3 ~@5, ~@8 e4@31 ~]/5", // D A C#m Bm A
  AG: "[[e4,g#4,b4]@11 ~ [b4,d5]@3 ~ [a4,c#5]@6 [g#4,b4]@9 ~, ~@12 e4@19 ~]/2", AH: "[c#4,e4,a4]",
  AI: "[c#4,e4,a4] [c#4,e4,a4]@15", AJ: "g#4, b3@7 ~, e4 ~@15", AK: "[[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 E L ~@2 M N ~@2 O ~@3 P@2 ~@3 Q J ~@2
  R@2 ~@2 S ~@3 H@2 ~@2 T@2 ~@3 D ~
>`.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@3 ~",
  K: "~@3 b4", L: "e5@7 ~@9", M: "~@6 a4 b4", N: "e5", O: "~ g#4 a4 e5@5", P: "[~@6 a4@2 b4@2 e5@11 ~@11]/2",
  Q: "~ b4@2 ~, ~@2 b3@11 ~@3", R: "[~@5 a4 b4 e5@9]/2", S: "~ g#4 a4 e5@5, ~@6 a4 ~@9",
  T: "[~@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 E L G H I J M@2 N@3 O ~@16 P E F Q R I J S@2 E F Q H I J T@2 P E F G H I J M@2 E
  L G H I J M@2 U@3 O V ~
>`.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: "d5@3 c#5@5",
  M: "[f#4 ~ f#4@3 ~ f#4@4 e4@3 ~ e4@16 ~@2]/2",
  N: "[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",
  O: "c#5@4 b4@2 a4@2 b4@2 e5@5 ~", P: "~@2 e5 d5", Q: "a4@4 g#4 ~ a4@6 e4@3 ~", R: "d4@7 ~",
  S: "[f#4@3 ~ f#4 ~ f#4@4 e4@3 ~ e4@17 ~]/2", T: "[f#4 ~ f#4@2 ~@2 f#4@4 e4@3 ~ e4@11 ~@7]/2",
  U: "[c#5@4 b4@2 c#5@3 ~ e5@4 b4@5 ~ a4@2 b4@4 e5@4 a4@8 f#4@2 f#4@2 g#4@2 a4@3 ~]/3", V: "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@2 BR BS BT BU BV BW AA BX BY BZ CA CB CC CD
  BP CE CF CG AM CH@3 CI CJ ~
>`.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: "d4@2 ~@4 a4@7 ~@3, ~@2 f#4@11 ~@3, ~ d4@2 ~",
  BS: "c#5 ~ e5 ~ a4@2 b4@4 c#5@5 ~, c#4@3 ~@5, ~ e4@2 ~@5, ~@4 a5 ~ b5 ~@3 c#6 ~@5",
  BT: "~ b3 e4 b3 f#4 b3 a4 g#4, ~@2 e4 ~ b4 ~ e5 ~@3 b5 ~ e6 ~@3", BU: "e4@4 ~ e4 a4@2", BV: "~@2 e4 a4 ~ e4 a4@2",
  BW: "~ e4@2 a4 ~ e4 a4 ~, c#4 ~@3", BX: "~@2 e4@2 g#4 ~ b4@2 ~@2 e4@2 b4@3 ~", BY: "~@4 e4@2 b4@2 ~@2 g#4@2 e4@3 ~",
  BZ: "~@2 f#4@2 ~@6 f#4@3 ~@3, ~@2 d4@3 ~@3, ~@3 a4@4 ~",
  CA: "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",
  CB: "~@2 c#4@2 e4@2 a4@3 ~ e4@2 a4@2 ~@2", CC: "~@2 e4@4 a4 ~@3 e4@2 a4@3 ~",
  CD: "~@2 c#4@2 e4@2 a4 ~@3 e4@2 a4@2 ~@2", CE: "~@2 e4@2 g#4 ~ b4 ~@3 e4@2 b4@3 ~",
  CF: "~@4 e4@2 b4 ~@3 e4@2 b4@2 ~@2", CG: "~@6 d5@3 ~@7, d4 ~, ~ f#4@3 ~@4, ~@4 a4@5 ~@7",
  CH: "[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
  CI: "[a4,c#5]@3 ~ b4@2 a4 ~ b4@2 e5@5 ~", CJ: "[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)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x!8]!16 x [x!8]!36 x [x!8]!37 x ~>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@25 [~@3 x] ~@36 [~@3 x] ~@16 [~ x ~ x!2 ~@3] ~@22>").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@26 A ~@36 A ~@16 A ~@19 A ~>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~@26 A@16 B ~@20 A@15 C D A@16 B ~@5>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "x", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", D: "x ~ x!6",
})).gain(0.25)

stack(
  bass, string_ensemble_1, acoustic_guitar_steel, flute, electric_guitar_clean, marimba, kick, snare, low_tom, hihat,
  high_tom, crash, shaker
// … 1 more lines

More by Roy Black