Strudelify

Latin Rhythms

Victor López

KeyG minorTempo132 bpm
0:00/0:00
// Latin Rhythms — Victor López
// 132 bpm, 4/4, key G minor. 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, 6/8 at bar 114) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/69780; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 127 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · piano
const piano = note(`<
  A@2 B C@2 D E F@2 G H@2 I@2 J@2 K@3 L M N O P@2 Q@3 R S@2 T U V@2 W Q@3 X Y X Y X Y X Y X Y X Y X Y X Y Z@2 AA@4 AB@2
  AC@4 AD@3 AE@6 AF@7 AG AH@2 AG@2 AH@2 AG@2 AH@2 AG@2 AH@2 AI AJ@2 AK@2 AL AM AN@2 AO AP@2 AQ AR AS@2 AT@2 AU@3 AV AW
  AX@3 AY AZ@2
>`.pickRestart({
  A: "[~@7 [c3,c4,c5]@4 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [d3,d4,d5]@4 [g3,b3,g4,b4]@4 [d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [c3,c4,c5]@2 [c3,c4,c5]@4 ~ [e3,g3,e4,g4]@2]/2", // C Em D F D G D F …
  B: "[d3,d4,d5]@4 [f3,a3,f4,a4]@4 [d3,d4,d5]@4 ~ [g3,b3,g4,b4]@4 [d3,d4,d5]@4 [f3,a3,f4,a4]@3", // D F D G D F
  C: "[~@2 [c3,c4,c5]@2 [c3,c4,c5]@4 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 [f3,a3,f4,a4]@4 ~ [d3,d4,d5]@4 [g3,b3,g4,b4]@4 [d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [c3,c4,c5]@2 [c3,c4,c5]@4 [e3,g3,e4,g4]@2 ~ [d3,d4,d5]@3]/2", // C Em D F D G D F …
  D: "~ [f3,a3,f4,a4]@4 [d3,d4,d5]@4 [g3,b3,g4,b4]@4 ~ [d3,d4,d5]@4 [f3,a3,f4,a4]@4 [c3,c4,c5]@2", // F D G D F C
  E: "~ [c3,c4,c5]@4 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 [f3,a3,f4,a4]@4 ~ [d3,d4,d5]@4 [g3,b3,g4,b4]@4", // C Em D F D G
  F: "[[d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [c3,c4,c5]@2 [c3,c4,c5]@4 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [d3,d4,d5]@4 [g3,b3,g4,b4]@4 ~ [d3,d4,d5]@4 [f3,a3,f4,a4]@4 [c3,c4,c5]@2 [c3,c4,c5]@3]/2", // D F C Em D F D G …
  G: "~@2 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 [f3,a3,f4,a4]@4 [d3,d4,d5]@4 ~ [g3,b3,g4,b4]@4 [d3,d4,d5]@3", // Em D F D G D
  H: "[~ [f3,a3,f4,a4]@4 ~ [c3,c4,c5]@2 [c3,c4,c5]@4 [e3,g3,e4,g4]@2 [d3,d4,d5]@4 ~ [f3,a3,f4,a4]@4 [d3,d4,d5]@4 [g3,b3,g4,b4]@4 ~ [d3,d4,d5]@4 [f3,a3,f4,a4]@4 [c3,c4,c5]@2 [f2,a3,c4]@6]/2", // F C Em D F D G D …
  I: "[~ [c3,c4]@2 ~ [f3,f4,a4]@4 [c3,c4]@2 ~ [eb3,eb4,g4]@2 ~@7 c4@2 ~ [eb4,g4]@4 c4@2 ~ [eb4,g4]@2 [d4,f4]@5 ~@2 [g2,bb3]@2 [bb2,d4,f4]@5 [g2,bb3]@2, ~@20 a2@7 bb2@5 ~@16]/2", // C F C Eb Dm Gm Bb Gm
  J: "[~ [bb2,c4,e4]@2 ~@7 g3@2 [bb3,d4]@5 g3@2 [bb3,d4]@2 ~ [a3,c4]@5 ~@2 [c3,c4]@2 [f3,f4,a4]@5 [c3,c4]@2 [eb3,eb4,g4]@2 ~@8, ~@10 c3@7 f2@5 f2@7 ~@19]/2", // C7 Bb Am C F C Eb
  K: "[c4@2 [eb4,g4]@5 c4@2 [eb4,g4]@2 [d4,f4]@5 ~@3 [g2,bb3]@2 [bb2,d4,f4]@5 [g2,bb3]@2 [bb2,c4,e4]@2 ~@7 g3@2 ~ [bb3,d4]@4 g3@2 ~ [bb3,d4]@2 [a3,c4]@5 ~@2 [c3,c4]@2 ~ [f3,f4,a4]@4 [c3,c4]@2 ~ [eb3,eb4,g4]@2 ~@4, a2@7 bb2@5 ~@25 c3@7 f2@5 f2@7 ~@16]/3", // Eb Dm Gm Bb Gm C7 Bb Am …
  L: "~@3 c4@2 [eb4,g4]@5 c4@2 ~ [eb4,g4]@2 [d4,f4]@5 ~@2 [g2,bb3]@2, ~@3 a2@7 bb2@5 ~@9", // Eb Dm Gm
  M: "[bb2,d4,f4]@5 [g2,bb3]@2 [bb2,c4,e4]@2 ~@8 g3@2 [bb3,d4]@5, ~@17 c3@7", // Bb Gm C7 Bb
  N: "g3@2 [bb3,d4]@2 ~ [a3,c4]@5 ~@2 [c3,c4]@2 [f3,f4,a4]@5 [c3,c4]@2 [eb3,eb4,g4]@2 ~, f2@5 f2@7 ~@12", // Bb Am C F C Eb
  O: "~@7 c4@2 [eb4,g4]@5 c4@2 [eb4,g4]@2 [d4,f4]@5 ~, ~@7 a2@7 bb2@5 ~@5", // Eb Dm
  P: "[~ [g2,bb3]@2 ~ [bb2,d4,f4]@4 [g2,bb3]@2 ~ [bb2,c4,e4]@2 ~@7 g3@2 ~ [bb3,d4]@4 g3@2 ~ [bb3,d4]@2 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@2, ~@20 c3@7 f2@5 ~@16]/2", // Gm Bb Gm C7 Bb G Bb D …
  Q: "[~ [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@3 [bb3,bb4]@3 [d4,d5]@2 [f3,f4,f5]@3 [e3,e4,e5]@3 [bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@3 [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@3 [bb3,bb4]@3 [d4,d5]@2 [f3,f4,f5]@3 [e3,e4,e5]@3 [bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3]/3", // D Gb F Bb D F E Bb …
  R: "[g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@3 [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@2", // G Bb D G Gb Bb D Gb …
  S: "[~ [bb3,bb4]@3 [d4,d5]@2 [f3,f4,f5]@3 [e3,e4,e5]@3 [bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@3 [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@3 [bb3,bb4]@3]/2", // Bb D F E Bb D E G …
  T: "[d4,d5]@2 [f3,f4,f5]@3 [e3,e4,e5]@3 [bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2", // D F E Bb D E G Bb …
  U: "[g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@3 [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@3 [bb3,bb4]@3 [d4,d5]@2 [f3,f4,f5]@2", // G Gb Bb D Gb F Bb D …
  V: "[~ [e3,e4,e5]@3 [bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@3 [d4,d5]@2 [gb3,gb4,gb5]@3 [f3,f4,f5]@3 [bb3,bb4]@3 [d4,d5]@2 [f3,f4,f5]@3 [e3,e4,e5]@3]/2", // E Bb D E G Bb D G …
  W: "[bb3,bb4]@3 [d4,d5]@2 [e3,e4,e5]@3 [g3,g4,g5]@3 [bb3,bb4]@3 [d4,d5]@2 [g3,g4,g5]@3 [gb3,gb4,gb5]@3 [bb3,bb4]@2", // Bb D E G Bb D G Gb …
  X: "[f3,a3,c4,e4,a4,d5,g5]@2 [f3,a3,c4,e4,a4,d5,g5]@2 ~ [f3,a3,c4,e4,a4,d5,g5] ~ [f3,a3,b3,e4,a4,d5,g5]", // Fmaj7 Em7
  Y: "~@3 [f3,a3,b3,e4,a4,d5,g5] ~ [f3,a3,b3,e4,a4,d5,g5] ~@2", // Em7
  Z: "[~@3 [a3,c4,a4,c5]@6 [gb3,gb4]@2 [a3,a4]@6 [a3,c4,a4,c5]@6 [gb3,gb4]@5 [a3,c4,a4,c5]@6 [a3,a4]@8 ~ [g3,g4]@3 ~@2]/2", // Am Gb A Am Gb Am A G
  AA: "[[bb3,d4,bb4,d5]@6 [g3,g4]@3 [a3,a4]@5 [bb3,d4,bb4,d5]@6 [g3,g4]@6 [bb3,d4,bb4,d5]@5 [a3,a4]@8 ~ [g3,g4]@3 ~@3 [a3,c4,a4,c5]@5 [gb3,gb4]@3 [a3,a4]@6 [a3,c4,a4,c5]@5 [gb3,gb4]@6 [a3,c4,a4,c5]@6 [a3,a4]@8 [g3,g4]@3 ~@3 [bb3,d4,bb4,d5]@5]/4", // Bb G A Bb G Bb A G …
  AB: "[[g3,g4]@3 [a3,a4]@6 [bb3,d4,bb4,d5]@6 [g3,g4]@5 [bb3,d4,bb4,d5]@6 [a3,a4]@8 [g3,g4]@3 ~@3 [a3,c4,a4,c5]@6 [gb3,gb4]@2]/2", // G A Bb G Bb A G Am …
  AC: "[~ [a3,a4]@5 [a3,c4,a4,c5]@6 [gb3,gb4]@5 [a3,c4,a4,c5]@6 [a3,a4]@8 ~ [g3,g4]@3 ~@2 [bb3,d4,bb4,d5]@6 [g3,g4]@3 [a3,a4]@5 [bb3,d4,bb4,d5]@6 [g3,g4]@6 [bb3,d4,bb4,d5]@5 [a3,a4]@8 ~ [g3,g4]@3 ~@3 [a3,c4,a4,c5]@5 [gb3,gb4]@3 [a3,a4]@5]/4", // A Am Gb Am A G Bb G …
  AD: "[~ [a3,c4,a4,c5]@5 [gb3,gb4]@6 [a3,c4,a4,c5]@6 [a3,a4]@8 [g3,g4]@3 ~@3 [bb3,d4,bb4,d5]@5 [g3,g4]@3 [a3,a4]@6 [bb3,d4,bb4,d5]@6 [g3,g4]@5 [bb3,d4,bb4,d5]@6 [a3,a4]@8 [g3,g4]]/3", // Am Gb Am A G Bb G A …
  AE: "[~@2 [f3,bb3,eb4,ab4,c5]@18 [a3,eb4,a4,db5]@18 [f3,bb3,eb4,ab4,db5]@36 [g3,db4,f4,bb4,eb5]@18 [g3,db4,g4,bb4,eb5]@18 [g3,c4,f4,bb4,eb5]@18 ~@5 [gb3,c4,eb4,ab4,c5]@11]/6", // Fm7 Ebm7b5 Bbm7 Gm7b5 Eb7 Cm7 Ab7
  AF: "[~@2 [f3,bb3,eb4,ab4,c5]@18 [a3,eb4,a4,db5]@18 [f3,bb3,eb4,ab4,db5]@36 [g3,db4,f4,bb4,eb5]@18 [g3,db4,g4,bb4,eb5]@18 [g3,c4,f4,bb4,eb5]@18 ~@5 [gb3,c4,eb4,ab4,c5]@13 [g3,bb3,d4,f4]@6 [g3,bb3,d4,f4]@6 ~@3 [g3,bb3,d4,f4]@3 ~@4]/7", // Fm7 Ebm7b5 Bbm7 Gm7b5 Eb7 Cm7 Ab7 Gm7
  AG: "~@2 [g3,bb3,d4,f4]@6 [g3,bb3,d4,f4]@6 ~@3 [g3,bb3,d4,f4]@3 ~@4", // Gm7
  AH: "~@2 [f3,ab3,c4,eb4]@6 [f3,ab3,c4,eb4]@6 ~@3 [f3,ab3,c4,eb4]@3 ~@4", // Fm7
  AI: "~@2 [g3,c4,d4,f4,bb4]@6 [g3,c4,d4,f4,bb4]@6 ~@2 [g3,c4,d4,f4,bb4]@3 ~@3 [g3,c4,d4,f4,bb4]@2", // Gm7
  AJ: "[~@4 [g3,c4,d4,f4,bb4]@3 ~@5 [g3,c4,d4,f4,bb4]@6 [g3,c4,d4,f4,bb4]@5 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6 ~@3 [g3,c4,eb4,gb4,bb4]@3 ~@2 [g3,c4,eb4,gb4,bb4]@3 ~@2]/2", // Gm7 Cm7
  AK: "[~ [g3,c4,eb4,gb4,bb4]@3 ~@5 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,d4,f4,bb4]@5 [g3,c4,d4,f4,bb4]@6 ~@3 [g3,c4,d4,f4,bb4]@3 ~@3 [g3,c4,d4,f4,bb4]@3 ~@2 [g3,c4,d4,f4,bb4]@2]/2", // Cm7 Gm7
  AL: "~@7 [g3,c4,d4,f4,bb4]@5 [g3,c4,d4,f4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6", // Gm7 Cm7
  AM: "[g3,c4,eb4,gb4,bb4]@6 ~@2 [g3,c4,eb4,gb4,bb4]@3 ~@3 [g3,c4,eb4,gb4,bb4]@3 ~@2 [g3,c4,eb4,gb4,bb4]@3 ~@2", // Cm7
  AN: "[~@4 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@5 [g3,c4,d4,f4,bb4]@6 [g3,c4,d4,f4,bb4]@6 ~@2 [g3,c4,d4,f4,bb4]@3 ~@3 [g3,c4,d4,f4,bb4]@3 ~@3 [g3,c4,d4,f4,bb4]@3 ~@4]/2", // Cm7 Gm7
  AO: "~ [g3,c4,d4,f4,bb4]@6 [g3,c4,d4,f4,bb4]@6 [g3,c4,eb4,gb4,bb4]@5 [g3,c4,eb4,gb4,bb4]@6", // Gm7 Cm7
  AP: "[~@3 [g3,c4,eb4,gb4,bb4]@3 ~@2 [g3,c4,eb4,gb4,bb4]@3 ~@3 [g3,c4,eb4,gb4,bb4]@3 ~@5 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,d4,f4,bb4]@5 [g3,c4,d4,f4,bb4]@6 ~@3]/2", // Cm7 Gm7
  AQ: "[g3,c4,d4,f4,bb4]@3 ~@3 [g3,c4,d4,f4,bb4]@3 ~@2 [g3,c4,d4,f4,bb4]@3 ~@6 [g3,c4,d4,f4,bb4]@4", // Gm7
  AR: "~ [g3,c4,d4,f4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@6 ~@2 [g3,c4,eb4,gb4,bb4]@3", // Gm7 Cm7
  AS: "[~@3 [g3,c4,eb4,gb4,bb4]@3 ~@2 [g3,c4,eb4,gb4,bb4]@3 ~@6 [g3,c4,eb4,gb4,bb4]@6 [g3,c4,eb4,gb4,bb4]@5 [a3,eb4,g4,c5,f5]@7 [a3,eb4,g4,c5,f5]@13]/2", // Cm7 Am7b5
  AT: "[[g3,db4,f4,bb4,eb5]@3 [g3,db4,f4,bb4,eb5]@3 ~@4 [g3,db4,f4,bb4,eb5]@10 [a3,eb4,g4,c5,f5]@6 [a3,eb4,g4,c5,f5]@10 [a3,eb4,g4,c5,f5]@3 ~@4 [bb3,eb4,ab4,db5,gb5]@3 ~@2]/2", // Gm7b5 Am7b5 Ebm7
  AU: "[~@2 [bb3,eb4,ab4,db5,gb5]@9 [a3,eb4,g4,c5,f5]@7 [a3,eb4,g4,c5,f5]@13 [g3,db4,f4,bb4,eb5]@3 ~ [g3,db4,f4,bb4,eb5]@3 ~@3 [g3,db4,f4,bb4,eb5]@10 [a3,eb4,g4,c5,f5]@7 [a3,eb4,g4,c5,f5]@10 [a3,eb4,g4,c5,f5]@3 ~]/3", // Ebm7 Am7b5 Gm7b5 Am7b5
  AV: "~@2 [bb3,eb4,ab4,db5,gb5]@3 ~@4 [bb3,eb4,ab4,db5,gb5]@10 [a3,eb4,g4,c5,f5]@5", // Ebm7 Am7b5
  AW: "~ [a3,eb4,g4,c5,f5]@13 [g3,db4,f4,bb4,eb5]@3 ~ [g3,db4,f4,bb4,eb5]@3 ~@3", // Am7b5 Gm7b5
  AX: "[[g3,db4,f4,bb4,eb5]@10 [a3,eb4,g4,c5,f5]@7 [a3,eb4,g4,c5,f5]@10 [a3,eb4,g4,c5,f5]@3 ~@3 [bb3,eb4,ab4,db5,gb5]@3 ~@4 [bb3,eb4,ab4,db5,gb5]@10 [a3,eb4,g4,c5,f5]@6 [a3,eb4,g4,c5,f5]@13 ~ [g3,db4,f4,bb4,eb5]@2]/3", // Gm7b5 Am7b5 Ebm7 Am7b5 Gm7b5
  AY: "~ [g3,db4,f4,bb4,eb5]@3 ~@4 [g3,db4,f4,bb4,eb5]@9 [a3,eb4,g4,c5,f5]@7", // Gm7b5 Am7b5
  AZ: "[[a3,eb4,g4,c5,f5]@10 [a3,eb4,g4,c5,f5]@3 ~@4 [bb3,eb4,ab4,db5,gb5]@3 ~@3 [bb3,eb4,ab4,db5,gb5]@10 ~@15]/2", // Am7b5 Ebm7
})).s("gm_piano").gain(0.19)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  A@2 B@4 C D E@4 F@2 G@2 H@2 I J K L M N@2 O@3 P@4 Q@4 O@3 R@16 S@8 T@7 U@6 V@8 W@8 X@6 Y@7 Z@2 AA AB@6 AC@2 AD AE@8
  AF@2
>`.pickRestart({
  A: "[~@7 c2@6 f2@6 ~ g2@10 f2@6 ~ c2@4 c2@6 ~]/2",
  B: "[f2@6 g2@11 f2@6 c2@4 ~ c2@6 f2@6 ~ g2@10 f2@6 ~ c2@4 c2@6 ~ f2@6 g2@11 f2@6 c2@4]/4", C: "~ c2@6 f2@6 g2@11",
  D: "f2@6 ~ c2@4 c2@6 f2@6 ~", E: "[g2@11 f2@6 c2@4 c2@6 ~ f2@6 g2@11 f2@6 ~ c2@4 c2@6 f2@6 ~ g2@11 f2@6 c2@4 f1@6]/4",
  F: "[~ c2@2 ~ f2@4 c2@2 ~ eb2@2 ~@7 a1@7 bb1@5 ~@7 g1@2 bb1@5 g1@2]/2",
  G: "[~ bb1@2 ~@7 c2@7 f1@5 f1@7 c2@2 f2@5 c2@2 eb2@2 ~@8]/2",
  H: "[a1@7 bb1@5 ~@7 g1@2 bb1@5 g1@2 bb1@2 ~@7 c2@7 f1@4]/2", I: "~ f1@7 c2@2 ~ f2@4 c2@2 ~ eb2@2 ~@4",
  J: "~@3 a1@7 bb1@5 ~@7 g1@2", K: "bb1@5 g1@2 bb1@2 ~@8 c2@7", L: "f1@5 f1@7 c2@2 f2@5 c2@2 eb2@2 ~",
  M: "~@7 a1@7 bb1@5 ~@5", N: "[~ g1@2 ~ bb1@4 g1@2 ~ bb1@2 ~@7 c2@7 f1@5 c2@8 g2@8]/2",
  O: "[~ c3@13 g2@8 ~ c2@13 g2@8 ~ c3@13 g2@8 ~ c2@5]/3",
  P: "[c2@8 g2@8 ~ c3@13 g2@8 ~ c2@13 g2@8 ~ c3@13 g2@8 ~ c2@5 c2@8]/4",
  Q: "[g2@8 ~ c3@13 g2@8 ~ c2@13 g2@8 ~ c3@13 g2@8 ~ c2@5 c2@8 g2@8]/4",
  R: "[g1@3 d2 f2@2 g2@5 d2 d2@2 g1@5 d2 f2@2 g2@5 d2 d2@2 g1@2]/4",
  S: "[a2@11 d2@11 ~ a2@11 d2@11 g2@11 ~ d2@11 g2@11 d2@11 ~ a2@11 d2@11 a2@11 ~ d2@11 g2@11 d2@11 ~ g2@11 d2@11 a2@11]/8",
  T: "[~ d2@11 a2@11 d2@11 g2@11 ~ d2@11 g2@11 d2@11 ~ a2@11 d2@11 a2@11 ~ d2@11 g2@11 d2@11 ~ g2@11 d2@9]/7",
  U: "[~@2 f2@18 b1@18 bb1@18 bb2@9 e2@9 eb2@18 a1@18 ab1@18 ~@5 db2@11]/6",
  V: "[~@2 f2@18 b1@18 bb1@18 bb2@9 e2@9 eb2@18 a1@18 ab1@18 ~@5 db2@13 g2@9 d2@3 d2@9 g2@3 g2@9 d2@3 d2@9 g2]/8",
  W: "[~@2 f2@9 c2@3 c2@9 f2@3 f2@9 c2@3 c2@9 f2@3 g2@9 d2@3 d2@9 g2@3 g2@9 d2@3 d2@9 g2@3 f2@9 c2@3 c2@9 f2@3 f2@9 c2@3 c2@9 f2@3 g2@9 d2@3 d2@9 g2@3 g2@9 d2@3 d2@9 g2]/8",
  X: "[~@2 f2@9 c2@3 c2@9 f2@3 f2@9 c2@3 c2@9 f2@3 g2@9 d2@3 d2@9 g2@3 g2@9 d2@3 d2@9 g2@3 f2@9 c2@3 c2@9 f2@3 f2@9 c2@3 c2@9 f2]/6",
  Y: "[~@2 g2@11 ~ d2@8 g2@11 d2@3 d2@6 g2@5 ab2@11 ~ eb2@8 ab2@11 ~ eb2@2 eb2@6 ab2@6 g2@11 d2@8 ~ g2@11 d2@3 d2@5 g2@6 ab2@11 eb2@8 ~ ab2@10]/7",
  Z: "[~ eb2@3 eb2@6 ab2@5 g2@11 ~ d2@8 g2@11 d2@2]/2", AA: "~ d2@6 g2@6 ab2@11",
  AB: "[eb2@8 ab2@11 ~ eb2@2 eb2@6 ab2@6 g2@11 d2@8 ~ g2@11 d2@3 d2@5 g2@6 ab2@11 eb2@8 ~ ab2@11 eb2@3 eb2@6 ab2@5 f2@7 c3@6 f3@3 ~ c3@3]/6",
  AC: "[eb2@7 ab2@6 eb3@7 f2@6 c3@7 f3@3 c3@3 ~ gb2@6 db3@2]/2", AD: "~@2 b2@3 gb2@6 f2@7 c3@6",
  AE: "[~ f3@3 c3@3 eb2@7 ab2@6 eb3@7 f2@7 c3@6 f3@3 ~ c3@3 gb2@6 db3@3 ~ b2@3 gb2@7 f2@6 c3@7 f3@3 c3@3 eb2@7 ab2@7 eb3@6 f2@7 c3@6 f3@3 ~ c3@3 gb2@7 db3@3 b2@3 gb2@7 f2@6 c3@7 f3@3 c3@3 ~ eb2@6 ab2@7 eb3@6 f2@7]/8",
  AF: "[c3@7 f3@3 c3@3 gb2@7 db3@3 b2@3 gb2@7 ~@15]/2",
})).s("gm_electric_bass_finger").gain(0.08)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A B C D E F G H I J K A L M J C G N O P Q R S L M J C T@16 U C V W N X Y Z AA AB R AC S AD B R C AE R C AE R C AE
  R C AE AF@16 AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ AW BA BB BC BD BE BF BG ~
>`.pickRestart({
  A: "~ x ~@18 x ~@3", B: "~@5 x ~@2", C: "~@5 x ~@6", D: "~@5 x ~@18", E: "x ~@18 x ~@4", F: "~@13 x ~@10", G: "~ x ~",
  H: "~@3 x ~@18 x ~", I: "~@17 x ~@6", J: "~ x", K: "~@7 x ~@16", L: "~@2 x", M: "~@7 x ~@4", N: "~ x ~@2",
  O: "~ x ~@4", P: "~ x ~@10", Q: "x ~@10 x", R: "~@5 x", S: "~@3 x", T: "x", U: "~@3 x ~@7 x ~@12", V: "x ~@2 x ~@4",
  W: "~@7 x ~@14 x ~", X: "~@5 x ~@13 x ~@4", Y: "~ x ~@6", Z: "~ x ~@6 x ~@3", AA: "~ x ~@21 x", AB: "~@13 x ~@8 x ~",
  AC: "~@11 x ~@7 x ~@4", AD: "~ x!2", AE: "~@4 x ~@6 x", AF: "~@2 x ~@11 x ~@8 x", AG: "~@2 x ~@8 x ~@2 x ~@7 x ~",
  AH: "~ x ~@7 x ~@2 x ~@8 x ~ x", AI: "~@8 x ~@2 x ~@7 x ~@2 x ~", AJ: "~@7 x ~ x ~@8 x ~@2 x ~@2",
  AK: "~@5 x ~@2 x ~@8 x ~ x ~@4", AL: "~@4 x ~@2 x ~@7 x ~@2 x ~@5", AM: "~@2 x ~@2 x ~@8 x ~@2 x ~@6",
  AN: "~ x ~@2 x ~@7 x ~@2 x ~@8", AO: "x ~@2 x ~@7 x ~@2 x ~@7 x ~", AP: "~ x ~@8 x ~@2 x ~@7 x ~@2",
  AQ: "x ~@7 x ~@2 x ~@8 x ~ x ~", AR: "~@7 x ~@2 x ~@7 x ~@2 x ~@2", AS: "~@6 x ~ x ~@8 x ~@2 x ~@3",
  AT: "~@4 x ~@2 x ~@8 x ~ x ~@5", AU: "~@3 x ~@2 x ~@7 x ~@2 x ~@6", AV: "~ x ~@2 x ~@6 x ~@9 x ~@2",
  AW: "~@3 x ~@6 x ~@9 x ~@3", AX: "~@2 x ~@9 x ~@6 x ~@4", AY: "~@2 x ~@8 x ~@6 x ~@5", AZ: "~@4 x ~@6 x ~@5 x ~@6",
  BA: "~@2 x ~@6 x ~@9 x ~@4", BB: "~ x ~@9 x ~@6 x ~@5", BC: "x ~@9 x ~@6 x ~@6", BD: "~@3 x ~@5 x ~@6 x ~@7",
  BE: "~ x ~@2 x ~@4 x ~@2", BF: "~ x ~@6 x ~@8 x ~@6", BG: "x ~@9 x ~@6 x ~@5 x",
})).gain(0.13)

// drums · rim
const rim = s("rim").struct(`<
  ~@55 A B C D E F G ~ H ~ I ~ J K L ~ D M ~ D M ~ D M ~ D M N O N O N O N O N O N O N O N O ~@29
>`.pickRestart({
  A: "~@17 x ~@2 x ~@3", B: "~@7 x ~@16", C: "~@14 x ~@2 x ~@6", D: "~@5 x ~@18", E: "~@6 x!2 ~@4", F: "~ x ~@10",
  G: "~@9 x ~@2 x ~@10 x", H: "~@6 x ~@2 x ~@10 x ~@3", I: "~ x!2 ~@3 x ~", J: "~ x ~@2 x ~@10 x ~@8", K: "~@11 x",
  L: "~ x ~@10 x ~@11", M: "~@17 x ~@6", N: "~@11 x ~@8 x ~@3", O: "~@8 x ~@8 x ~@6",
})).gain(0.13)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A B C D E F G H I J K A J C L M N O P Q R S F J C L M N@16 ~ T ~ U ~ V ~ W ~ X Y Z AA P AB ~@43 AC AD AE AF AG AH
  AI AJ AK AL AI AM AN AO
>`.pickRestart({
  A: "~@4 x ~@18 x", B: "~@17 x ~@6", C: "~ x", D: "~@7 x ~@16", E: "~@2 x ~@18 x ~@2", F: "~@2 x", G: "~@11 x ~@12",
  H: "~@5 x ~@18", I: "x ~@18 x ~@4", J: "~@7 x ~@4", K: "~@3 x ~@4", L: "~@5 x ~@6", M: "~ x ~", N: "~ x ~@2",
  O: "~ x ~@4", P: "~ x ~@10", Q: "x ~@10 x", R: "~@5 x", S: "~@3 x", T: "~@13 x ~@2 x ~@2 x ~@4",
  U: "~@10 x ~@2 x ~@2 x ~@7", V: "~@7 x ~@2 x ~@2 x ~@10", W: "~@5 x ~@2 x ~ x ~@13", X: "~@2 x ~@2 x ~@2 x ~@15",
  Y: "~@23 x", Z: "~@2 x ~@2 x ~@18", AA: "~@20 x ~@2 x", AB: "~@18 x ~@2 x ~ x", AC: "~@8 x ~@5 x ~@2 x ~@6",
  AD: "x ~@6 x ~@5 x ~@3 x ~@5 x", AE: "~@6 x ~@2 x ~@6 x ~@5 x ~", AF: "~@5 x ~@2 x ~@6 x ~@5 x ~@2",
  AG: "~ x ~@5 x ~@6 x ~@5 x ~@3", AH: "x ~@5 x ~@6 x ~@2 x ~@6 x", AI: "~@5 x ~@6 x ~@2 x ~@6 x ~",
  AJ: "~@5 x ~@2 x ~@5 x ~@6 x ~@2", AK: "~@4 x ~@2 x ~@6 x ~@5 x ~@2 x", AL: "~@6 x ~@6 x ~@5 x ~@3 x",
  AM: "~@4 x ~@6 x ~@2 x ~@6 x ~@2", AN: "~@3 x ~@3 x ~@5 x ~@6 x ~@3", AO: "~ x ~ x ~@8",
})).gain(0.13)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 A@16 ~ B ~ C ~ D ~ E ~ F ~ G H ~ I ~@57>".pickRestart({
  A: "~@6 x!2", B: "~@2 x", C: "~@13 x ~@10", D: "~@5 x ~@6", E: "~ x ~", F: "~@5 x ~@18", G: "~ x ~@10", H: "~@23 x",
  I: "~@7 x",
})).gain(0.13)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B C D E F G H I J K L ~@13 M N O P Q R S T U V W M N O ~@16 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL ~@57
>`.pickRestart({
  A: "~@7 x ~@3 x ~@3 x ~@2 x ~ x ~ x ~", B: "x ~@3 x ~ x ~@4 x ~ x ~ x ~ x ~@4 x ~",
  C: "~@2 x ~ x ~ x ~ x ~ x ~@4 x ~ x ~@3 x ~ x", D: "~@2 x ~ x ~@3 x ~@3 x ~ x ~@2 x ~ x ~ x ~@2",
  E: "~ x ~ x ~@4 x ~ x ~ x ~ x ~@3 x ~@4 x", F: "~ x ~ x ~ x ~ x ~@4 x ~ x ~@3 x ~ x ~ x ~",
  G: "~ x ~@3 x ~@3 x ~ x ~ x ~@2 x ~ x ~@3 x ~", H: "x ~@4 x ~ x ~ x ~ x ~@3 x ~@4 x ~ x ~",
  I: "x ~ x ~ x ~@4 x ~ x ~@3 x ~ x ~ x ~ x ~@2", J: "~@2 x ~@3 x ~ x ~ x ~ x ~@2 x ~@3 x ~ x ~@2",
  K: "~ x ~@2 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~ x ~ x", L: "~ x ~@3 x ~@2 x ~@3 x ~ x ~ x ~@7", M: "~ x ~@21 x", N: "~@7 x",
  O: "~@19 x ~@4", P: "~@17 x ~@6", Q: "~@5 x ~@2", R: "~@13 x ~@10", S: "~@11 x ~@12", T: "~@3 x ~@4", U: "~@7 x ~@16",
  V: "~@5 x ~@18", W: "~ x ~@6", X: "x ~@10 x ~@11 x", Y: "~@10 x ~@2 x ~@7 x ~@2", Z: "~@9 x ~@10 x ~@3",
  AA: "~@7 x ~@2 x ~@8 x ~@4", AB: "~@6 x ~@10 x ~@6", AC: "~@5 x ~ x ~@8 x ~@7", AD: "~ x ~@3 x ~@2",
  AE: "~@2 x ~@2 x ~@7 x ~@10", AF: "~ x ~@10 x ~@10 x", AG: "~ x ~@3 x ~@5 x", AH: "~@9 x ~@10 x ~@2 x",
  AI: "~@8 x ~@10 x ~@4", AJ: "~@3 x ~@5 x!2 ~", AK: "~@5 x ~@10 x ~@7", AL: "~@4 x ~@10 x ~@2 x ~@5",
})).gain(0.13)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@11 A B C D E F G H I J K L B M N O P Q R S T U V W X N O P ~@16 Y Z AA AB AC AD AE AF AG AH AA AI AJ AD AK ~@43 AL
  AM AN AO AP AQ AR AS AT AU AV AW AT AX
>`.pickRestart({
  A: "~@18 x ~@4 x", B: "~ x ~@2 x ~@3 x ~@2 x ~ x ~@4 x ~ x ~@2 x", C: "~@3 x ~@2 x ~ x ~@4 x ~ x ~ x ~@4 x ~",
  D: "~ x ~ x ~@4 x ~ x ~ x ~@4 x ~ x ~@2 x ~", E: "~@2 x ~@2 x ~ x ~@4 x ~ x ~@2 x ~@3 x ~@2",
  F: "x ~ x ~@4 x ~ x ~ x ~@4 x ~@2 x ~ x ~@2", G: "~@2 x ~ x ~ x ~@4 x ~ x ~@2 x ~@3 x ~@2 x",
  H: "~ x ~@4 x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@3", I: "~ x ~ x ~ x ~@4 x ~@2 x ~ x ~@4 x ~ x ~",
  J: "x ~@4 x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@4", K: "x ~ x ~@2 x ~@3 x ~@2 x ~ x ~@4 x ~ x ~ x",
  L: "~@4 x ~@2 x ~ x ~@4 x ~ x ~ x ~@4 x", M: "~@3 x ~@2 x ~ x ~@5 x ~@4 x ~@2 x ~",
// … 188 more lines