Strudelify

Sommarfågel by Wintergatan

Wintergatan

KeyE♭ majorTempo180 bpm
0:00/0:00
// Sommarfågel by Wintergatan — Wintergatan
// 180 bpm, 3/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5475794; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 222 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · glockenspiel
const glockenspiel = note(`<
  ~@16 A B C D E F G ~ A B C D H I ~@2 A B J K L M N O P@3 D H I ~@2 A B C D E F ~@2 A B C D H I ~@2 A B J K L M N O P@3
  D H I ~@60 A B C D E F G ~ A B C D H I ~@2 A B J K L M N O P@3 D H I ~@2 A B C D E F G ~ A B C D H I ~@2 A B J K L M N
  O P@3 D H I ~@20 Q@2
>`.pickRestart({
  A: "c7 g7", B: "f7 eb7", C: "c7 bb6", D: "eb7@5 ab6@5 ~ bb6@5", E: "g6 f6", F: "bb6 eb6", G: "d6@11 ~@5", H: "g6 ab6",
  I: "bb6@5 c7@5 ~ d7@5", J: "bb7 g7", K: "f7@5 d7@5 ~ eb7@5", L: "d7 eb7", M: "f7 g7", N: "f7@11 ~@5",
  O: "~@5 eb7@8 d7@3", P: "[c7@8 g7@11 f7@8 eb7@10 c7@5 ~ bb6@5]/3", Q: "[c6,g6]/2",
})).s("gm_glockenspiel").gain(0.64)

// other · vibraphone · "Vibraphone 1"
const vibraphone = note(`<
  A@2 B C A@2 D E F A B G A@2 H I ~ J ~ K ~ L M N ~ O ~ P Q R S T U V W X Y@2 Z AA U AB AC AD AE AF ~@2 AG AH AI AJ AK
  AL ~@2 AG AH AI AJ AM AN ~@2 AG AO AP AQ AR AS AT AU AV@3 AW AM AN ~@2 AX ~ AY AZ BA AZ BB BC ~ BD BE BF BG BH BI BJ
  BK BL BA AZ BM AZ BN BC ~ BO BP BQ BR BS BT BU BV BW BX BY@2 BZ@2 CA@2 CB CC BY@2 CD CE CF@2 CG CH CI@2 CJ@2 CK ~ CL ~
  J ~ K ~ CM CN CO ~ CP ~ CQ CR CS CT ~@2 CU ~ CV ~ CW CX CY ~ O ~ K ~ CZ ~@3 J ~ K ~ L DA N ~ O ~ P Q R S DB U V W X
  Y@2 Z AA U AB AC AD AE DC DD DE DF DG AG DH DI DJ DK DL DM DN DO DP DQ DN DR DS DT DU DV@2
>`.pickRestart({
  A: "c5@3 c4@2 g4@3 g5@3 c4@2 g4@3", B: "c5@3 ab4@2 g4@3 g5@3 c4@2 g4@3", C: "c5@3 eb4@2 g4@3 g5@3 f4@2 g4@3",
  D: "c5@3 c4@2 g4@3 g5@3 f5@2 g5@3", E: "ab5@3 f4@2 g4@3 g5@3 ab5@2 c6@3", F: "g5@3 c4@2 g4@3 g5@3 c4@2 g4@3",
  G: "c5@3 g5@2 ab4@3 d5@3 eb5@2 g5@3", H: "c5@3 c4@2 g4@3 d5@3 c5@2 d5@3", I: "eb5@3 c4@2 g4@3 d5@3 c5@2 bb4@3",
  J: "[g4,eb5]@11 ~@5", K: "[bb4,g5]@11 ~@5", L: "[bb4,d5]@11 bb4@2 c5@3", M: "d5@3 eb5@2 g5@3 d6@3 g5@3 ~@2",
  N: "bb5@3 g6@2 g5@5 ~ bb5@5", O: "[eb5,c6]@11 ~@5", P: "[f5,ab5]@11 ~@5", Q: "~@3 c4@2 eb4@3 ab4@3 c5@2 eb5@3",
  R: "eb5@3 c5@3 ~@2 c5@3 ~@2 d5@3", S: "~@3 f5@2 c6@3 d6@3 ~@2 g5@3", T: "~@3 f6@2 f5@5 ~ d6@2 f5@3",
  U: "~@3 ab4@2 g5@3 ~@8", V: "[ab4,g5]@5 ~@6 ab4@2 g5@3", W: "~@3 bb4@2 g5@3 ~@8", X: "[bb4,g5]@5 ~@6 g5@2 bb4@3",
  Y: "~@3 c5@2 g5@3 ~@3 c5@2 g5@3", Z: "~@5 f5@3 bb5@3 f5@5", AA: "bb5@3 g5@2 bb5@5 ~ bb5@5",
  AB: "[ab5,c6]@11 ~@2 g5@3", AC: "c5@3 g5@3 ~@2 c5@3 ~@2 g5@3", AD: "eb5@3 c5@3 ~@2 c5@3 ~@2 c5@3",
  AE: "~@3 g4@2 eb5@3 ~@8", AF: "g5@11 ~@5", AG: "c5 g5", AH: "[f5,g5] eb5", AI: "c5 bb4",
  AJ: "[eb5,g5]@5 ab4@5 ~ bb4@5", AK: "g4 f4", AL: "[bb4,d5] eb4", AM: "g4 ab4", AN: "bb4@5 c5@5 ~ d5@5", AO: "f5 eb5",
  AP: "bb5 g5", AQ: "f5@5 d5@5 ~ eb5@5", AR: "d5 eb5", AS: "f5 g5", AT: "f5@11 ~@5", AU: "~@5 eb5@8 d5@3",
  AV: "[c5@8 g5@11 f5@8 eb5@10 c5@5 ~ bb4@5]/3", AW: "eb5@5 ab4@5 ~ bb4@5", AX: "[d5,f5]@5 ~@11",
  AY: "[c5,f5]@3 ~@2 [c5,f5]@3 [c5,f5]@3 ~@2 [c5,f5]@3", AZ: "~@5 [c5,f5]@3 ~@3 [c5,f5]@3 ~@2",
  BA: "~@5 [c5,f5]@3 [c5,f5]@3 ~@2 [c5,f5]@3", BB: "~@5 [bb4,eb5]@3 [bb4,eb5]@3 ~@2 [bb4,eb5]@3",
  BC: "~@5 [bb4,eb5]@3 ~@3 [bb4,eb5]@3 ~@2", BD: "~@5 bb4@5 ~ bb4@5", BE: "~@3 c5@2 g4@3 eb5@5 eb5@3",
  BF: "g4@3 bb4@2 d5@3 ~@3 f5@3 ~@2", BG: "~@3 ab4@2 g4@3 eb5@3 ~@2 eb5@3", BH: "~@3 f4@2 d5@3 ~@8",
  BI: "~@3 c5@2 g5@3 eb5@3 ~@2 g5@3", BJ: "~@5 [bb4,d5]@3 ~@3 [bb4,d5]@3 ~@2",
  BK: "ab4@3 ~@5 [c5,eb5]@3 ~@2 [c5,eb5]@3", BL: "~@3 g4@2 d5@3 ~@8", BM: "~@8 [c5,f5]@3 ~@2 [c5,f5]@3",
  BN: "~@8 [bb4,eb5]@3 ~@2 [bb4,eb5]@3", BO: "~@5 bb4@3 ~@3 bb4@3 ~@2", BP: "~@3 eb4@2 bb4@3 eb5@3 g4@2 ab4@3",
  BQ: "~@3 f4@2 d5@3 ab4@3 d4@3 ~@2", BR: "~@3 g4@2 ab4@3 eb5@3 ~@2 eb5@3", BS: "~@5 d5@3 ~@8",
  BT: "~@3 eb4@2 bb4@3 eb5@3 eb4@2 eb5@3", BU: "~@3 d4@2 d5@3 ~@3 d4@3 ~@2", BV: "eb4@3 ~@2 g4@3 eb5@3 ~@2 eb5@3",
  BW: "~@3 d5@2 bb4@3 ~@8", BX: "c5@5 g5@5 ~ f5@5", BY: "[eb5@3 d5@5 c5@5 bb4@5 ~ c5@2 g5@5 ~ f5@5]/2",
  BZ: "[eb5@3 d5@5 eb5@5 f5@5 ~ c5@2 ab5@5 ~ g5@5]/2", CA: "[f5@3 eb5@5 d5@5 c5@5 ~ c5@2 f5@3 g5@3 f5@2 g5@3]/2",
  CB: "ab5@3 c5@2 f5@3 g5@3 ab5@2 c6@3", CC: "g5@5 g5@5 ~ f5@5", CD: "eb5@3 d5@2 c5@3 g5@3 f5@2 eb5@3",
  CE: "d5@5 f5@5 ~ eb5@5", CF: "[d5@3 c5@5 d5@5 c5@5 ~ bb4@2 c5@3 d5@3 c5@2 d5@3]/2",
  CG: "eb5@3 g4@3 ~@2 d5@3 c5@2 bb4@3", CH: "c5@3 f5@2 c6@5 ~ bb5@5",
  CI: "[ab5@3 g5@5 f5@5 eb5@5 ~ f5@2 c6@5 ~ bb5@5]/2",
  CJ: "[ab5@3 g5@2 c5@3 ab5@5 bb5@5 ~ bb4@2 d5@3 bb4@3 eb5@2 bb4@3]/2", CK: "f5@3 g5@3 ~@2 ab5@3 ~@2 bb5@3",
  CL: "[f5,bb5]@11 ~@5", CM: "[d5,f5]@11 ~@5", CN: "~@3 eb4@2 g4@3 d5@3 g5@2 g4@3",
  CO: "g5@3 g5@2 g4@3 bb3@3 bb4@2 d4@3", CP: "[f5,c6]@11 ~@5", CQ: "[eb5,ab5]@11 ~@5",
  CR: "~@3 c4@2 eb4@3 ~@3 c5@2 d5@3", CS: "eb5@3 ~@13", CT: "g4@11 ~@5", CU: "[ab4,g5]@11 ~@5", CV: "[f4,d5]@11 ~@5",
  CW: "[g4,f5]@11 ~@5", CX: "~@5 f4@3 bb4@3 f4@5", CY: "bb5@3 g4@3 ~@10", CZ: "[g4,g5]@11 ~@5",
  DA: "d5@3 eb5@2 g5@3 d6@3 g5@5", DB: "~@3 f6@2 f5@3 ~@3 d6@2 f5@3", DC: "g5@11 ~@2 bb4@3",
  DD: "~@3 bb4@2 bb5@3 bb5@3 f5@2 bb5@3", DE: "d5@3 d5@2 g5@3 b4@3 d5@2 d6@3", DF: "f5@3 b5@3 ~@2 d5@3 c5@2 d5@3",
  DG: "eb5@8 d5@3 c5@2 bb4@3", DH: "~@8 bb5@3 ~@2 g5@3", DI: "~@8 eb5@3 d5@2 bb4@3",
  DJ: "~@3 bb4@2 c5@3 d5@3 eb5@2 bb5@3", DK: "g5@3 d5@2 eb5@3 c6@3 ~@5", DL: "d5@3 f5@2 g5@3 bb5@3 ~@2 c5@3",
  DM: "~@3 eb5@2 f5@3 g5@3 f5@2 g5@3", DN: "ab5@3 ~@5 g5@3 ab5@2 c6@3", DO: "g5@3 ~@5 g5@3 ~@2 g5@3",
  DP: "f4@3 bb4@2 d5@3 bb5@3 ~@2 c6@3", DQ: "~@8 eb5@3 f5@2 g5@3", DR: "g5@5 g6@3 c6@3 ~@5",
  DS: "~@5 f6@3 bb5@3 ~@2 eb6@3", DT: "d6@5 ~@3 d6@3 c6@2 d6@3", DU: "eb6@5 ~@3 d6@3 c6@2 bb5@3", DV: "eb6/2",
})).s("gm_vibraphone").gain(0.33)

// other · violin · "Violin 1"
const violin = note(`<
  ~@12 A@8 B@2 C@2 D@6 C@2 E@4 F@4 E@4 B@2 ~@2 G@2 H I B@2 C@2 G@2 J K H K L@2 M N O P Q R S T M N U Q R V ~@2 W X Y Z
  AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM AN Z AA AB AC AO AP AQ AR AS AT AU AR AV@2 AU AW AX H AY K I AZ AJ K I H I AX
  H BA BB AW AX H AY K J BC BD@8 X BE@6 BA BB AW AX H AY BF@2 BG BH K AY BI BJ BK@3 X BL BM BN BO BP BQ BR BS BL BM BN
  BO BT BU@2 X BL BM BV BW BX BY BZ CA CB@3 BO BT CC@4 X CD@6 AZ AJ CE@2 CF@4 CG X ~@2
>`.pickRestart({
  A: "c5/4", B: "eb5/2", C: "d5/2", D: "[c5@35 eb5@61]/6", E: "[c5@35 d5@29]/4", F: "[eb5@35 bb4@29]/4", G: "c5/2",
  H: "eb5", I: "f5", J: "ab5", K: "g5", L: "f5/2", M: "c5@3 ~@2 c5@3 ~@3 c5@3 ~@2", N: "c5@3 c5@3 ~@2 c5@3 ~@2 c5@3",
  O: "~@3 d5@3 ~@2 d5@3 ~@2 d5@3", P: "~@3 d5@2 d5@3 ~@3 d5@3 ~@2", Q: "eb5@3 ~@2 eb5@3 ~@3 eb5@3 ~@2",
  R: "eb5@3 eb5@3 ~@2 eb5@3 ~@2 eb5@3", S: "~@3 bb4@3 ~@2 bb4@3 ~@2 bb4@3", T: "~@3 bb4@2 bb4@3 ~@3 bb4@3 ~@2",
  U: "bb4@3 ~@2 bb4@3 ~@3 bb4@3 ~@2", V: "~@3 eb5@2 d5@3 ~@3 d5@3 ~@2", W: "~@8 d6@3 c6@2 d6@3",
  X: "eb6@8 d6@3 c6@2 bb5@3", Y: "c6@3 ~@2 c6@3 ~@3 bb5@3 ~@2", Z: "ab5@3 g5@3 ~@2 f5@3 ~@2 eb5@3",
  AA: "c5@3 f5@2 c6@3 ~@3 bb5@3 ~@2", AB: "ab5@3 g5@3 ~@2 ab5@3 ~@2 bb5@3", AC: "bb4@3 eb5@2 bb5@3 ~@3 ab5@3 ~@2",
  AD: "g5@3 f5@3 ~@2 eb5@3 ~@2 d5@3", AE: "~@3 bb4@2 d5@3 bb4@3 eb5@2 bb4@3", AF: "f5@3 g5@3 ~@2 ab5@3 ~@2 bb5@3",
  AG: "g5!2", AH: "~@8 bb5@3 ~@2 eb5@3", AI: "~@8 g5@3 f5@2 g5@3", AJ: "ab5@8 g5@3 ab5@2 c6@3", AK: "g5 c6",
  AL: "[d5@3 f5@2 g5@3 bb5@3 ~@2 c5@5 ~ eb5@2 f5@3 g5@3 f5@2 g5@3]/2", AM: "ab5@5 ~@3 g5@3 f5@2 eb5@3",
  AN: "c5@3 ~@2 c6@3 ~@3 bb5@3 ~@2", AO: "g5@3 f5@3 ~@2 eb5@3 ~@2 f5@3", AP: "~@3 bb4@2 f5@3 bb4@3 g5@2 bb4@3",
  AQ: "ab5@3 bb5@3 ~@2 c6@3 ~@2 d6@3", AR: "g5 bb5", AS: "f5@8 ab5@5 g5@3", AT: "c5@8 g5@3 f5@2 g5@3",
  AU: "ab5@8 g5@3 f5@2 eb5@3", AV: "[f5@8 g5@5 eb5@8 ~@3 g5@3 f5@2 g5@3]/2", AW: "c5", AX: "d5", AY: "bb5",
  AZ: "g5@8 g5@3 f5@2 g5@3", BA: "d5@8 d5@3 c5@2 d5@3", BB: "eb5@8 d5@3 c5@2 bb4@3",
  BC: "bb5@5 ~@6 [f5,gb5] g5 ab5 [a5,bb5] b5", BD: "[c6@120 d6@3 c6@2 d6@3]/8", BE: "[g5@85 f5@8 eb5@3]/6",
  BF: "[g5@21 f5@8 eb5@3]/2", BG: "f5@8 f5@3 eb5@2 f5@3", BH: "g5@8 ab5@3 g5@2 f5@3", BI: "d6", BJ: "eb6",
  BK: "[bb5@21 c6@5 ~ d6@11 ~@2 d6@3 c6@2 d6@3]/3", BL: "c6 g6", BM: "f6 eb6", BN: "c6 bb5", BO: "eb6@5 ab5@5 ~ bb5@5",
  BP: "g5 f5", BQ: "bb5 eb5", BR: "d5@8 eb5@3 d5@2 eb5@3", BS: "f5@8 g5@3 ab5@2 bb5@3", BT: "g5 ab5",
  BU: "[bb5@5 c6@5 ~ d6@11 ~@2 d6@3 c6@2 d6@3]/2", BV: "bb6 g6", BW: "f6@5 d6@5 ~ eb6@5", BX: "d6 eb6", BY: "f6 g6",
  BZ: "f6@11 ~@5", CA: "~@5 eb6@8 d6@3", CB: "[c6@8 g6@11 f6@8 eb6@10 c6@5 ~ bb5@5]/3",
  CC: "[bb5@5 c6@5 ~ d6@43 ~@2 d6@3 c6@2 d6@3]/4", CD: "[c6@31 bb5]/6", CE: "g5/2",
  CF: "[g5@35 ~@2 g6@16 f6@8 eb6@3]/4", CG: "d6@8 d6@3 c6@2 d6@3",
})).s("gm_violin").gain(0.26)

// other · violin · "Violin 2"
const violin_2 = note(`<
  ~@12 A@8 B@2 C@2 D@6 C@2 E@4 F@4 E@4 B@2 ~@2 G@2 H I B@2 C@2 G@2 J K H K L@2 M N O P Q R S T M N U Q R V ~@2 W X Y Z
  AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM AN Z AA AB AC AO AP AQ AR AS AT AU AR AV@2 AU AW AX H AY K I AZ AJ K I H I AX
  H BA BB AW AX H AY K J BC BD@8 X BE@6 BA BB AW AX H AY BF@2 BG BH K AY BI BJ BK@3 X BL BM BN BO BP BQ BR BS BL BM BN
  BO BT BU@2 X BL BM BV BW BX BY BZ CA CB@3 BO BT CC@4 X CD@6 AZ AJ CE@2 CF@4 CG X ~@2
>`.pickRestart({
  A: "c4/4", B: "eb4/2", C: "d4/2", D: "[c4@35 eb4@61]/6", E: "[c4@35 d4@29]/4", F: "[eb4@35 bb3@29]/4", G: "c4/2",
  H: "eb4", I: "f4", J: "ab4", K: "g4", L: "f4/2", M: "c4@3 ~@2 c4@3 ~@3 c4@3 ~@2", N: "c4@3 c4@3 ~@2 c4@3 ~@2 c4@3",
  O: "~@3 d4@3 ~@2 d4@3 ~@2 d4@3", P: "~@3 d4@2 d4@3 ~@3 d4@3 ~@2", Q: "eb4@3 ~@2 eb4@3 ~@3 eb4@3 ~@2",
  R: "eb4@3 eb4@3 ~@2 eb4@3 ~@2 eb4@3", S: "~@3 bb3@3 ~@2 bb3@3 ~@2 bb3@3", T: "~@3 bb3@2 bb3@3 ~@3 bb3@3 ~@2",
  U: "bb3@3 ~@2 bb3@3 ~@3 bb3@3 ~@2", V: "~@3 eb4@2 d4@3 ~@3 d4@3 ~@2", W: "~@8 d5@3 c5@2 d5@3",
  X: "eb5@8 d5@3 c5@2 bb4@3", Y: "c5@3 ~@2 c5@3 ~@3 bb4@3 ~@2", Z: "ab4@3 g4@3 ~@2 f4@3 ~@2 eb4@3",
  AA: "c4@3 f4@2 c5@3 ~@3 bb4@3 ~@2", AB: "ab4@3 g4@3 ~@2 ab4@3 ~@2 bb4@3", AC: "bb3@3 eb4@2 bb4@3 ~@3 ab4@3 ~@2",
  AD: "g4@3 f4@3 ~@2 eb4@3 ~@2 d4@3", AE: "~@3 bb3@2 d4@3 bb3@3 eb4@2 bb3@3", AF: "f4@3 g4@3 ~@2 ab4@3 ~@2 bb4@3",
  AG: "g4!2", AH: "~@8 bb4@3 ~@2 eb4@3", AI: "~@8 g4@3 f4@2 g4@3", AJ: "ab4@8 g4@3 ab4@2 c5@3", AK: "g4 c5",
  AL: "[d4@3 f4@2 g4@3 bb4@3 ~@2 c4@5 ~ eb4@2 f4@3 g4@3 f4@2 g4@3]/2", AM: "ab4@5 ~@3 g4@3 f4@2 eb4@3",
  AN: "c4@3 ~@2 c5@3 ~@3 bb4@3 ~@2", AO: "g4@3 f4@3 ~@2 eb4@3 ~@2 f4@3", AP: "~@3 bb3@2 f4@3 bb3@3 g4@2 bb3@3",
  AQ: "ab4@3 bb4@3 ~@2 c5@3 ~@2 d5@3", AR: "g4 bb4", AS: "f4@8 ab4@5 g4@3", AT: "c4@8 g4@3 f4@2 g4@3",
  AU: "ab4@8 g4@3 f4@2 eb4@3", AV: "[f4@8 g4@5 eb4@8 ~@3 g4@3 f4@2 g4@3]/2", AW: "c4", AX: "d4", AY: "bb4",
  AZ: "g4@8 g4@3 f4@2 g4@3", BA: "d4@8 d4@3 c4@2 d4@3", BB: "eb4@8 d4@3 c4@2 bb3@3",
  BC: "bb4@5 ~@6 [f4,gb4] g4 ab4 [a4,bb4] b4", BD: "[c5@120 d5@3 c5@2 d5@3]/8", BE: "[g4@85 f4@8 eb4@3]/6",
  BF: "[g4@21 f4@8 eb4@3]/2", BG: "f4@8 f4@3 eb4@2 f4@3", BH: "g4@8 ab4@3 g4@2 f4@3", BI: "d5", BJ: "eb5",
  BK: "[bb4@21 c5@5 ~ d5@11 ~@2 d5@3 c5@2 d5@3]/3", BL: "c5 g5", BM: "f5 eb5", BN: "c5 bb4", BO: "eb5@5 ab4@5 ~ bb4@5",
  BP: "g4 f4", BQ: "bb4 eb4", BR: "d4@8 eb4@3 d4@2 eb4@3", BS: "f4@8 g4@3 ab4@2 bb4@3", BT: "g4 ab4",
  BU: "[bb4@5 c5@5 ~ d5@11 ~@2 d5@3 c5@2 d5@3]/2", BV: "bb5 g5", BW: "f5@5 d5@5 ~ eb5@5", BX: "d5 eb5", BY: "f5 g5",
  BZ: "f5@11 ~@5", CA: "~@5 eb5@8 d5@3", CB: "[c5@8 g5@11 f5@8 eb5@10 c5@5 ~ bb4@5]/3",
  CC: "[bb4@5 c5@5 ~ d5@43 ~@2 d5@3 c5@2 d5@3]/4", CD: "[c5@31 bb4]/6", CE: "g4/2",
  CF: "[g4@35 ~@2 g5@16 f5@8 eb5@3]/4", CG: "d5@8 d5@3 c5@2 d5@3",
})).s("gm_violin").gain(0.21)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  ~@16 A@2 B@2 C@4 D@4 E@2 F G H I@2 J K L@2 M H N@2 O P Q ~@2 R S T U V W X Y R S T U V Z AA AB AC AD AE AF S AG AH ~
  AI AJ AK@2 AL ~@53 AM ~ AM ~ AN ~ AO ~@33 R S T U V W X Y R S T U V Z AA AB AC AD AE AF S AG AH ~ AI AJ AK@2 AL ~@23
>`.pickRestart({
  A: "ab1/2", B: "bb1/2", C: "c2/4", D: "[ab1@35 f2@29]/4", E: "g1/2", F: "g2@11 g2@5", G: "g2!2",
  H: "ab1@5 ab1@5 ~ ab1@5", I: "[ab1@3 ab1@5 ab1@5 ab1@5 ~ bb1@2 bb1@5 ~ bb1@5]/2", J: "bb1@3 bb1@5 bb1@5 bb1@3",
  K: "c2@5 c2@5 ~ c2@5", L: "[c2@3 c2@5 c2@5 c2@5 ~ g1@2 g1@5 ~ g1@5]/2", M: "g1@3 g1@5 g1@5 g1@3",
  N: "[ab1@3 ab1@5 ab1@5 ab1@5 ~ c2@2 c2@5 ~ c2@5]/2", O: "c2@3 c2@5 c2@5 c2@3", P: "eb2@5 eb2@5 ~ eb2@5",
  Q: "eb2@3 eb2@5 eb2@5 bb1@3", R: "c2@3 c2@3 ~@2 c2@5 bb1@3", S: "c2@3 c2@3 ~@2 c2@5 d2@3",
  T: "ab2@5 ~@3 eb2@3 g2@2 ab2@3", U: "g2@3 ab1@3 ~@2 ab1@5 bb1@3", V: "eb2@3 eb2@3 ~@2 eb2@5 d2@3",
  W: "~@3 eb2@3 ~@2 eb2@5 f2@3", X: "g2@3 g2@3 ~@2 g2@8", Y: "~@3 bb2@3 ~@2 bb2@8",
  Z: "bb1@3 c2@2 d2@3 eb2@3 d2@2 eb2@3", AA: "~@3 g2@2 g2@5 ~ bb2@5", AB: "~@3 bb2@2 bb2@3 bb2@3 ~@5",
  AC: "ab1@3 ab1@3 ~@2 ab1@5 ab1@3", AD: "ab1@3 g1@2 ab1@3 g1@3 ab1@2 a1@3", AE: "bb1@3 bb1@3 ~@2 bb1@5 bb1@3",
  AF: "d2@3 d2@2 d2@5 ~ d2@5", AG: "~@3 d2@2 eb2@3 d2@3 eb2@2 c2@3", AH: "db2@3 ~@13", AI: "~@5 ab1@5 ~ ab1@5",
  AJ: "ab1@3 ab1@3 ~@2 ab1@8", AK: "[ab1@3 ~@5 c2@5 c2@5 ~ c2@2 c2@5 ~ c2@5]/2", AL: "~@3 eb2@2 eb2@3 eb2@3 eb2@2 ~@3",
  AM: "~@5 f1@3 f1@3 ~@5", AN: "~@5 bb1@3 bb1@3 ~@5", AO: "bb1@5 ~@11",
})).s("gm_electric_bass_pick").gain(0.22)

// bass · electric bass pick · "Bass Guitar" · soft notes
const bass_soft = note(`<
  ~@69 A B C D ~ E ~ F@2 G H ~@2 I J I K L M N ~ O P Q R S P T P I U V W X Y Z AA AB AC AD AE AB AC AF AC AG AH AG AI
  AJ@4 AK AL AK AM AN AO AC ~ AP AQ AP AR AS AT ~@2 AU@2 AV@2 AW@2 ~@2 AU@2 AX@2 AY@2 ~@2 AU@2 AV@2 AW@2 AZ@2 AU@2 AW@2
  AB BA ~@23 A B C D ~ E ~ F@2 R BB ~@2 O P Q R O P BC R O P Q R O P BC R ~@2
>`.pickRestart({
  A: "eb2@3 ~@13", B: "~@3 g2@2 f2@3 bb2@3 f2@2 g2@3", C: "bb2@3 g2@2 bb2@3 g2@3 bb2@5", D: "ab1@5 ~@11",
  E: "~@3 c2@5 ~@8", F: "[eb2@3 ~@10 eb2@5 ~ eb2@5 eb2@8]/2", G: "bb1 f2", H: "f2@3 d2@2 eb2@5 ~ f2@5",
  I: "f1@3 c2@2 f2@3 f1@3 bb1@2 c2@3", J: "g2@3 f1@5 f2@3 ~@2 eb2@3", K: "g2@3 f1@5 ab2@3 ~@2 bb2@3",
  L: "g1@3 bb1@2 eb2@3 g1@3 bb1@2 eb2@3", M: "f2@3 bb1@2 eb2@3 g2@3 g1@2 f2@3", N: "bb1@3 f2@2 bb2@3 g2@3 ~@5",
  O: "c2@11 c2@5", P: "g1", Q: "ab1", R: "bb1", S: "c2", T: "~@3 ab1@8 ~@5", U: "g2@3 f1@5 f2@3 f1@2 eb2@3",
  V: "db2@3 c2@2 f2@3 db2@3 bb1@2 c2@3", W: "g2@3 db2@5 ab2@3 ~@2 bb2@3", X: "eb2@3 bb1@2 eb2@3 eb2@3 bb1@2 eb2@3",
  Y: "f2@3 bb1@2 eb2@3 g2@3 eb2@2 f2@3", Z: "bb1@3 f2@2 bb2@3 d3@3 eb3@2 f3@3", AA: "bb3@11 ~@5", AB: "eb2@11 ~@5",
  AC: "bb1@11 ~@5", AD: "c2@11 ~@5", AE: "d2@11 ~@5", AF: "~@3 c2@8 ~@5", AG: "ab1!2", AH: "~@3 ab1@8 ab1@5",
  AI: "~@3 g1@13", AJ: "[f1@8 f1@11 f1@8 f1@37]/4", AK: "c2!2", AL: "~@3 c2@8 c2@5", AM: "~@3 c2@13", AN: "bb1!2",
  AO: "~@3 bb1@8 bb1@5", AP: "f1@5 ~@6 f1@5", AQ: "~@5 f1@5 ~ f1@5", AR: "~@3 f1@13", AS: "bb1@5 ~@6 bb1@5",
  AT: "~@3 bb1@4 ~@4 bb1@5", AU: "ab1/2", AV: "bb1/2", AW: "c2/2", AX: "[~@3 f2@29]/2", AY: "g1/2",
  AZ: "[g1@11 g1@10 bb1@11]/2", BA: "eb2", BB: "b1", BC: "~@3 ab1@13",
})).s("gm_electric_bass_pick").gain(0.14)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A ~@6 B A ~@7 C@14 D E A F G H A F G H A F G H A F G E A F G H A F G ~ A F G H A F D E ~@2 C@6 ~@2 A ~ A ~ A I J
  ~ C@6 ~ F A ~ A ~ A I K ~ A ~ A ~ A ~ K F A ~ A ~ A ~ K A@2 ~ A ~ A ~@35 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A E A ~ A ~ A ~ A
  ~ A ~ A ~ J G H A ~@2 A ~ A ~ A I J ~ A ~ A ~ H ~ K D ~@2
>`.pickRestart({
  A: "x", B: "~@3 x ~@9 x ~@2", C: "x ~@4 x ~@5 x ~@4", D: "~ x", E: "~@3 x ~@4 x ~@7", F: "~@3 x ~@12",
  G: "x ~@2 x ~@12", H: "x!2", I: "~@13 x ~@2", J: "x ~@2 x ~@4 x ~@4 x ~@2", K: "x ~@7 x ~@4 x ~@2",
})).gain(0.37)

// drums · rim
const rim = s("rim").struct("<~@51 A ~@3 A ~@3 A ~@7 A ~@7 A ~@146>".pickRestart({
  A: "~@5 x ~@10",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct(`<
  ~@22 A B ~@8 C D E D C D E D C D E D C D F G H G H I H G H I H G H I H G H J H G H I H G K L H G H I H G F G M@2 ~@9 N
  ~ N ~ N ~ O ~@6 M N ~ N ~ N ~ N P Q ~ N ~ N ~ N ~ R ~ N ~ N ~ N ~ S ~ N ~ N ~ M N ~@17 C D E D C D E T C D E D C D ~@2
  H G H U C G H U C G H U C G H N H G H U C G H V H G H U P W M@3 X ~ N ~ N ~ N ~ O ~ N ~ N ~ N P Y ~@2
>`.pickRestart({
  A: "~@3 x ~@12", B: "x ~@4 x ~@10", C: "x ~@4 x ~@5 x ~@4", D: "x ~@2 x ~@4 x ~@4 x ~@2", E: "~@3 x ~ x ~@5 x ~@4",
  F: "x ~@2 x ~ x ~@7 x ~@2", G: "x ~@7 x ~@4 x ~@2", H: "~@5 x ~@5 x ~@4", I: "~@3 x ~@7 x ~ x ~@2", J: "x ~@12 x ~@2",
  K: "~ x ~@3 x ~ x!3 ~@6", L: "x!2 ~ x ~@12", M: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", N: "x", O: "x ~@2 x!3 ~ x!3 ~@6",
  P: "~@5 x ~@10", Q: "x ~@4 x ~@2 x ~@2 x ~ x ~@2", R: "x ~@12 x ~ x", S: "x ~@2 x!3 ~ x!3 ~ x!3 ~ x",
  T: "x ~@2 x ~ x ~@2 x ~@2 x!3 ~ x", U: "x ~@2 x ~@7 x ~ x ~ x", V: "x ~@2 x ~@9 x ~ x", W: "x ~@10 x!3 ~ x",
  X: "x!2 ~ x!2 ~@11", Y: "x ~@2 x ~ x ~@5 x ~@4",
})).gain(0.37)
// … 50 more lines