Strudelify

Such a Shame

Talk Talk

KeyG minorTempo123 bpm
0:00/0:00
// Such a Shame — Talk Talk
// 123 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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 · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A B@3 C D@2 E F@2 G H I@2 J@3 K@2 G L@2 M J@3 N@2 O P I@2 Q@2 R@2 S T U@2 Q@2 A V A V W X M Y A M G H Z@2 J@3 A M G
  AA@2 M AB@2 A M G H AC M AD@2 A AC A V M Y M AE AF@2 AG@2 AH@2 AI@4 AG@2 AJ@2 AC AK A AC A AL A AC A AM@2 AN@2 AO@3 AP
  AQ@3 AR C M AS H AT M J@3 A W AS H AT M Q@2 AU AC A AC A AC A AV ~@8
>`.pickRestart({
  A: "[bb3,d4,g4]@15 ~", B: "[bb3@15 ~ c4@15 ~@9 gb4@8, g4@5 ~, eb4@32 [c4,d4]@15 ~]/3", C: "[bb3,d4,g4]",
  D: "[bb3@16 c4@15 ~, [eb4,g4]]/2", E: "g4@8 gb4@7 ~, d4, c4@7 ~", F: "[d4 [c4,eb4], g4, bb3@7 ~@9]/2",
  G: "[c4,f4,a4]@15 ~", H: "[d4,f4,bb4]@15 ~", I: "[bb3@15 ~ c4@15 ~, [eb4,g4]@31 ~]/2", J: "[[a3,d4,gb4]@47 ~]/3",
  K: "[[bb3,d4]@16 [c4,eb4]@15 ~, g4, ~@16 f4 ~@15]/2", L: "[f4@16 [eb4,g4]@15 ~, bb4@31 ~, d4@7 ~@9]/2",
  M: "[c4,eb4,g4]@15 ~", N: "[[bb3,d4]@16 [c4,eb4]@15 ~, g4@31 ~]/2", O: "[a3,c4,f4]@15 ~", P: "[bb3,d4,f4]@15 ~",
  Q: "[[a3,d4,gb4]@31 ~]/2", R: "[[bb3,d4] eb4, g4, ~@8 c4@7 ~]/2", S: "[c4,a4]@15 ~, [bb3,d4]@3 ~@13, f4 ~@15",
  T: "[f4,bb4], d4@7 ~", U: "[bb3@15 ~ c4@15 ~, [eb4,g4]]/2", V: "[bb3,eb4,g4]@7 ~", W: "[c4,eb4,g4]", X: "[d4,gb4,a4]",
  Y: "[d4,gb4,a4]@15 ~", Z: "[bb3@7 ~ c4@7 ~, [eb4,g4]@31 ~]/2", AA: "[[d4,f4]@15 ~ [eb4,g4]@15 ~, bb4@31 ~]/2",
  AB: "[[d4,gb4], a3@15 ~]/2", AC: "[bb3,eb4,g4]@15 ~", AD: "[[a3,d4,gb4]@31 ~, b3 ~@31]/2", AE: "[d4,gb4,a4]@7 ~",
  AF: "[[bb3,d4,g4]@31 ~]/2", AG: "[[db4,f4,bb4]@31 ~]/2", AH: "[[d4,f4,a4]@31 ~]/2", AI: "[[bb3,d4,g4]@63 ~]/4",
  AJ: "[[f4,a4], d4@15 ~]/2", AK: "[f4,a4]@15 ~, c4@13 ~@3", AL: "[bb3,eb4,g4]", AM: "[bb3@8 c4@7 ~, [eb4,g4]@31 ~]/2",
  AN: "[g4@8 gb4@7 ~, [c4,d4]@31 ~]/2", AO: "[d4@16 ~@16 c4@15 ~, g4@47 ~, bb3@2 ~, ~ eb4@2]/3",
  AP: "g4@8 gb4@7 ~, [c4,d4]@15 ~", AQ: "[d4@8 ~@8 c4@7 ~, g4@23 ~, bb3@31 ~@17, ~ eb4@2]/3",
  AR: "g4@8 gb4@7 ~, [c4,d4]", AS: "[c4,f4,a4]", AT: "[eb4,g4,bb4]@15 ~", AU: "[d4,g4] ~@15, bb3@15 ~",
  AV: "[bb3,eb4,g4]@7 [bb3,d4,g4]", // Eb Gm
})).s("gm_string_ensemble_1").gain(0.2)

// chords · brass section · "Brass"
const brass_section = note("<~@14 A B@2 ~@6 C D@2 ~@30 E F@2 ~@65 G H@2 ~@6 I J ~@16>".pickRestart({
  A: "~@12 [a4,gb5]@2 [a4,d5,g5] [a4,d5,gb5], ~@12 d5 ~@3", // D Dsus4 D
  B: "[~@4 [a4,d5] ~ [a4,d5,g5] [a4,d5,gb5] ~@4 [a4,d5] ~ [a4,d5,g5] [a4,d5,gb5]@16 ~, ~@2 gb5 ~@3 gb5 ~@9]/2", // D5 Dsus4 D D5 Dsus4 D
  C: "~@12 [a4,d5] ~ [d5,g5] [d5,gb5], ~@6 gb5 a4", // D5 G5 D
  D: "[~@4 [a4,d5,gb5] ~ [a4,d5,g5] [a4,d5,gb5] ~@4 [a4,d5,gb5] ~ [a4,d5,g5] [a4,d5,gb5]@17]/2", // D Dsus4 D Dsus4 D
  E: "~@12 [a4,d5] ~ [a4,d5,g5] [a4,d5,gb5], ~@6 gb5 ~", // D5 Dsus4 D
  F: "[~@4 [a4,d5,gb5] ~ [a4,d5,g5] [a4,d5,gb5] ~@4 [a4,d5,gb5] ~ [d5,g5] [d5,gb5]@17, ~@7 a4@9]/2", // D Dsus4 D G5 D
  G: "~@12 [a4,d5,gb5]@2 [a4,d5,g5] [a4,d5,gb5]", // D Dsus4 D
  H: "[~@4 [a4,d5,gb5]@2 [d5,g5] [d5,gb5] ~@4 [a4,d5,gb5]@2 [a4,d5,g5] [a4,d5,gb5]@17, ~@3 a4 ~@12]/2", // D G5 D Dsus4 D
  I: "~@4 [d5,gb5] ~ [d5,g5] [d5,gb5] ~@4 [d5,gb5] ~ [a4,d5,g5] [a4,d5,gb5], ~@2 a4!2 ~@2 a4 ~", // D G5 D Dsus4 D
  J: "~@4 [a4,d5,gb5] ~ [d5,g5] [d5,gb5]@9, ~@3 a4@5", // D G5 D
})).s("gm_brass_section").gain(0.36)

// other · marimba
const marimba = note("<~@42 A@4 ~@29 A@4 ~@20 A@7 ~@29 A ~ A ~ A ~ A B ~@8>".pickRestart({
  A: "~@2 g4!2 g5!2 g4!2 ~@8", B: "~@10 eb4 ~ f4 ~ g4 ~",
})).s("gm_marimba").gain(0.31)

// other · electric guitar jazz · "Gitarre"
const electric_guitar_jazz = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q R S C@2 T J M U V J@2 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM X C AN AO
  AP AQ X M AR AS M AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ T BK BL BM ~@13 BN BO BP BQ BR BS BT BU BV BW BX
  BY ~@8 BZ CA CB CA CC CD CE CF CG CH CI CJ CK CL CM CN CO CP BV CQ CR CS CT CU CV ~@8
>`.pickRestart({
  A: "~@2 f4 ~ g4 ~ f4 g4 ~@7 f4", B: "[gb4,g4] ~@3 g4 ~ f4 g4 ~@7 f4", C: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 ~@5 f4",
  D: "g4 ~ f4 ~ g4 ~ f4 g4 ~@7 f4", E: "g4 ~ f4 ~ g4 ~ f4 g4 ~@6 f4!2", F: "g4 ~ f4 ~ g4 ~ f4 ~@8 f4",
  G: "g4 ~@5 d4!2 ~@7 d4", H: "g4 ~ d4 ~@3 d4!2 ~@6 f4 gb4", I: "g4 ~@5 d4!2 ~@6 d4 f4",
  J: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 ~@4 f4 gb4", K: "g4 ~ g4 ~ g4 ~ f4 ~@9", L: "~ g4 f4 ~ g4 ~ f4 g4 ~ g4 ~@4 f4 gb4",
  M: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@4 f4", N: "g4 ~ f4 ~ g4 ~ f4 g4 ~@6 f4 gb4", O: "g4 ~ g4 ~ g4 ~ f4!2 ~ f4 ~@6",
  P: "g4 ~ d4 ~@3 d4!2 ~@5 d4 f4 d4", Q: "~@2 d4 ~@3 d4!2 ~@6 d4!2", R: "~@2 d4 ~@3 d4!2 ~@5 d4 ~ d4",
  S: "~@2 g4 ~ g4 ~ f4!2 ~ g4 ~@5 f4", T: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 ~@4 f4 ~", U: "g4 ~ d4 ~@3 d4!2 ~@5 d4 ~@2",
  V: "d4 ~ d4 ~@3 d4!2 ~ d4 ~@5 f4", W: "g4 ~ f4 ~@3 f4 g4 ~ g4 f4 ~@4 f4",
  X: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 f4 gb4", Y: "g4 ~ f4 ~ g4 ~ f4 g4 ~@8",
  Z: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 d4 f4", AA: "~@4 d4 ~ c4 d4 ~ d4 ~@6", AB: "d4 ~ d4 ~ d4 ~ c4 d4 ~ d4 ~@6",
  AC: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 ~@6", AD: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~ g4 bb4 g4 f4",
  AE: "~@2 g4 ~ g4 ~ f4 g4 ~ g4 f4 ~@5", AF: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 g4 bb4 g4 f4 ~",
  AG: "~@2 g4 ~ g4 ~ f4 g4 ~ g4 ~@6", AH: "d4 ~ d4 ~@3 d4 ~@2 a4 d4 ~@4 f4", AI: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 d4 ~@4",
  AJ: "~@2 d4 ~ a4!2 d4!2 ~ d4 ~@6", AK: "~@4 g4!2 f4 g4 ~ g4 f4 ~@4 f4", AL: "g4 ~ f4 ~ g4 ~ f4 ~ f4 gb4 g4 ~@4 f4",
  AM: "g4 ~ f4 ~ g4 ~ f4!2 ~@5 f4 g4 f4", AN: "[gb4,g4] ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@5",
  AO: "d4 ~ d4 ~@3 d4 g4 ~ g4 d4 ~@5", AP: "~@2 d4 ~@3 d4 g4 ~ g4 d4 ~@5", AQ: "~ d4 g4 ~ a4 ~@2 d4 ~@8",
  AR: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 g3 ~@3 f4", AS: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 g3 ~@4",
  AT: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 c4 ~@4", AU: "~@2 d4 ~ d4 ~ d4 ~@3 d4 ~@5",
  AV: "~@2 d4!2 ~ d4 c4 ~ d4 ~ g4 ~@2 d4 ~@2", AW: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@5",
  AX: "g4 ~ f4 ~@3 f4!2 ~ f4 g4 f4 ~@4", AY: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 f4!2",
  AZ: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 d4 f4 g4 ~@2", BA: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 f4 ~",
  BB: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4 d4 ~@3 c4", BC: "d4 ~ d4 ~ d4 ~ c4 d4 ~@6 d4!2", BD: "~@2 d4 ~@2 c4 ~@2 d4 ~@6 f4",
  BE: "g4 ~ f4 ~ g4 ~ f4 ~ g4 ~ g4 ~@3 f4 ~", BF: "g4 ~ f4 ~ g4 ~ f4 g4 ~ g4 f4!2 g4 ~@2 f4",
  BG: "g4 ~ f4 ~ g4 ~ f4 ~@7 f4 gb4", BH: "g4 ~ f4 ~ g4 ~ f4 ~ bb4 a4 g4 f4 g4 f4 ~ f4",
  BI: "g4 ~@3 g4 ~ f4 g4 ~ g4 f4 ~@4 [f4,g4]", BJ: "d4 ~ d4 ~@3 d4!2 ~ d4 ~@4 d4 f4",
  BK: "~@2 d4 ~ d4 ~@2 d4 ~ d4!2 ~@3 d4!2", BL: "~@2 g4 ~ g4 ~@11", BM: "~@2 f4 ~ f4 g4 ~@10",
  BN: "~@2 f4 ~ f4 ~ d4 f4 ~ f4 g4 ~@4 f4", BO: "g4 ~ f4 ~ g4 ~ g4 ~ f4!2 g4 ~@5",
  BP: "~@2 f4 ~ f4 g4 ~ g4 ~ g4 f4 ~@5", BQ: "~@2 f4 ~ f4 ~@5 f4 ~ f4 g4 ~@2",
  BR: "~@2 f4 ~ f4 g4 ~ g4 ~ g4 f4 ~ d4 ~ f4 ~", BS: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 f4 gb4",
  BT: "g4 ~ f4 ~@3 f4!2 ~ f4 g4 ~ bb4 a4 g4 f4", BU: "~@2 f4 ~ f4 ~ g4!2 ~ g4 f4 ~@5",
  BV: "~@2 f4 ~ f4 g4 ~ g4 ~ f4 g4 f4 bb4 a4 g4 f4", BW: "~@2 f4 ~@2 f4 ~@2 f4 ~ g4 ~@5",
  BX: "~@2 f4 ~@5 d4 ~ d4 ~@4 c4", BY: "d4 ~ d4 ~@2 d4 ~@2 d4 ~@4 c4 d4 ~", BZ: "~@2 f4 ~ f4 ~ g4!2 ~@2 f4 ~@3 f4 gb4",
  CA: "g4 ~ f4 ~ f4 ~ g4!2 ~ g4 f4 ~@5", CB: "~@2 f4 ~ f4 g4 ~ g4 ~ g4 f4 ~ f4 ~ f4 gb4",
  CC: "~@2 f4 ~ f4 ~ g4!2 ~ g4 f4 ~ g4 f4 bb4 ~", CD: "~@2 f4 ~ g4 ~ f4 g4 ~ g4 f4 ~@3 d4 ~",
  CE: "~@2 c4 ~ c4 d4 ~ d4 ~ d4 c4 ~@5", CF: "~ d4 ~@2 d4 ~ c4!2 ~@2 d4 ~@3 d4 f4",
  CG: "~@2 g4 ~@3 d4!2 ~@2 c4 ~@2 d4 ~@2", CH: "~@2 g4 ~ g4 ~ f4 ~@3 g4 ~@5", CI: "~ f4 ~@2 f4 ~@2 g4 ~@4 g4 f4 ~@2",
  CJ: "~@2 f4 ~ f4 g4 ~ g4 ~ g4 f4 ~ f4!2 g4 ~", CK: "~@2 f4 ~ f4 g4 ~ g4 ~ d4 f4 d4 g4 ~@3",
  CL: "~@2 f4 ~ f4 gb4 ~ g4 ~ g4 f4 ~ f4 ~ g4 ~", CM: "~@2 f4 ~ f4 g4 ~ g4 ~ d4 f4 ~ bb4 d4 a4 ~",
  CN: "~@2 g4 ~ d4!2 ~ d4 ~ d4 c4 ~ d4 ~@3", CO: "~@2 d4 ~@2 c4 ~ d4 ~ d4 f4 d4 g4 ~@2 d4",
  CP: "~@2 g4 ~ g4 f4 ~ f4 ~@2 g4 ~@5", CQ: "~@2 f4 ~ f4 g4 ~ g4 ~ f4 g4 ~@3 g3 ~",
  CR: "~@2 g4 ~ g4 f4 ~ g4 ~ d4 f4 ~ bb4 ~ a4 ~", CS: "~@2 f4 ~ f4 g4 ~ g4 ~ g4 f4 ~ f4 g4 ~@2",
  CT: "~@2 f4 ~ f4 g4 ~ g4 ~ f4 g4 f4 bb4 ~ g4 ~", CU: "~@2 f4 ~ f4 g4 ~ g4 ~ d4 f4 g4 ~@2 f4 ~",
  CV: "~@2 g4 ~ g4 f4 g4 bb4 ~ bb4 ~@2 g4 ~ f4 ~",
})).s("gm_electric_guitar_jazz").gain(0.26)

// bass · synth bass 1 · "S.Bass"
const bass = note(`<
  A B C D E B F D G H I J K H L@2 M G H I J K H L@2 M G H I N K H L M G H I J K H L@2 G O G K H L H L G H I J K H L@2 M
  G H I J K P L M G H I J K H L M G O G K H L H L G@2 N@2 L@2 G@4 N@2 L@2 K I G O G O G O G K H L Q R B C S E T U V G H
  I W X Y L@2 M G H I J K H L M G O G O G Z G AA@2 ~@7
>`.pickRestart({
  A: "g2@2 ~@2 g2@3 ~ g2@2 ~@2 g2@2 ~@2", B: "eb2 ~ eb2 ~ eb2 ~ eb2 ~", C: "c2 ~ c2 ~ c2 ~ c2 ~",
  D: "d2 ~ d2 ~ d2 ~ d2 ~", E: "g2@2 ~@2 g2@2 ~@2 g2@2 ~@2 g2@3 ~", F: "c2@3 ~ c2@2 ~@2 c2@2 ~@2 c2@2 ~@2",
  G: "g2 ~ g3 ~ g2 ~ g3 ~ g2 ~ g3 ~ g2 ~ g3 ~", H: "c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~",
  I: "f2 ~ f3 ~ f2 ~ f3 ~ f2 ~ f3 ~ f2 ~ f3 ~", J: "bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~",
  K: "eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~", L: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~",
  M: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~ gb2 ~ gb3 ~", N: "bb2 ~ bb3 ~ bb2 ~ bb3 ~ bb2 ~ bb3 ~ bb2 ~ bb3 ~",
  O: "eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ f2 ~ f3 ~", P: "c2@2 c3 ~ c2 ~ c3 ~ c2 ~ c3 ~ c2@2 c3 ~, eb2 ~@15",
  Q: "d2 ~ d3 ~ d2 ~ d3 ~ gb2 ~ gb3 ~ gb2 ~ gb3 ~", R: "g2 ~ g2 ~ g2 ~ g2 ~", S: "d2@2 ~@2 d2@2 ~@2 d2@2 ~@2 gb2@3 ~",
  T: "eb2@2 ~@2 eb2@3 ~ eb2@3 ~ eb2@2 ~@2", U: "c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@3 ~", V: "d2@3 ~ d2@3 ~ d2@2 ~@2 gb2@3 ~",
  W: "bb1@2 bb2@2 bb1@2 bb2 ~ bb1@2 bb2 ~ bb1 ~ bb2 ~", X: "eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2@2 eb3 ~",
  Y: "c2 ~ c3 ~ c2 ~ c3 ~ c2@2 c3 ~ c2@2 c3 ~", Z: "eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ f2 ~ f3 ~",
  AA: "[eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ f2 ~ g2@15 ~@3]/2",
})).s("gm_synth_bass_1").gain(0.26)

// chords · piano
const piano = note(`<
  A B@2 C D E@2 F G H I J K L M@3 N H O P K L Q@3 R S T U@2 V W@2 X Y Z AA AB AC AD@2 AE AF AG AH AI AJ L AK AL AM Z AN
  AO AP AQ@3 AR AS AT AA AU AV AW@2 AX AY AZ BA BB BC BD@2 BE BF BG AF BH BI BJ BK@3 BL@2 BM@2 BN@4 BO@2 BP@2 BQ BR BS
  BT BU BT BV@2 BW@2 BX BY@2 BZ CA@2 CB CC CD@2 CE CF AC Z CG CH CI CJ@3 CK CL CM CN CO CP AW@2 CQ CR BS CR CS CR CT@4
  ~@6
>`.pickRestart({
  A: "~@5 [g4,g5] [a4,a5] [bb4,bb5], g2, g1@3 ~", // G A Bb
  B: "[[c5,c6]@2 [bb4,bb5] [a4,a5] ~ [f4,f5] ~@2 [c2,c3]@7 ~, eb3 ~, eb2@7 [g4,g5]@9]/2", C: "d3@15 ~, d2@13 ~@3",
  D: "~@5 [g4,g5] [a4,a5] [bb4,bb5], [g1,g2]@13 ~@3", // G A Bb G
  E: "[[c5,c6]@2 [bb4,bb5] [a4,a5]@3 [f4,f5] ~ [c2,c3]@8, eb3 ~, eb2@13 ~ [g4,g5]@15 ~@3]/2", // C Bb A F C G
  F: "[d2,d3]@11 ~@5, f3 ~@15", G: "[g1,g2,d3,bb3]@13 ~@3, g3@15 ~", H: "[c2,eb3,g3,c4]@15 ~",
  I: "[f3,a3,c4]@3 ~, f2@7 ~", J: "[bb1,f3,bb3,d4]@7 ~, bb2@3 ~", K: "[eb2,g3,bb3,eb4]@15 ~", L: "[c2,eb3,g3,c4]@7 ~",
  M: "[[d2,gb3,a3,d4]@13 ~@3]/3", N: "[g1,d3,f3,bb3]@7 ~", O: "[f2,f3,a3,c4]@3 ~", P: "[bb1,bb2,f3,bb3,d4]@15 ~",
  Q: "[gb3@3 ~ gb3 ~@43, [d2,d3,a3]@23 ~]/3", R: "[g2,g3], [d3,bb3]@7 ~", S: "[c2,eb3,g3,c4]", T: "[f3,a3,c4]@7 ~, f2",
  U: "[[bb2,d3,f3,bb3]@15 ~ [bb2,g3]@16, ~@15 eb2@15 ~@2, ~@8 [eb3,bb3]@7 ~]/2", V: "[eb3,g3,c4]@15 ~, c3@3 ~",
  W: "[g3@8 gb3@19 ~ [d2,d3,gb3,a3]@4, [d2,d3,a3]@27 ~@5]/2", X: "[g2,d3,g3,bb3]@15 ~", Y: "[c2,eb3], [g3,c4]@7 ~",
  Z: "[f2,c3,f3,a3]@15 ~", AA: "[bb2,d3,f3,bb3]@15 ~", AB: "[eb2,eb3,g3,bb3]@14 eb3 ~, f3 ~@15",
  AC: "[eb3,g3,c4]@13 ~@3, c2@15 ~", AD: "[[d2,d3,gb3]@13 e3 gb3 g3, a3@29 ~@3]/2",
  AE: "~@4 [g3,bb3,d4]@3 ~ [g3,bb3,d4] [g3,bb3,d4]@2 ~ [g3,bb3,d4]@3 ~, g2@15 ~", AF: "[eb2,g3,bb3,eb4]@13 ~@3",
  AG: "[g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] [g3,d4]@2 ~ [g3,bb3,d4]@3 ~, g2@7 ~, ~@9 bb3 ~@6", // Gm G5 Gm
  AH: "[g3,bb3,eb4]@13 ~@3, eb2@5 ~@3", AI: "[c3,eb3,g3,c4]@13 ~@3", AJ: "[d3,gb3,a3,c4]@7 ~, d2@3 ~",
  AK: "[d2,d3,gb3,a3]@7 ~", AL: "[g2,d3,g3,bb3]@13 ~@3", AM: "[eb3,g3,c4]@13 ~@3, c2", AN: "[d3,f3,bb3]@7 ~, bb2",
  AO: "~ f3 ~@14, [eb3,g3,bb3]@7 ~, eb2@3 ~", AP: "[eb3,g3,c4]@13 ~@3, c3@9 ~@7", AQ: "[[d2,d3,gb3,a3]@23 ~, c4 ~@7]/3",
  AR: "[d3,g3,bb3]@15 ~, g2@13 ~@3", AS: "[eb3,g3,c4]@7 ~, c2", AT: "[f2,c3,f3,a3]@15 ~, bb3 ~@15",
  AU: "[eb3,g3,bb3]@15 ~, eb2@13 ~@3", AV: "[eb3,g3,c4]@13 ~@3, c2@9 ~@7", AW: "[[d2,d3,gb3,a3]@29 ~@3]/2",
  AX: "[g1,g2,g3,bb3,d4]@13 ~@3", AY: "[c2,eb3,c4]@7 ~, [eb2,bb3,eb4]@7 ~@9, g3 ~@15", AZ: "[c3,f3,a3]@15 ~, f2@11 ~@5",
  BA: "[bb1,d3,f3,bb3]@15 ~, bb2@3 ~", BB: "[eb2,eb3,g3,bb3]@13 ~@3", BC: "[c2,eb3,c4]@15 ~, g3@13 ~@3",
  BD: "[[d3,gb3,a3], d2@13 ~@3]/2", // D
  BE: "~@4 [g3,bb3,d4]@3 ~ [g3,bb3,d4] [g3,bb3,d4]@2 ~ [g3,bb3,d4]@3 ~, g2@15 ~, g1@13 ~@3", // Gm
  BF: "[g3,bb3,eb4]@15 ~, eb2@11 ~@5", // Eb
  BG: "~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] [g3,bb3,d4]@2 ~ [g3,bb3,d4]@3 ~, g2@15 ~, g1@13 ~@3", // Gm
  BH: "[c2,eb3,g3,c4]@13 ~@3", BI: "[d3,gb3,a3]@7 ~, d2@11 ~@5", BJ: "[c2,c3,eb3,g3,c4]@13 ~@3",
  BK: "[d2@9 ~@9 bb5 d6 g6 d6 bb5 g5 ~ g5 bb5 d6 g6 d6 bb5 g5 ~ g5 bb5 d6 g6 d6 bb5 g5 ~@2 bb5 d6 g6 d6 bb5 g5, [d3,gb3,a3]@29 ~@19, ~@4 [g1,g2]@7 ~, ~@16 d5@3 ~@5 d5@2 ~@6 d5@2 ~@6 d5@3 ~@5, ~@17 g5@2 ~@22 g5@2 ~@5]/3", // D G
  BL: "[~ f5 bb5 db6 f6 db6 bb5 f5 db5 f5 bb5 db6 f6 db6 bb5 f5 db5 f5 bb5 db6 f6 db6 bb5 f5 ~ f5 bb5 db6 f6 db6 bb5 f5, [bb1,bb2]@7 ~, db5 ~@11 db5 ~@3]/2", // Bb
  BM: "[d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5, d3@15 ~, d2@27 ~@5]/2",
  BN: "[d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5 g5 d5 g5 bb5 d6 g6 d6 bb5@2, [g1,g2]@31 ~]/4", // G
  BO: "[db5 f5 bb5 db6 f6 db6 bb5 f5 db5 f5 bb5 db6 f6 db6 bb5 f5 db5 f5 bb5 db6 f6 db6 bb5 f5 db5 f5 bb5 db6 f6 db6 bb5 f5, [bb1,bb2]@29 ~@3]/2", // Bb
  BP: "[d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5 d5 f5 a5 d6 f6 d6 a5 f5, [d2,d3]@29 ~@3]/2", // D
  BQ: "~ g5 bb5 eb6@12 ~, [eb2,eb5], [eb3,g3,bb3]@7 ~", BR: "~@2 c6 f6@5 ~@8, [c3,f3,a3], f2@3 ~, f5 ~, ~ bb5@2 ~@13",
  BS: "~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4]@3 ~, [g1,g2]", BT: "[g3,bb3,eb4]@15 ~",
  BU: "~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] [g3,d4]@2 ~ [g3,bb3,d4]@2 ~@2, [g1,g2], ~@9 bb3 ~@6", // Gm G5 Gm G
  BV: "[~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] [g3,bb3] ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,eb4]@15 ~, [g1,g2]@29 ~@3, ~@9 d4@2 ~@21]/2", // Gm Eb G
  BW: "[~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] [g3,d4]@2 ~ [g3,bb3,d4]@3 ~ [g3,bb3,eb4]@16, [g1,g2]@15 ~, ~@9 bb3 ~@22]/2", // Gm G5 Gm Eb G
  BX: "~ c4, c2, ~@5 eb3@11", BY: "[~@8 [g3,a3]@7 ~ [d3,gb3,a3]@12 ~@4, d2@27 ~@5, ~@4 d3@11 ~@17]/2",
  BZ: "gb2 ~@9 [g4,g5]@2 [a4,a5]@2 [bb4,bb5]@2, [g1,g2]", // G A Bb G
  CA: "[[c5,c6]@4 [bb4,bb5]@2 [a4,a5]@4 [f4,f5]@3 ~@3 [c2,c3]@16, [eb2,eb3]@7 [g4,g5]@8 ~]/2", CB: "[d2,d3]@3 ~",
  CC: "[ab2,bb2] ~@9 [g4,g5]@2 [a4,a5]@2 [bb4,bb5]@2, [g1,g2]@13 ~@3", // Absus2 G A Bb G
  CD: "[[c5,c6]@4 [bb4,bb5]@2 [a4,a5]@4 [f4,f5]@3 ~@3 [c2,c3]@16, eb3 ~, eb2@14 [g4,g5]@15 ~@3]/2", // C Bb A F C G
  CE: "d3@7 ~, d2@3 ~", CF: "[g1,d3,g3,bb3]@15 ~", CG: "[bb1,d3,f3,bb3]@15 ~", CH: "[eb2,g3,bb3]@14 eb3 ~, eb3@13 ~@3",
  CI: "[c2,c4]@15 ~, [eb3,g3]@13 ~@3", CJ: "[[d2,d3,gb3,a3]@15 ~]/3", CK: "[g2,g3,bb3], d3@7 ~",
  CL: "[c2,g3,c4], eb3@7 ~", CM: "[f2,f3,c4]@15 ~, a3@13 ~@3", CN: "[bb2,f3,bb3,d4]@15 ~",
  CO: "[eb2,bb3,eb4]@7 ~, g3@3 ~", CP: "[c2,eb3,g3,c4]@13 ~@3, c3@5 ~@3",
  CQ: "[d3,g3,bb3]@2 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4]@3 ~, g2@7 ~, ~@4 g1@11 ~", CR: "[g3,bb3,eb4]",
  CS: "~@4 [g3,bb3,d4]@3 ~ [g3,bb3,d4] [g3,bb3] ~@2 [g3,bb3,d4]@3 ~, [g1,g2], ~@9 d4@2 ~@5", // Gm G
  CT: "[~@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4]@3 ~ [g3,bb3,eb4]@7 ~@3 [eb2,eb3]@2 [f2,f3]@2 [g2,g3]@20 ~@14, g2@25 ~@39, g1@21 ~@43]/4", // Gm Eb F G
})).s("gm_piano").gain(0.31)

// drums · kick
const kick = s("bd").struct("<[x!4]!142 [x ~ x ~ x ~ x!2] ~@8>").gain(0.41)

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

// drums · hihat
const hihat = s("hh").struct("<A@8 B@38 A@4 B@25 A@12 C A D A B A B A D A@3 B@8 A@11 B@17 A@8 ~@8>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~",
  D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
// … 56 more lines

More by Talk Talk