Strudelify
Here We Are cover art

1989 · Cuts Both Ways

Here We Are

Gloria Estefan

KeyA majorTempo72 bpm
0:00/0:00
// Here We Are — Estefan Gloria
// 72 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 12 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(72/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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@5 A@5 B@3 C@2 D B E F G H I J K L@2 M@4 B@3 C@2 D B E F G H I J K N O P Q R S T U@2 V@3 W@2 X V Y Z AA AB AC AD@4
  AE@8 AF@6 ~@8
>`.pickRestart({
  A: "[~@12 b1 a1 g#1 f#1@4 f#1 ~@2 f#1@6 ~ a1 a#1 b1@4 b1 ~@2 b1@7 a1 g#1 f#1@4 f#1 ~@2 f#1@6 ~ a1 a#1 b1@15 ~@2]/5",
  B: "e2@2 ~ e2 ~@2 e1@8 b1 c#2", C: "[e2@2 ~ e2 ~@12 e2@2 ~ e2 ~@2 e1@8 b1 c#2, ~@6 e1@13 ~@13]/2",
  D: "e2@2 ~ e2 ~@2 e1@8 g2 g#2", E: "e2@3 e2 ~@2 b1@7 ~ b1 c#2", F: "a1@2 ~ a1 ~@2 a1@7 ~ a1@2",
  G: "g#1@2 ~ g#1 ~@2 g#1@8 f#1 g#1", H: "a1@2 ~ a1 ~@2 a1@3 e2 a2 b2 a2@2 e2 a1",
  I: "g#1@2 ~ g#1 ~@2 g#1@2 c#2@4 b1@4", J: "a1@2 ~ a1 ~@2 a1@10", K: "g#1@5 ~ g#1@8 g#1@2",
  L: "[f#1@3 f#1 ~@2 f#1@5 g#1@2 a1@2 b1@14 ~@3]/2",
  M: "[f#1@3 f#1 ~@2 f#1@6 ~ a1 a#1 b1@4 b1 ~@2 b1@7 a1 g#1 f#1@4 f#1 ~@2 f#1@6 ~ a1 a#1 b1@15 ~@2]/4",
  N: "f#1@2 ~ f#1 ~@2 f#1@9 ~", O: "b1@2 ~ b1 ~@2 b1@9 ~", P: "e1@2 ~ e1 ~@7 e2 e2@4, ~@6 e1@9 ~",
  Q: "[a1,a2]@5 e2 [a1,a2] ~ [b1,b2]@6 ~@2", R: "b2 g#2 f#3 d#3@2 e2 g#2@10", S: "[c2,c3]@5 g2 [c2,c3] ~ [b1,b2]@7 ~",
  T: "[c2,c3]@5 g2 [c2,c3] ~ [b1,b2]@3 ~ [g1,g2]@3 ~", // C B G
  U: "[[a1,a2]@4 ~@2 [a1,a2]@6 ~ [b1,b2] [c2,c3] [d2,d3]@3 a2 d3 e3@2 d3@4 d2@6]/2", V: "g2@3 g2 ~@2 g1@8 d2 e2",
  W: "[g2@3 g2 ~@12 g2 ~@2 g2 ~@2 g1@8 d2 e2, ~@6 g1@13 ~@13]/2", X: "g2@3 g2 ~@2 g1@8 a#2 b2",
  Y: "g2@3 g2 ~@2 d2@7 ~ d2 e2", Z: "d2@2 ~ d2 ~@2 d2@3 d3!3 d3@4, ~@3 d1@5", AA: "d2@2 ~ d2 ~@2 [d1,d2]@8 a1 b1",
  AB: "d2@2 ~ d2 ~@2 [d1,d2]@10", AC: "d2@2 ~ d2 ~@2 [a1,a2]@2 [d1,d2]@3 [f#1,f#2] [g1,g2]@4, d3@3 ~@5",
  AD: "[[c2,c3]@3 c2 ~@2 [c2,c3]@5 g2 ~@2 g2 c2 [b1,b2]@2 ~ [b1,b2] ~@2 [b1,b2]@5 f#2 ~@2 f#2 b1 a1@2 ~ a1 ~@2 [a1,a2]@5 b1@2 c2@2 d2@13 ~@4, ~@6 c3@3 ~@5 b2@3 ~@15, ~@32 a2@5 ~@27]/4", // C B A
  AE: "[a1@4 ~@2 a1@7 b1 c2 d2@5 ~@2 d2@5 ~ d2 c2 b1 a1@5 ~@2 a1@6 ~ b1 c2 d2@5 ~@2 d2@5 ~ d2 c2 b1 a1@5 ~@2 a1@6 ~ [b1,b2] [c2,c3] d2@5 ~@2 d2@5 ~ d2 c2 b1 a1@5 ~@2 a1@6 ~ [b1,b2] [c2,c3] d2@5 ~@2 d2@5 ~ d2 c2 b1 a1, ~@79 d3@13 ~@19 d3@14 ~@3]/8", // B C B C
  AF: "[~@6 a1@6 ~ [b1,b2] [c2,c3] [d2,d3]@5 ~@2 d2@5 ~ d2 c2 b1 a1@5 ~@2 a1@6 ~ [b1,b2] [c2,c3] [d2,d3]@5 ~@2 d2@5 ~ d2 c2 b1 a1@5 ~@2 a1@6 ~ [b1,b2] [c2,c3] [d2,d3]@6 ~ d2@5 ~ d2 ~@3]/6", // B C D B C D B C …
})).s("gm_fretless_bass").gain(0.5)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@5 A@2 B@2 ~@11 C ~ C D@3 E F@3 G ~@6 H I J K L M N@3 O P Q R S T@2 U V W X Y V W Z AA AB AC AD AE AF@3 ~@3 AG@2 AH@2
  AG@2 AH@2 AG@2 ~@9
>`.pickRestart({
  A: "[~@9 [d#5,b5,b6]@2 [c#5,a5,a6]@2 [b4,g#5,g#6]@2 [a4,f#5,f#6]@9 ~@8]/2", // G#m F#m E D
  B: "[~@12 [d#5,b5] [c#5,a5] [b4,g#5] [a4,f#5]@8 ~@9]/2", // G#m F#m E D
  C: "~@3 [c#5,c#6] ~ [f#5,f#6] ~ [g#4,g#5,g#6]@5 ~@4, ~@3 c#4@2 f#4@2 ~@9", // C# F# G#
  D: "[~@10 [f#3,f#4,f#5] [g#4,g#5] ~ [b4,b5] ~ [c#4,c#5,c#6]@5 ~@5 [a4,a5] [g#4,g#5] [c#4,c#5]@2 [e4,e5]@2 [f#4,f#5]@9 ~@8, ~@11 g#3@2 b3@2 ~@33]/3", // F# G# B C# A G# C# E …
  E: "[a4,f#5,f#6] ~", // D
  F: "[~@9 [d#5,b5,b6]@2 [c#5,a5,a6]@2 [b4,g#5,g#6]@2 [a4,f#5,f#6]@4 ~@10 g#3 a3 [a3,c#4,e4]@9 ~@2 [e4,e5]@3 [d#4,d#5]@3]/3", // G#m F#m E D A E D#
  G: "[b3,b4]@11 ~@5", H: "[a3,c#4,e4,b4,b5]@5 ~ [a3,c#4,e4]@3 ~ [b3,d#4,f#4]@5 ~, ~@3 [b4,b5]@5", I: "[a3,c#4,e4]@7 ~",
  J: "[b3,d#4,f#4]@7 ~", K: "c#4@3 [c#5,c#6] ~ [f#5,f#6] ~ [g#4,g#5,g#6]@5 ~@4, e4@7 ~, g#4@7 ~@9, ~@3 c#4@2 f#4@2 ~@9",
  L: "[b3,d#4,f#4]@8 [c#4,e4,g#4]@3 ~ [e4,g#4,b4]@3 ~", // B C#m E
  M: "c#4@3 [c#5,c#6] ~ [f#5,f#6] ~ [g#4,g#5,g#6]@5 ~@4, [a3,e4]@15 ~, ~@3 c#4@2 f#4@2 ~@9", // C# F# G# A5
  N: "[f#4@10 [f#3,f#4,f#5] [g#4,g#5] ~ [b4,b5] ~ c#4 g#4@9 [a4,a5] [g#4,g#5] [c#4,c#5]@2 [e4,e5]@2 ~ [a3,c#4,e4,g#4]@13 ~@3, [b3,d#4]@14 ~ [c#5,c#6]@5 ~@28, ~@11 g#3@2 b3@2 ~ e4@13 ~@2 [f#4,f#5]@9 ~@8, ~@4 c#4 ~@7]/3", // F# G# B A G# C# E Amaj7 …
  O: "~@3 f#3@2 g#3@7 [e4,e5] [f#4,f#5] ~ [a4,a5], [b4,b5]@6 ~ [g4,g5]", P: "[c4,e4,g4,b4,b5] [c#4,e4,a4,a5]",
  Q: "[b3,e4,g#4,g#5]@12 [e4,e5] [f#4,f#5] ~ [a4,a5], ~@7 [g4,g5]", R: "[c4,e4,g4]@2 ~ a4, [b4,b5], ~ [a3,c#4,e4]",
  S: "[c4,e4,g4] [b3,d4,g4], [b4,b5]", // C G B
  T: "[~@5 [b3,b4,b5] [c4,c5,c6] [g4,g5,g6]@6 [b3,b4,b5] ~ [a4,a5,a6]@11 [g4,g5,g6]@3 [f#4,f#5,f#6]@3, ~@7 [c4,c5,c6] ~@8, ~@15 b5 ~@16]/2", // B C G B A G F# C
  U: "[d4,d5,d6] ~", V: "[d4,f#4,b4,d5,d6]@7 ~", W: "[c4,e4,g4,c5,c6]@15 ~",
  X: "[c4,e4,g4]@6 ~@2 g3@4 a3@3 ~, [c5,c6]@3 ~", Y: "[d4,g4,b4,d5,d6]@7 ~",
  Z: "[c4,e4,g4]@5 ~ [c4,e4,g4]@3 ~ [d4,f#4,a4]@5 ~, [c5,c6]@15 ~", AA: "[c4,e4,g4]@7 ~", AB: "[d4,f#4,a4]@7 ~",
  AC: "e4@3 [e5,e6] ~ [a5,a6] ~ [b4,b5,b6]@5 ~@4, g4@7 ~, b4@7 ~@9, ~@3 e4@2 a4@2 ~@9", // E A B
  AD: "[d4,f#4,a4]@8 [e4,g4,b4]@3 ~ [g4,b4,d5]@3 ~", // D Em G
  AE: "e4@3 [e5,e6] ~ [a5,a6] ~ [b4,b5,b6]@5 ~@4, [c4,g4]@15 ~, ~@3 e4@2 a4@2 ~@9", // E A B C5
  AF: "[a4@10 [a3,a4,a5] [b3,b5]@2 [d5,d6] ~ e4 b4@9 [c5,c6] [b4,b5] e5@2 [g4,g5]@2 [e4,g4,b4]@13 ~@4, [d4,f#4]@14 ~ [e5,e6]@5 ~@28, ~@11 b4 ~ d4@2 ~ [c4,g4]@12 ~@20, ~@16 e4@4 ~@7 e4 ~@3 [a4,a5]@9 ~@8]/3", // A B D C B G Em D …
  AG: "[~@9 [f#5,d6]@2 [e5,c6]@2 [d5,b5]@2 [c5,a5]@9 ~@8]/2", AH: "[~@12 [f#5,d6] [e5,c6] [d5,b5] [c5,a5]@8 ~@9]/2",
})).s("gm_piano").gain(0.38).pan(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@5 A@5 B@2 C@2 D@2 E@2 F G H I F G J@2 K@3 ~ B@2 C@2 D@2 E@2 F G H I F G F@2 L M@3 N O@2 P@2 Q@2 R@2 S@2 T U V W X Y
  Z@2 ~@3 AA@4 AB AC@3 AB AD@2 ~@8
>`.pickRestart({
  A: "[~@9 b4@2 a4@2 g#4@2 [f#4,f#5]@55 ~@10]/5", B: "[e4 d#4, [g#4,b4]]/2", C: "[a4@24 g#4@4 a4@3 ~, [c#4,e4]]/2",
  D: "[e4@15 ~ d#4@15 ~, [g#4,b4]@15 ~]/2", E: "[[a3,c#4,e4]@13 [b3,d#4,f#4]@2 ~]/2", F: "[a3,c#4,e4]@15 ~",
  G: "[b3,d#4,f#4]", H: "[c#4,e4,g#4]", I: "[b3,d#4,f#4]@7 ~ [c#4,e4,g#4]@3 ~ [e4,g#4,b4]@4",
  J: "[[a3,c#4,e4]@5 ~@3]/2", K: "[~@25 b4@2 a4@2 g#4@2 [f#4,f#5]@17, [f#4,f#5]@31 ~@17]/3", L: "[g#3,b3,e4]@7 ~",
  M: "[[c4,e4,g4,b4]@8 [c#4,a4]@8 [b3,g#4]@16 [c4,b4]@8 [a3,c#4,e4,g#4]@3 ~ [c#4,e4,a4]@3 ~, ~@8 e4@31 ~@9, ~@16 g4@3 ~@5]/3", // Cmaj7 F#m E Cmaj7 Amaj7 A
  N: "[c4,e4,g4,b4] [b3,d4,g4]", O: "[[c4,e4,a4]@3 ~]/2", P: "[g4 f#4, [b4,d5]]/2", Q: "[c5@24 b4@4 c5@3 ~, [e4,g4]]/2",
  R: "[g4@15 ~ f#4@15 ~, [b4,d5]@15 ~]/2", S: "[[c4,e4,g4]@13 [d4,f#4,a4]@2 ~]/2", T: "[c4,e4,g4]", U: "[d4,f#4,a4]",
  V: "[e4,g4,b4]", W: "[d4,f#4,a4]@2 [c4,e4,g4] [d4,f#4,a4]", X: "[c4,e4,g4,b4]@15 ~", Y: "[b3,d4,f#4,a4]@15 ~",
  Z: "[[a3,c4,e4,g4]@13 ~@2 [e4,g4,a4,d5]@13 ~@4]/2", AA: "[~@9 d5@2 c5@2 b4@2 [a4,a5]@49]/4",
  AB: "[a4,a5]@8 ~ d5@2 c5@2 b4@2 [a4,a5]", AC: "[a4,a5]/3", AD: "[a4,a5]/2",
})).s("gm_synth_strings_1").gain(0.58).pan(0.6)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@18 A B C D E F G@2 ~@4 H I J K L M N O A B E D E F P ~@8 Q R S T U V W X Y Z AA AB AC AD AE ~@5 AF@2 AG@2 AH@2 AI@4
  ~@8
>`.pickRestart({
  A: "[c#4,e4,g#4]@2 ~ [c#4,e4,g#4] ~@2 [c#4,e4,g#4]@5 ~ [c#4,e4,g#4] [c#4,e4,g#4]@3", // C#m
  B: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4] ~@2 [b3,d#4,f#4]@4 [b3,d#4,f#4] ~ [b3,d#4,f#4] [b3,d#4,f#4]@2 ~", // B
  C: "[c#4,e4,g#4]@2 ~ [c#4,e4,g#4] ~@2 [c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~ [c#4,e4,g#4] [c#4,e4,g#4]@2 ~", // C#m
  D: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4] ~@2 [b3,d#4,f#4]@8 ~@2", // B
  E: "[c#4,e4,g#4]@2 ~ [c#4,e4,g#4] ~@2 [c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~ [c#4,e4,g#4] [c#4,e4,g#4]@3", // C#m
  F: "[b3,d#4,f#4]@2 ~ [b3,d#4,f#4] ~@2 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@3 ~", // B
  G: "[[c#4,e4]@2 ~ [c#4,e4] ~@2 [c#4,e4]@5 ~@4 [b3,b4]@13 ~@4]/2", H: "e3 ~ e3 ~@2 e3 ~@2 e3!2 c#3 b2 e3 ~ e3!2",
  I: "~@2 e3 ~@2 e3 ~@2 e3!2 c#3 b2 e3 ~ e3!2", J: "~@2 e3 ~@2 e3 ~@2 e3!2 c#3 b2 e3 ~ c#3 b2",
  K: "~@2 e3 ~@2 e3 ~@2 e3!2 c#3 b2 e3 ~ e3 ~", L: "~ e3 ~@2 e3!2 ~@2 e3!2 c#3 b2 e3 ~ e3 ~",
  M: "~ e3 ~@2 e3!2 c#3 b2 ~ e3 ~@2 e3!2 ~@2", N: "e3 ~ e3 ~@2 e3 ~@2 e3!2 c#3 ~ e3 ~ c#3 ~",
  O: "~ e3 ~@2 e3!2 ~@2 e3 ~ e3 ~@2 e3 ~@2", P: "[a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@5 ~@5",
  Q: "g3 ~ g3 ~@2 g3 ~@2 g3!2 e3 d3 g3 ~ g3!2", R: "~@2 g3 ~@2 g3 ~@2 g3!2 e3 d3 g3 ~ g3!2",
  S: "~@2 g3 ~@2 g3 ~@2 g3!2 e3 d3 g3 ~ e3 d3", T: "~@2 g3 ~@2 g3 ~@2 g3!2 e3 d3 g3 ~ g3 ~",
  U: "~ g3 ~@2 g3!2 ~@2 g3!2 e3 d3 g3 ~ g3 ~", V: "~ g3 ~@2 g3!2 e3 d3 ~ g3 ~@2 g3!2 ~@2",
  W: "g3 ~ g3 ~@2 g3 ~@2 g3!2 e3 ~ g3 ~ e3 ~", X: "~ g3 ~@2 g3!2 ~@2 g3 ~ g3 ~@2 g3 ~@2",
  Y: "[e4,g4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4]@5 ~ [e4,g4,b4] [e4,g4,b4]@2 ~", // Em
  Z: "[d4,f#4,a4]@2 ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]@4 [d4,f#4,a4] ~ [d4,f#4,a4] [d4,f#4,a4]@2 ~", // D
  AA: "[e4,g4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4]@3 ~ [e4,g4,b4] ~ [e4,g4,b4] [e4,g4,b4]@2 ~", // Em
  AB: "[d4,f#4,a4]@2 ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]@8 ~@2", // D
  AC: "[e4,g4,b4]@2 ~ [e4,g4,b4] ~@2 [e4,g4,b4]@3 ~ [e4,g4,b4] ~ [e4,g4,b4] [e4,g4,b4]@3", // Em
  AD: "[d4,f#4,a4]@2 ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]@5 ~ [d4,f#4,a4]@3 ~", // D
  AE: "[c4,e4,g4]@2 ~ [c4,e4,g4] ~@2 [c4,e4,g4]@5 ~@5", AF: "[~@13 [b2,b3] [c3,c4] [d3,d4]@11 ~@6]/2",
  AG: "[~@13 [b2,b3] [c3,c4] [d3,d4]@12 ~@5]/2", AH: "[~@13 [b2,b3] [c3,c4] [d3,d4]@13 ~@4]/2",
  AI: "[~@13 [b2,b3] [c3,c4] [d3,d4]@10 ~@7]/2", // B C D
})).s("gm_acoustic_guitar_nylon").gain(0.64).pan(0.7)

// other · orchestral harp · "HARP"
const orchestral_harp = note(`<
  ~@2 A@6 B@2 ~@4 C D C E ~@2 F ~ F G@3 A@2 H@2 ~@4 C D C E ~@2 F ~ F G@3 ~@6 I J ~@3 K L K M ~@2 N ~ N O@3 P@2 Q@10 R@2
  ~@8
>`.pickRestart({
  A: "[f#4 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 f#5@2 g#4 a4 f#5@2 g#4 a4 f#5@2 g#4 a4 f#5@2 g#4 a4 f#5]/2",
  B: "[f#4 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 f#5@2 g#4 a4 f#5@2 g#4 a4 f#5@8 ~]/2",
  C: "~ [b4,b5] [c#5,c#6] [b4,b5] [e5,e6]!2 [c#5,c#6] [b4,b5]@5 ~@4", // B C# B E C# B
  D: "~ [b4,b5] [c#5,c#6] [b4,b5] [e5,e6]!2 [c#5,c#6] [b4,b5]@7 ~@2", // B C# B E C# B
  E: "~ [a4,a5] [b4,b5] [c#5,c#6] [e5,e6] [d#5,d#6] [b4,b5]@7 ~@3", // A B C# E D# B
  F: "~@3 c#6@2 f#6@2 [g#6,g#7]@5 ~@4, ~@3 c#7 ~ f#7 ~@10", // G#
  G: "[~@10 [f#5,f#6] [g#5,g#6]@2 b5@2 [c#6,c#7]@5 ~@5 [a6,a7] [g#6,g#7] [c#6,c#7]@2 [e6,e7]@2 [f#6,f#7]@9 ~@8, ~@13 b6 ~@34]/3", // F# G# C# A G# C# E F#
  H: "[f#4 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 e5@2 g#4 a4 e5@2 ~@15]/2", I: "~@10 [g6,g7]@3 [f#6,f#7]@3", J: "[d6,d7] ~",
  K: "~ [d5,d6] [e5,e6] [d5,d6] [g5,g6]!2 [e5,e6] [d5,d6]@5 ~@4", // D E D G E D
  L: "~ [d5,d6] [e5,e6] [d5,d6] [g5,g6]!2 [e5,e6] [d5,d6]@7 ~@2", // D E D G E D
  M: "~ [c5,c6] [d5,d6] [e5,e6] [g5,g6] [f#5,f#6] [d5,d6]@7 ~@3", N: "~@3 e6@2 a6@2 [b6,b7]@5 ~@4, ~@3 e7 ~ a7 ~@10",
  O: "[~@10 [a5,a6] b5@2 d6@2 [e6,e7]@5 ~@5 c7 b6 e6@2 g6@2 a6@8 ~@9, ~@11 b6 ~ d7 ~@34]/3", // A E
  P: "[a5 b4 c5 g5@2 b4 c5 g5@2 b4 c5 g5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5]/2",
  Q: "[a4 b4 c5 g5@2 b4 c5 g5@2 b4 c5 g5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5]/2",
  R: "[a4 b4 c5 g5@2 b4 c5 g5@2 b4 c5 g5@2 b4 c5 a5@2 b4 c5 a5@2 b4 c5 a5@2 ~@7]/2",
})).s("gm_orchestral_harp").gain(0.3).pan(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@30 A@15 ~ A@6 B A@7 C D@3 E D@3 ~@23>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@12 x!2 ~@2", D: "~ x ~ x", E: "~@4 x ~@6 x!2 ~@3",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<A@9 ~ A@15 ~ A@3 ~ A@15 ~ A@5 B C A@15 ~ D@13 ~@9>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@3 x ~@2 x ~@9", D: "~@14 x!2",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@6 A@3 ~@17 A@3 ~ B@15 ~@2 C@5 ~ B@15 ~ D@14 ~@8>".pickRestart({
  A: "~@2 x!2 ~@12", B: "x!4", C: "x!8", D: "~ x!2 ~@13",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<A@9 ~ B@8 A@7 ~ A@3 ~ B@8 A@7 ~ C A@4 D ~ B@8 A@7 ~ A@13 ~@9>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@11 x ~@4", C: "~@5 x!2 ~", D: "~@9 x!3 ~@4",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@46 [~@9 x ~@6] ~@44>").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@24 A ~ B ~@18 C D B ~ B ~ A E B ~@6 F G H@2 I H ~ A ~@23>".pickRestart({
  A: "~@15 x", B: "x", C: "x ~@2 x ~@4", D: "~@3 x", E: "~@3 x ~@4", F: "~@13 x ~@2", G: "x!2 ~@2", H: "~ x ~@2",
  I: "~ x!3",
})).gain(0.45)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A@7 ~ C D E D@2 F C G@8 ~ A@3 ~ C D E D@2 F C G@8 H I@6 ~ C D E D@2 F C G@8 ~@23
>`.pickRestart({
  A: "~@3 x", B: "~@11 x!2 ~@3", C: "~@4 x ~@9 x!2", D: "~@6 x ~@7 x!2", E: "~@3 x ~@8 x ~@3", F: "~@3 x ~@7 x ~@4",
  G: "~@4 x ~ x ~@7 x!2", H: "~@2 x!2 ~@2 x ~", I: "~ x ~@2",
})).gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A@2 B@7 ~ C D E D@2 F@2 G@8 ~ B@3 ~ C D E D@2 F@2 G@8 ~@2 H@5 ~ C D E D@2 F@2 G@8 ~ I@14 ~@8
>`.pickRestart({
  A: "~@7 x", B: "~@10 x!2 ~@4", C: "~@3 x ~@8 x ~@3", D: "~ x ~ x", E: "~@6 x ~@7 x!2", F: "~@3 x ~@2 x ~",
  G: "~@3 x ~@7 x ~@4", H: "~@3 x ~@2 x ~@9", I: "~ x ~@2",
})).gain(1.43)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  A B C@7 ~ D E F E@2 G E H@8 ~ C@3 ~ D E F E@2 G E H@8 I J K@5 ~ D E F E@2 G E H@8 ~ L@13 ~@9
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@9 x!2 ~ x ~@3", C: "~@7 x", D: "~@6 x ~@4 x ~@4", E: "~@3 x ~@7 x ~@4", F: "~@4 x ~@6 x ~@4",
  G: "~@4 x ~@9 x!2", H: "~ x ~ x", I: "~@3 x ~@6 x!2 ~@4", J: "~@2 x!2 ~@12", K: "~@5 x ~@10", L: "~@3 x",
})).gain(1.43)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!16]!68 ~ [x!16]!13 [x!8 ~@8] ~@8>").gain(1.26)
// … 10 more lines

More by Gloria Estefan