Strudelify

The Impossible Dream

Andy Williams

KeyB♭ majorTempo96 bpm
0:00/0:00
// The Impossible Dream — Andy Williams
// 96 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · acoustic bass · "bass"
const bass = note(`<
  ~@2 A B C B D E F G H I J K L M F G N I O P Q R S I R T U B V B W I X I K Y Z F G N I AA AB AC AD AE F G AF I J K AG@2
  F G AH I AI AJ C R AK I R T AL B AM B AN I AO I K AP AQ F G H I AR AS B T K AT AU AV ~
>`.pickRestart({
  A: "bb1@5 ~ bb1@4 ~ bb1 g2 bb1 f2 ~", B: "ab2@15 eb3", C: "bb1@3 f2 d3 bb1 f2 bb2@9",
  D: "bb1@3 bb2 ~ bb2 a2 f2 bb1@3 bb1 bb2@2 bb1@2", E: "bb1 ~@2 f2 d3 f2 bb1 bb2 bb1@6 f2!2", F: "eb2!2",
  G: "eb2 ~@7 eb2 ~@7", H: "d2@8 d2@6 a2!2", I: "eb2@15 bb2", J: "c2@3 c3@5", K: "f2@15 c3", L: "bb1!2",
  M: "bb1 ~@5 f2!2 bb1@3 bb1 bb2@2 bb1@2", N: "d2@6 a2!2 d2@2 ~ d2 a2@4", O: "c2@5 ~ c2@4 ~ c2 a2 c2 g2 ~", P: "f2 c2",
  Q: "bb1@6 bb2@9 f2", R: "g2@15 d3", S: "d2@5 a2@3 d3@4 d2@3 ~", T: "gb2@15 db3", U: "bb1@5 f2@3 bb2@4 bb1@3 ~",
  V: "c3@3 c2 ~@2 c2@7 ~ g2!2", W: "d3@3 d2 ~@2 d2@7 ~ a2!2", X: "a1@6 a2@9 e2", Y: "bb1@6 f2!2 bb1@6 f2!2",
  Z: "bb1@8 bb1@3 f2 d3 f2 bb1 bb2", AA: "bb1@2 ~ bb1 f2@4 f2@8", AB: "bb1@3 bb2@5", AC: "c2 f2",
  AD: "bb1@3 bb2 ~ bb2 a2 f2 bb1@2 ~ bb1@4 f1", AE: "~@5 d2 f2 d2 bb2 ~@2 bb2@5", AF: "d2@8 d2@3 a2 f3 a2 d2 d3",
  AG: "bb1@3 f2 d3 f2 bb1 bb2 bb2@3 f2 bb1 c2 d2@2", AH: "d2!2", AI: "c2@15 g2", AJ: "f2@8 c2@3 g2 eb3 g2 c2 c3",
  AK: "d2@6 a2@7 ~ a2!2", AL: "bb1@6 bb1@4 ~ bb1 g2 bb1 f2@2", AM: "c2@6 c2@4 ~ c2 a2 c2 g2@2", AN: "d2@6 d3@9 a2",
  AO: "a1@6 a1@4 ~ a1 f2 a1 e2@2", AP: "bb1@3 f2 d3 f2 bb1 bb2 bb1@8", AQ: "bb1 ~@2 f2 d3 f2 bb1 bb2 bb1@8",
  AR: "bb1 f2", AS: "bb1@6 ~ bb1 bb2!2 ~ f2 eb2 d2 ~ bb1", AT: "bb1@6 bb2@7 bb1 f2!2", AU: "bb1@7 f2", AV: "bb1@7 ~",
})).s("gm_acoustic_bass").gain(0.4)

// chords · epiano1 · "rhodes piano"
const epiano1 = note(`<
  ~@2 A B C D E F G H I J K L M N G O P J K Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK J AL C AM AN AO AP AQ
  AR J AS AT F AU AV AW AX AY AS AZ BA S BB BC BD BE R BF BG AA BH BI BJ BK BL BM BN BO BP P BQ BR C BS BT BU BV BW@2 ~
>`.pickRestart({
  A: "[f3,bb3,d4]@9 ~ [f3,bb3,d4]@6", B: "[ab3,c4,eb4,ab4]@15 ~", C: "[bb3,d4,f4]@15 ~",
  D: "[eb3,ab3,c4]@9 ~ [eb3,ab3,c4]@6", E: "[a3,d4,f4] [bb3,d4,f4], c4 ~@15",
  F: "f4 ~@5 d4@2 [bb3,d4]@8, d3 ~, ~ f3@3 ~@4, ~@4 [bb3,c4]@4 f4 ~@7", // Bb Bbsus2
  G: "~@3 eb4 [g3,bb3,eb4]@4, bb4 ~, ~ g4@3 ~@4, ~ f4 ~@2", // Eb
  H: "g3 ~@5 g4@2 g3 ~@5 g4@2, bb4!2, ~ bb3@3 ~ bb3@3, ~ [eb4,f4] ~ [eb4,f4]", I: "[f3,d4,a4]@7 ~ [f3,c4,e4,a4]@7 ~",
  J: "[g3,c4,eb4,bb4]@15 ~", K: "[g3,c4,eb4]@9 ~ [g3,c4,eb4]@6", L: "[f4,a4]@9 ~ [c4,eb4,f4,a4]@6, [c4,eb4] ~@15",
  M: "[d4,c5] [bb3,d4], [f4,a4] ~@7 f4 ~@7", N: "[a4,c5]@8 f4 ~@5 d4@2, [d4,f4] ~@7 d3@8, ~@5 f3@3, ~@3 [bb3,c4]",
  O: "g3 ~@5 g4@2 ~@6 g4@2, bb4@4 ~ eb5@3, ~ bb3@3 [g3,bb3,eb4]@4, ~ [eb4,f4] ~ bb4", // Eb Ebsus2
  P: "[a3,d4,f4]@7 ~ [c4,d4,f4,a4]@7 ~", Q: "[c4,eb4,f4,a4]@7 ~ [bb3,c4,eb4,g4]@7 ~", R: "[bb3,d4,f4] ~",
  S: "~@5 d4@3, [d3,g3,bb3], ~ g4", T: "d4 ~@9 a4@6, [a3,f4], ~ d5",
  U: "[c4,eb4,g4,bb4]@7 ~ [c4,eb4,g4,bb4] ~ [c4,eb4,g4,bb4] ~@5", V: "bb3@4 a3 bb3@3, [d3,g3,d4]",
  W: "[gb4,db5], bb3 ~@15", X: "[d4,f4,bb4], bb3 ~@15", Y: "~@5 eb4@3, [eb3,ab3,c4], ~ ab4",
  Z: "[c4,eb4] ~@9 g4@6, g3, ~ c5", AA: "c4 ~@9 eb4@6, [eb3,ab3], ~ ab4", AB: "[gb3,d4,a4]", AC: "[g3,c4,eb4,bb4]",
  AD: "g3 ~@13 b4@2, [e3,a3,db4], ~ e4, ~@5 f4@3, ~@3 a4", AE: "~@5 bb4@3, [bb3,eb4,gb4], ~ eb5",
  AF: "~@7 g5, [c4,f4,a4], ~ c5, ~@5 d5@3, ~@3 f5", AG: "[d4,f4,a4,c5]@7 ~ [bb3,d4,f4,bb4]@7 ~",
  AH: "[a3,c4,d4,f4]@7 ~ [bb3,d4,f4,bb4]@7 ~", AI: "[bb3,d4,f4,g4]@7 ~ [bb3,c4,eb4,g4]@7 ~",
  AJ: "[g3,bb3,d4,f4]@7 ~ [bb3,c4,eb4,g4]@7 ~", AK: "[a3,d4,f4]@7 ~ [f3,a3,c4,d4]@7 ~",
  AL: "[bb3,d4,f4]@7 ~ [a3,eb4,g4,d5]@7 ~", AM: "[bb3,c4,eb4,g4]@7 ~ [c4,eb4,f4,a4]@7 ~",
  AN: "~@3 d4 [bb3,d4,f4]@4, [d3,f4] ~, ~ f3@3 ~@4, ~ [bb3,c4] ~@2", // Bb Dm Bbsus2
  AO: "f4 ~@5 d4@2 [f3,bb3,d4]@8, d3 ~, ~ f3@3 ~@4, ~ [bb3,c4] ~@2", // Bb Bbsus2
  AP: "[f4,g4]@4 ~@3 g4, [bb3,d4] ~@7 [g3,bb4]@8, ~@5 bb3@3, ~@3 [eb4,f4]", // Fsus2 Bb Gm Ebsus2
  AQ: "[g3,bb4] ~@5 g4@2 ~@6 g4@2, ~ bb3@3 [g3,bb3,eb4]@4, ~@2 [eb4,f4]@2 ~ eb5@3, ~@3 bb4", // Gm Eb Ebsus2
  AR: "[f3,d4,a4]@7 ~ [f3,c4,d4,a4]@7 ~", AS: "[eb3,c4,g4]@15 ~", AT: "[c4,eb4,f4,a4]@9 ~ [c4,eb4,f4,a4]@6",
  AU: "~@3 bb3 ~@3 bb3, f4!2, ~ d4@3 ~ d4@3, ~ c4 ~ c4",
  AV: "~@3 g4 [bb3,eb4,g4]@4, [g3,bb4] ~, ~ bb3@3 ~@4, ~ [eb4,f4] ~@2", // Eb Gm Ebsus2
  AW: "~@3 g4 [g3,bb3,eb4]@4, [g3,bb3,eb4] ~, ~ eb5@3 ~@4, ~ bb4 ~@2", AX: "[f3,d4,a4]@7 ~ [f3,a3,c4,d4]@7 ~",
  AY: "[g3,bb3,c4,eb4]@15 ~", AZ: "[c4,eb4,f4,a4]@7 ~ [eb3,g3,bb3,d4]@7 ~",
  BA: "[bb3,d4,f4]@7 ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~@5", BB: "d4 ~@13 e5@2, [a3,f4], ~ a4, ~@5 b4@3, ~@3 d5",
  BC: "[bb3,c4,eb4,g4] ~", BD: "[g3,bb3,d4] ~", BE: "[bb3,db4,gb4]@7 ~ [bb3,db4,gb4] ~ [bb3,db4,gb4] ~@5",
  BF: "[ab3,c4,eb4]@7 ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~@5", BG: "eb4@4 d4 eb4@3, [g3,c4,g4]", BH: "[a3,d4,gb4] ~",
  BI: "[bb3,c4,eb4,g4]@4 ~@3 eb4, ~ eb5, ~@5 bb4@3, ~@3 g4", BJ: "[db4,e4,g4,a4] ~", BK: "[bb3,eb4,gb4] ~",
  BL: "~@5 c5@3, [c4,f4,a4], ~ f5", BM: "[a3,c4,d4,f4]@7 ~ [bb3,d4,f4]@7 ~", BN: "[d4,f4,a4,c5]@7 ~ [bb3,d4,f4]@7 ~",
  BO: "[bb3,d4,f4,g4]@7 ~ [g3,bb3,c4,eb4]@7 ~", BP: "[g3,d4,f4,bb4]@7 ~ [g3,bb3,c4,eb4]@7 ~",
  BQ: "[bb3,c4,eb4,g4]@9 ~ [bb3,c4,eb4,g4]@6", BR: "[bb3,d4,f4]@7 ~ [a3,eb4,g4,c5]@7 ~",
  BS: "c4@4 bb3 c4@3, [eb3,ab3,eb4]", BT: "[gb3,bb3,db4] ~", BU: "~@5 c5@3, [c4,eb4,f4,a4], ~ f5",
  BV: "~@4 [d4,f4,bb4]@3 ~ [d4,f4,bb4] ~ [d4,f4,bb4]@6", // Bb
  BW: "[[d4,f4] ~@15 bb4@15 ~, bb3@11 ~ bb3@19 ~, ~@13 c4@18 ~, ~@14 d4@17 ~, ~@15 f4@16 ~]/2", // Dm
})).s("gm_epiano1").gain(0.1)

// chords · string ensemble 2 · "strings"
const string_ensemble_2 = note(`<
  ~@2 A B A B C D E F G H I J K L E M G H I N A O P Q R S T B U V W H X Y Z C AA AB F G AC AD A AE AF AG AH AI AJ Q AK
  AL AM AN AO AP AJ Q AK AQ A O P Q AR S T B AS AT W H X AU Z C AA AB F G AC AD A B AV AW AX AY@2 ~
>`.pickRestart({
  A: "[bb3,d4,f4]", B: "[ab3,c4,eb4]", C: "[d4,f4] [bb3,d4,f4], c4 ~@15", D: "[bb2,d3,f3] [bb3,d4,f4]",
  E: "[g4,bb4] [eb3,g3,bb3], f4 ~@15", F: "[eb3,g3,bb3] ~@7 [eb3,g3,bb3] ~@7", G: "[d4,f4,a4]!2", H: "[eb3,g3,bb3]",
  I: "[c4,eb4,g4]", J: "[f3,a3], c4 ~@15", K: "[bb2,d3]!2, f3 ~@7 f3 ~@7", L: "[c4,d4,f4] [bb3,d4,f4]",
  M: "[f4,g4,bb4] [eb4,g4,bb4]", N: "[f3,a3] [eb4,g4], c4 ~@7 c4 ~@7", O: "[bb3,d4] ~@15, g3", P: "[d3,f4,a4,d5]",
  Q: "[eb4,g4,bb4]", R: "[g2,bb3,d4], g4 ~@15", S: "[gb3,db4], bb3 ~@15", T: "[d4,f4], bb3 ~@15",
  U: "[c3,g4,c5], eb4 ~@15", V: "[ab2,eb3], c3 ~@15", W: "[d4,gb4,a4]", X: "[a3,db4,e4]", Y: "[eb3,gb4,bb4,eb5]",
  Z: "[f3,a3,c4]", AA: "[d4,f4] ~@7 [d4,f4] ~@7, c4 bb3", AB: "[eb3,g3]!2, bb3 ~@7 bb3 ~@7", AC: "c3",
  AD: "[bb3,d4,f4] [f3,a3,c4]", AE: "[c4,eb4,g4] [f3,a3,c4]", AF: "[bb3,d4,f4]!2", AG: "[bb3,d4,f4] ~@7 [bb4,d5,f5]@8",
  AH: "[g5,bb5] [eb4,g4,bb4], f5 ~@15", AI: "[f5,g5,bb5] [eb5,g5,bb5]", AJ: "[d5,f5,a5]!2", AK: "[c5,eb5,g5]",
  AL: "[f4,a4], c5 ~@15", AM: "[bb3,d4]!2, f4 ~@7 f4 ~@7", AN: "[bb3,d4,f4] ~@7 [bb3,d4,f4] ~@7",
  AO: "[f5,g5,bb5] [eb4,g4,bb4]", AP: "[eb4,g4,bb4] ~@7 [eb5,g5,bb5]@8", AQ: "[f4,a4] [eb5,g5], c5 ~@7 c5 ~@7",
  AR: "[g3,bb3,d4]", AS: "[c4,eb4] ~@15, g4", AT: "[c4,eb4] ~@15, ab3", AU: "[eb4,gb4,bb4]", AV: "[gb2,bb2,db3]",
  AW: "[f4,a4,c5]", AX: "[bb2,d3,f3]", AY: "[[d4,d5,bb5]@31 ~, [bb2,f3] ~@31]/2",
})).s("gm_string_ensemble_2").gain(0.14)

// other · string ensemble 1 · "strings melody"
const string_ensemble_1 = note(`<
  ~@13 A B C D@2 E F G H ~@23 I J K L M N O P Q R S@3 T U V W ~@15 X Y Z AA AB AC AD AE ~@7
>`.pickRestart({
  A: "~ a5@12 ~ d5@2", B: "~ f6@9 d6 ~ f6@2 eb6 d6, ~@11 eb6@2 ~@3", C: "f6@13 ~ f6@2",
  D: "[g6@9 ~@2 f6 g6@2 f6 ~ g6@12 ~ g6@3, ~@10 eb6@2 ~@3 eb6@2 ~@15]/2", E: "a6@8 ~@2 d6 ~ f6 ~ g6 a6, ~@11 eb6@2 ~@3",
  F: "~ eb6@6 f6, ~ bb6@2 ~@13", G: "~ g6@8 ~ c6 d6 ~ eb6 f6 g6", H: "~ a6@8 ~@7", I: "~@13 d6@3",
  J: "f6@9 ~ d6 eb6 ~@2 eb6 d6, ~@13 f6@2 ~", K: "~ [d6,f6]@12 ~ f6@2, ~ bb5@7 ~@8",
  L: "~ [eb6,g6]@9 ~ f6 ~ f6 eb6 ~, ~@5 eb6 g6 ~", M: "g6@13 g6@3, eb6@5 ~@3", N: "a6@9 ~ d6 eb6@2 f6 g6 a6",
  O: "~ bb6@2 eb6@11 f6 ~", P: "f6 g6@8 ~ c6 ~ d6 ~ f6 g6, ~@13 eb6@2 ~", Q: "~ a6@13 d6@2",
  R: "f6@9 ~ d6 eb6@2 f6@2 eb6", S: "[d6 f6@12 ~@2 f6@2 g6@9 ~ eb6 f6 g6 f6 ~ g6@12 ~ g6@3, ~@17 f6 ~@13 eb6@2 ~@15]/3",
  T: "~ a6@7 ~@2 d6 ~ f6 ~ g6 a6, ~@11 eb6@2 ~@3", U: "~ bb6@2 eb6@11 f6@2", V: "~ g6@8 ~ c6 d6 ~ eb6 f6 ~",
  W: "g6 a6@9 ~@2 bb6@2 c7 bb6", X: "~ f4@9 d4 eb4@2 ~ eb4 d4, ~@13 f4@2 ~", Y: "f4@13 ~ f4!2",
  Z: "g4@10 ~ f4 g4@2 f4 eb4, ~@5 eb4 ~@2", AA: "g4@7 g4", AB: "a4@8 ~@2 d4 [db4,eb4] ~ [eb4,f4] g4 a4",
  AC: "~ bb4@2 eb4@9 ~@2 bb4@2", AD: "~ d5@8 ~ bb4 c5 ~@2 c5 ~, ~@13 d5@2 ~", AE: "bb4 bb4@15",
})).s("gm_string_ensemble_1").gain(0.5)

// chords · vibraphone · "vibes"
const vibraphone = note(`<
  ~@2 A B C D E@2 F@2 G H I J K@2 L@2 M N O P Q ~ R S T U V ~@7 W X@2 Y@2 Z AA AB AC ~ AD AE AF AG AH AI AJ AK AL@2 AM
  AN AO AP AQ AR AS@2 AT AU ~@10 AV AW@2 AX@2 AY AZ ~ BA BB BC BD BE@3 ~
>`.pickRestart({
  A: "~@3 [d4,f4]@5", B: "~ [c4,eb4]@3", C: "~ [d5,f5]@3", D: "~@2 [c5,eb5]@5 ~",
  E: "[~@6 d4@2 ~ f4@13 d4@2 ~ f4@6 ~, ~ bb2 ~@6]/2", F: "[~@3 g4 bb4@6 eb4 g4 bb4@4, eb3@25 ~@7]/2", G: "a4@13 ~@3",
  H: "~@8 g5@5 ~@3, ~@2 d5@11 ~@3, ~@4 bb5@9 ~@3", I: "~ eb4@3 bb3@4", J: "a3@3 g3 f3@3 ~",
  K: "[~@6 d4@3 f4@9 ~@4 d4@3 f4@7, ~@2 bb3@12 ~@5 bb3@12 ~]/2",
  L: "[~@9 g4@10 ~@5 bb4@4 ~@4, ~@3 bb3@10 ~@9 g4@6 ~@4, ~@6 eb4@12 ~ eb4@9 ~@4]/2", M: "~@2 [a4,d5]@5 ~",
  N: "~ [g4,bb4]@3", O: "~@4 [eb4,g4]@9 ~@3", P: "[a3,c4,f4] ~", Q: "[d5,f5]@13 ~@3",
  R: "~@2 f5 ~, ~@2 a4@11 ~@3, ~@5 d5@8 ~@3", S: "~@2 [g5,bb5]@11 ~@3", T: "g4@15 ~", U: "~ gb4@15", V: "f4@5 ~@3",
  W: "~@2 f4 ~, ~ f3@5 ~@2, ~ a3@2 ~, ~@6 c4@7 ~@3",
  X: "[~@4 f5@5 ~@3 bb4@4, ~@2 d5@7 ~@2 f4@5, ~@4 f4@8 ~@8 d4@9 ~@3]/2",
  Y: "[~@4 [g4,bb4]@2 ~@2 [g5,bb5]@10 ~@6 bb4@4 g4@3 ~, ~@4 eb4@4 ~@14 g4@5 ~@5]/2", Z: "~ d5 ~@2, ~ a4@3 ~@4",
  AA: "~ bb5@2 ~, ~@2 [d5,g5]@11 ~@3", AB: "~@6 d5@5 ~@2 f4@3, ~@2 f4@9 ~@5, ~@2 bb4@3 ~@3", AC: "~ bb3@15",
  AD: "~@6 f3@2 ~ bb3@6 ~, ~ bb2@3 ~@4, ~@5 d3@4 ~@7", AE: "~@5 f4@4 bb4@6 ~, bb3@11 ~@5, ~ d4@4 ~@3", AF: "[g4,bb4]",
  AG: "~@2 eb3@4 g3@2 ~ bb3@6 ~", AH: "~ d5@2 ~, ~ a4@5 ~@2", AI: "~ g4 bb4@6, d4@5 ~@3", AJ: "~@3 g4@9 ~@4, eb4@3 ~",
  AK: "~@4 a4@2 c5@2 f5@5 ~@3, ~ f4@3 ~@4", AL: "[~@6 f5@2 ~ bb5@13 f5@2 bb5@4 ~ f5@3, ~ bb4@2 ~@5]/2",
  AM: "~@2 bb5@13 ~, ~ eb5@14 ~", AN: "~ bb4@2 ~, ~@2 eb4@11 ~@3", AO: "~@8 d5@5 ~@3, ~@6 a4@7 ~@3",
  AP: "~ bb4 d5@2 ~@4, g4@7 ~@9", AQ: "~ eb5@7 d5@4 c5@3 ~", AR: "f4@4 eb4@3 ~ d4@3 ~ c4@3 ~",
  AS: "[~@11 g4 g4@4, bb3@25 ~@7]/2", AT: "~@3 a4 a4@4", AU: "bb4", AV: "~@4 c4 ~ f4 ~ c5@8, ~@3 f3@9 ~@4",
  AW: "[~@4 d5@3 f5@13 d4@4 f4@8]/2", AX: "[~@6 g5@2 ~ bb5@10 ~@3 g4@2 bb4@8, ~@4 g4@7 ~@9 g3@4 ~@8]/2",
  AY: "~@3 a4 d5@4", AZ: "~@2 g4@2 bb4@2 d5@2 d5 eb5@7", BA: "~@5 f4@3 bb4@4 f4@3 ~, ~ d4@5 ~@2",
  BB: "~@3 eb4 ab4@2 eb4@2, ~ c4@6 ~", BC: "~@5 bb4@3 db5@4 bb4@3 ~, ~@2 gb4@13 ~", BD: "a4, c5@13 ~@3, f4@7 ~@9",
  BE: "[~@8 f3 ~@2 bb3@2 d4@2 ~ f4@2 ~ bb4@2 d5@2 ~@9 bb5@16, ~@2 bb2@27 ~@19, ~@5 d3@24 ~@19, ~@4 f5@3 ~]/3",
})).s("gm_vibraphone").gain(0.24)

// other · piano · "Combined Tracks"
const piano = note(`<
  ~@5 A B C D E F G H I J K L@2 M N O P Q R@2 S T U V@2 W X@2 Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU@3 AV AW AX AY AZ BA@3 BB@2 BC@2 BD BE BF@3 BG BH BI BJ BK BL BM BN BO BP ~@7
>`.pickRestart({
  A: "~@7 d3", B: "~ f3@9 d3 ~ f3@2 eb3 d3, ~@11 eb3@2 ~@3", C: "~ f3@12 ~ f3@2",
  D: "g3@9 ~@2 f3 ~@2 f3 eb3, ~@10 eb3@2 ~ g3@2 ~", E: "~ g3@12 g3@3", F: "a3@7 ~@3 d3 eb3 f3 ~ g3 a3",
  G: "bb3@2 eb3@11 ~ f3@2", H: "g3@8 ~ c3 ~ d3 eb3 ~ f3 g3", I: "~ [a3,a5]@12 ~ d5@2",
  J: "~ f6@9 d6 ~ f6@2 eb6 d6, ~@11 eb6@2 ~@3", K: "f6@13 ~ f6@2",
  L: "[g6@9 ~@2 f6 g6@2 f6 ~ g6@12 ~ g6@3, ~@10 eb6@2 ~@3 eb6@2 ~@15]/2", M: "a6@8 ~@2 d6 ~ f6 ~ g6 a6, ~@11 eb6@2 ~@3",
  N: "~ eb6@6 f6, ~ bb6@2 ~@13", O: "~ g6@8 ~ c6 d6 ~ eb6 f6 g6", P: "~ a6@8 ~@3 bb3 ~ c4 bb3",
  Q: "~ d4@11 bb3 c4 bb3@2", R: "[~ d4@9 bb3 ~ bb3@2 c4 bb3@2 d4@2 a3@7 bb3@2 c4@2 bb3 a3]/2",
  S: "~ c4@8 ~ g3 a3 bb3@2 a3 g3", T: "bb3@9 ~ g3 ~ bb3@2 ~ a3, ~@11 a3@2 ~ g3@2", U: "~ bb3@7 ~ bb3@2 c4 d4 c4 bb3 ~",
  V: "[d4@2 bb3 c4 ~ d4 ~ c4 d4 ~@3 d4 ~ eb4 ~ c4@12 ~ c4 ~ d4, ~@3 bb3 ~ bb3 ~@10, ~@11 c4@2 ~@2 d4@2 ~@15]/2",
  W: "eb4@8 ~@2 d4 c4 eb4@2 d4 c4", X: "[eb4@9 ~ d4 eb4@2 ~ c4 bb3@2 a3@12 a3 ~ bb3, ~@13 d4@2 ~@17]/2",
  Y: "c4@9 bb3 a3 ~@2 bb3 a3 ~, ~@6 c4 ~", Z: "c4@10 bb3 ~ bb3 ~ a3 g3, ~@11 c4@2 ~@3", AA: "gb3", AB: "f3@7 d3",
  AC: "~ f3@9 d3 eb3@2 ~ eb3 d3, ~@13 f3@2 ~", AD: "f3@6 ~ f3", AE: "g3@10 ~@2 g3@2 f3 eb3, ~@5 eb3 ~@2, ~@11 f3@2 ~@3",
  AF: "g3@13 g3@2 ~", AG: "a3@8 ~@2 d3 ~ f3 ~ g3 a3, ~@11 eb3@2 ~@3", AH: "~ bb3@2 eb3@9 ~ bb3@3",
  AI: "~ d4@9 ~ c4 ~ d4 c4 bb3, ~@5 bb3 ~@2", AJ: "~ bb3@15", AK: "~@13 d6@3",
  AL: "f6@9 ~ d6 eb6 ~@2 eb6 d6, ~@13 f6@2 ~", AM: "~ [d6,f6]@12 ~ f6@2, ~ bb5@7 ~@8",
  AN: "~ [eb6,g6]@9 ~ f6 ~ f6 eb6 ~, ~@5 eb6 g6 ~", AO: "g6@13 g6@3, eb6@5 ~@3", AP: "a6@9 ~ d6 eb6@2 f6 g6 a6",
  AQ: "~ bb6@2 eb6@11 f6 ~", AR: "f6 g6@8 ~ c6 ~ d6 ~ f6 g6, ~@13 eb6@2 ~", AS: "~ a6@13 d6@2",
  AT: "f6@9 ~ d6 eb6@2 f6@2 eb6",
  AU: "[d6 f6@12 ~@2 f6@2 g6@9 ~ eb6 f6 g6 f6 ~ g6@12 ~ g6@3, ~@17 f6 ~@13 eb6@2 ~@15]/3",
  AV: "~ a6@7 ~@2 d6 ~ f6 ~ g6 a6, ~@11 eb6@2 ~@3", AW: "~ bb6@2 eb6@11 f6@2", AX: "~ g6@8 ~ c6 d6 ~ eb6 f6 ~",
  AY: "g6 a6@9 ~@2 [bb4,bb6]@2 [c5,c7] [bb4,bb6]", AZ: "~ c5 d5@10 bb4@2 c5 bb4",
  BA: "[~ d5@11 bb4 ~ c5 bb4@2 ~ a4@8 bb4@2 ~@3 a4@2 c5@6 ~@3 a4@2 bb4@2 a4@2, ~@17 d5@2 ~@10 c5@2 ~@17, ~@30 bb4@2 ~@10 g4 ~@5]/3",
  BB: "[g4 bb4@8 ~ g4 a4 bb4@2 ~ a4@2 bb4@8 ~@2 c5 ~ c5 ~ bb4, ~@7 g4 ~@5 bb4 d5 ~]/2",
  BC: "[d5@2 bb4 c5 ~ d5 ~ c5 d5 bb4@2 c5 d5 ~ eb5 d5@2 c5@11 ~ c5 d5 ~, ~@3 bb4 ~@12]/2",
  BD: "eb5@9 ~ d5 c5 eb5@2 ~ c5, ~@7 d5", BE: "~ eb5@8 ~ d5 eb5 ~ d5 c5 bb4",
  BF: "[~ a4@12 ~ bb4 c5@11 a4 bb4 c5@2 ~ a4@2 c5@9 bb4 c5@2 ~ a4@2, ~@30 bb4@2 ~@13 bb4@2 ~]/3", BG: "g4 gb4@7",
  BH: "f4@2 ~ d3", BI: "~ f4@9 d4 eb4@2 ~ eb4 d4, ~@13 f4@2 ~", BJ: "f4@13 ~ f4!2",
  BK: "g4@10 ~ f4 g4@2 f4 eb4, ~@5 eb4 ~@2", BL: "g4@7 g4", BM: "a4@8 ~@2 d4 [db4,eb4] ~ [eb4,f4] g4 a4",
  BN: "~ bb4@2 eb4@9 ~@2 bb4@2", BO: "~ d5@8 ~ bb4 c5 ~@2 c5 ~, ~@13 d5@2 ~", BP: "bb4 bb4@15",
})).s("gm_piano").gain(0.1)

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

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] [~ x ~ x]!88 ~@2>").gain(0.5)

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

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!88 ~@2>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@26 A ~@12 A ~@19 A ~@20 B ~>".pickRestart({
  A: "~@14 x!2", B: "~@3 x",
})).gain(0.5)

// … 51 more lines

More by Andy Williams