Strudelify

Mambo Swing

Big Bad Voodoo Daddy

KeyD majorTempo230 bpm
0:00/0:00
// Mambo Swing — Big Bad Voodoo Daddy
// 230 bpm, 2/2, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Lead" alto sax (copy of ch 1 "!st Alto" alto sax)
// note: Full arrangement: all 180 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(230/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 · tenor sax · "Tenor"
const tenor_sax = note(`<
  A B C D E F G@2 H@2 I@2 J@2 K L M N I@2 J@2 K L O P Q I@2 R@2 S@2 T@2 S@2 U@2 S@2 V@2 I@2 J@2 K L M N I@2 J@2 K L M N
  I@2 R@2 S@2 T@2 S@2 U@2 S@2 V@2 I@2 J@2 K L M N I@2 J@2 K L W X C D E Y C D Z AA AB I@2 J@2 K L M N I@2 J@2 K L M N C
  D E Y C D AC AD AE AF AG AD AE AF AG AD AE AF AG AD AE AF AG AD AE AH AI AD AE AH AI AD AE AJ AK AH AL AM AN AO AP I@2
  J@2 K L M N I@2 J@2 K L M AQ K L AR AS AT AU AV
>`.pickRestart({
  A: "[e3,a3]!3 ~@3 [e3,b3]!2", B: "~@2 [e3,c4] ~ e3 f3 f#3 g3", C: "a3 c4 ~ e4 ~ c4 ~ d#4", D: "~ d4 ~ c4 d4@2 c4 ~",
  E: "b3 d4 ~ e4 ~ d4 ~ f4", F: "~ e4 ~ d4 e4 d4 c4 b3", G: "[e3@7 f3]/2", H: "[e3@5 e3 g3 g#3]/2", I: "a3/2",
  J: "g#3/2", K: "[e3,c4]", L: "[g#3,b3]", M: "~ e3 a3 b3", N: "c4 [b3,d4] [a3,e4] [g#3,e4]", O: "~ c4@2 b3",
  P: "c4@5 b3@5 ~ g#3@5", Q: "a3 e3 g3 g#3", R: "[g#3@7 g#3]/2", S: "[a3 ~@3 a3@12]/2", T: "[b3@14 e3 g#3]/2",
  U: "[b3@9 e4 d#4 d4 c#4 c4 b3 a#3]/2", V: "[b3@11 e4 d4@2 b3@2]/2", W: "e3!3 ~@2 e3!2 ~", X: "~@2 e3 ~@5",
  Y: "~@2 e4@2 ~@2 d4@2 e4@2 d4@2 c4@2 b3 ~", Z: "b3 d4 ~ e4 ~ d4 ~ e4", AA: "~ d4 d#4 e4 f4 f#4 g4 g#4",
  AB: "a4 ~@2 [e3,g#3] [g3,b3]@2 [b3,e4]@2", AC: "b3 d4 ~ e4 ~ d4 e4 ~", AD: "[c4,e4]!5 ~ [c4,e4]!2",
  AE: "~ [c4,e4] ~ [c4,e4]!2 ~ [c4,e4] ~", AF: "[b3,e4]!5 ~ [a3,e4] [b3,e4]", AG: "~ [b3,e4] ~ [b3,e4]!2 ~ [a3,e4] ~",
  AH: "[c4,e4]!2 ~ [c4,e4] ~ [c4,e4] ~ [c4,e4]", AI: "[d4,f#4]!2 ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]",
  AJ: "[b3,e4]!5 ~ [b3,e4]!2", AK: "~ [b3,e4] ~ [b3,e4]!2 ~ [b3,e4] ~", AL: "[e3,g3]@5 [e3,g3]@5 ~ [e3,g3]@5",
  AM: "[f#3,a3]@5 [f#3,a3]@5 ~ [f#3,a3]@5", AN: "[g3,a#3]@5 [g3,a#3]@5 ~ [g3,a#3]@5", AO: "[g#3,b3] ~@7",
  AP: "~ e3 g3 g#3", AQ: "c4 b3 a3@2", AR: "a4 g4", AS: "f4 e4", AT: "d4 c4", AU: "b3@5 c4@5 ~ b3@5", AV: "a3@2 a3 ~",
})).s("gm_tenor_sax").gain(0.8).pan(0.7)

// other · baritone sax · "Bari"
const baritone_sax = note(`<
  A B C D E F G@2 H@2 I@2 J@2 K L M N O@2 J@2 K L M P Q R@2 S@2 R@2 S@2 R@2 S@2 R@2 S@2 I@2 J@2 K L M N I@2 J@2 K L M N
  R@2 S@2 R@2 S@2 R@2 S@2 R@2 S@2 I@2 J@2 K L M N I@2 J@2 K L T U C D E F C D V W X I@2 J@2 K L M N I@2 J@2 K L M N C D
  E F C D Y Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB AC Z AA AD AE Z AA AD AE Z AA AB AC AF AG AH AI AJ AK I@2 J@2 K L M
  N I@2 J@2 K L M P K L M P AL AM AN
>`.pickRestart({
  A: "c3!3 ~@3 b2!2", B: "~@2 a2 ~ g2 c3 g2@2", C: "a2 c3 ~ e3 ~ c3 ~ d#3", D: "~ d3 ~ c3 d3@2 c3 ~",
  E: "b2 d3 ~ e3 ~ d3 ~ f3", F: "~ e3 ~ d3 e3 d3 c3 b2", G: "[a2@7 a#2]/2", H: "[b2@5 e3 b2 a#2]/2",
  I: "[a2@5 e2@5 ~ a2@9 e2@4 a2@4 a#2@4]/2", J: "[b2@5 e2@5 ~ b2@13 e2@8]/2", K: "a2@5 a2@5 ~ a2@5",
  L: "e2@5 e2@5 ~ e2@5", M: "a2 g2", N: "f2@2 e2 g#2", O: "[a2@5 e2@5 ~ a2@9 e2@4 g#2@4 a2@4]/2", P: "f2 e2",
  Q: "a2 e3 b2 a#2", R: "a2 e2", S: "b2 e2", T: "a2!3 ~@2 e2!2 ~", U: "~@2 a2 ~@5", V: "b2 d3 ~ e3 ~ d3 ~ e3",
  W: "~ d3 d#3 e3 f3 f#3 g3 g#3", X: "a3 ~@2 e3 d3@2 b2@2", Y: "b2 d3 ~ e3 ~ d3 e3 ~", Z: "a2!5 ~ a2!2",
  AA: "~ a2 ~ a2!2 ~ a2 ~", AB: "e2!5 ~ e2!2", AC: "~ e2 ~ e2!2 ~ e2 ~", AD: "c3!2", AE: "d3!2",
  AF: "a2!2 ~ a2 ~ a2 ~ a2", AG: "c3@5 c3@5 ~ c3@5", AH: "d3@5 d3@5 ~ d3@5", AI: "d#3@5 d#3@5 ~ d#3@5", AJ: "e3 ~@7",
  AK: "~ e3 b2 a#2", AL: "d3 c3", AM: "b2@5 c3@5 ~ b2@5", AN: "a2@2 a2 ~",
})).s("gm_baritone_sax").gain(0.59).pan(0.4)

// chords · alto sax · "3rd Alto"
const alto_sax = note(`<
  A B C D E F C G H ~ I@2 J@2 K L M@2 I@2 J@2 K L N@2 ~ O@2 P@2 Q@2 R@2 S@2 T@2 Q@2 T@2 U@2 V@2 W X Y@2 U@2 V@2 W X Y@2
  O@2 P@2 Q@2 R@2 S@2 T@2 Q@2 T@2 U@2 V@2 W X Y@2 U@2 V@2 W X Z AA AB AC AD AE AB AC AD AF AG U@2 V@2 W X Y@2 U@2 V@2 W
  X Y@2 AH AI AJ AK AH AI AL AM AI AN AK AM AI AN AK AM AI AN AK AM AI AN AK AM AI AO AB AM AI AO AB AM AI AN AK AH AP
  AQ AR AS ~ U@2 V@2 W X Y@2 U@2 V@2 W X AT@2 AU X AV AW AX@3
>`.pickRestart({
  A: "a3!3 ~@3 g#3!2", B: "~@2 a3 ~ c4 b3 f#3 g3", C: "a3 c4 ~ e4 ~ c4 ~ d#4", D: "~ d4 ~ c4 d4@2 c4 ~",
  E: "b3 d4 ~ e4 ~ d4 ~ f4", F: "~ e4 ~ d4 e4 d4 c4 b3", G: "~ d4 ~ c4 d4 ~ c4 ~", H: "b3 d4 ~ e4 ~ d4 ~ e4",
  I: "[c4@5 c4@5 ~ c4@9 e4@4 c4@4 a3@4]/2", J: "[b3@5 b3@5 ~ b3@21]/2", K: "e4", L: "b3", M: "e4/2", N: "a3/2",
  O: "c4/2", P: "[d4@7 e4]/2", Q: "[c4 ~@3 c4@12]/2", R: "[d4@5 c4 d4 c4]/2", S: "[e4 ~@3 c4@12]/2", T: "d4/2",
  U: "[[c4,a4]@5 [c4,c5]@5 ~ e5@9 a4@4 c5@4 e5@4, ~@11 c4@21]/2", // F C
  V: "[[b3,d#5]@5 [b3,b4]@5 ~ g#4@13 ~@4 a4@2 b4@2, ~@11 b3@21]/2", W: "c5@5 d5@5 ~ c5@5, c4",
  X: "b4 g#4@2 g#4 a4@2 [d4,e4]@2, d4@3 ~", Y: "[a4 g4 a4 e4, e4@3 ~]/2", Z: "[c4,f#4]!3 ~@2 [c4,e4]!2 ~",
  AA: "~@2 [c4,f#4] ~@5", AB: "[f#4,a4]!2 ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4]", AC: "~ [f#4,a4] ~ [f#4,a4]!2 ~ [f#4,a4] ~",
  AD: "[d4,g#4]!2 ~ [d4,g#4] ~ [d4,g#4] ~ [d4,g#4]", AE: "~ [d4,g#4] ~ [d4,g#4]!2 ~ [d4,g#4] ~",
  AF: "~ d4 d#4 e4 f4 f#4 g4 g#4", AG: "a4 ~@2 [b3,g#4] [d4,b4]@2 [b3,g#4]@2",
  AH: "[e4,a4]!2 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]", AI: "~ [e4,a4] ~ [e4,a4]!2 ~ [e4,a4] ~",
  AJ: "[e4,g#4]!2 ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4]", AK: "~ [e4,g#4] ~ [e4,g#4]!2 ~ [e4,g#4] ~",
  AL: "[e4,g#4]!2 ~ [e4,g#4] ~ [e4,g#4]!2 ~", AM: "[e4,a4]!5 ~ [e4,a4]!2", AN: "[e4,g#4]!5 ~ [e4,g#4]!2",
  AO: "[e4,g4]!2 ~ [e4,g4] ~ [e4,g4] ~ [e4,g4]", AP: "[c4,g4]@5 [c4,g4]@5 ~ [c4,g4]@5",
  AQ: "[d4,a4]@5 [d4,a4]@5 ~ [d4,a4]@5", AR: "[g4,a#4]@5 [g4,a#4]@5 ~ [g4,a#4]@5", AS: "[e4,b4] ~@7",
  AT: "[a4@4 g4@4 a4@4 e4@2 a4 b4, e4@3 ~]/2", AU: "c5@5 d5@5 ~ c5@5", AV: "d4 e4", AW: "f4 g4", AX: "[a4@10 e4 ~]/3",
})).s("gm_alto_sax").gain(0.5).pan(0.1)

// bass · acoustic bass · "String Bass"
const bass = note(`<
  A B C@2 D@2 C E D F G@2 H@2 I J K L M@2 H@2 I J K N O P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 G@2 H@2 I J K L G@2 H@2 I J K L
  P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 G@2 H@2 I J K L G@2 H@2 I J R S T U V W T U X Y Z G@2 H@2 I J K L G@2 H@2 I J K L T U
  V W T U AA AB AC AD AE AB AC AD AE AB AC AD AE AB AC AD AE AB AC AF AG AB AC AF AG AB AC AH AI AJ AK AL AM AN AO G@2
  H@2 I J K L G@2 H@2 I J K N I J K N AP AQ AR
>`.pickRestart({
  A: "c3!3 ~@3 b2!2", B: "~@2 a2 ~ g2 c3 g2@2", C: "a2!2", D: "b2!2", E: "a2@2 ~ a#2", F: "b2 e3 b2 a#2",
  G: "[a2@5 e2@5 ~ a2@9 e2@4 a2@4 a#2@4]/2", H: "[b2@5 e2@5 ~ b2@13 e2@8]/2", I: "a2@5 a2@5 ~ a2@5",
  J: "e2@5 e2@5 ~ e2@5", K: "a2 g2", L: "f2@2 e2 g#2", M: "[a2@5 e2@5 ~ a2@9 e2@4 g#2@4 a2@4]/2", N: "f2 e2",
  O: "a2 e3 b2 a#2", P: "a2 e2", Q: "b2 e2", R: "a2!3 ~@2 e2!2 ~", S: "~@2 a2 ~@5", T: "a2 c3 ~ e3 ~ c3 ~ d#3",
  U: "~ d3 ~ c3 d3@2 c3 ~", V: "b2 d3 ~ e3 ~ d3 ~ f3", W: "~ e3 ~ d3 e3 d3 c3 b2", X: "b2 d3 ~ e3 ~ d3 ~ e3",
  Y: "~ d3 d#3 ~ f3 ~ g3 ~", Z: "a3 ~@2 e3 d3@2 b2@2", AA: "b2 d3 ~ e3 ~ d3 e3 ~", AB: "[a2,a3]!5 ~ [a2,a3]!2",
  AC: "~ [a2,a3] ~ [a2,a3]!2 ~ [a2,a3] ~", AD: "[e2,g#3]!5 ~ [e2,g#3]!2", AE: "~ [e2,g#3] ~ [e2,g#3]!2 ~ [e2,g#3] ~",
  AF: "c3!2", AG: "d3!2", AH: "[e2,g#3]!2 e2 [e2,g#3] e2 ~ [e2,g#3]!2", AI: "~ e2 ~ e2!2 ~ e2 ~",
  AJ: "a2!2 ~ a2 ~ a2 ~ a2", AK: "c3@5 c3@5 ~ c3@5", AL: "d3@5 d3@5 ~ d3@5", AM: "d#3@5 d#3@5 ~ d#3@5", AN: "e3 ~@7",
  AO: "~ e3 b2 a#2", AP: "d3 c3", AQ: "b2@5 c3@5 ~ b2@5", AR: "a2@2 a2 ~",
})).s("gm_acoustic_bass").gain(0.3).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A B C@96 ~ D C@55 D ~ C@20 ~@3>".pickRestart({
  A: "x!3 ~@3 x!2", B: "~ x ~@2", C: "x!2", D: "x",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@109 [~@3 x] ~@44 x ~@21 [~ x ~@2] ~@3>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@2 B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B A B A B A B
  ~@3
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 [~@3 x] [~ x ~@14] ~@169>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@3 x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~ [~@8 x!8] x ~@6 [~@3 x ~@4 x ~@7] ~@170>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<A B C ~ C ~ C ~ C ~@90 C ~@79 D>".pickRestart({
  A: "x!3 ~@3 x!2", B: "~ x ~@2", C: "x", D: "~ x",
})).gain(0.64)

// drums · cowbell
const cowbell = s("cb").struct("<~@152 [x ~@4 x ~@5 x ~@4] [~@4 x ~@6 x ~@4] [~@5 x ~@5 x ~@4] ~@25>").gain(0.8)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@152 A ~ B@2 ~ B ~@17 C@2 B ~@2>".pickRestart({
  A: "~@15 x", B: "x", C: "~ x ~ x",
})).gain(9.4)

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

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  ~@4 A ~ A ~ A ~ A ~@35 B ~@12 C ~@18 D ~@2 B@2 ~@3 E ~@8 A ~ E ~@6 A ~@7 A ~@30 A ~@2 F ~@13 G ~@7 G ~@2 G B ~@7
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~@14", D: "~@7 x", E: "~@15 x", F: "~ x ~ x ~ x ~ x", G: "~@11 x ~@4",
})).gain(1.89)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@25 A B ~@3 C B ~@3 B ~@2 D ~@3 E ~@19 F B ~@3 G ~@2 H B ~@2 I ~@31 J K ~@6 L@2 ~@18 C ~@10 M ~@17 I N ~@15
>`.pickRestart({
  A: "~@6 x!2", B: "x", C: "~@5 x ~ x!2 ~ x ~ x ~ x ~", D: "~@3 x ~ x ~ x ~ x ~ x ~ x!2 ~",
  E: "~@4 x ~ x ~ x ~ x ~ x!2 ~@2", F: "~@3 x ~ x ~@2 x ~ x ~ x!2 ~@2", G: "~ x ~@14", H: "~@4 x!2 ~@2 x!2 ~ x ~ x ~@2",
  I: "~@2 x!6", J: "~@2 x!2 ~@4", K: "~@2 x!3 ~@3", L: "~@3 x", M: "x!4", N: "x!6 ~@2",
})).gain(4.08)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct(`<
  ~@34 A ~@8 B ~@22 C ~@8 B ~@30 D@2 ~@6 E F ~@19 B ~@10 G B ~@16 D ~@7 D ~@7
>`.pickRestart({
  A: "~@4 x!2 ~ x ~ x ~@2 x ~@3", B: "x", C: "~@4 x ~ x ~ x ~ x ~ x ~@2 x", D: "~@3 x", E: "~@4 x ~ x!2 ~@8",
  F: "~@2 x!3 ~@3", G: "x!4",
})).gain(4.08)

// drums · guiro
const guiro = s("guiro:0").struct("<~@126 [~@3 x] ~ [~@3 x] ~ [~ x] [~@3 x]!2 ~@47>").gain(15.21)

// drums · guiro
const guiro_2 = s("guiro:4").struct("<~@129 x [~@3 x ~@12] ~@49>").gain(15.21)

stack(
  tenor_sax, baritone_sax, alto_sax, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, cowbell,
  vibraslap, bongos, bongos_2, agogo_bells, agogo_bells_2, guiro, guiro_2
)