Strudelify
KeyE♭ majorTempo300 bpm
0:00/0:00
// zorba el griego — Eduardo López Charanga Los Gallitos
// 300 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 9 "Trombón 2º" trombone (copy of ch 8 "Trombón 1º" trombone); ch 11 "Tuba" tuba (copy of ch 12 "Tuba en Si♭" french horn)
// note: Transcription provider: pdmx. https://musescore.com/score/1069436; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 250 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(300/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · trumpet · "Trompeta 1 Si♭"
const trumpet = note(`<
  ~@50 A@4 B@5 C@4 D@4 E F@8 G@3 H I@3 ~ J@5 ~@4 K@5 L@5 M@5 N@3 O P@4 Q@3 R S@4 T U V@2 W X Y ~@3 Z AA Z AA Z AB AC AA
  AC AA ~@10 AD AA AD AA AD AB AE AA AE AA ~@10 AF AG AH AI AF AG AH AI AJ AI AJ AI AJ AK AL AI AL AI ~@18 AJ AM AN AO
  AJ AM AN AO AF AP AQ AR AF AP AQ AR ~@8 AF AP AQ AR AF AP AQ AR AD AS AD AS AD AS AD AT
>`.pickRestart({
  A: "[~@5 a4@2 bb4@25]/4", B: "[~@14 a4@4 ~ bb4@51 ~@9 c5]/5", C: "[~ bb4@3 a4@3 bb4@51 ~@6]/4",
  D: "[~@7 a4@4 ~ bb4@51 ~]/4", E: "~@3 g4", F: "[ab4@51 ~@9 bb4@3 ab4@3 g4@3 ab4@51 ~@8]/8",
  G: "[~@5 gb4@4 g4@34 ~@5]/3", H: "~@13 ab4@3", I: "[g4@3 ~ f4@3 eb4@3 ~ g4@3 f4@34]/3",
  J: "[~ g4@3 ~ f4@3 eb4@3 ~ d4@3 f4@3 ~ eb4@51 ~@10]/5", K: "[~@12 a4@8 bb4@9 bb4@8 bb4@9 bb4@9 bb4@8 bb4@9 bb4@8]/5",
  L: "[bb4@7 ~ bb4@7 bb4@7 ~ bb4@8 ~@7 bb4@7 bb4@7 ~ bb4@2 c5@2 ~ bb4@2 a4@7 bb4@7 bb4@6, ~@31 bb4@9 ~@40]/5",
  M: "[bb4@7 bb4@7 bb4@6 bb4@7 bb4@7 bb4@6 bb4@7 bb4@7 bb4@7 bb4@6 bb4@7 c5@3 bb4@3]/5",
  N: "[c5@3 ~ bb4@3 a4@6 bb4@6 bb4@6 bb4@6 bb4@6 bb4@6 bb4@5]/3", O: "~ bb4@6 bb4@5 bb4@4",
  P: "[~@2 bb4@5 bb4@5 ~ bb4@5 bb4@5 ~ bb4@5 bb4@5 ~ g4@5 ab4@5 ab4@5 ab4@5 ab4@5 ab4@4]/4",
  Q: "[~ ab4@5 ab4@5 ab4@4 ab4@5 ab4@4 ab4@5 ab4@5 ab4@4 ab4@5 ~ bb4@2 ab4@2, ~@43 ab4@2 ~@3]/3", R: "g4 ab4!3",
  S: "[~ ab4@4 ab4@4 ab4@4 ~ ab4@4 ab4@4 ab4@4 ab4@4 ab4@4 ab4@4 ab4@4 ab4@4 ab4@4 a4@4 bb4@3 bb4@4 bb4@3]/4",
  T: "~ bb4@4 bb4@3 bb4@4 bb4@4", U: "bb4@3 bb4@4 bb4@3 bb4@4 bb4@2",
  V: "[~ bb4@4 bb4@4 bb4@3 g4@3 ab4@3 ~ ab4@3 ab4@3 ab4@3 ~ ab4@3]/2", W: "ab4@3 ab4@3 ~ ab4@3 ab4@3 ab4@3",
  X: "ab4@3 ab4@3 ~ ab4@3 ab4@3 ab4 bb4 ab4", Y: "g4@3 ~", Z: "~@2 eb4 ~ eb4 ~ eb4 ~",
  AA: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ d4 ~ eb4 ~@3", AB: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ f4 ~ g4 ~@3",
  AC: "~@2 g4 ~ ab4 ~ f4 ~", AD: "~@4 eb4 ~ eb4 ~ eb4@2 ~@2 eb4@2 ~@2", AE: "~@4 g4 ~ g4 ~ ab4@2 ~@2 f4@2 ~@2",
  AF: "~@2 eb5@2 ~@2 eb5 ~", AG: "d5 ~ c5 ~", AH: "bb4 ~ c5@2 ~@2 ab4 ~", AI: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ f4 ~ g4 ~@3",
  AJ: "~@4 g4 ~ g4 ~ g4@2 ~@2 g4@2 ~@2", AK: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ ab4 ~ bb4 ~@3",
  AL: "~@4 bb4 ~ bb4 ~ c5@2 ~@2 ab4@2 ~@2", AM: "f4 ~ ab4 ~ g4 ~ f4 ~ eb4 ~ g4 ~ f4 ~ eb4 ~",
  AN: "d4 ~ f4 ~ eb4 ~ d4 ~ c4 ~ eb4 ~ d4 ~ c4 ~", AO: "bb3 ~ c4 ~ bb3 ~ ab3 ~ bb3@2 ~@2 g3@2 ~@2", AP: "d5 ~ f5 ~",
  AQ: "d5 ~ eb5@2 ~@2 c5 ~", AR: "bb4 ~ c5 ~ bb4 ~ ab4 ~ bb4@2 ~@2 g4@2 ~@2",
  AS: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4@2 ~@2 bb3@2 ~@2", AT: "bb4 ~ c5 ~ bb4 ~ ab4 ~ bb4@2 ~@2 eb5@4",
})).s("gm_trumpet").gain(0.64)

// other · trumpet · "Trompeta 1 Si♭" · soft notes
const trumpet_soft = note("<~@144 A@10 ~@10 A@10 ~@18 A B@2 A@2 B@2 A@11 ~@16 A B@2 A@2 B@2 A ~@16>".pickRestart({
  A: "~@2 g4 ~@3 g4 ~", B: "~@2 f4 ~@3 f4 ~",
})).s("gm_trumpet").gain(0.32)

// other · trumpet · "Trompeta 2ª Si♭"
const trumpet_2 = note(`<
  ~@50 A@4 B@5 C@4 D@4 E F@8 G@3 H I@3 ~ J@5 ~@4 K@5 L@5 M@5 N@3 O P@4 Q@3 R S@4 T U V@2 W X Y ~@3 Z AA Z AA Z AB AC AA
  AC AA ~@10 AD AA AD AA AD AB AE AA AE AA ~@10 AF AG AH AI AF AG AH AI AJ AI AJ AI AJ AK AL AI AL AI ~@18 AM AN AO AP
  AM AN AO AP AQ AR AS AP AQ AR AS AP ~@8 AQ AR AS AP AQ AR AS AP AD AP AD AP AD AP AD AT
>`.pickRestart({
  A: "[~@5 gb4@2 g4@25]/4", B: "[~@14 gb4@4 ~ g4@51 ~@9 ab4]/5", C: "[~ g4@3 gb4@3 g4@51 ~@6]/4",
  D: "[~@7 gb4@4 ~ g4@51 ~]/4", E: "~@3 e4", F: "[f4@51 ~@9 g4@3 f4@3 e4@3 f4@51 ~@8]/8", G: "[~@5 d4@4 eb4@34 ~@5]/3",
  H: "~@13 c5@3", I: "[bb4@3 ~ ab4@3 g4@3 ~ bb4@3 ab4@34]/3", J: "[~ bb4@3 ~ ab4@3 g4@3 ~ f4@3 ab4@3 ~ g4@51 ~@10]/5",
  K: "[~@12 gb4@8 g4@9 g4@8 g4@9 g4@9 g4@8 g4@9 g4@8]/5",
  L: "[g4@7 ~ g4@7 g4@7 ~ g4@8 ~@7 g4@7 g4@7 ~ g4@2 a4@2 ~ g4@2 gb4@7 g4@7 g4@6, ~@31 g4@9 ~@40]/5",
  M: "[g4@7 g4@7 g4@6 g4@7 g4@7 g4@6 g4@7 g4@7 g4@7 g4@6 g4@7 a4@3 g4@3]/5",
  N: "[a4@3 ~ g4@3 gb4@6 g4@6 g4@6 g4@6 g4@6 g4@6 g4@5]/3", O: "~ g4@6 g4@5 g4@4",
  P: "[~@2 g4@5 g4@5 ~ g4@5 g4@5 ~ g4@5 g4@5 ~ e4@5 f4@5 f4@5 f4@5 f4@5 f4@4]/4",
  Q: "[~ f4@5 f4@5 f4@4 f4@5 f4@4 f4@5 f4@5 f4@4 f4@5 ~ g4@2 f4@2, ~@43 f4@2 ~@3]/3", R: "e4 f4!3",
  S: "[~ f4@4 f4@4 f4@4 ~ f4@4 f4@4 f4@4 f4@4 f4@4 f4@4 f4@4 f4@4 f4@4 gb4@4 g4@3 g4@4 g4@3]/4",
  T: "~ g4@4 g4@3 g4@4 g4@4", U: "g4@3 g4@4 g4@3 g4@4 g4@2",
  V: "[~ g4@4 g4@4 g4@3 e4@3 f4@3 ~ f4@3 f4@3 f4@3 ~ f4@3]/2", W: "f4@3 f4@3 ~ f4@3 f4@3 f4@3",
  X: "f4@3 f4@3 ~ f4@3 f4@3 f4 g4 f4", Y: "eb4@3 ~", Z: "~@2 g4 ~ g4 ~ g4 ~",
  AA: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ f4 ~ g4 ~@3", AB: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ ab4 ~ bb4 ~@3",
  AC: "~@2 bb4 ~ c5 ~ ab4 ~", AD: "~@4 g4 ~ g4 ~ g4@2 ~@2 g4@2 ~@2", AE: "~@4 bb4 ~ bb4 ~ c5@2 ~@2 ab4@2 ~@2",
  AF: "~@2 bb4@2 ~@2 bb4 ~", AG: "bb4 ~ ab4 ~", AH: "g4 ~ ab4@2 ~@2 f4 ~",
  AI: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ d4 ~ eb4 ~@3", AJ: "~@4 eb4 ~ eb4 ~ eb4@2 ~@2 eb4@2 ~@2",
  AK: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ f4 ~ g4 ~@3", AL: "~@4 g4 ~ g4 ~ ab4@2 ~@2 f4@2 ~@2",
  AM: "~@4 eb5 ~ eb5 ~ eb5@2 ~@2 eb5@2 ~@2", AN: "d5 ~ f5 ~ eb5 ~ d5 ~ c5 ~ eb5 ~ d5 ~ c5 ~",
  AO: "bb4 ~ d5 ~ c5 ~ bb4 ~ ab4 ~ c5 ~ bb4 ~ ab4 ~", AP: "g4 ~ ab4 ~ g4 ~ f4 ~ g4@2 ~@2 eb4@2 ~@2",
  AQ: "~@2 c5@2 ~@2 c5 ~", AR: "bb4 ~ d5 ~", AS: "bb4 ~ c5@2 ~@2 ab4 ~", AT: "g4 ~ ab4 ~ g4 ~ f4 ~ g4@2 ~@2 bb4@4",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "Trompeta 2ª Si♭" · soft notes
const trumpet_soft_2 = note("<~@144 A@10 ~@10 A@10 ~@18 A@18 ~@16 A@8 ~@16>".pickRestart({
  A: "~@2 bb4 ~@3 bb4 ~",
})).s("gm_trumpet").gain(0.2)

// other · alto sax · "Saxo Alt 1º"
const alto_sax = note(`<
  A ~ B@2 C@2 D@2 ~ E ~ F ~ G ~ A ~ B@2 C@2 D@2 ~ E ~ H ~ I ~ J ~ K@2 C@2 D@2 ~ L ~ H ~ G ~ A ~ B@2 C@2 D@2 ~ E ~ F ~ G
  ~ A ~ B@2 C@2 D@2 ~ L ~ H ~ I ~ J ~ B@2 C@2 M@2 ~ L ~ F ~ G ~ A ~ B@2 C@2 D@4 C@2 N ~ O P@2 N ~ Q R ~ S T U@2 V W X Y
  Z AA@2 AB@2 AC AD AE AF AA AG@4 ~@10 AH AI AH AI AH AJ AK AI AK AI ~@10 AL AI AL AI AL AJ AM AI AM AI ~@18 AN AO AP AQ
  AN AO AR AQ AS AQ AS AQ AS AT AU AQ AU AQ ~@16 AS AV AW AX AS AV AW AX AY AZ BA AX AY AZ BA AX AL BB AL BB AL BB AL BC
>`.pickRestart({
  A: "~ g4", B: "[~@11 g4@9 ~@12]/2", C: "[~@13 g4@9 ~@10]/2", D: "[~@15 g4@9 ~@8]/2", E: "~ g4@9 ~@6",
  F: "~@4 g4@9 ~@3", G: "~@6 g4@9 ~", H: "~@4 f4@9 ~@3", I: "~@6 f4@9 ~", J: "~ f4", K: "[~@11 f4@9 ~@12]/2",
  L: "~ f4@9 ~@6", M: "[~@15 f4@9 ~@8]/2", N: "~@5 g4@3", O: "~@4 g4@7 ~@5", P: "[~@15 g4@7 ~@10]/2", Q: "~@3 g4@6 ~@7",
  R: "~@11 g4@5", S: "~@2 g4@5 ~@9", T: "~@8 g4@5 ~@3", U: "[~@13 f4@5 ~@14]/2", V: "~ f4@5 ~@10", W: "~@4 f4@5 ~@7",
  X: "~@6 f4@5 ~@5", Y: "~@2 f4 ~", Z: "~@9 f4@4 ~@3", AA: "~@5 f4@2 ~", AB: "~@9 g4@4 ~@3", AC: "~@7 g4@4 ~@5",
  AD: "~@5 g4@4 ~@7", AE: "~@3 f4@3 ~@10", AF: "f4@3 ~@10 f4@3", AG: "~@2 g4 ~@3 g4 ~", AH: "~@2 eb4 ~ eb4 ~ eb4 ~",
  AI: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ d4 ~ eb4 ~@3", AJ: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4 ~ f4 ~ g4 ~@3",
  AK: "~@2 g4 ~ ab4 ~ f4 ~", AL: "~@4 eb4 ~ eb4 ~ eb4@2 ~@2 eb4@2 ~@2", AM: "~@4 g4 ~ g4 ~ ab4@2 ~@2 f4@2 ~@2",
  AN: "~@2 eb5@2 ~@2 eb5 ~", AO: "d5 ~ c5 ~", AP: "bb4 ~ c5@2 ~@2 ab4 ~", AQ: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ f4 ~ g4 ~@3",
  AR: "bb4 ~ c5 ~@3 ab4 ~", AS: "~@4 g4 ~ g4 ~ g4@2 ~@2 g4@2 ~@2", AT: "g4 ~ ab4 ~ g4 ~ f4 ~ g4 ~ ab4 ~ bb4 ~@3",
  AU: "~@4 bb4 ~ bb4 ~ c5@2 ~@2 ab4@2 ~@2", AV: "f4 ~ ab4 ~ g4 ~ f4 ~ eb4 ~ g4 ~ f4 ~ eb4 ~",
  AW: "d4 ~ f4 ~ eb4 ~ d4 ~ c4 ~ eb4 ~ d4 ~ c4 ~", AX: "bb3 ~ c4 ~ bb3 ~ ab3 ~ bb3@2 ~@2 g3@2 ~@2",
  AY: "~@2 eb4@2 ~@2 eb4 ~", AZ: "d4 ~ f4 ~", BA: "d4 ~ eb4@2 ~@2 c4 ~",
  BB: "eb4 ~ f4 ~ eb4 ~ d4 ~ eb4@2 ~@2 bb4@2 ~@2", BC: "bb4 ~ c5 ~ bb4 ~ ab4 ~ bb4@2 ~@2 g4@4",
})).s("gm_alto_sax").gain(0.64)

// other · alto sax · "Saxo Alt 1º" · soft notes
const alto_sax_soft = note(`<
  ~@134 A@10 ~@10 A@10 ~@10 A B@2 A@2 B@2 A@11 ~@18 A B@2 A@2 B@2 A@2 B@2 A@2 B@2 A ~@24
>`.pickRestart({
  A: "~@2 g4 ~@3 g4 ~", B: "~@2 f4 ~@3 f4 ~",
})).s("gm_alto_sax").gain(0.32)

// other · alto sax · "Saxo Tenor"
const alto_sax_2 = note(`<
  ~@7 A B@4 C@4 D@4 E@4 F@5 G@4 H@3 I@2 J@3 K L@4 ~@5 M@2 ~ N ~ O ~ P ~ Q ~ R@2 S@2 M@2 ~ T ~ U ~ V ~ W ~ R@2 S@2 X@2 ~
  T ~ O ~ P ~ Q ~ R@2 S@2 M@4 S@2 Y ~ Z AA@2 Y ~ AB AC ~ AD AE AF@2 AG AH AI AJ AK AL@2 AM@2 AN AO AP AQ AL AR@45 AS@2
  AR@2 AS@2 AR@12 AS@2 AR@2 AS@2 AR@12 AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS@2 AR@8
  AT
>`.pickRestart({
  A: "~@3 a3", B: "[bb3@51 ~@13]/4", C: "[~ a3@4 bb3@51 ~@8]/4", D: "[~ c4@3 bb3@3 a3@2 bb3@51 ~@4]/4",
  E: "[~@5 a3@2 bb3@25]/4", F: "[~@14 g3@4 ~ ab3@51 ~@9 bb3]/5", G: "[~ ab3@3 g3@3 ab3@51 ~@6]/4",
  H: "[~@7 gb3@4 ~ g3@34 ~@2]/3", I: "[~@15 ab3@3 ~ g3@3 f3@3 eb3@3 ~ g3@3]/2", J: "[f3@17 ~@7]/3",
  K: "~@4 g3@3 f3@3 ~ eb3@3 d3@2", L: "[~ f3@3 ~ eb3@51 ~@8]/4", M: "[~@15 eb3@9 ~@8]/2", N: "~ eb3@9 ~@6",
  O: "~@4 eb3@9 ~@3", P: "~@6 eb3@9 ~", Q: "~ eb3", R: "[~@11 eb3@9 ~@12]/2", S: "[~@13 eb3@9 ~@10]/2",
  T: "~ ab3@9 ~@6", U: "~@4 ab3@9 ~@3", V: "~@6 ab3@9 ~", W: "~ ab3", X: "[~@15 ab3@9 ~@8]/2", Y: "~@5 eb3@3",
  Z: "~@4 eb3@7 ~@5", AA: "[~@15 eb3@7 ~@10]/2", AB: "~@3 eb3@6 ~@7", AC: "~@11 eb3@5", AD: "~@2 eb3@5 ~@9",
  AE: "~@8 eb3@5 ~@3", AF: "[~@13 ab3@5 ~@14]/2", AG: "~ ab3@5 ~@10", AH: "~@4 ab3@5 ~@7", AI: "~@6 ab3@5 ~@5",
  AJ: "~@2 ab3 ~", AK: "~@9 ab3@4 ~@3", AL: "~@5 ab3@2 ~", AM: "~@9 eb3@4 ~@3", AN: "~@7 eb3@4 ~@5",
  AO: "~@5 eb3@4 ~@7", AP: "~@3 ab3@3 ~@10", AQ: "ab3@3 ~@10 ab3@3", AR: "~@2 eb3 ~@3 eb3 ~", AS: "~@2 ab3 ~@3 ab3 ~",
  AT: "~@2 eb3 ~@3 eb3@2",
})).s("gm_alto_sax").gain(0.3)

// other · trombone · "Trombón 1º"
const trombone = note(`<
  ~@7 A B@4 C@4 D@4 E@4 F@5 G@4 H@3 I@2 J@3 K L@4 ~@4 M@2 ~ N ~ O ~ P ~ Q ~ R@2 S@2 T@2 ~ U ~ V ~ W ~ X ~ Y@2 Z@2 AA@2 ~
  N ~ O ~ P ~ Q ~ R@2 S@2 T@2 ~ AB T@2 AC@2 AD ~ AE AF@2 AG AH@2 AG AI@2 AJ AK AL AI@2 AM AN AO AP AQ AN AR@2 AS AT AU
  AV@45 AW@2 AV@2 AW@2 AV@12 AW@2 AV@2 AW@2 AV@12 AW@2 AV@2 AW@2 AV@2 AW@2 AV@2 AW@2 AV@2 AW@2 AV@2 AW@2 AV@2 AW@2 AV@2
  AW@2 AV@8 AX
>`.pickRestart({
  A: "~@3 a3", B: "[bb3@51 ~@13]/4", C: "[~ a3@4 bb3@51 ~@8]/4", D: "[~ c4@3 bb3@3 a3@2 bb3@51 ~@4]/4",
  E: "[~@5 a3@2 bb3@25]/4", F: "[~@14 g3@4 ~ ab3@51 ~@9 bb3]/5", G: "[~ ab3@3 g3@3 ab3@51 ~@6]/4",
  H: "[~@7 gb3@4 ~ g3@34 ~@2]/3", I: "[~@15 ab3@3 ~ g3@3 f3@3 eb3@3 ~ g3@3]/2", J: "[f3@17 ~@7]/3",
  K: "~@4 g3@3 f3@3 ~ eb3@3 d3@2", L: "[~ f3@3 ~ eb3@51 ~@8]/4", M: "[~@14 eb3@9 ~@9]/2", N: "bb2@9 ~@7",
  O: "~@3 eb3@9 ~@4", P: "~@5 bb2@9 ~@2", Q: "~@7 eb3@9", R: "[~@9 bb2@9 ~@14]/2", S: "[~@12 eb3@9 ~@11]/2",
  T: "[~@14 bb2@9 ~@9]/2", U: "f3@9 ~@7", V: "~@3 bb2@9 ~@4", W: "~@5 f3@9 ~@2", X: "~@7 bb2@9",
  Y: "[~@9 eb3@9 ~@14]/2", Z: "[~@12 bb2@9 ~@11]/2", AA: "[~@14 f3@9 ~@9]/2", AB: "eb3@7 ~@9",
  AC: "[~@12 eb3@7 ~@13]/2", AD: "~@7 bb2@7 ~@2", AE: "~@2 eb3@7 ~@7", AF: "[~@12 bb2@7 ~@13]/2", AG: "~@7 eb3@6 ~@3",
  AH: "[~@15 bb2@6 ~@11]/2", AI: "[~@13 bb2@5 ~@14]/2", AJ: "~@3 f3@5 ~@8", AK: "~@7 bb2@5 ~@4", AL: "~@11 f3@5",
  AM: "f3 ~@3", AN: "~ bb2@4 ~@11", AO: "~ f3@2 ~@5", AP: "~ bb2@2 ~@5", AQ: "~ eb3@2 ~@5",
  AR: "[eb3@4 ~@10 bb2@4 ~@10 f3@3 ~]/2", AS: "~@9 bb2@3 ~@4", AT: "~@7 f3@3 ~@6", AU: "~@3 bb2@3 ~@10",
  AV: "eb3 ~@3 bb2 ~@3", AW: "f3 ~@3 bb2 ~@3", AX: "eb3 ~@3 bb2 ~ eb3@2",
})).s("gm_trombone").gain(0.22)

// bass · french horn · "Tuba en Si♭"
const bass = note(`<
  ~@8 A ~ B@2 C@2 D@2 E@2 F@2 G@2 ~ H ~ I@2 J@2 K@2 L@2 M@2 N@2 ~ O ~ B@2 C@2 D@2 E@2 F@2 G@2 ~ H ~ P@2 J@2 Q@2 L@2 M@2
  N@2 ~ O ~ B@2 R@2 D@2 E@2 F@2 S@2 ~ H ~ P@2 J@2 Q@2 L@2 M@2 N@2 ~ A N@2 T@2 U@2 V W@2 X@3 Y@3 Z AA AB@3 AC AD AE AF AG
  AD AH@3 AI AJ AK@45 AL@2 AK@2 AL@2 AK@12 AL@2 AK@2 AL@2 AK@12 AL@2 AK@2 AL@2 AK@2 AL@2 AK@2 AL@2 AK@2 AL@2 AK@2 AL@2
  AK@2 AL@2 AK@2 AL@2 AK@8 AM
>`.pickRestart({
  A: "eb2", B: "[~@3 bb1@17 ~@12]/2", C: "[~@5 eb2@17 ~@10]/2", D: "[~@7 bb1@17 ~@8]/2", E: "[~@9 eb2@17 ~@6]/2",
  F: "[~@12 bb1@17 ~@3]/2", G: "[~@14 eb2@17 ~]/2", H: "bb1", I: "[~@3 f2@17 ~@12]/2", J: "[~@5 bb1@17 ~@10]/2",
  K: "[~@7 f2@17 ~@8]/2", L: "[~@9 bb1@17 ~@6]/2", M: "[~@12 eb2@17 ~@3]/2", N: "[~@14 bb1@17 ~]/2", O: "f2",
  P: "[~@3 eb2@17 ~@12]/2", Q: "[~@7 eb2@17 ~@8]/2", R: "[~@5 f2@17 ~@10]/2", S: "[~@14 f2@17 ~]/2",
  T: "[~@12 eb2@13 ~@7]/2", U: "[~@7 bb1@13 ~@12]/2", V: "~@2 eb2@13 ~", W: "[~@12 bb1@13 ~@7]/2",
  X: "[~@7 eb2@12 ~@12 bb1@12 ~@5]/3", Y: "[~@7 eb2@12 ~@10 bb1@11 ~@8]/3", Z: "~@3 f2@10 ~@3", AA: "~@7 bb1@9",
  AB: "[~@11 f2@9 ~@9 bb1@11 ~@8]/3", AC: "f2@9 ~@7", AD: "~ bb1@9 ~@6", AE: "~ f2@4 ~@3", AF: "~ bb1@4 ~@3",
  AG: "~@2 eb2@7 ~@7", AH: "[eb2@7 ~@7 bb1@7 ~@7 f2@7 ~@6 bb1@7]/3", AI: "~@7 f2@6 ~@3", AJ: "~@3 bb1@6 ~@7",
  AK: "eb2 ~ bb1 ~", AL: "f2 ~ bb1 ~", AM: "eb2 ~ bb1 eb2",
})).s("gm_electric_bass_finger").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@93 A ~ B ~@2 C D ~ A ~ E ~ F G ~ E H ~ E I ~ F E J K ~ C@2 L F@2 M N A O E P ~@5 A C A C A C A C A C A C A C A C A C
  A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A@2 C A C A C A C A C A C A C A C A C A C A C A C A C
  A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A Q
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x", D: "~@7 x ~@6 x ~", E: "~@7 x ~@8", F: "~ x ~@6", G: "~@3 x ~@2 x ~", H: "~@15 x",
  I: "~@7 x ~@5 x ~@2", J: "~@11 x ~@4", K: "~@8 x ~@4 x ~@2", L: "~ x ~@5 x", M: "~ x ~@14", N: "x ~@4 x ~ x",
  O: "~@6 x ~@2 x ~@6", P: "x ~@2 x ~@12", Q: "x!3 ~",
})).gain(0.19)

// drums · snare
const snare = s("sd").struct(`<
  ~@94 A ~ B ~ B ~ A ~ C ~ D B ~ C ~ E F ~ G H A ~ I D J H K C@3 H L M E N C O@119 P
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@15 x", C: "~@5 x ~@2", D: "~ x ~@2", E: "~@3 x ~@12", F: "~@11 x ~@4", G: "~ x ~@6", H: "~ x",
  I: "~ x ~@14", J: "~@3 x ~@4", K: "~@9 x ~@6", L: "~@7 x ~@8", M: "~@5 x ~@10", N: "x ~@12 x ~@2", O: "~ x ~ x",
  P: "x!3 ~",
})).gain(0.19)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@93 A B C D E F D G H I J K L G I M N O P Q R Q P S T U V W X@2 Y Z AA AB AC AD@2 AE@58 V AE@60 AF
>`.pickRestart({
  A: "~@3 x", B: "~@4 x ~@8 x ~@2", C: "~@5 x ~@8 x ~", D: "~@7 x ~@7 x", E: "~ x", F: "x ~@7 x ~@6 x",
  G: "~@6 x ~@6 x ~@2", H: "~@5 x ~@6 x ~@3", I: "~@3 x ~@6 x ~@5", J: "x ~@6 x ~@6 x ~", K: "~@4 x ~@6 x ~@4",
  L: "~@2 x ~@5 x ~@6 x", M: "x ~@6 x ~@5 x ~@2", N: "~@3 x ~@5 x ~@5 x", O: "~@5 x ~@5 x ~@4",
  P: "~ x ~@5 x ~@4 x ~@3", Q: "~@2 x ~@4 x ~@5 x ~@2", R: "~@2 x ~@5 x ~@4 x ~@2", S: "~ x ~@4 x ~@4 x ~@3 x",
  T: "~@4 x ~@3 x ~@4 x ~@2", U: "~@2 x ~@3 x ~@4 x ~@4", V: "x!4", W: "~ x ~@3 x ~@3 x ~@4 x ~", X: "~ x ~ x ~ x ~ x",
  Y: "~@2 x ~@3 x ~@2 x ~@3 x ~@2", Z: "~ x ~@3 x ~@2 x ~@3 x ~@3", AA: "x ~@2 x ~@3 x ~@2 x ~@3 x ~",
  AB: "~ x ~@3 x ~@3 x ~@2 x ~@2 x", AC: "~@3 x ~@2 x ~@2 x ~@3 x ~@2", AD: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2", AE: "x!2",
// … 13 more lines