Strudelify

Winter Games

Foster David

KeyF majorTempo120 bpm
0:00/0:00
// Winter Games — Foster David
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A ~ B ~ C ~ D@2 A ~ E ~ F ~ G@3 H@2 I J K L M N O P Q R Q S T@2 A ~ B ~ U ~ V@3 W X Y Z AA L AB AC AD AE AF AG Q AH
  T@2 AI ~@5 AJ AK AL AM AN@2 ~ AO ~ AP ~ AQ AR@2 AS AT AU@4 AV@2 AW@2 AX@2 AY@3 AZ@2 ~@6 BA BB BC BD BE ~ BF ~ BG ~
  BF@2 BH BI
>`.pickRestart({
  A: "f1 ~@3", B: "f1 ~ f1@3 ~@11", C: "f1@2 f1 ~ eb1@3 ~@9",
  D: "[[f1,f2]@5 ~ [eb1,eb2]@2 ~@2 [d1,d2]@2 ~@2 [c1,c2]@15 ~@3]/2", E: "f1 ~ f1@2 ~@12", F: "f1 ~ f1 ~ eb1@4 ~@8",
  G: "[[f1,f2]@5 ~ [eb1,eb2]@2 ~@2 [d1,d2]@2 ~@2 [c1,c2]@31 ~@3]/3", // F Eb D C
  H: "[f1@4 ~@2 f1 ~ f1@5 ~ g1 ~ bb1@5 ~ bb1@2 c2@5 ~ c2@2, ~@15 a1@2 ~@15]/2", I: "f1@5 ~ f1@2 bb1@2 ~ a1@2 ~ g1 ~",
  J: "bb1@5 ~ bb1 ~ bb1@6 c2 d2", K: "f1@5 ~ f1@2 d2@6 g1 a1", L: "bb1@5 ~ bb1 b1 c2@5 ~ c2@2",
  M: "f1@5 ~ f1 ~ g1@2 ~ a1@2 ~ bb1@2", N: "c2@5 ~ c2 ~ c2@5 ~ c2 d2", O: "bb1@4 ~@2 bb1 ~ bb1@6 ~@2",
  P: "c2@5 ~ d2@9 ~", Q: "bb1@4 ~@2 bb1 ~ bb1@7 ~", R: "d2@2 ~ c2@4 ~", S: "b1@6 c2@9 ~",
  T: "[db2@6 d2@3 ~ c2@3 ~ bb1@10 c2@8]/2", U: "f1 ~ f1 ~ eb1@3 ~@9",
  V: "[[f1,f2]@5 ~ [eb1,eb2]@2 ~@2 [d1,d2]@3 ~ [c1,c2]@31 ~@3]/3", W: "f1@4 ~@2 f1 ~ f1@6 g1 a1",
  X: "bb1@4 ~@2 bb1@2 c2@5 ~ c2@2", Y: "f1@5 ~ a1@2 bb1@2 ~ a1@2 ~ g1 ~", Z: "bb1@4 ~@2 bb1 ~ bb1@6 c2 d2",
  AA: "f1@4 ~@2 f1 ~ d2@5 ~ g1 a1", AB: "f1@5 ~ f1 ~ g1@2 ~ a1@2 ~ bb1 ~", AC: "c2@5 ~ c2 ~ c2@4 ~@2 c2 d2",
  AD: "bb1@4 ~@2 bb1 ~ bb1@5 ~ bb1@2", AE: "c2@5 ~ d2@7 ~ c2 d2", AF: "bb1@4 ~@2 bb1 ~ bb1@8", AG: "d2@5 ~ c2@7 ~ c2 ~",
  AH: "b1@3 c2@5", AI: "f1@3 ~@13", AJ: "~@3 f2", AK: "e2 eb2 d2 c2", AL: "b1 c2 gb1 b1", AM: "e1 a1 d1 g1",
  AN: "[c1@4 c2@7 ~ c1@8 f1@6 ~@6]/2", AO: "~@4 f1 ~ f1@3 ~@7", AP: "~@4 f1 ~ f1 ~ eb1@3 ~@5",
  AQ: "~@4 [f1,f2]@5 ~ [eb1,eb2]@2 ~@2 [d1,d2]@2", AR: "[~ [c1,c2]@15]/2", AS: "~@4 f1@4 ~@2 f1 ~ f1@4",
  AT: "~@2 g1 a1 bb1@5 ~ bb1@2 c2@4",
  AU: "[~@2 c2@2 f1@5 ~ a1@2 bb1@2 ~ a1@2 ~ g1@2 bb1@5 ~ bb1 ~ bb1@6 c2 d2 f1@5 ~ f1@2 d2@6 g1 a1 bb1@5 ~ bb1 b1 c2@4]/4",
  AV: "[~@2 c2@2 f1@5 ~ f1@2 g1@2 ~ a1@2 ~ bb1@2 c2@5 ~ c2 ~ c2@4]/2",
  AW: "[~@2 c2 d2 bb1@5 ~ bb1 ~ bb1@8 c2@6 d2@6]/2", AX: "[~@2 c2 d2 bb1@4 ~@2 bb1 ~ bb1@8 d2@5 ~ c2@6]/2",
  AY: "[~@2 c2 d2 bb1@4 ~@2 bb1 ~ bb1@7 ~ b1@6 c2@10 db2@6 d2@3 ~ c2@2]/3", AZ: "[~@2 bb1@10 c2@8 f1@3 ~@9]/2",
  BA: "f2 e2 eb2 d2", BB: "c2 b1 c2 gb1", BC: "b1 e1 a1 d1", BD: "g1@2 c1@2 c2@3 ~", BE: "c1@7 ~ f1@4 ~@4",
  BF: "~@4 f1!2 ~@2", BG: "~@8 f1 ~ f1 ~ eb1@4", BH: "~@8 f1 ~ f1@2 ~@4", BI: "~@6 f1 ~ f1@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.71)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@7 A@3 ~@5 B@3 ~@9 C ~ D ~ E F@2 G ~@5 H@3 ~@9 I ~ J ~ E K@2 L ~@5 M N O P Q R ~@5 S T@2 ~@9 U@2 V@2 W@2 X@2 ~@6 Y Z
  AA AB AC ~ AD ~ AE ~ AF AD AF AG
>`.pickRestart({
  A: "[c3@4 d3@2 eb3@2 ~@2 d3@3 ~ c3@19 ~@15]/3", B: "[c3@3 ~ d3 ~ eb3@3 ~ d3@3 ~ c3@34]/3", C: "[c3,g3]@3 [d3,a3]@5",
  D: "[d3,a3]@5 ~ [c3,g3]@10", E: "b2@3 c3@5", F: "[db3@6 d3@4 c3@3 ~ [bb2,f3]@10 g3@7 ~, ~@24 c3@5 ~@3]/2",
  G: "[f2,c3] ~@3", H: "[c3@4 d3@2 eb3@3 ~ d3@2 ~@2 c3@33 ~]/3", I: "[c3,g3]@6 [d3,a3]@9 ~", J: "[d3,a3]@3 [c3,g3]@5",
  K: "[db3@6 d3@3 ~ c3@3 ~ [bb2,f3]@10 g3@8, ~@12 c3@3 ~, ~@24 f3 ~@7]/2", L: "[f2,c3]@3 ~@13", M: "~@3 f3",
  N: "e3@4 eb3@4 d3@4 c3@3 ~", O: "b2@2 c3 ~ gb2@2 b2@2", P: "e2 a2 d2 g2", Q: "c2 f2@2 c3", R: "~@4 [f2,f3]@3 ~@9",
  S: "~@4 c3@3 ~ d3 ~ eb3@2 ~@2 d3@2", T: "[~ c3@15]/2", U: "[~@2 [c3,g3]@3 [d3,a3]@5 ~@6]/2",
  V: "[~@2 [d3,a3]@3 [c3,g3]@5 ~@6]/2", W: "[~@4 b2@6 c3@9 ~ db3@6 d3@2 ~@2 c3@2]/2",
  X: "[~@2 [bb2,f3]@10 g3@8 [f2,c3]@3 ~@9, ~@6 c3@3 ~@7]/2", Y: "f3 e3 eb3 d3", Z: "c3 b2 c3 gb2", AA: "b2 e2 a2 d2",
  AB: "g2 c2 f2@2", AC: "c3@2 f2 ~", AD: "~@8 [f2,c3] ~ [f2,c3]@2 ~@4", AE: "~@8 [f2,c3] ~ [f2,c3] ~ [eb2,bb2]@3 ~",
  AF: "~@4 [f2,c3]!2 ~@2", AG: "~@6 [f2,c3] ~ [f2,c3]@3 ~@5",
})).s("gm_overdriven_guitar").gain(0.5).pan(0.4)

// chords · orchestral harp · "HARP"
const orchestral_harp = note("<~@33 A@2 ~@23 B@2 C@5 D ~@3 E@2 ~@24 F C@5 G ~@4 H ~@6 I J K>".pickRestart({
  A: "[~@12 c4 [f4,g4] ~ g5@2 ~@15, ~@14 [c5,f5]@3 ~@15, ~@15 c6 ~@16]/2", // Fsus2 F5
  B: "[~@12 f4 g4 ~ c6@2 ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~, ~@6 c4 [f5,g5] ~@8, ~@13 c5@3 ~@16]/2", // F5 Fsus2
  C: "[f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~", // F5
  D: "[f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~@5", // F5
  E: "[~@14 f4 g4 ~@2 [a5,b5] ~@13, ~@13 c4@2 c5@4 ~@13, ~@16 f5@3 ~@13, ~@17 [g5,c6]@2 ~@13]/2", // Asus2 C5
  F: "~ [f4,g4] ~ c6@2 ~@3 [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~, c4 [f5,g5] ~@6, ~ c5@3 ~@12", // Fsus2 F5 Fsus2
  G: "[f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~@3", // F5
  H: "~@4 [c4,f4] g4 ~ c6@2 ~@7, ~@5 c5@3 ~@8, ~@3 [f5,g5] ~@4", // F5 Fsus2
  I: "~@6 [a4,c5] d5 f6@2 ~@6, ~@6 f5@3 ~@7, ~@7 [c6,d6]@2 ~@7", // Am Csus2
  J: "~@6 [a4,c5] d5 f6@2 ~@6, ~@7 [f5,c6,d6]@3 ~@6, ~@8 e6 ~@7", // Am Dm7
  K: "~@3 [a4,c5] [d5,c6,d6] f6 [d5,f5,c6,d6,f6] ~ [d5,f5,c6,d6,f6] ~@7, ~@2 f5 ~@5", // Am D7 Dm7
})).s("gm_orchestral_harp").gain(0.35).pan(0.2)

// bass · slap bass 2 · "SLAP BASS"
const bass_2 = note("<~@10 A B A C ~@21 A D A C ~@32 E F E G ~@33 H ~ I ~@5>".pickRestart({
  A: "~@8 [eb2,eb3] [f2,f3] [c2,c3] [eb2,eb3] [bb1,bb2] [c2,c3] [ab1,ab2] [bb1,bb2]", B: "[f1,f2] ~ [f1,f2] ~@13",
  C: "[f1,f2] ~ [f1,f2] ~ [eb1,eb2]@2 ~@10", D: "[f1,f2]@3 ~@13", E: "~@12 [eb2,eb3] [f2,f3] [c2,c3] [eb2,eb3]",
  F: "[bb1,bb2] [c2,c3] [ab1,ab2] [bb1,bb2] [f1,f2] ~ [f1,f2] ~@9", // Bb C Ab Bb F
  G: "[bb1,bb2] [c2,c3] [ab1,ab2] [bb1,bb2] [f1,f2] ~ [f1,f2] ~ [eb1,eb2]@2 ~@6", // Bb C Ab Bb F Eb
  H: "[eb2,eb3] [f2,f3] [c2,c3] [eb2,eb3] [bb1,bb2] [c2,c3] [ab1,ab2] [bb1,bb2] [f1,f2] ~ [f1,f2] ~@5", // Eb F C Eb Bb C Ab Bb …
  I: "[eb2,eb3] [f2,f3] [c2,c3] [eb2,eb3] [bb1,bb2] [c2,c3] [ab1,ab2] [bb1,bb2] [f1,f2] ~ [f1,f2] ~ [eb1,eb2]@2 ~@2", // Eb F C Eb Bb C Ab Bb …
})).s("gm_slap_bass_2").gain(0.5).pan(0.1)

// chords · brass section · "BRASS"
const brass_section = note(`<
  A@7 B@7 ~ C@3 ~@9 D ~ E ~ F G@2 ~@6 H@3 ~@9 I ~ E ~ F J@3 ~@5 K L M N O@2 ~@5 P Q@3 ~@8 R@2 S@2 T@2 U@2 ~@6 V W X Y Z
  ~@5 AA AB AC AD
>`.pickRestart({
  A: "f4/7",
  B: "[[a4,c5] ~ [a4,c5] ~ [bb4,d5] ~ [eb3,g4,bb4,eb5]@3 ~ [d3,f4,bb4,d5]@4 [c3,g4,c5]@19 g4 ~@78, f3@5 ~@107, f4!2 f4@3 ~@2 f4@49]/7", // Am Bb Eb Bb C5
  C: "[[f4,a4,c5]@3 ~ [f4,ab4,bb4,d5] ~ [eb3,g4,bb4,eb5]@3 ~ [d3,f4,bb4,d5]@3 ~ [c3,f4,g4,c5]@33 ~, f3 ~@7]/3", // F Bb7 Eb Bb Csus4
  D: "[g4,c5,e5]@5 ~ [a4,d5,f5]@8 ~@2", E: "[a4,d5,f5]@5 ~ [g4,c5,e5]@10", F: "[g4,b4,d5]@5 ~ [g4,c5,e5]@9 ~",
  G: "[[a4,db5,e5]@5 ~ [a4,d5,f5]@3 ~ [g4,c5,e5]@3 ~ [f4,bb4,d5]@9 ~ [f4,g4,c5]@8]/2", // A Dm C Bb Fsus2
  H: "[[f4,a4,c5]@3 ~ [f4,bb4,d5] ~ [eb3,g4,bb4,eb5]@3 ~ [d3,f4,bb4,d5]@3 ~ [c3,g4,c5]@34, f3@4 ~@10 f4@29 ~@5]/3", // F Bb Eb Bb C5
  I: "[g4,c5,e5]@3 [a4,d5,f5]@5", // C Dm
  J: "[[a4,db5,e5]@5 ~ [a4,d5,f5]@3 ~ [g4,c5,e5]@2 ~@2 [f4,bb4,d5]@9 ~ g4@7 ~ a4@2 ~@14, ~@12 [f4,c5]@5 ~@7]/3", // A Dm C Bb F5
  K: "~@12 [a5,c6,f6]@3 ~", L: "[g5,c6,e6]@3 bb5 [g5,bb5,eb6]@3 ~ [f5,bb5,d6]@3 ~ [e5,g5,c6]@3 ~",
  M: "[d5,g5,b5]@3 ~ [e5,g5,c6]@3 ~ [db5,gb5,bb5]@3 ~ [eb5,gb5,b5]@3 ~", // G C Gb B
  N: "[b4,e5,ab5]@3 ~ [db5,e5,a5]@3 ~ [a4,d5,gb5]@4 [b4,d5,g5]@3 ~", // E A D G
  O: "[~ eb5 ~@2 [bb4,c5,f5]@7 ~ [c4,bb4,c5,g5]@8 ~@12, [g4,c5,e5]@3 ~@29]/2", // Bbsus2 C7 C
  P: "~@4 [f4,a4,c5]@3 ~ [f4,bb4,db5,d5] ~ [eb3,g4,bb4,eb5]@3 ~ [d3,f4,bb4,d5]@2, ~ f3 ~@2", // F Bb Eb Bb
  Q: "[~ [c3,f4,g4,c5]@17 ~@6]/3", R: "[~@4 [g4,c5,e5]@5 ~ [a4,d5,f5]@10 ~@12, ~@10 e5 ~@21]/2",
  S: "[~@4 [a4,d5,f5]@5 ~ [g4,c5,e5]@9 ~@13]/2", // Dm C
  T: "[~@4 [g4,b4,d5]@5 ~ [g4,c5,e5]@9 ~ [a4,db5,e5]@5 ~ [a4,d5,f5]@3 ~ [g4,c5,e5]@2]/2", // G C A Dm C
  U: "[~@2 [f4,bb4,d5]@8 ~@2 [bb4,c5,e5]@7 ~@13]/2", V: "[a5,c6,f6]@4 [g5,c6,e6]@3 ~ [g5,bb5,eb6]@3 ~ [f5,bb5,d6]@4",
  W: "[e5,g5,c6]@3 ~ [d5,g5,b5]@3 ~ [e5,g5,c6]@3 ~ [db5,gb5,bb5]@3 ~", // C G C Gb
  X: "[eb5,gb5,b5]@3 ~ [b4,e5,ab5]@3 ~ [db5,e5,a5]@3 ~ [a4,d5,gb5]@4", Y: "[b4,d5,g5]@3 ~ [g4,c5,e5]@3 ~ [bb4,c5,f5]@8",
  Z: "[c4,bb4,c5,g5]@7 ~@9", AA: "~@12 [c5,e5,c6] ~ [d5,f5,d6] ~",
  AB: "[e5,g5,e6]@2 ~ [c5,e5,c6]@2 ~@7 [e5,c6] ~ [f5,d6] ~", AC: "[g5,e6]@2 ~ [e5,c6]@2 ~@7 [e5,c6] ~ [f5,d6] ~",
  AD: "[g5,e6]@2 ~ [e5,c6] ~@2 [a5,c6,f6] ~ [f5,a5,c6,f6]@2 ~@6", // C F
})).s("gm_brass_section").gain(0.71).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B C B D E F ~ G B C B D H F ~@18 I J K B D L F ~@18 M ~ N O P Q R S T U V@2 W X Y Z AA AB ~@18 AC ~ AD AE AF@3 AG
  AH AI AJ AK AL AM AL AN AO AP AQ AR AS
>`.pickRestart({
  A: "f5@3 ~ [c4,e4,c5] ~ [c4,f4,d5] ~ [c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [c4,f4,d5] ~", // C Dm7 C Dm7
  B: "[c4,f4,d5]@2 ~ [c4,d4,bb4] ~@2 [c4,f4,g4,c5] ~ [c4,f4,g4,c5]@3 ~ [c4,f4,a4]@4", // Dm7 Gm Csus4 F
  C: "f5 ~ f5@2 [c4,e4,c5] ~ [c4,f4,d5] ~ [c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [c4,f4,d5] ~", // C Dm7 C Dm7
  D: "f5 ~ f5 ~ eb5 ~ [f4,bb4,eb5] ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5] ~@2 [f4,bb4,c5] ~", // Ebsus2 Bb Fsus4
  E: "[f4,bb4,c5]@2 ~ [f4,bb4,d5] ~@2 [f4,bb4]@2 ~ [f4,bb4]@2 ~ [f4,a4,c5]@3 ~, ~@6 c5 ~@2 c5 ~@6", F: "f5 ~ f5 ~@13",
  G: "f5@2 ~@2 [c4,e4,c5] ~ [c4,f4,d5] ~ [c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [c4,f4,d5] ~", // C Dm7 C Dm7
  H: "[f4,bb4,c5]@2 ~ [f4,bb4,d5] ~@2 [bb4,c5]@2 ~ [f4,c5]@2 ~ [f4,a4,c5]@3 ~, ~@6 f4 ~@2 bb4 ~@6", // Fsus4 Bb Bbsus2 F5 F
  I: "f5@2 ~@2 [c4,e4,c5] ~ [d4,f4,d5] ~ [e4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [d4,f4,d5] ~", // C Dm Em C Dm
  J: "[d4,f4,d5]@2 ~ [d4,bb4] ~@2 [c4,f4,g4,c5] ~ [c4,f4,g4,c5]@3 ~ [c4,f4,a4]@4", // Dm Gm Csus4 F
  K: "f5 ~ f5 ~ [c4,e4,c5] ~ [c4,f4,d5] ~ [c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [c4,f4,d5] ~, ~@8 db5 ~@7", // C Dm7 C Dm7
  L: "[f4,bb4,c5]@2 ~ [f4,bb4,d5] ~@2 [f4,bb4,c5]@2 ~ [f4,c5]@2 ~ [f4,a4,c5]@2 ~@2, ~@9 bb4 ~@6", M: "f5@5 ~@11",
  N: "[e4,c5]@3 [f4,d5]@3 [g4,e5]@2 [e4,c5]@4 [f4,d5]@4", O: "[d4,bb4]@3 [e4,c5]@2 [f4,d5]@3 [c4,a4]@4 [d4,bb4]@4",
  P: "[bb3,g4]@4 [c4,a4]@2 ~@2 [e4,c5]@3 [f4,d5]@2 [g4,e5]@3", // Eb F C Dm C
  Q: "[e4,c5]@4 [f4,d5]@4 [d4,bb4]@3 [e4,c5]@2 ~ f4@2, ~@13 d5@2 ~", R: "[c4,a4]@4 [d4,bb4]@4 [bb3,g4]@3 ~ f4@4",
  S: "e4 eb4 d4 c4", T: "b3 c4 gb3 b3", U: "e3 a3 d3 g3",
  V: "[c3@4 ~@8 [c3,g3,c4]@8 [f2,f3] ~@3 [c4,e4,c5] ~ [d4,f4,d5] ~ [e4,g4,e5]@2 ~ [c4,e4,c5], ~@4 f3@15 ~ f5@2 ~@10]/2", // C5 F C Dm Em C
  W: "~@2 [c4,f4,d5] ~ [c4,f4,d5]@2 ~ [c4,d4,bb4] ~@2 [c4,f4,g4,c5] ~ [c4,f4,g4,c5]@3 ~", // Dm7 Gm Csus4
  X: "[c4,f4,a4]@4 f5 ~ f5 ~ [c4,e4,c5] ~ [c4,f4,d5] ~ [c4,g4,e5]@2 ~ [c4,e4,c5]", // F C Dm7 C
  Y: "~@2 [c4,f4,d5] ~ [c4,f4,d5]@2 ~ [c4,d4,bb4] ~@2 [c4,f4,g4,c5] ~ [c4,f4,g4,c5]@4", // Dm7 Gm Csus4
  Z: "[c4,f4,a4]@3 ~ f5 ~ f5 ~ eb5 ~ [f4,bb4,eb5] ~ [f4,bb4,eb5]@2 ~ [f4,bb4,d5]", // F Ebsus2 Bb
  AA: "~@2 [f4,bb4,c5] ~ [f4,bb4,c5]@2 ~ [f4,bb4,d5] ~@2 [f4,bb4,c5]@2 ~ [f4,bb4,c5]@2 ~", // Fsus4 Bb Fsus4
  AB: "[f4,a4,c5]@4 f5 ~ f5 ~@9", AC: "~@4 f5@3 ~@9", AD: "~@4 [e4,c5]@3 [f4,d5]@3 [g4,e5]@2 [e4,c5]@4",
  AE: "[f4,d5]@4 [d4,bb4]@3 [e4,c5]@2 [f4,d5]@3 [c4,a4]@4", // Dm Gm C Dm F
  AF: "[[d4,bb4]@4 [bb3,g4]@4 [c4,a4]@2 ~@2 [e4,c5]@3 [f4,d5]@3 [g4,e5]@2 [e4,c5]@4 [f4,d5]@4 [d4,bb4]@3 [e4,c5]@2 ~ f4@2 [c4,a4]@4 [d4,bb4]@4 [bb3,g4]@4, ~@11 d5 ~@4]/3", // Gm Eb F C Dm C Dm Gm …
  AG: "f4 e4 eb4 d4", AH: "c4 b3 c4 gb3", AI: "b3 e3 a3 d3", AJ: "g3 c3 f3@2",
  AK: "[c3,c4]@7 ~ f5@2 ~@2 [c4,e4,c5] ~ [c4,f4,d5] ~", // C Dm7
  AL: "[c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [c4,f4,d5] ~ [c4,f4,d5]@2 ~ [c4,d4,bb4] ~@2 [c4,f4,g4,c5] ~", // C Dm7 Gm Csus4
  AM: "[c4,f4,g4,c5]@3 ~ [c4,f4,a4]@4 f5 ~ f5@2 [c4,e4,bb4,c5] ~ [c4,f4,d5] ~", // Csus4 F C7 Dm7
  AN: "[c4,f4,g4,c5]@3 ~ [c4,f4,a4]@4 f5 ~ f5 ~ eb5@2 [f4,bb4,eb5] ~", // Csus4 F Ebsus2
  AO: "[f4,bb4,eb5]@2 ~ [f4,bb4,d5] ~@2 [f4,bb4,c5] ~ [f4,bb4,c5]@2 ~ [f4,bb4,d5] ~@2 [bb4,c5] ~, ~@7 f4", // Ebsus2 Bb Fsus4 Bb Bbsus2
  AP: "~ [bb4,c5] ~@2 [f4,a4,c5]@3 ~ f5 ~ f5 ~ [e4,c5] ~ [f4,d5] ~, ~ f4@2 ~@13", // Bbsus2 F C Dm
  AQ: "[g4,e5]@2 ~ [e4,c5] ~@4 f5 ~ f5 ~ [c4,e4,c5] ~ [c4,f4,d5] ~", // C Dm7
  AR: "[c4,g4,e5]@2 ~ [c4,e4,c5] ~@4 f5 ~ f5@2 [c4,e4,c5] ~ [c4,f4,d5] ~", // C Dm7
  AS: "[c4,g4,e5]@2 ~ [c4,e4,c5] ~@2 [f3,a3,c4,f4,f5,f6] ~ [f3,a3,c4,f4,f5,f6]@2 ~@6", // C F
})).s("gm_string_ensemble_1").gain(0.5).pan(0.4)

// chords · synth strings 2 · "SYN STRING"
const synth_strings_2 = note(`<
  ~@7 A@2 ~@6 B@3 C@4 D@3 E@3 F@3 G@3 H ~@5 I@3 J@4 K@4 L@5 M@3 N ~@5 O P Q R S@2 ~@5 T U@2 V@7 W@8 X@2 ~@6 Y Z AA AB AC
  ~ AD ~ AE ~ AF AG AH AI
>`.pickRestart({
  A: "[[c3,c4]@4 [d3,d4]@2 [eb3,eb4]@3 ~ [d3,d4]@3 ~ [c3,c4]@18]/2", // C D Eb D C
  B: "[[c3,c4]@4 [d3,d4] ~ [eb3,eb4]@3 ~ [d3,d4]@4 ~@4 c5@28 ~@2, ~@7 c4@16 ~, ~@7 c3@15 ~@2]/3", // C D Eb D
  C: "[[a3,c4]@15 ~ [bb3,d4]@8 e4@8 a3@8 bb3@2 ~ [a3,c4]@3 ~@2 [g3,bb3]@15 ~, f3@24 c4@15 ~ d4@23 ~, ~@24 g3@6 ~@2 f3@13 ~ f3@17 ~]/4", // Am Bb Am Gm
  D: "[c4@8 ~@8 bb3@7 ~ [c3,g3,e4]@8 [a3,f4]@6 ~@2 [c4,f4,bb4]@2 ~ [f4,a4] ~@2 [c4,d4,f4]@2, [f3,f4]@12 ~@4 f3@5 ~@3, a3@5 ~@11, ~@8 d4@16 c4@13 ~@6 c4@2 ~@3]/3", // C Dm Fsus4 F Dm7 F
  E: "[[c3,e4]@16 ~@17 c6@5 ~@2 a5@8, g4@31 ~@17, c4@7 ~ [g3,bb3,d4]@8 [c3,c4,e4,g4]@3 [d3,d4,f4,a4]@5, ~@25 d6@9 ~@14]/3", // C Gm C Dm
  F: "[[g3,bb3,d4,g4]@15 ~ [d3,d4,f4,a4]@5 ~ [e4,f5]@7 g5@3 a5@3 g5@13, g5@22 g4@25 ~, ~@22 [c3,c4]@10 [g3,bb3,d4]@15 ~]/3", // Gm Dm Fmaj7 C Gm
  G: "[[g3,b3,d4,g4,d6]@6 [g3,c4,e4,g4]@9 ~ [a3,e4,a4]@5 ~ [d3,a3,d4,f4,f6]@4 ~ g3@2 ~ [bb2,f3,bb3,d4,d6]@10 [g3,c4,d4]@6 ~@2, ~@6 e6@16 ~@4 e6@4 ~@10 [b3,e4] ~@7, ~@13 [c3,c4,e4] ~@6 [c3,c6]@4]/3", // G C A5 Dm Bb Gsus4 E5 C
  H: "[f2,a3,c4,f4,f5]@3 ~@13", // F
  I: "[[c3,c4]@4 d3@2 [eb3,eb4]@3 ~ [d3,d4]@3 ~@19 c2@13 ~@3, ~@4 d4 ~@9 c3@34, ~@7 c4@16 ~]/3", // C Eb D
  J: "[[a3,c4]@15 ~ [bb3,d4]@8 [g3,e4]@8 a3@8 bb3@2 a3@4 ~@3 d3@15, f3@23 ~ c4@16 d4@23 ~, ~@16 f3@15 ~, ~@48 [g3,bb3]@15 ~]/4", // Am Bb C Gm
  K: "[c4@8 ~@8 bb3@8 [g3,e4]@6 ~@2 [a3,f4]@6 ~@2 [c4,f4,bb4]@2 ~ [f4,a4] ~@2 [d4,f4]@2 [c3,e4,g4]@16, f3@23 ~ e3@8 f3@16 ~@16, [a3,f4] ~@3, ~@8 d4@16 c4@13 ~@6 c4@2 ~ c4@17 ~]/4", // C Dm Fsus4 F Dm C Dm
  L: "[~@4 d6@12 g4!2 ~@2 g4@2 [d4,a5]@10 [g3,bb3,d4]@15 ~@2 a5@5 g5@6 ~@14 g5@2 a5@4, g3@21 ~ a4@8 ~@24 [c4,e4]@8 ~@18, [bb3,d4,f4]@15 ~ [c4,e4]@5 ~ f4@24 ~@2 [a3,d4,f4,a4]@5 ~ [g3,g4]@10 [g3,bb3,d4,f4]@15 ~, ~@17 c6@6 ~@9 g5@18 ~@10 f5@14 ~@6]/5", // D5 Gm C Bb C Dm G Gm7
  M: "[[g3,b3,d4,g4]@5 ~@3 e6 ~@7 [a3,db4,e4,a4]@5 ~ [a3,d4,f4]@2 ~@3 e6@2 ~ [f3,bb3]@10 [g3,c4]@6 ~@2, d6@9 e6@13 f6@4 ~@3 d6@10 ~ c6@8, ~@2 [c4,e4,g4]@3 ~@5 d4@5 ~, ~@6 g3@7 ~@13 [g3,c4,e4]@2 ~@20]/3", // G A Dm Bb5 C5 C
  N: "[f3,a3,c4,f4]@5 ~@11, f5@3 ~@13", O: "~@3 [f4,f5]", P: "[e4,e5] [eb4,eb5] [d4,d5] [c4,c5]",
  Q: "[b3,b4] [c4,c5] [gb3,gb4] [b3,b4]", R: "[e3,e4] [a3,a4] [d3,d4] [g3,g4]",
  S: "[[c3,c4]@4 [f3,f4]@8 ~ [ab3,a3] ~@6 [f3,a3,c4,f4]@2 ~@10, ~@12 [c4,d4,g4]@7 ~@13]/2", // C F Amaj7 F Csus2
  T: "~@4 [c3,c4]@4 [d3,d4]@2 [eb3,eb4]@3 ~ [d3,d4]@2", U: "[~@5 c2@11, ~ [c3,c4]@15]/2",
  V: "[~@4 [a3,c4]@15 ~ [bb3,d4]@8 [g3,e4]@8 a3@7 ~ bb3@2 ~ a3@3 ~@2 [bb3,d4]@16 c4@8 ~@7 bb3@7 ~@2 [g3,e4]@8 [a3,f4]@4 ~@4 [c4,f4,bb4]@2 ~ [c4,f4,a4], ~@4 f3@24 c4@24 g3@14 ~@2 a3@15 ~@29, ~@18 f3@15 ~ [f3,f4]@12 ~@4 f3@6, ~@9 f4@4 ~@6 d4@4 c4@3 ~@2]/7", // Am Bb C Bb C Dm Fsus4 F
  W: "[~@2 [c4,d4,f4]@2 ~@3 c3@12 ~@5 d6@12 [g3,c4,e4,g4,c6]@6 [a3,d4,f4,a4,a5]@10 [g3,bb3,d4,f4,g5]@16 [a3,d4,f4,a4,f5]@6 [g3,c4,g4,g5]@10 d6@12 c6@4 [g3,b3,d4,g4,d6]@6 [c4,e4,g4]@9 ~@2 e6@5 [a3,d4,f4,f6]@3 ~ [g3,c4,e6]@2, ~@4 [c4,e4,g4]@14 ~@2 [g3,bb3,d4,g4]@15 ~@39 e4@8 ~@2 [g3,bb3,d4,f4]@15 ~@7 e6@10 ~@12, ~@106 g3@7 ~@3 [a3,db4,e4,a4]@5 ~@5 e4 ~]/8", // Dm7 C Dm Gm7 Dm C5 G C …
  X: "[~ [bb2,bb3,d6]@5 [g3,c4]@3 ~ [f2,a3,c4,f4]@2 ~@4, ~ [f3,d4]@8 ~@7, ~@12 c3@11 ~@9, ~@6 c6@4 f5 ~@5]/2", // Bb C5 F Dm
  Y: "[f4,f5] [e4,e5] [eb4,eb5] [d4,d5]", Z: "[c4,c5] [b3,b4] [c4,c5] [gb3,gb4]", AA: "[b3,b4] [e3,e4] [a3,a4] [d3,d4]",
  AB: "[g3,g4]@4 c3@4 ~@6 ab4 ~, ~@4 c4@11 ~, ~ [f3,f4]", AC: "~ bb3@5 ~@2 [f3,a3,c4,f4]@3 ~@5, [c4,d4,g4]@7 ~@9",
  AD: "~@8 [f4,a4,c5,f5] ~ [f4,f5]@2 ~@4, ~@10 [a4,c5] ~@5", // F Am
  AE: "~@8 [f4,a4,c5,f5] ~ [f4,a4,c5,f5] ~ [eb4,g4,bb4,eb5]@3 ~", AF: "~@8 [c3,c4]@3 ~ [e5,c6] ~ [f5,d6] ~",
  AG: "[g5,e6]@2 ~ [e5,c6] ~@4 [f4,a4,c5,f5] ~ [f4,a4,c5,f5]@2 [e5,c6] ~ [f5,d6] ~", // C F C Dm
  AH: "[g5,e6]@2 ~ [e5,c6] ~@4 [f4,a4,c5,f5] ~ [f4,a4,c5,f5] ~ [e5,c6] ~ [f5,d6] ~", // C F C Dm
  AI: "[g5,e6]@2 ~ [e5,c6] ~@2 [f4,c5,a5,c6,f6] ~ [f4,c5,a5,c6,f6]@2 ~@6", // C F
})).s("gm_synth_strings_2").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A ~@7 A ~@2 B@2 C D B@2 C E B F B F B G H D I ~@5 A ~@2 B@2 J K B@2 J D B F B L B F H D I ~@5 M N@3 O ~@6 P Q ~
  R@2 S T U R S T U V R W R V@2 X Y ~@6 N@3 Z B ~ AA ~ AB ~ D AA@2 E
>`.pickRestart({
  A: "x ~ x!2 ~ x ~ x", B: "x!2", C: "x ~@3 x ~@2 x", D: "~ x", E: "~@3 x!2 ~@3", F: "x ~@2 x ~@4", G: "x ~@2 x ~@3 x",
  H: "x ~@2 x ~@2 x!2", I: "x", J: "x ~@7 x ~@2 x ~@2 x ~", K: "~@4 x ~@2 x", L: "x ~@2 x ~@2 x ~@9", M: "~@3 x",
  N: "x!4", O: "x!2 ~ x", P: "~@2 x ~ x!2 ~ x", Q: "~ x ~@6", R: "~ x ~ x", S: "~@4 x ~@7 x ~@2 x", T: "~ x ~@4 x ~",
  U: "~ x!2 ~@3 x ~", V: "~@2 x ~@2 x ~@2", W: "~@4 x ~@2 x ~@2 x ~@5", X: "x!2 ~@4 x ~", Y: "x!2 ~@2", Z: "x!3 ~",
  AA: "~@4 x!2 ~@2", AB: "~@4 x!3 ~",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
// … 37 more lines

More by Foster David