Strudelify

Rode rozen

Jantje Koopmans

KeyD♭ majorTempo87 bpm
0:00/0:00
// Rode rozen — Jantje Koopmans
// 87 bpm, 6/8, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 83 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/3)

// 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 · accordion
const accordion = note(`<
  A B C D ~@6 E F ~@2 G H I J K L ~ M N O P Q R S T U V W X ~@6 E F ~@2 G H I J K L ~ M N O P Q R S T U V W X ~@6 E F
  ~@2 G H I J K ~ I J K ~ Y
>`.pickRestart({
  A: "~ f5 db5 f5 db5 f5 ~ f5 c5 f5 c5 f5", B: "~@2 d5@2 bb4@2 d5@2 bb4@2 d5@2 bb4@2 d5@2 a4@4 bb4@3 ~",
  C: "~ bb5 gb5 bb5 gb5 bb5 ~ ab5 f5 ab5 gb5 eb5", D: "~@2 f5 ~ db5@2 f5@2 db5@2 f5@2 c5@4 db5@4 eb5@4",
  E: "c6 ab5 c6 ab5 db6 ab5 c6 ab5 c6 ab5 bb5 gb5", F: "ab5 f5 ab5 f5 ab5 f5 [ab4,c5]@2 [bb4,db5]@2 [c5,eb5]@2",
  G: "d5@2 bb4 ~ d5 ~ bb4@2 d5 ~ bb4@2 eb5@2 bb4@2 eb5 ~ bb4 ~ f5@2 bb4 ~",
  H: "gb5@2 eb5@2 gb5@2 eb5@2 gb5@2 eb5@2 gb5@2 eb5@2 gb5@2 eb5@2 gb5 ~ eb5@2",
  I: "bb5@2 gb5@2 bb5@2 gb5@2 bb5@2 gb5@2 bb5@2 gb5 ~ bb5@2 gb5 ~ bb5@2 gb5@2",
  J: "f5 db5 f5 db5 f5 db5 e5 db5 e5 db5 f5 db5",
  K: "~@2 f5@2 ab5@2 f5@2 ab5@2 f5@2 gb5@2 eb5 ~ gb5@2 eb5@2 gb5@2 eb5@2", L: "f5 db5 f5 db5 f5 db5 f5 db5 ~@4",
  M: "[ab5,c6]@7 ~ [ab5,c6]@2 ~@10 db6@2 ~@2, ~@12 [ab5,c6]@11 ~", // Ab
  N: "[ab5,eb6]@6 ~@2 [ab5,eb6]@2 ~@2 [ab5,eb6]@6 eb6@2 c6 ~ ab5 ~", // Ab5
  O: "[ab5,c6]@7 ~ [c6,eb6]@2 ~@2 [bb5,db6]@6 ~@2 [c6,eb6]@2 ~@2", P: "[c6,eb6]@7 ~ [bb5,db6] ~@3 [bb5,db6]@12",
  Q: "[bb5,db6]@8 [bb5,db6]@2 ~@2 [bb5,db6]@7 ~ [g5,bb5]@2 ~@2, a5 ~@23", // Bbm Gm
  R: "[bb5,db6]@8 [bb5,db6]@2 ~@2 [bb5,db6]@5 ~ [gb5,g5] ~ bb5@2 g5 ~", S: "db6@7 ~ f6@4 eb6@8 db6 ~@3",
  T: "db6@8 c6 ~@3 c6@11 ~", U: "db6@4 db6 ~ db6@4 eb6@2",
  V: "db6@4 ab5@2 eb5 ~ ab5@2 eb5@2 ab5@2 eb5@2 ab5 ~ eb6@2 c6 ~ ab5 ~",
  W: "[eb5,g5]@7 ~ [db5,f5]@3 ~ [c5,eb5]@6 ~@2 [bb4,db5]@3 ~", X: "[ab4,c5]@11 ~@13",
  Y: "[a5,bb5] ~ gb5@2 bb5 ~ db6 ~ c6 ~ eb6 ~ db6 ~@3 db6 ~@7", // Bbmaj7
})).s("gm_accordion").gain(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG E F G H I J K L M N O P Q R S T U V W X Y Z
  AA AB AC AD AE AF AG E F G H I J K L M N O P Q R S AH AI R AJ AK AL
>`.pickRestart({
  A: "db2@8 ~@4 ab1@9 ~@3", B: "bb1@5 ~ f2@4 ~@2", C: "eb2@8 ~@4 ab1@3 ~ bb1@3 ~ c2@4",
  D: "db2@8 ~@4 ab2@4 gb2@4 eb2@3 ~", E: "db2@7 ~@5 ab2@8 ~@4", F: "db2@4 ~@2 ab2@5 ~", G: "db2@8 ~@4 f2@7 ~ e2@4",
  H: "eb2@10 ~@2 ab1@9 ~@3", I: "eb2@3 ~@3 bb1@4 ~@2", J: "ab1@9 ~@3 eb2@5 ~@3 ab1@2 ~@2", K: "eb2@2 ~ ab1@2 ~",
  L: "db2@9 ~@3 ab1@3 ~ bb1@4 c2@3 ~", M: "db2@2 ~ ab1@2 ~", N: "b1@8 ~@4 bb1@9 ~@3", O: "f2@8 ~@4 bb1@7 ~ d2@3 ~",
  P: "eb2@9 ~@3 bb1@6 ~@2 eb2@2 ~@2", Q: "gb2@4 ~@2 bb2@4 a2 ~", R: "ab2@3 ~ db2@3 ~",
  S: "bb2@9 ~@3 ab1@3 ~ bb1@4 c2@4", T: "db2@9 ~@3 ab1@8 db2@4", U: "eb2@10 ~@2 eb2@3 ~ f2@2 ~@2 g2@3 ~",
  V: "ab2@7 ~@5 eb2@9 ~@3", W: "ab2@8 ~@4 eb2@9 ~@3", X: "ab2@9 ~@3 a2@11 ~", Y: "bb2@8 ~@4 f2@9 ~@3",
  Z: "eb2@2 ~ bb1@2 ~", AA: "eb2@8 ~@4 bb1@9 ~@3", AB: "eb2@5 ~ eb2@2 f2@2 g2@2", AC: "ab2@9 ~@3 ab1@3 ~ bb1@4 c2@4",
  AD: "db2@5 ~ db2@4 ~@2", AE: "ab2@4 ~@2 c2@5 ~", AF: "eb2@8 ~@4 eb2@9 ~@3",
  AG: "ab2@2 ~@2 ab2 ~@3 ab2 ~@3 ab2@4 gb2@4 eb2@4", AH: "db2@9 ~@3 db2@3 ~ eb2@4 f2@3 ~", AI: "gb2@2 ~ bb2@2 a2",
  AJ: "bb2@9 ~@3 ab1@3 ~ bb1@4 c2@3 ~", AK: "db2@11 ~ ab1@11 ~", AL: "eb2@4 ab1@2 db2 ~ db2 ~@3",
})).s("gm_acoustic_bass").gain(0.48)

// chords · bandoneon · "BANDNEON"
const bandoneon = note(`<
  A B C D E F G H I J H K A L B M N O P O Q R@3 S T@3 U O R T V E F G H I J H K A L B M N O P O Q R@3 S T@3 U O R T V E
  F G H I J H K A L B M N O P O N O P E W
>`.pickRestart({
  A: "~@4 [ab4,db5,f5] ~@3 [ab4,db5,f5] ~@7 [ab4,c5,f5] ~@3 [ab4,c5,f5] ~@3", // Db Fm
  B: "~@4 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~@7 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~@3", // Bb7
  C: "~@4 [gb4,bb4,eb5] ~@3 [gb4,bb4] ~@7 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~@3, ~@4 eb5 ~@7", // Ebm Gb Ab
  D: "~@4 [ab4,db5,f5] ~@3 [ab4,db5,f5] ~@3 [ab4,c5] ~ [ab4,c5] ~ [bb4,db5] ~ [bb4,db5] ~ [c5,eb5] ~ [c5,eb5] ~", // Db Ab Bbm Cm
  E: "~@4 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@7 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3", // Db Fm
  F: "~@4 [f4,bb4] ~@3 [f4,bb4] ~@7 [f4,ab4] ~@3 [f4,ab4] ~@3", // Bb5 Fm
  G: "~@4 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@7 [f4,bb4] ~@3 [f4,bb4] ~@3", // Db Bb5
  H: "~@4 [gb4,ab4,c5,eb5] ~@3 [gb4,ab4,c5,eb5] ~@7 [gb4,ab4,c5,eb5] ~@3 [gb4,ab4,c5,eb5] ~@3", // Ab7
  I: "~@4 [gb4,ab4,c5,eb5] ~@3 [gb4,ab4,c5,eb5] ~@7 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~@3", // Ab7 Gb
  J: "~@4 [gb4,ab4,c5] ~@3 [gb4,ab4,c5] ~@7 [eb4,gb4,bb4] ~@3 [eb4,gb4,bb4] ~@3", // Ab7 Ebm
  K: "~@4 [f4,ab4,db5] ~@3 [f4,ab4]@2 ~@6 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3, ~@8 db5 ~@15", // Db Fm Ab
  L: "~@4 [gb4,b4,eb5] ~@3 [gb4,b4,eb5] ~@7 [f4,ab4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~@3", // B Bb7
  M: "~@4 [gb4,bb4,eb5] ~@3 [gb4,bb4,eb5] ~@7 [gb4,bb4,eb5] ~@3 [gb4,bb4,eb5] ~@3", // Ebm
  N: "~@4 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~@7 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~@3", // Gb
  O: "~@4 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@7 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3", // Db
  P: "~@4 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@7 [gb4,ab4,c5,eb5] ~@3 [gb4,ab4,c5,eb5] ~@3", // Db Ab7
  Q: "~@4 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@7 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3", // Eb
  R: "~@4 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@7 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3", // Ab
  S: "~@4 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@7 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3", // Bbm
  T: "~@4 [eb4,g4,bb4,db5] ~@3 [eb4,g4,bb4,db5] ~@7 [eb4,g4,bb4,db5] ~@3 [eb4,g4,bb4,db5] ~@3", // Eb7
  U: "~@4 [eb4,ab4,c5] ~@3 [eb4,ab4,bb4,c5] ~@7 [eb4,gb4,ab4,c5] ~@3 [eb4,gb4,ab4,c5] ~@3", // Ab Ab7
  V: "~@4 [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@11", // Ab
  W: "~@4 [db4,gb4,bb4] ~@3 [db4,gb4,bb4] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@7", // Gb Db
})).s("gm_bandoneon").gain(0.2).pan(0.8)

// other · acoustic guitar steel · "+MANDOLIN"
const acoustic_guitar_steel = note(`<
  ~ A B C ~ A D E ~@2 F G ~@2 H I J K L M N ~@2 O P ~@2 Q R ~@2 S T ~ A D E ~@2 F G ~@2 H I J K L M N ~@2 O P ~@2 Q R
  ~@2 S T ~ A D E ~@2 F G ~@2 H I J K L U J K L V W
>`.pickRestart({
  A: "~@16 a4!4 bb4!4", B: "gb5!12 f5!8 eb5!4", C: "db5!12 ab4!4 bb4!4 c5!4", D: "db5!12 bb4!8 db5!4", E: "c5!24",
  F: "c5!9 db5!3 c5!8 bb4!4", G: "ab4!24", H: "bb4!12 c5!8 d5!4", I: "eb5!23 ~", J: "bb4!12 db5!8 gb5!3 ~",
  K: "f5!11 ~ db5!11 ~", L: "f5!11 ~ eb5!12", M: "db5!16 c5!4 db5!4", N: "eb5!15 ~ f5!4 g5!4", O: "ab4!12 gb4!7 f4!5",
  P: "eb4!8 db4!16", Q: "bb4!8 db5!4 c5!7 ~ bb4!4", R: "bb4!8 ab4!16", S: "eb5!8 db5!4 c5!8 bb4!4",
  T: "ab4!7 ~@5 ab4!4 bb4!4 c5!4", U: "db5!16 c5!4 b4!4", V: "db5!12 c5!12", W: "bb4!12 db5 ~@3 db5 ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.3)

// other · acoustic guitar steel · "+MANDOLIN"
const acoustic_guitar_steel_2 = note(`<
  ~@2 A B ~@2 C D ~@12 E ~@2 F G ~@2 H I ~@2 J K ~@2 C D ~@12 E ~@2 F G ~@2 H I ~@2 J K ~@2 C D ~@17
>`.pickRestart({
  A: "bb5!12 ab5!8 gb5!4", B: "f5!11 ~ c5!4 db5!4 eb5!4", C: "f5!2 ~ f5!3 ~ f5!3 ~ f5!3 ~ f5!3 ~ f5!3 ~ f5",
  D: "gb5!2 ~ gb5!3 ~ gb5!3 ~ gb5!3 ~ gb5!3 ~ gb5!3 ~ gb5", E: "g4!4 ~ g4!11 ab4!4 bb4!4", F: "c5!8 eb5!4 db5!8 c5!4",
  G: "c5!8 bb4!16", H: "db5!8 f5!4 eb5!8 db5!4", I: "db5!8 c5!16", J: "g5!8 f5!4 eb5!8 db5!4",
  K: "c5!11 ~ ab4!3 ~ bb4!4 c5!4",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.4)

// other · tenor sax
const tenor_sax = note(`<
  A B C D E F G H I J ~@2 K L ~@2 M N O P Q ~@11 R E F G H I J ~@2 K L ~@2 M N O P Q ~@11 R E F G H I J ~@2 K L ~@2 M N
  O S M T U V W
>`.pickRestart({
  A: "db4@7 ~ db4@4 c4@8 db4@4", B: "c4@3 bb3 a3 bb3", C: "gb4@7 ~ gb4@4 f4@8 eb4@3 ~", D: "db4@3 ab3 bb3 c4",
  E: "db4@8 db4@3 ~ c4@8 db4@4", F: "c4@12 bb3@3 ~ a3@4 bb3@4", G: "db4@11 ~ db4@8 db4@3 ~", H: "c4@7 ~",
  I: "eb4@7 ~ eb4@4 db4@8 eb4@4", J: "db4 c4", K: "f4@7 ~ f4@4 e4@8 f4@4", L: "eb4@12 d4@11 ~",
  M: "bb3@7 ~ bb3@4 db4@8 gb4@4", N: "f4@12 ab3@7 ~ ab3@4", O: "f4@11 ~ eb4@8 f4@4", P: "db4@4 c4 db4",
  Q: "eb4 ~@3 eb4 ~ eb4 ~ eb4 ~@3 eb4 ~@11", R: "~@4 ab3 ~ ab3 ~ ab3 ~@3 c4@4 db4@4 eb4@4",
  S: "db4@11 ~ db4@4 c4@4 b3@4", T: "f4@12 ab3@6 ~@2 ab3@3 ~", U: "f4 eb4", V: "db4@12 c4@11 ~",
  W: "bb3 ~ gb3 ~ bb3 ~ db4 ~ c4 ~ eb4 ~ db4 ~@3 db4 ~@7",
})).s("gm_tenor_sax").gain(0.48).pan(0.7)

// other · alto sax
const alto_sax = note(`<
  A B C D E F G H I J ~@2 K L ~@2 M N O P Q R S T U V W X Y Z AA AB AC E F G H I J ~@2 K L ~@2 M N O P Q R S T U V W X Y
  Z AA AB AC E F G H I J ~@2 K L ~@2 M N O AD AE AF O AG AH
>`.pickRestart({
  A: "f4@7 ~ f4@3 ~ f4@7 ~ f4@3 ~", B: "d4@5 ~ d4@2 db4@2 d4@2", C: "bb4@7 ~ bb4@4 ab4@8 gb4@4", D: "f4@3 c4 db4 eb4",
  E: "f4@6 ~@2 f4@3 ~ f4@7 ~ f4@3 ~", F: "f4@12 f4@2 ~@2 f4@3 ~ f4@4", G: "f4@11 ~ f4@7 ~ f4@4", H: "gb4@23 ~",
  I: "gb4@8 gb4@3 ~ gb4@6 ~@2 gb4@4", J: "gb4@5 ~ gb4@6", K: "ab4@7 ~ ab4@4 g4@7 ~ ab4@4", L: "gb4 f4",
  M: "gb4@7 ~ gb4@4 bb4@7 ~ a4@4", N: "ab4@3 db4@2 f4", O: "ab4@3 gb4@2 ab4", P: "f4@4 e4 f4",
  Q: "g4 ~@3 g4 ~ g4 ~ g4 ~@3 g4@2 ~@10", R: "eb4@4 eb4 ~ eb4@4 f4@2", S: "eb4@3 ~ eb4 ~ eb4@6",
  T: "eb4@7 ~ eb4@2 ~@2 eb4@8 f4@4", U: "eb4@8 db4 ~@3 db4@12", V: "f4@7 ~ f4@3 ~ f4@8 db4@4",
  W: "f4@6 ~@2 f4@3 ~ f4@12", X: "f4@6 ~@2 f4@4 g4@8 f4@3 ~", Y: "f4@4 eb4 ~ eb4@5 ~", Z: "f4@7 ~ f4@2 ~@2 f4@7 ~ g4@4",
  AA: "f4@8 eb4 ~@3 eb4@7 ~ eb4@4", AB: "g4@2 f4 eb4@2 db4", AC: "c4@3 ~ c4 ~ c4 ~ c4@4 ab4@4 gb4 ~@3 gb4@2 ~@2",
  AD: "f4@11 ~ db4@4 eb4@4 f4@3 ~", AE: "gb4@7 ~ gb4@4 bb4@8 a4@4", AF: "ab4@12 db4@7 ~ f4@3 ~", AG: "f4@11 ~ f4@11 ~",
  AH: "gb4 ~ eb4 ~ gb4 ~ bb4 ~ ab4 ~ gb4 ~ f4 ~@3 f4 ~@7",
})).s("gm_alto_sax").gain(0.48).pan(0.4)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note(`<
  ~@7 A B ~@2 C D ~@6 E@2 ~@15 A B ~@2 C D ~@6 E@2 ~@15 A B ~@2 C D ~@6 F G ~@4
>`.pickRestart({
  A: "eb7 d7@2 db7 [c7,eb7] d7@2 [bb6,db7] [a6,c7] [ab6,b6] ~ [g6,bb6] [gb6,a6] [f6,ab6] ~ [e6,g6] [eb6,gb6] [d6,f6] ~ [db6,e6] [c6,eb6] [b5,d6] ~ [bb5,db6], ~@5 b6 ~@18", // Cm Bbm Am Abm Gm Gbm Fm Em …
  B: "[ab5,c6] ~@23", // Ab
  C: "db6 d6@2 ~ [db6,e6] [d6,f6]@2 ~ [e6,g6] f6@2 ~ g6 b6@2 ~ db7 [b6,d7]@2 eb7 [db7,e7] d7@2 [eb7,gb7], ~@3 eb6@2 ~@2 [eb6,gb6]@2 ab6 ~ [gb6,a6]@2 ab6 ~ [a6,c7]@2 ~@7, ~@12 bb6@2 ~@2 bb6@2 ~ c7@2 f7 ~@2", // Dbm Dm Em Bm Dbm Ebm Gbm Am
  D: "[f7,ab7] ~@23", // Fm
  E: "[bb7 a7@2 ab7 [g7,bb7] [gb7,a7] ~ [f7,ab7] [e7,g7] [eb7,gb7] ~ [d7,f7] [db7,e7] [c7,eb7] ~ [b6,d7] [bb6,db7] [a6,c7] ~ [ab6,b6] [g6,bb6] [gb6,a6] ~@2 [eb6,g6]@2 ~@2 [eb6,g6] ~ [eb6,g6] ~ [eb6,g6] ~@3 [eb6,g6]@2 ~@10, ~@23 [f6,ab6]@2 ~@23]/2", // Gm Gbm Fm Em Ebm Dm Dbm Cm …
  F: "bb7 a7@2 ab7 [g7,bb7] [gb7,a7] ~ [f7,ab7] [e7,g7] [eb7,gb7] ~ [d7,f7] [db7,e7] [c7,eb7] ~ [b6,d7] [bb6,db7] [a6,c7] ~ [ab6,b6] [g6,bb6] [gb6,a6] ~ [f6,ab6]", // Gm Gbm Fm Em Ebm Dm Dbm Cm …
  G: "[eb6,gb6] ~@11", // Ebm
})).s("gm_lead_3_calliope").gain(0.09).pan(0.9)

// drums · kick
const kick = s("bd").struct("<A@3 B A@28 B A@28 B A@15 B A@4 C>".pickRestart({
  A: "x!2", B: "x ~@2 x!3", C: "x ~@2 x!2 ~",
})).gain(0.56)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@3 A ~@24 A ~@3 A ~@26>".pickRestart({
  A: "~ x ~ x!13 ~@8",
})).gain(0.16)

// drums · ride
const ride = s("rd").struct(`<
  A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A@2 ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A@2 ~@3 A ~@7 A ~@7 A ~@2 B ~
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.56)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  A B C D ~@3 E F ~@2 G ~@3 H ~@3 I J ~@2 K L ~@2 M D ~@3 N ~@3 O F ~@2 P ~@3 Q ~@3 E B ~@2 A R ~@2 S H ~@7 E ~@3 T ~@3
  Q ~@3 U ~@2 V W X
>`.pickRestart({
  A: "x!12", B: "x!7 ~ x ~ x ~", C: "x!11 ~", D: "x ~ x!5 ~ x ~ x ~", E: "~@6 x!3 ~ x ~", F: "x",
  G: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x!2 ~@3 x ~@3", H: "~@2 x!5 ~ x ~ x ~", I: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x",
  J: "x ~ x!3 ~ x ~@5", K: "x!3 ~ x ~ x!3 ~ x ~", L: "x ~@3 x!2 ~ x!2 ~@3 x ~@3 x ~@3 x ~@3",
  M: "x ~ x ~ x ~@3 x ~@3 x!2 ~ x!2 ~@3 x ~@3", N: "~@4 x!2", O: "x ~@5 x!3 ~ x ~",
  P: "x!2 ~ x!2 ~@3 x ~@3 x ~@3 x ~ x ~ x ~@3", Q: "x!3 ~ x ~ x ~ x!3 ~", R: "x ~ x!3 ~ x!3 ~ x ~",
  S: "x!2 ~ x!2 ~@7 x!2 ~ x!2 ~@3 x ~@3", T: "x ~ x ~ x ~ x!3 ~ x ~", U: "x ~@3 x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3 x ~@3",
  V: "x ~ x ~ x ~ x ~ x ~@3 x!2 ~ x!2 ~@3 x ~@3", W: "x ~ x!3 ~@3 x ~ x ~", X: "x!7 ~ x ~@3",
})).gain(0.58)

stack(
  accordion, bass, bandoneon, acoustic_guitar_steel, acoustic_guitar_steel_2, tenor_sax, alto_sax, lead_3_calliope,
  kick, snare, snare_soft, ride, woodblocks
)