Strudelify
KeyF majorTempo145 bpm
0:00/0:00
// spain — Sean Roman Ron Torculasand Craig DiGiamarino
// 145 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 58, 4/4 at bar 73, 2/4 at bar 94, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5357413; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(145/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.

// other · tenor sax
const tenor_sax = note(`<
  A@4 B@4 C@5 D@5 E@6 F@4 G H@3 I@4 J@6 ~ K L M N O N P Q R S T U V W X@2 Y@3 Z@2 AA@2 AB@2 AC AD AE AF@3 AG AH@2 AI@2
  AJ@2 AK@2 AL AM N P Q R S T U V W AN ~@23 AO AP@2 AQ@2 AC AD AE AR@6 AS@4
>`.pickRestart({
  A: "[~@9 g3 ~ f3 g3@39 g3@4 ab3@4 bb3@5]/4", B: "[~ c4@2 bb3@4 ab3@4 g3 ~ f3 g3@39 g3@4 ab3@4 bb3@3]/4",
  C: "[~ c4@4 d4@4 ~ bb3@8 ab3@4 ab3@4 g3@4 g3@4 f3@2 ~ eb3@2 f3@12 g3@4 eb3@4 d3@4 eb3@4 ~ f3@4 d3@4 c3@4]/5",
  D: "[d3@2 c3@2 d3@29 ~@8 d3@4 ~ eb3@4 f3@8 eb3@4 d3@4 d3@12 ~ eb3]/5", E: "[~ d3@2 c3@50 c4@2 bb3@2 c4@37 c4@2]/6",
  F: "[~@2 d4@4 eb4@4 f4@4 ~ eb4@4 d4@4 bb3@2 ab3@2 bb3@37]/4", G: "d4@8 ~ c4@4 bb3@3",
  H: "[~ ab3@4 bb3@4 c4@10 bb3@2 ~ ab3@2 g3@2 ab3@10 g3@2 f3@2 eb3@2 f3@6]/3",
  I: "[eb3@2 ~ f3@12 g3@2 ab3@2 g3@2 f3@2 eb3@2 f3@2 g3@37]/4", J: "[~@5 d3@4 eb3@4 f3@8 eb3@4 ~ d3@4 d3@16 c3@50]/6",
  K: "eb4 ~ g4 eb4 f4 eb4 c4 eb4 ~ d4 bb3 d4 ~ c4 ab3@2", L: "bb3@3 bb3 ~@2 bb3@6 g3@3 g3", M: "~ g3@5 ~ g3",
  N: "ab3@3 bb3@3 c4@2 d4@3 eb4@3 f4@2", O: "eb4@3 d4@9 ~@2 g3@2", P: "eb4 ~ f4 g4@9 ~ f4 ~ eb4",
  Q: "d4@3 eb4@3 f4@2 eb4@4 d4@4", R: "d4@3 c4@9 ~@4", S: "c4 ~@2 f4 ~@3 ab4 g4@2 eb4 c4 f4 ~@2 bb3",
  T: "~@3 eb4 d4 ~@3 bb3 c4@2 ab3 ~ ab3 eb4@2", U: "f4 ~@2 f4 ab4@2 g4 eb4 c4@2 eb4 c4 f4@2 d4 c4",
  V: "~ g3 f3@3 g3 ~ c4 d4@3 b3@2 a3 g3@2", W: "~ d3 g3 d3 a3 d3 b3 bb3@2 g3@2 g4 ~@2 g4@2",
  X: "[f4@4 eb4@3 c4@17 eb4 ~ g4 eb4 f4 eb4 c4 eb4]/2",
  Y: "[~ d4 bb3 d4 ~ c4 ab3@2 bb3@3 bb3 ~@2 bb3@6 g3@3 g3 ~@2 g3@10 ~@2 g3@2 ab3@3 bb3@3 c4@2]/3",
  Z: "[d4@3 eb4@3 f4@2 eb4@3 d4@9 ~@2 g3@2 ab3@3 bb3@3 c4@2]/2",
  AA: "[d4@3 eb4@3 f4@2 eb4 ~ f4 g4@9 ~ f4 ~ eb4 d4@3 eb4@3 f4@2]/2",
  AB: "[eb4@4 d4@4 d4@3 c4@9 ~@4 c4 ~@2 f4 ~@3 ab4]/2", AC: "g4@2 eb4 c4 f4 ~@2 bb3 ~@3 eb4 d4 ~@3",
  AD: "bb3 c4@2 ab3 ~ ab3 eb4@2 f4 ~@2 f4 ab4@2 g4 eb4", AE: "c4@2 eb4 c4 f4@2 d4 c4 ~ g3 f3@3 g3 ~ c4",
  AF: "[d4@3 b3@2 a3 g3@2 ~ d3 g3 d3 a3 d3 b3 bb3@2 g3@2 g4 ~@2 g4@2 f4@4 eb4@3 c4@17]/3",
  AG: "~@9 c4 ~ d4 eb4 d4 ~ c4", AH: "[d4 eb4@2 d4@3 b3@22 gb4 g4@3]/2",
  AI: "[f4@3 eb4@3 c4@18 ~ bb3 ~ c4 d4 eb4 ~ f4]/2", AJ: "[eb4@3 f4@3 g4@18 ~@2 e4 f4@3 eb4@2]/2",
  AK: "[d4@3 eb4@3 f4@18 ~@2 eb4@4 d4@2]/2", AL: "d4@3 c4@5", AM: "e4@2 f4 g4@9 ~@2 g3@2", AN: "f4 eb4 ~@2",
  AO: "~@6 ab4@2 bb4@3 ab4@3 eb4@2", AP: "[e4@3 f4@3 gb4@2 g4 ~ ab4 bb4@9 ~ b3 ~ c4 d4@3 eb4@3 f4@2]/2",
  AQ: "[eb4@4 d4@4 d4@3 c4 ~@2 c4@6 ~@4 c4 ~@2 f4 ~@3 ab4]/2",
  AR: "[d4@3 b3@2 a3 g3@2 ~ d3 g3 d3 a3 d3 b3 bb3@2 g3@2 g4 ~@2 g4@2 f4@33 eb4@25 d4@8 c3 db3 [d3,eb3] e3 [f3,gb3] g3]/6", // Ebmaj7 Gbmaj7
  AS: "[[ab3,a3] bb3 b3 c4@24 c4@33 ~@4]/4", // Amaj7
})).s("gm_tenor_sax").gain(0.4)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@96 A B C D E F G H I J K ~ A B C D E F G H I L ~@18>".pickRestart({
  A: "~@10 c4 ~@2 c4 ~@2", B: "c4@4 ~@6 b3 ~@2 b3 ~@2", C: "b3@4 ~@6 c4 ~@2 c4 ~@2", D: "c4@4 ~@6 bb3 ~@2 bb3 ~@2",
  E: "bb3@4 ~@6 eb4 ~@2 eb4 ~@2", F: "eb4@4 ~@6 g3 ~@2 g3 ~@2", G: "g3@4 ~@6 c4 ~@2 c4 ~@2",
  H: "c4@4 ~@6 d4 ~@2 d4 ~@2", I: "d4@4 ~@6 g4 ~@2 g4 ~@2", J: "g4@4 ~@6 c4 ~@3 c4 ~", K: "~@2 c4 ~ c4 b3 bb3@2 ~@8",
  L: "g4 ~@3",
})).s("gm_tenor_sax").gain(0.2)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@20 A B@4 C@5 D@6 ~@7 E F G H I J K L M N O P Q R S@2 T@3 U V W X Y@2 Z AA AB AC@2 AD AE AF AG AH AI AJ AK AL AM AN
  AO AP K L AQ N O P Q R AR AS AT AU AV AW AX AY AZ BA BB BC BD AS AT AU AV AW AX AY AZ BA BB BE@2 BF BG BH@2 Z AA AB BI
  BJ@4 BK@5
>`.pickRestart({
  A: "~@3 bb2", B: "[~@5 ab2@59]/4", C: "[~@7 g2@66 f2@4 c3@3]/5", D: "[~ g3@4 ~ ab3@4 eb3@16 d3@33 g2@37]/6",
  E: "eb3 ~ g3 eb3 f3 eb3 c3 eb3 ~ d3 bb2 d3 ~ c3 ab2@2", F: "f2@3 c3 ~@2 f3@6 g2@3 d3", G: "~ g3@5 ~@2",
  H: "ab2@3 eb3 c4@2 g3@2", I: "g2@3 d3 b3@2 d3 b3", J: "f2@6 ab2@2 bb2@4 ~ c3 d3@2", K: "eb3@3 bb2 ab2@4",
  L: "b2@2 g2 b2", M: "c3@3 c3 ~@2 c3@6 ~@4", N: "c3 ~@2 f3 ~@3 ab3 g3@2 eb3 c3 f3 ~@2 bb2",
  O: "~@3 eb3 d3 ~@3 bb2 c3@2 ab2 ~ ab2 eb3@2", P: "f3 ~@2 f3 ab3@2 g3 eb3 c3@2 eb3 c3 f3@2 d3 c3",
  Q: "~ g2 f2@3 g2 ~ c3 d3@3 b2@2 a2 g2@2", R: "~ d3 g3 d3 a3 d3 b3 bb3@2 g2@2 g3 ~@2 g3@2",
  S: "[f3@4 eb3@3 c3@17 eb3 ~ g3 eb3 f3 eb3 c3 eb3]/2",
  T: "[~ d3 bb2 d3 ~ c3 ab2@2 f2@3 c3 ~@2 f3@6 g2@3 d3 ~@2 g3@10 ~@4 ab2@6 eb3@2]/3", U: "c4@2 g3@2 g2@3 d3",
  V: "b3@2 d3 b3 f2@3 ab2", W: "bb2@4 ~ c3 d3@2 eb3@6 bb2@2", X: "ab2 b2",
  Y: "[g2@4 b2@4 c3@3 c3 ~@2 c3@6 ~@4 c3 ~@2 f3 ~@3 ab3]/2", Z: "g3@2 eb3 c3 f3 ~@2 bb2 ~@3 eb3 d3 ~@3",
  AA: "bb2 c3@2 ab2 ~ ab2 eb3@2 f3 ~@2 f3 ab3@2 g3 eb3", AB: "c3@2 eb3 c3 f3@2 d3 c3 ~ g2 f2@3 g2 ~ c3",
  AC: "[d3@3 b2@2 a2 g2@2 ~ d3 g3 d3 a3 d3 b3 bb3@2 g2@2 g3 ~@2 g3@2 f3@4 eb3@4]/2",
  AD: "ab2@4 eb3 ~@3 ab2@3 eb3@3 ab2@2", AE: "~@2 ab2@2 eb3 ~@3 ab2@3 eb3@3 ab2@2", AF: "g2@4 d3 ~@3 g2@3 d3@3 g2@2",
  AG: "~@2 g2@2 d3 ~@3 g2@3 d3@3 g2@2", AH: "f2@4 c3 ~@3 f2@3 c3@3 b2@2", AI: "~@2 bb2@2 f3 ~@3 bb3@3 f3@3 bb2@2",
  AJ: "eb3@4 bb3 ~@3 eb3@3 bb3@3 eb3@2", AK: "~@2 ab2@2 eb3 ~@3 ab3@3 eb3@3 ab2 c3", AL: "d3@4 a2 ~@3 d3@3 d3@3 a2@2",
  AM: "~@2 d3@2 g2 ~@3 eb3@3 d3@3 a2@2", AN: "c3@3 g3!2 ~@3 c3@3 g3!2 ~ c3 ~", AO: "c3@3 g3!2 ~@3 c3@3 g3!2 ~ g2 ~",
  AP: "f2@3 ab2 bb2@2 d3@2", AQ: "c3@3 c3 ~@2 c3@10", AR: "f3@4 eb3@4 ab2@4 eb3 ~@3",
  AS: "ab2@3 eb3@3 ab2@2 ~@2 ab2@2 eb3 ~@3", AT: "ab2@3 eb3@3 ab2@2 g2@4 d3 ~@3", AU: "g2@3 d3@3 g2@2 ~@2 g2@2 d3 ~@3",
  AV: "g2@3 d3@3 g2@2 f2@4 c3 ~@3", AW: "f3@3 c3@3 b2@2 ~@2 bb2@2 f2 ~@3", AX: "bb2@3 bb2@3 f2@2 eb2@4 bb2 ~@3",
  AY: "eb3@3 bb2@3 eb2@2 ~@2 ab2@2 eb2 ~@3", AZ: "ab2@3 b2@3 c3@2 d3@4 a2 ~@3", BA: "d3@3 a2@3 ab2@2 ~@2 g2@2 d3 ~@3",
  BB: "eb3@3 d3@3 g2@2 c3@4 g2 ~@3", BC: "c3@3 c3@3 g2@2 ~@2 c3@2 g2 ~ c3 ~", BD: "c3 ~ c3 ~ b2 bb2@3 ab2@4 eb3 ~@3",
  BE: "[c3@3 c3@3 g2@2 c3@3 c3@3 c3@4 ~@2 g2@4 ab2@3 ab2@3 ab2@2]/2", BF: "bb2@3 bb2@3 bb2@2 eb3@3 eb3@3 bb2@2",
  BG: "eb3@4 eb3@4 d3@3 d3@3 d3@2", BH: "[g2@4 g2@4 c3@3 c3 ~@2 c3@6 ~@4 c3 ~@2 f3 ~@3 ab3]/2",
  BI: "d3@3 b2@2 a2 g2@2 ~ d3 g3 d3 a3 d3 b3 bb3", BJ: "[~ g2@2 g3 ~@2 g3@2 ab2@33 g2@23]/4",
  BK: "[~@2 g2@8 c3@33 c2@33 ~@4]/5",
})).s("gm_baritone_sax").gain(0.3)

// other · vibraphone
const vibraphone = note(`<
  ~ A@4 B@8 C D@3 ~ E@8 F@8 G@2 ~@2 H I@3 ~ J K L M N M O P Q R S T U V W@2 X@3 Y@2 Z@2 AA@2 AB AC AD AE@3 ~ AF AG AH AI
  AJ AK AL AM AN AO AP AQ AR AS R S T U V AT@2 ~@10 AU@2 ~@9 AV@2 AW AX AY@2 AB AC AD AZ BA@5 BB@4
>`.pickRestart({
  A: "[~@10 eb4@16 d4@33 ~@5]/4", B: "[~@12 eb4@17 f4@33 eb4@33 eb4@33]/8", C: "~ g4",
  D: "[~ ab4@12 bb4@2 ab4@2 g4@25 ~@6]/3", E: "[~@11 d4@4 eb4@4 g4@33 ~@9 ab4@2 g4@2 ab4@54 ~@8 g4]/8",
  F: "[~ f4@2 g4@54 ab4@66 ~@5]/8", G: "[~@4 g4@4 a4@4 c5@12 b4@2 a4@2 ~ b4@3]/2", H: "~@7 d4",
  I: "[~ eb4@3 f4@3 eb4@4 d4@4 eb4@33]/3", J: "eb4 ~ g4 eb4 f4 eb4 c4 eb4 ~ d4 bb3 d4 ~ c4 ab3@2",
  K: "bb4@3 bb4 ~@2 bb4@6 g4@3 g4", L: "~@2 g4@10 g4 d4 b3 d4", M: "ab4@3 bb4@3 c5@2 d5@3 eb5@3 f5@2",
  N: "eb5@3 d5@9 ~@2 d5@2", O: "eb5 ~ f5 ~@5 bb4@4 ~ f5 ~ eb5, ~@3 g5@9 ~@4", P: "d5@3 eb5@3 f5@2 eb5@4 d5@4",
  Q: "d5@3 c5@13", R: "c5 ~@2 f5 ~@3 ab5 g5@2 eb5 c5 f5 ~@2 bb4", S: "~@3 eb5 d5 ~@3 bb4 c5@2 ab4 ~ ab4 eb5@2",
  T: "f5 ~@2 f5 ab5@2 g5 eb5 c5@2 eb5 c5 f5@2 d5 c5", U: "~ g4 f4@3 g4 ~ c5 d5@3 b4@2 a4 g4@2",
  V: "~ d4 g4 d4 a4 d4 b4 bb4@2 g4@2 g5 ~@2 g5@2", W: "[f5@4 eb5@3 c5@17 eb4 ~ g4 eb4 f4 eb4 c4 eb4]/2",
  X: "[~ d4 bb3 d4 ~ c4 ab3@2 bb4@3 bb4 ~@2 bb4@6 g4@3 g4 ~@2 g4@10 g4 d4 b3 d4 ab4@3 bb4@3 c5@2]/3",
  Y: "[d5@3 eb5@3 f5@2 eb5@3 d5@9 ~@2 d5@2 ab4@3 bb4@3 c5@2]/2",
  Z: "[d5@3 eb5@3 f5@2 eb5 ~ f5 ~@5 bb4@4 ~ f5 ~ eb5 d5@3 eb5@3 f5@2, ~@11 g5@9 ~@12]/2",
  AA: "[eb5@4 d5@4 d5@3 c5@13 c5 ~@2 f5 ~@3 ab5]/2", AB: "g5@2 eb5 c5 f5 ~@2 bb4 ~@3 eb5 d5 ~@3",
  AC: "bb4 c5@2 ab4 ~ ab4 eb5@2 f5 ~@2 f5 ab5@2 g5 eb5", AD: "c5@2 eb5 c5 f5@2 d5 c5 ~ g4 f4@3 g4 ~ c5",
  AE: "[d5@3 b4@2 a4 g4@2 ~ d4 g4 d4 a4 d4 b4 bb4@2 g4@2 g5 ~@2 g5@2 f5@4 eb5@3 [g4,c5]@9 ~@8]/3", // C5
  AF: "~@2 g5 ~@2 g5 ~@4 g5 ~ f5 d5@3", AG: "b4@3 ~", AH: "c5@3 c5@3 c5@2 ~@2 bb5 ~ ab5 g5@3", AI: "f5@3 ~",
  AJ: "~@8 f5@3 eb5@3 d5@2", AK: "c5@4 ~ c5@2 c5", AL: "c5", AM: "b4", AN: "g4@3 g4 ~@2 g4@10", AO: "c4@3 ~",
  AP: "eb4 g4", AQ: "g4 ~ ab4 bb4@5 c5@4 c5@4", AR: "f4@3 g4@3 ab4@2 g4@4 f4@4", AS: "f4@3 d4 ~@2 e4@10",
  AT: "[f5 eb5 [ab4,c5]@4 ~@2]/2", AU: "[~ [ab4,c5]@2 ~]/2", AV: "[~@8 e4@3 f4@3 g4@4 ~@6 c5@3 c5@3 c5@2]/2",
  AW: "d5@3 d5@3 d5@2 ~@6 g4 ~", AX: "ab4 bb4 ~@6 c5@3 c5@3 c5@2",
  AY: "[b4@4 b4@4 c5@3 d5 ~@2 e5@6 ~@4 c5 ~@2 f5 ~@3 ab5]/2", AZ: "d5@3 b4@2 a4 g4@2 ~ d4 g4 d4 a4 d4 b4 bb4",
  BA: "[~ g4@2 g5 ~@2 g5@2 d5@33 b4@25 b4@8 g4@6]/5", BB: "[~@3 f5@16 d5@8 e5@33 ~@4]/4",
})).s("gm_vibraphone").gain(0.4)

// other · vibraphone · soft notes
const vibraphone_soft = note("<~@96 A B C D E F G H I J@2 ~ A B C D E F G H I K ~@18>".pickRestart({
  A: "~@10 [c4,g4] ~@2 [c4,g4] ~@2", B: "[c4,g4]@4 ~@6 [d4,b4] ~@2 [d4,b4] ~@2",
  C: "[d4,b4]@4 ~@6 [c4,ab4] ~@2 [c4,ab4] ~@2", D: "[c4,ab4]@4 ~@6 [bb3,f4] ~@2 [bb3,f4] ~@2",
  E: "[bb3,f4]@4 ~@6 [eb4,bb4] ~@2 [eb4,bb4] ~@2", F: "[eb4,bb4]@4 ~@6 [g3,eb4] ~@2 [g3,eb4] ~@2",
  G: "[g3,eb4]@4 ~@6 [a3,c4] ~@2 [a3,c4] ~@2", H: "[a3,c4]@4 ~@6 [b3,d4] ~@2 [b3,d4] ~@2",
  I: "[b3,d4]@4 ~@6 [eb4,g4] ~@2 [eb4,g4] ~@2", J: "[[eb4,g4] ~ [c5,e5]@4 ~@2]/2", K: "[eb4,g4] ~@3",
})).s("gm_vibraphone").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax_2 = note("<~@94 A B C@2 D E F G H@2 I J@2 B C@2 D E F G H@2 I K@2 ~@17>".pickRestart({
  A: "~@14 ab3 g3", B: "ab3@5 bb3 c4 d4 eb4@6 g4 ab4",
  C: "[c4@2 ab4@2 g4@2 f4@2 b3@6 c4@6 g4@2 [gb4,g4] [e4,f4] d4@4 ~@2 d4 eb4, ~@24 eb4 ~@7]/2", // Gmaj7 Fmaj7
  D: "f4 eb4 ~ d4 ~ eb4 ~ g4 g4@6 [g4,ab4] bb4", E: "g4@6 g4 bb4 ab4@2 bb4@2 ab4@2 g4@2",
  F: "d4@3 eb4@3 f4@2 g4@6 eb4@2", G: "eb4 f4 eb4 d4 eb4@4", H: "[eb4@2 f4@2 eb4@2 d4@2 b3@12 c4@4 d4@4 ~@2 d4 eb4]/2",
  I: "f4 eb4 ~ d4 ~ eb4 ~ g4 g4@6 f4@2", J: "[e4@6 f4@2 g4@16 ~@6 ab3 g3]/2", K: "[e4@3 f4 g4@8 ~@4]/2",
})).s("gm_tenor_sax").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~@43 A B ~ A C A C A D ~@6 E@2 F E@2 G E G H I ~@5 J@11 ~ J@4 ~@5 K J@10 L K J@13 M N H D@4 I ~@8
>`.pickRestart({
  A: "x", B: "x ~@2 x", C: "x ~@5 x!2", D: "x!4", E: "~ x", F: "~ x ~@2", G: "~@2 x!3 ~@3", H: "~@2 x!2", I: "x!2 ~@2",
  J: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", K: "~@8 x ~@2 x!2 ~@2 x", L: "x ~@2 x!2 ~@2 x ~@8",
  M: "x ~@2 x ~ x ~ x!2 ~@2 x ~@2 x ~", N: "x ~@3 x ~@3 x ~@2 x ~@2 x ~",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@42 A ~@9 A@5 ~@10 B A@4 C D@11 ~ D@4 A@5 ~@24 E F G ~ B A@4 C ~@8>".pickRestart({
  A: "x!4", B: "~@2 x!2", C: "x!2 ~@2", D: "~@2 x ~ x ~@3 x ~@2 x ~@2 x ~", E: "~@6 x ~ x ~@3 x ~@2 x",
  F: "~@2 x ~@3 x ~ x ~@3 x ~@2 x", G: "~ x ~@6",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@43
  [~@11 x ~ x!2 ~]
  ~@15
  [~@3 x ~ x!2 ~@9]
  ~@60
  [~@5 x ~ x!2 ~@2 x ~@2 x ~]
  [x!2 ~@2]
  ~@14
>`).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@121 [~@11 x ~@2 x ~] ~@14>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@46 A@5 B ~@9 C D@4 E F ~@26 G B@10 F G B@11 H ~@17>".pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "~@8 x ~ x!3 ~ x ~",
  D: "x ~ x ~ x ~ x!3 ~ x!3 ~ x ~", E: "x ~ x ~ x ~ x!3 ~ x!3 ~ x!2", F: "x ~ x!3 ~ x!2 ~@8", G: "~@10 x!3 ~ x!2",
  H: "x ~ x!2 ~@12",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@44 A B ~@11 C ~ D E ~@23 F ~@9 G ~@10 G@2 ~@14 H ~@14>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x ~@6", C: "x ~@6 x ~@8", D: "~@4 x ~@2 x", E: "~@2 x ~@2 x ~@2", F: "~@3 x", G: "~ x",
  H: "~@8 x ~@2 x ~@2 x ~",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@121 [~ x] ~@14>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@44 A ~@12 B ~ C D ~@12 E@11 ~ E@4 ~@29 F E G ~@15>".pickRestart({
  A: "~@3 x ~@11 x", B: "~ x ~@2", C: "~@11 x ~@4", D: "~@7 x ~@8", E: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
  F: "~@4 x ~ x!3 ~ x!3 ~ x!2", G: "x ~ x!2 ~@12",
})).gain(0.3)

stack(
  tenor_sax, tenor_sax_soft, baritone_sax, vibraphone, vibraphone_soft, tenor_sax_2, kick, rim, snare, mid_tom,
  open_hat, crash, high_tom, ride
)