Strudelify
KeyE♭ minorTempo128 bpm
0:00/0:00
// Oye — Estefan Gloria
// 128 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 86, 4/4 at bar 86) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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(`<
  ~@22 A B C D A B C D ~ E@3 F E@3 F G H G H G H G H ~ I J K L M J K L N O P@2 Q R P@2 Q S T U T U T U T V ~ A B C D A B
  C D W X ~@31 I J K L M J K L M J K L M J K L N ~@3
>`.pickRestart({
  A: "eb3@2 ~ gb3@2 ~ eb3 ~ db3@2 ~ [f3,ab3]@2 ~ d3 ~, ~@3 bb3 ~@12", // Fm
  B: "eb3@2 ~ gb3@2 ~ eb3 ~ db3@2 ~ [f3,ab3] ~ [f3,ab3] d3 ~, ~@3 bb3 ~@12", // Fm
  C: "eb3@2 ~ [ab3,b3]@2 ~ eb3 ~ d3@2 ~ [f3,bb3]@2 ~ [d3,f3,bb3] ~", // Abm Bb5 Bb
  D: "eb3 ~ eb3 [gb3,bb3] ~ [gb3,bb3] eb3 ~ d3@2 ~ [f3,bb3]@2 ~ d3 ~", // Gb Bb5
  E: "[bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~@3 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4] ~", // Ebm
  F: "[ab3,b3,eb4] ~@2 [ab3,b3,eb4] ~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~", // Abm Bb
  G: "b2 [eb3,gb3]@2 b2 [eb3,gb3]@2 b2 [eb3,gb3] bb2 db3@2 bb2 [db3,f3]@2 bb2 [db3,f3], ~@9 f3 ~@6", // Ebm Db
  H: "db3 [f3,ab3]@2 db3 [f3,ab3]@2 db3 [f3,ab3] db3 [f3,ab3] ~ db3 [f3,ab3]@2 db3 [f3,ab3]", // Fm
  I: "~@8 eb3@2 ~ gb3@2 ~ eb3 ~, ~@11 bb3 ~@4", J: "db3@2 ~ [f3,ab3]@2 ~ d3 ~ eb3@2 ~ gb3@2 ~ eb3 ~, ~@11 bb3 ~@4",
  K: "db3@2 ~ [f3,ab3] ~ [f3,ab3] d3 ~ eb3@2 ~ [ab3,b3]@2 ~ eb3 ~", // Fm Abm
  L: "d3@2 ~ [f3,bb3]@2 ~ [d3,f3,bb3] ~ eb3 ~ eb3 [gb3,bb3] ~ [gb3,bb3] eb3 ~", // Bb5 Bb Gb
  M: "d3@2 ~ [f3,bb3]@2 ~ d3 ~ eb3@2 ~ gb3@2 ~ eb3 ~, ~@11 bb3 ~@4", N: "d3@2 ~ [f3,bb3]@2 ~ d3 ~@9",
  O: "~@8 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~", // Ebm
  P: "~@2 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~", // Ebm
  Q: "~@2 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4] ~ [ab3,b3,eb4] ~@2 [ab3,b3,eb4] ~@2 [bb3,d4,f4] ~", // Ebm Abm Bb
  R: "~@2 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~ [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] ~", // Bb Ebm
  S: "~@2 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~ b2 [eb3,gb3]@2 b2 [eb3,gb3]@2 b2 [eb3,gb3]", // Bb Ebm
  T: "bb2 db3@2 bb2 [db3,f3]@2 bb2 [db3,f3] db3 [f3,ab3]@2 db3 [f3,ab3]@2 db3 [f3,ab3], ~ f3 ~@14", // Db Fm
  U: "db3 [f3,ab3] ~ db3 [f3,ab3]@2 db3 [f3,ab3] b2 [eb3,gb3]@2 b2 [eb3,gb3]@2 b2 [eb3,gb3]", // Fm Ebm
  V: "db3 [f3,ab3] ~ db3 [f3,ab3]@2 db3 [f3,ab3] ~@8", // Fm
  W: "[bb3,eb4,gb4]@2 ~@4 [a3,eb4,gb4]@2 ~@3 [f3,ab3,db4] [f3,ab3,db4]@4", X: "[bb3,db4,gb4]@3 ~@13",
})).s("gm_piano").gain(0.36)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@20 A B C D E F C D E F G H@2 I J H@2 I J K L K L K L K L M N O P Q R O P Q S T U@2 V@2 U@2 W@2 X Y X Y X Y X Z AA C
  D E F C D E F AB AC ~@5 T AD AE AF AG AD AE AF AH ~@7 T AI AJ AK AL AI AJ AK AM AN N O P Q R O P Q R O P Q R O P Q AO
  AN AP ~
>`.pickRestart({
  A: "bb0@5 ~@3 bb1@4 ~@4", B: "bb1@3 ~ bb1@3 ~@9", C: "eb1@2 ~ eb1@2 ~ bb0 ~ db1@3 ~ ab1@2 db1 ~",
  D: "eb1@2 ~ eb1@2 ~ bb0 ~ db1@3 ~ ab1@2 eb1 ~", E: "ab1@2 ~ ab1 ~@2 f1 ~ bb1@3 ~ f1 ~ bb1 ~",
  F: "eb1 ~@2 eb1 ~@2 bb0 ~ bb1@3 ~ bb0 ~ bb1 ~", G: "eb1@3 ~@13", H: "eb1@2 ~ eb1@2 ~ eb1@3 ~ eb1@3 ~ eb1@2",
  I: "eb1@2 ~ eb1@2 ~ eb1@3 ~ eb1@3 ~ eb1 ~", J: "ab1 ~@2 ab1 ~@2 bb1@4 bb1@3 ~ bb1 ~",
  K: "b1@2 ~ b1@2 ~ gb1 ~ bb1@2 ~ bb1@2 ~ bb1 ~", L: "db2@2 ~ db2@2 ~ ab1 ~ db2@2 ~ db2@2 ~ ab1 ~",
  M: "eb1@3 ~@5 bb1!2 ~ bb1 ~ bb1!2 ~", N: "~@8 eb1@2 ~ eb1@2 ~ bb0 ~", O: "db1@3 ~ ab1@2 db1 ~ eb1@2 ~ eb1@2 ~ bb0 ~",
  P: "db1@3 ~ ab1@2 eb1 ~ ab1@2 ~ ab1 ~@2 f1 ~", Q: "bb1@3 ~ f1 ~ bb1 ~ eb1 ~@2 eb1 ~@2 bb0 ~",
  R: "bb1@3 ~ bb0 ~ bb1 ~ eb1@2 ~ eb1@2 ~ bb0 ~", S: "bb1@3 ~ bb0 ~ bb1 ~ eb1@3 ~@5", T: "~@8 eb1@2 ~ eb1@2 ~ eb1@2",
  U: "~@2 eb1@3 ~ eb1@2 eb1@2 ~ eb1@2 ~ eb1@2",
  V: "[~@2 eb1@3 ~ eb1 ~ ab1 ~@2 ab1 ~@2 bb1@4 bb1@3 ~ bb1 ~ eb1@2 ~ eb1@2 ~ eb1@2]/2",
  W: "[~@2 eb1@3 ~ eb1 ~ ab1 ~@2 ab1 ~@2 bb1@4 bb1@3 ~ bb1 ~ b1@2 ~ b1@2 ~ gb1 ~]/2",
  X: "bb1@2 ~ bb1@2 ~ bb1 ~ db2@2 ~ db2@2 ~ ab1 ~", Y: "db2@2 ~ db2@2 ~ ab1 ~ b1@2 ~ b1@2 ~ gb1 ~",
  Z: "db2@2 ~ db2@2 ~ ab1 ~ eb1@3 ~@5", AA: "bb1!2 ~ bb1 ~ bb1!2 ~@9", AB: "eb2@3 ~@3 b1@3 ~@2 db2 db2@3 ~",
  AC: "gb1@3 ~@13", AD: "bb1@4 ab1@2 gb1@2 eb1@2 ~ eb1@2 ~ eb1@2", AE: "bb1@4 ab1@2 gb1 ~ ab1@2 ~ ab1@2 ~ eb1 ~",
  AF: "bb1@3 ~ ab1@2 gb1@2 eb1@2 ~ eb1@2 ~ eb1 ~", AG: "bb1@4 ab1@2 gb1 ~ eb1@2 ~ eb1@2 ~ eb1@2",
  AH: "bb1@4 ab1@2 gb1 ~ eb1@3 ~@5", AI: "bb1@2 eb1@2 ab1@2 eb1@2 db2@2 ~ db2@3 ab1@2",
  AJ: "bb1@2 db2@2 bb1@2 ab1@2 b1@2 ~ b1@3 gb1@2", AK: "b1@2 gb1 ~ gb1@2 b1@2 bb1@2 ~ bb1@3 f1@2",
  AL: "bb1@2 ab1 ~ f1@2 bb1@2 eb1@2 ~ eb1@2 ~ eb1@2", AM: "bb1@2 ab1 ~ f1@2 bb1@2 bb0@5 ~@3",
  AN: "bb1@4 ~@4 bb1@3 ~ bb1@3 ~", AO: "bb1@3 ~ bb0 ~ bb1 ~ bb0@5 ~@3", AP: "~ bb1 ~ bb1!3 ~ bb1 eb1@4 ~@4",
})).s("gm_electric_bass_finger").gain(0.51)

// other · synth brass 1 · "Synbrass"
const synth_brass_1 = note(`<
  ~@2
  [eb3@3 eb4 ~@2 eb4@2 db3 ~ db3@2 gb3@2 db3 ~]!5
  [eb3@3 eb4 ~@2 eb4@2 db3 ~ bb3@2 ab3@2 gb3@2]
  ~@128
>`).s("gm_synth_brass_1").gain(0.34)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  ~@8 A B A B A B A B ~@23 C D C D C D C D E F ~@16 G H I H I H I H J K L ~@14 M N O N O N O N P Q R Q@3 R ~ S T U V W T
  U V X ~@21
>`.pickRestart({
  A: "eb4@2 ~ eb4 ~@2 eb4 ~ eb4@3 ~ eb4 ~ eb4 ~", B: "eb4@2 ~ eb4 ~@2 eb4 ~ bb4@4 ab4@2 gb4 ~",
  C: "[b5,eb6,gb6]@3 [eb6,gb6]@2 b5 [eb6,gb6] ~@3 [bb5,db6]@2 gb5@2 [gb5,bb5,db6] ~", // B Ebm Bbm Gb
  D: "[ab5,db6,f6]@3 ~@5 [db6,f6]@2 ~ [eb6,gb6]@2 ~ [ab5,db6,f6] ~, ~@8 ab5 ~ ab5@4 ~@2", E: "[gb5,bb5,eb6] ~@7",
  F: "[g2,ab2] [bb2,c3,d3] [eb3,f3,g3] [ab3,bb3] [c4,d4,eb4] [f4,g4,ab4,c5] [bb4,c5,d5,eb5,f5,g5] [eb5,f5,g5,ab5,bb5,c6] eb6@2 ~@6, ~@8 d6 ~@7", // Abmaj7 Bb Eb Absus2 Cm Fm Cm7
  G: "~@8 [b5,eb6,gb6]@3 [eb6,gb6]@2 b5 [eb6,gb6] ~", H: "~@2 [bb5,db6]@2 gb5@2 [gb5,bb5,db6] ~ [ab5,db6,f6]@3 ~@5",
  I: "[db6,f6]@2 ~ [eb6,gb6]@2 ~ [ab5,db6,f6] ~ [b5,eb6,gb6]@3 [eb6,gb6]@2 b5 [eb6,gb6] ~, ab5 ~ ab5@4 ~@10", // Db Ebm Db B Ebm
  J: "[db6,f6]@2 ~ [eb6,gb6]@2 ~ [ab5,db6,f6] ~ [gb5,bb5,eb6]@2 ~@6, ab5 ~ ab5@4 ~@10", // Db Ebm Db Ebm
  K: "~@8 [g2,ab2] [bb2,c3,d3] [eb3,f3,g3] [ab3,bb3] [c4,d4,eb4] [f4,g4,ab4,c5] [bb4,c5,d5,eb5,f5,g5] [eb5,f5,g5,ab5,bb5,c6]", // Abmaj7 Bb Eb Absus2 Cm Fm Cm7
  L: "eb6 ~@7, d6 ~@15", M: "~@8 eb4@2 ~ eb4 ~@2 eb4 ~", N: "eb4@3 ~ eb4 ~ eb4 ~ eb4@2 ~ eb4 ~@2 eb4 ~",
  O: "bb4@4 ab4@2 gb4 ~ eb4@2 ~ eb4 ~@2 eb4 ~", P: "bb4@4 ab4@2 gb4 ~ [bb4,eb5,gb5]@2 ~ [bb4,eb5,gb5]@2 ~@3",
  Q: "~@8 [bb4,eb5,gb5]@2 ~ [bb4,eb5,gb5]@2 ~@3", R: "~@8 [c5,eb5,gb5]@2 ~ [c5,eb5,gb5]@2 ~@3",
  S: "~@8 [eb5,gb5,bb5]@2 ~ [eb5,gb5,bb5]@3 ~@2", T: "~@2 [eb5,gb5,bb5]@2 ~@4 [db5,gb5,bb5]@2 ~ [db5,gb5,bb5]@3 ~@2",
  U: "~@2 [db5,gb5,bb5]@2 ~@4 [db5,gb5,a5]@3 [db5,gb5,a5]@3 ~@2", // Gb Gbm
  V: "~@6 [db5,gb5] ~ [d5,f5,ab5]@3 [d5,f5,ab5]@3 ~@2, ~@3 a5 ~@4", // Gb5 Ddim
  W: "~@6 [d5,f5,ab5] ~ [eb5,gb5,bb5]@2 ~ [eb5,gb5,bb5]@3 ~@2", X: "~@6 [d5,f5,ab5] ~@9",
})).s("gm_rock_organ").gain(0.31)

// other · brass section · "Brass1"
const brass_section = note(`<
  ~@8 A B C D A B C D ~@5 E ~@61 F G ~@5 H I J K H I J K ~@8 H I J K H I J K ~@2 L ~@17 M ~
>`.pickRestart({
  A: "[eb4,eb5]@2 ~ [gb4,gb5]@2 ~ [bb4,bb5] ~ [ab4,ab5] ~ [bb4,bb5] ~ [ab4,ab5] ~ [eb4,eb5] ~", // Eb Gb Bb Ab Bb Ab Eb
  B: "[gb4,gb5]@2 ~ [eb4,eb5]@4 ~@9", // Gb Eb
  C: "~@2 [eb4,eb5]@2 [gb4,gb5] ~ [bb4,bb5]@2 [ab4,ab5] ~ [bb4,bb5] ~ [ab4,ab5]@2 [eb4,eb5] ~", D: "[gb4,gb5] ~@3",
  E: "~@9 [bb4,bb5] ~ [b4,b5] [c5,c6] [db5,db6] ~ [d5,d6]", F: "eb4@2 ~@4 eb4@2 ~@3 db4 db4@3 ~", G: "gb4 ~@7",
  H: "~@8 [eb4,eb5]@2 ~ [gb4,gb5]@2 ~ [bb4,bb5] ~", // Eb Gb Bb
  I: "[ab4,ab5] ~ [bb4,bb5] ~ [ab4,ab5] ~ [eb4,eb5] ~ [gb4,gb5]@2 ~ [eb4,eb5]@4 ~", // Ab Bb Ab Eb Gb Eb
  J: "~@10 [eb4,eb5]@2 [gb4,gb5] ~ [bb4,bb5]@2", K: "[ab4,ab5] ~ [bb4,bb5] ~ [ab4,ab5]@2 [eb4,eb5] ~ [gb4,gb5]@4 ~@4",
  L: "~ [bb4,bb5] ~ [b4,b5] [c5,c6] [db5,db6] ~ [d5,d6] ~@8", // Bb B C Db D
  M: "~ [bb4,bb5] ~ [b4,b5] [c5,c6] [db5,db6] ~ [d5,d6] [eb4,eb5,eb6]@3 ~@5", // Bb B C Db D Eb
})).s("gm_brass_section").gain(0.46)

// other · alto sax · "Sax2"
const alto_sax = note(`<
  ~@22 A@2 ~ B A@2 ~ B C ~@8 D E D E D E D E F G H I J K H I J L M ~@7 N O N O N O N O P Q A@2 ~ B A@2 ~ B C ~@14 R S@7
  T ~@9 G H I J K H I J K H I J K H I J U ~@3
>`.pickRestart({
  A: "~@2 eb4 gb4 bb4 gb4 eb4 db4 ~ f4 ~ ab4@3 ~@2", B: "gb4 f4 gb4 ab4 bb4!2 eb5 d5 ~ b4 ~ bb4@3 ~@2",
  C: "~ bb3 eb4 gb4 bb4 gb4 eb4 bb3 gb4 eb4 bb3 gb3 d3@2 ~@2", D: "~@2 [gb3,eb4] ~@4 [gb3,db4] ~@8",
  E: "~@2 [ab3,f4] ~@4 [ab3,f4] ~@8", F: "eb4@2 ~@6 bb3!2 ~ bb3 ~ bb3!2 ~", G: "~@10 eb4 gb4 bb4 gb4 eb4 db4",
  H: "~ f4 ~ ab4@3 ~@4 eb4 gb4 bb4 gb4 eb4 db4", I: "~ f4 ~ ab4@3 ~@10", J: "~@8 gb4 f4 gb4 ab4 bb4!2 eb5 d5",
  K: "~ b4 ~ bb4@3 ~@4 eb4 gb4 bb4 gb4 eb4 db4", L: "~ b4 ~ bb4@3 ~@3 bb3 eb4 gb4 bb4 gb4 eb4 bb3",
  M: "gb4 eb4 bb3 gb3 d3@2 ~@10", N: "~@10 [gb3,eb4] ~@4 [gb3,db4]", O: "~@10 [ab3,f4] ~@4 [ab3,f4]", P: "~@4 eb4 ~@3",
  Q: "bb3!2 ~ bb3 ~ bb3!2 ~@9", R: "~@8 f4 gb4!3 ~ f4 gb4!2", S: "gb4 ~ gb4 ~ f4 gb4!3 f4 gb4!3 ~ f4 gb4!2",
  T: "gb4 ~ gb4 ~ f4 gb4!3 ~@8", U: "~ b4 ~ bb4@3 ~@10",
})).s("gm_alto_sax").gain(0.41)

// other · brass section · "Brass2"
const brass_section_2 = note(`<
  ~@20 A B C D E F G D E F ~@9 H I H I H I H I J K L M@2 N L M@2 O ~@8 P Q P Q P Q P Q R S C D E F G D E F T U ~@29 V W
  K L M@2 N L M@2 X L M@2 N L M@2 Y W ~@2
>`.pickRestart({
  A: "[bb3,bb4]@4 ~@4 [bb3,bb4]@3 ~@5", B: "[bb3,bb4]@2 ~@2 [bb3,bb4]@3 ~@9",
  C: "[eb5,eb6] ~ [gb4,bb4,gb5] ~@3 [f4,ab4,f5] ~", D: "~@2 [gb4,bb4,gb5] ~@5",
  E: "[eb4,eb5] [f4,f5] ~ [gb4,gb5] ~ [ab4,ab5] ~ [bb4,bb5]@7 ~@2", F: "gb4 f4 gb4 ab4 bb4!2 eb5 d5 ~ b4 ~ f5@3 ~@2",
  G: "~@2 [gb4,bb4,gb5] ~@3 [f4,ab4,f5] ~", H: "~@2 [gb4,b4,eb5] ~@4 [gb4,bb4,db5] ~@8",
  I: "~@2 [ab4,db5,f5] ~@4 [ab4,db5,f5] ~@8", J: "[eb4,eb5]@3 ~@5 [bb4,bb5]!2 ~ [bb4,bb5] ~ [bb4,bb5]!2 ~",
  K: "~@4 [eb5,eb6] ~ [gb4,bb4,gb5] ~", L: "~@2 [f4,ab4,f5] ~@3 [gb4,bb4,gb5] ~",
  M: "[~@8 [eb4,eb5] [f4,f5] ~ [gb4,gb5] ~ [ab4,ab5] ~ [bb4,bb5]@7 ~@2 gb4 f4 gb4 ab4 bb4!2 eb5 d5]/2", // Eb F Gb Ab Bb
  N: "~ b4 ~ f5@3 ~@6 [gb4,bb4,gb5]@2 ~@2", O: "~ b4 ~ f5@3 ~@10", P: "~@10 [gb4,b4,eb5] ~@4 [gb4,bb4,db5]",
  Q: "~@10 [ab4,db5,f5] ~@4 [ab4,db5,f5]", R: "~@8 [eb4,eb5]@3 ~@5", S: "[bb4,bb5]!2 ~ [bb4,bb5] ~ [bb4,bb5]!2 ~@9",
  T: "gb5@2 ~@4 [a4,gb5]@2 ~@3 [ab4,db6] [ab4,db6]@3 ~, bb4 ~@15", U: "[gb4,gb6] ~@7", V: "~@2 [bb3,bb4] ~",
  W: "[bb3,bb4]@3 ~@5 [bb3,bb4]@2 ~@2 [bb3,bb4]@3 ~", X: "~ b4 ~ f5@3 ~@2 [eb5,eb6]@2 ~@2 [gb4,bb4,gb5]@2 ~@2",
  Y: "~ b4 ~ f5@3 ~@2 [bb3,bb4]@4 ~@4", // Bb
})).s("gm_brass_section").gain(0.5)

// other · taiko drum · "Tayko"
const taiko_drum = note(`<
  ~ A B@4 C D E@12 ~@2 E@8 F E@16 ~ G H@7 I J H@15 K ~ E@8 ~ L M N@2 O P Q@8 K ~@7 G H@7 K ~ G H@15 K ~@3
>`.pickRestart({
  A: "~@14 g3 ~", B: "g3 ~@13 g3 ~", C: "g3 ~@5 g3 ~ g3 ~@5 g3 ~", D: "g3 ~@5 g3 ~ g3!2 ~ g3!2 ~@3",
  E: "gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7", F: "bb3 ~@9 g4!5 ~", G: "~@8 gb3 ~@2 gb3 ~@2 eb3 ~",
  H: "gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~", I: "gb3 ~@7 bb3 ~@7", J: "~@2 g4!5 ~ gb3 ~@2 gb3 ~@2 eb3 ~", K: "gb3 ~@15",
  L: "~@8 g3 ~@5 g3 ~", M: "~@6 g3 ~ g3 ~@2 g3 ~ g3 ~@2", N: "[g3 ~@3 g3 ~ g3@2 g3@6 g3@8 g3@2 g3@3 g3@2 g3@3]/2",
  O: "g3@2 g3!2 g3@3 g3", P: "g3@3 g3 g3@3 g3",
  Q: "[g3 g3@2 g3 ~@4 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~ gb3 ~@7 gb3 ~@2 gb3 ~@2 eb3 ~, ~ g3@31]/8",
})).s("gm_taiko_drum").gain(0.14)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@4 C D E@12 F G E@8 H I J E@2 I J I J I J I J I J I J K L M@7 N O P Q M P@2 J P J P J P J P J P R S E@8 T U V W V
  W X Y M@14 Z M@8 N F AA M@15 N F AB ~
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x", C: "x ~@2 x!2 ~@2 x", D: "x ~@5 x ~ x!2 ~ x!2 ~@3", E: "x ~@2 x!2 ~ x ~ x ~@3 x ~@3",
  F: "x!2", G: "x ~@8 x ~ x!3 ~ x", H: "x ~@9 x!5 ~", I: "x ~@2 x ~@2 x ~ x ~@3 x ~@3",
  J: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", K: "x ~@7 x!2 ~ x ~ x!2 ~", L: "x ~@2 x ~ x ~@2 x ~@2 x!2 ~ x ~",
  M: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", N: "x!3 ~", O: "~@2 x!5 ~ x ~@2 x ~@2 x ~", P: "x ~@3 x ~@3 x ~@2 x ~@2 x ~",
  Q: "x ~@2 x ~@2 x ~ x ~@2 x!2 ~ x ~", R: "x ~@2 x ~@2 x ~ x ~@7", S: "x!2 ~ x ~ x!2 ~ x ~@2 x ~ x ~@2",
  T: "x ~@5 x ~@4 x!2 ~@3", U: "x ~ x ~ x ~@2 x", V: "~@6 x ~ x ~@2 x ~ x ~@2", W: "x ~ x!3 ~@2 x",
  X: "~@6 x ~ x ~@2 x ~@2 x ~", Y: "x!2 ~ x!2 ~@3 x ~@2 x!2 ~ x ~", Z: "x!4", AA: "~ x ~ x!3 ~ x!2 ~@2 x!2 ~ x ~",
  AB: "~ x ~ x!3 ~ x!2 ~@7",
})).gain(0.32)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A@12 ~@2 A@8 ~ A@16 ~ B A@7 C B A@15 C ~ A@8 ~ B A@20 C B A@7 C ~ B A@15 C ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.28)

// drums · hihat
const hihat = s("hh").struct(`<
  A B ~@6 C@12 ~@2 C@8 ~ C@16 ~ D C@7 E D C@15 E ~ C@8 ~ F G@4 H D C@14 E D C@7 E ~ D C@15 E ~@3
>`.pickRestart({
  A: "x!2", B: "x!3 ~", C: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", D: "~@8 x ~@2 x!2 ~@2 x", E: "x ~@2 x!2 ~@2 x ~@8",
  F: "~@9 x ~ x ~ x ~ x", G: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", H: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
})).gain(0.2)

// drums · low tom
// … 97 more lines

More by Gloria Estefan