Strudelify
Oye Como Va cover art

Abraxas

Oye Como Va

Santana

KeyA minorTempo125 bpm
0:00/0:00
// Oye Como Va — Santana
// 125 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "Bass trac" named as a bass, played on electric bass finger (its brass section patch is not one)
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// bass · electric bass finger · "Bass trac"
const bass = note("<~@2 A@16 B C D E A@8 B C A@20 F@2 G@4 H@2 A@8 I J A@26 B C A@8 K@3 L A@24 B C D E>".pickRestart({
  A: "[a2 ~ a2@2 ~ a2 ~ d2@4 a2 d3@2 c3@2]/2", B: "a2@2 ~@2 a2@2 a2 ~@3 a2@2 a2 ~ a2 ~",
  C: "~@2 a2@2 a2 ~ a2 ~ d3@2 a2@2 d3@2 ~@2", D: "a2@2 ~@2 a2@2 ~@2 a2@2 a2 ~@3 d3@2", E: "~ a2 d2 ~@3 d2 ~",
  F: "[a2 ~ a2@2 ~ a2 ~ d2@2 f#2 g2@2 g#2@2 a2@2]/2", G: "[a2 ~@3 a2@4 ~@2 a2@2 ~@2 d2@4 f#2@2 g2@4 g#2@4 a2@4]/2",
  H: "[a2 ~@3 a2@4 ~@2 a2@2 ~@2 d2@8 a2@2 d3@4 c3@4]/2", I: "a2@2 a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  J: "a2 ~ a2 ~ a2 ~ a2 ~ d2@3 d2 ~@2 d2 ~", K: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  L: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 ~ d2@2 ~ d2@2",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · percussive organ · "Organ"
const percussive_organ = note(`<
  ~@2 A B A B A B A B A B A B A B A B C D E F A B A B A B A B C G ~@20 H I H I H I ~@10 J K@3 L M@8 N O P@7 Q@2 R@2 S@2
  T@2 U@6 V@6 U@24 W@2 X@2
>`.pickRestart({
  A: "a4@3 ~ a4@2 ~@4 a4@3 ~ a4@2, g#4 ~@9 g#4 ~@5", B: "~@6 a4@3 ~ a4@2 ~@4, ~@6 g#4 ~@9",
  C: "[c4,e4,a4] ~ [c4,e4,a4]!2 ~ [c4,e4,a4]!3", D: "~ [c4,e4,a4]!3 [a4,d5] [d4,f#4,a4] [a4,c5,e5] ~",
  E: "[c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4]!2 ~ [a4,d5]", F: "~ [c4,e4,a4] [a4,c5,e5] ~@3 [a4,c5,e5] ~",
  G: "~ [c4,e4,a4]!3 [a4,d5] [f#4,a4] [a4,c5,e5] ~", H: "a3!5 ~ a3@2 c4@2 a3@2 c4@2 d4@2", I: "~ f#3 g3@2 g#3@2 a3@2",
  J: "~@4 [e3,a3] ~ [e3,a3] ~ [g#3,e4] ~ [g#3,e4] ~ [g#3,e4] ~ [g3,e4] ~, ~@2 c4!6", // A5 C#m C
  K: "[[g3,e4,a4] ~ [g3,e4,a4] ~ [g3,e4,a4] ~ [f#3,e4,a4] ~ [f#3,c4,f#4,a4,c5]@3 [f#3,c4,f#4,a4,c5]@3 [f#3,f#4,a4,c5]@2 e5 [e5,g5]!15 [e5,g5]!9 g5 [e5,g5]@3 [e5,g5]@3, c4!4 ~@3 c4@17, ~@42 d#5 ~@2 d#5 ~@2]/3", // A7 F#m7 F#dim Em
  L: "[d#5,e5] ~ d5 c5 a4 g4 e4 g4 e4 d4 ~ d4 ~ a3 c4@2, g5 g5@7, ~@5 c4!2 ~", // Emaj7
  M: "[~@2 a3@2 e4@2 a3@2 e4@2 a3@4 ~@6 a#5 b5@13 a5 ~ a5@2 e5 ~ b5 ~ b5!2 ~ b5@9 a5 ~ a5@2 e5@3 ~@9 a5 ~ e5 a5 e5 [d5,d#5] [a4,c5] [a4,d#5] ~@3 [a4,e5]@3 d#5 ~ d5@2 c5@2 [a4,d#5] ~ [a4,d#5] ~ [a4,d#5] e5@3 d#5 ~ [a4,d#5] e5@3 d#5 ~ [a4,d#5] e5@3 d#5 e5 [a4,e5] d5 c5 d5 e5 d5 c5 d5 e5 d5 c5 d5 e5 d5 c5 d5, ~ c4 c4@30, ~@35 g5@4 g5@16 g5@16 g5@3 g5@54, ~@62 c6@10 ~@5 e5@2 ~@2 d#5 ~@2 a4@2 a4 ~ a4 ~@9 a4@2 ~@4 a4@2 ~@4 a4@2 ~@16, ~@85 e5@2 ~@4 e5@2 e5@2 ~@4 e5@2 ~@4 e5@2 ~@21]/8", // D#maj7 Am Adim A5 Adim A5
  N: "e5 d5 c5 d5 e5 d5 c5 d5 e5 d5 c5 d5 e5 d5 c5 d5", O: "e5@3 b5@3 c6@10, a4 ~@2 a4 ~@2 a4 ~@9",
  P: "[~ a5 ~@2 a5 e5 d5 c5 a4 d5 c5 [g4,a4] [a4,c5] [e4,g4] d4 e4@5 [a4,c5]@2 e4@4 [c#4,d4,d#4,e4] [g3,g#3,a3,a#3,b3] [f3,f#3] ~ [e5,a5]@4 [e5,a5]@2 [e5,a5]@2 a4!2 [e5,a5]@3 [e5,a5]@3 [e5,a5]@3 [e5,a5]@3 [e5,a5]@3 [d5,a5]@3 a4@2 e5@2 [e5,a5] ~ a4!2 [e5,a5]@3 [e5,a5]@3 [e5,a5]@3 a4!2 ~@3 [a4,e5,a5] ~@2 [d5,f#5]@3 e5@3 [d5,f#5]@3 [c5,e5]@3 [d5,f#5]@3 [e5,b5]@3 [d5,f#5]@3 [e5,b5]@4 [d5,f#5]@4, ~ g5@42 g5@6 g5@3 g5@4, ~@27 c4@85, ~@43 a4 ~@2 a4 ~@2 a4 ~@2 a4 ~@5 a5 ~ a5 ~@8 a4 ~@2 a4 ~@2 [e5,a5]@5 c5@3 a5 ~@2 a5 ~@2 a5 ~@2 a5 ~@2 a5 ~@2 a5 ~@2 a5 ~@2 a5 ~@3 a5 ~@3]/7", // Gsus2 Am Em Am F#maj7 A5 D5 A5 …
  Q: "[[e5,b5]@2 [d5,f#5]@2 [c5,e5] [d5,f#5]@2 [e5,g5,b5]@9, g5@4 g5@3 ~@9, a5 ~@3 a5 ~@3 a5 ~ a5 ~@3 a5 ~@17]/2", // E5 D C D Em
  R: "[[c4,e4]@4 [e4,a4]@2 ~@4 [e4,a4]@3 ~ [d4,f#4,a4]@2 ~@6 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@4, a4 ~@3 c4@6 c4@22]/2", // C A5 D
  S: "[[c4,e4,a4]@4 [e4,a4]@2 ~@4 [e4,a4]@3 ~ [d4,f#4,a4]@2 ~@6 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@4, ~@2 c4@3 c4@11]/2", // Am A5 D
  T: "[[e4,a4] ~ [c4,e4,a4] [e4,a4] ~ [c4,e4,a4]!2 [e4,a4] ~ [c4,e4,a4]!2 [e4,a4] [f#4,a4,d5] [d4,f#4,a4] [f#4,a4,c5,e5] ~, c4@2 ~ c4@2 ~@2 c4@2 ~@2 c4@5]/2", // A5 Am A5 Am A5 Am A5 D …
  U: "[[c4,e4,a4]@4 [e4,a4]@2 ~@4 [e4,a4]@3 ~ [d4,f#4,a4]@2 ~@6 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@4, g#4 ~@3 c4@6 c4@22, ~@10 g#4 ~@11 g#4 ~@9]/2", // Am A5 D
  V: "[[c4,e4,a4]@4 [e4,a4]@2 ~@4 [e4,a4]@3 ~ [d4,f#4,a4]@2 ~@6 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@4 d4 ~ d4 ~ d4 ~ d4 ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4,c5] ~ [d4,f#4,a4,c5] ~ [d4,f#4,a4,c5] ~ [d4,f#4,a4,c5] ~ [d4,f#4,a4,c5,d5] ~ [d4,f#4,a4,c5,d5] ~ [d4,f#4,a4,c5,d5] ~ [d4,f#4,a4,c5,d5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [d4,f#4,a4,c5,e5] ~ [f#3,d4,f#4,a4,c5,e5]@2 ~ [f#3,d4,f#4,a4,c5,e5]@2 ~ [f#3,d4,f#4,a4,c5,e5]@2, g#4 ~@3 c4@6 c4@86, ~@10 g#4 ~@11 g#4 ~@73]/6", // Am A5 D D7 F#m7b5
  W: "[[e4,a4] ~ [c4,e4,a4] [e4,a4] ~ [c4,e4,a4]!2 [e4,a4] ~ [c4,e4,a4]!2 [e4,a4] [a4,d5] [d4,f#4,a4] [a4,c5,e5] ~, c4@2 ~ c4@2 ~@2 c4@2 ~@2 c4@5]/2", // A5 Am A5 Am A5 Am A5 D5 …
  X: "[[e4,a4] ~ [e4,a4] ~ [c4,e4,a4] [e4,a4] ~ [a4,d5] ~ [e4,a4] [a4,c5,e5] ~@3 [a4,c5,e5] ~, c4@2 c4@2 ~ c4@5 ~@6]/2", // A5 Am A5 D5 A5 Am
})).s("gm_percussive_organ").gain(0.8)

// chords · percussive organ · "Organ" · soft notes
const percussive_organ_soft = note(`<
  ~@19 A B C ~@9 D E F E F E F E F E F E F E F E F E F E F ~@6 E F E F G@6 H ~@66 A B C
>`.pickRestart({
  A: "~@4 f#4 ~ f#4 ~", B: "~@7 f#4", C: "~@2 f#4 ~@3 f#4 ~", D: "~@4 f#4 d4 f#4 ~",
  E: "[c4,e4,a4]@3 ~ [c4,e4,a4]@2 ~@4 [c4,e4,a4]@3 ~ [d4,f#4,a4]@2", F: "~@6 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@2 ~@4",
  G: "[a3@4 g#3@3 g3@4 f#3@5 a3@4 g#3@3 g3@4 f#3@5 a3@4 g#3@3 g3@4 f#3@5, c4]/6", H: "[e3,a3] ~ [e3,a3] ~@13, c4!2 ~@6",
})).s("gm_percussive_organ").gain(0.4)

// chords · trumpet · "Lead"
const trumpet = note(`<
  ~@10 A B C D A B C B E F G H ~@8 I F J K J L J K M N O@2 P@2 O@2 P@2 Q R S@2 T U T U T U ~@38 V W ~@12 O@2 P@2 O@2 X@2
  Y Z AA AB AC@2 AD AE@3 Q AF AG Q AH@2 I F G H
>`.pickRestart({
  A: "a4 ~ a4 b4 c5 d5@2 b4", B: "~ g4 a4@14", C: "a4 ~@3 a4@2 b4@2 c5@2 d5@4 b4@2",
  D: "~ g4 a4@4 d4@5 c4 a3@4, ~@6 d#4 ~@9",
  E: "[c5,e5]@2 ~@2 [a4,c5,e5]@2 [a4,c5,e5] ~@3 [a4,c5,e5]@2 [a4,c5,e5] ~ [a4,c5,e5] ~, a4 ~@15", // C Am
  F: "~@2 [a4,c5,e5]@2 [a4,c5,e5] ~ [a4,c5,e5] ~ [d5,f#5]@2 [c5,e5]@2 [d5,f#5]@2 ~@2, ~@8 a4 ~ a4 ~ a4 ~@3", // Am D C D
  G: "[a4,c5,e5]@2 ~@2 [a4,c5,e5]@2 ~@2 [a4,c5,e5]@2 [a4,c5,e5] ~@3 [a4,d5,f#5]@2", // Am D
  H: "~ [a4,c5,e5] [d5,f#5] ~@3 [a4,d5,f#5] ~, ~@4 a4 ~@11", // Am D
  I: "[a4,c5,e5]@2 ~@2 [a4,c5,e5]@2 [a4,c5,e5] ~@3 [a4,c5,e5]@2 [a4,c5,e5] ~ [a4,c5,e5] ~", // Am
  J: "a3@2 c4 e4 g4 e4 g4 f#4", K: "~ d4@15", L: "~ a4@15", M: "a3 c4 e4 g4 a4 e4 g4 f#4", N: "~ a4@9 a4 ~ a#4@2 b4@2",
  O: "[c5@2 c5 ~ a4@2 a4 ~ c5@2 a4@4 c5@4 a4@2 f#4@2 a4@10]/2", P: "[c5@2 c5 ~ a4@2 a4 ~ c5@2 a4@4 f#4@4 a4@14]/2",
  Q: "c5 a4 ~ c5 a4 ~ c5 a4", R: "~ c5 a4 ~ c5 a4 ~ c5", S: "[a4@2 ~@2 c5@2 a4@2 ~@2 c5@2 a4@2 d4@8 c4 e4 c4@7 ~]/2",
  T: "c4!5 ~ c4@2 e4@2 c4@2 e4@2 f#4@2", U: "~ f#3 g3@2 g#3@2 a3@2",
  V: "[e4,a4,c5,e5]@2 ~@2 [e4,a4,c5,e5]@2 [e4,a4,c5,e5] ~@3 [e4,a4,c5,e5]@2 [e4,a4,c5,e5] ~ [e4,a4,c5,e5] ~", // Am
  W: "~@2 [e4,a4,c5,e5]@2 [e4,a4,c5,e5] ~ [e4,a4,c5,e5] ~ [d4,d5,f#5]@2 [e4,c5,e5]@2 [d4,d5,f#5]@2 ~@2, ~@8 a4 ~ a4 ~ a4 ~@3", // Am D C D
  X: "[c5@2 c5 ~ a4@2 a4 ~ c5@2 a4@4 f#4@4 a4@8 e5@6]/2", Y: "~@2 a5@2 ~ a5@2 ~ a5@4 e5@2 f#5@2", Z: "~ a5@3 c5@12",
  AA: "a4@3 ~ a4 ~ a4@3 ~ a4 ~ a4@3 ~, g#4 ~@5 g#4 ~@5 g#4 ~@3",
  AB: "a4 ~ a4@3 ~ a4 ~ a4@2 e4 ~ e4 ~ e4 ~, ~@2 g#4 ~@5 g#4 ~@7", AC: "[d4 c4 a3 c4 ~ c4 a3 d4@4 d#4@2 e4 d#4@2]/2",
  AD: "e4@2 c4@2 c4 ~ a3@2 c4@2 c4 ~ a3@2 a3 ~",
  AE: "[~@2 g3@2 e3 d3 c3@2 ~ c3@5 [c4,e4]@4 g3@2 a3@2 [c4,e4]@2 a3@2 g3@2 a3@2 [c4,e4]@4 [d4,f#4]@3 [d4,f#4] ~@2 [c4,e4]@3 [c4,e4] ~@2 [d4,f#4]@2, ~@4 d3 ~@19]/3", // C D C D
  AF: "~ e5 a4 ~ c5 a4 ~ d5", AG: "a4 ~ c5 a4 ~ c5 a4 ~",
  AH: "[~@2 c5@2 a4@2 ~@2 c5@2 ~ c5@2 ~ c5@4 a4@2 c5@2 a4@2 ~@2 c5@2 a4@2 ~@2]/2",
})).s("gm_trumpet").gain(0.09)

// chords · trumpet · "Lead" · soft notes
const trumpet_soft = note(`<
  ~@58 A B C B D@2 E@2 D@2 E@2 F G F G F G F G F G F G F G F G F G F G F G F G F G ~@42
>`.pickRestart({
  A: "[c3,e3] ~ [c3,e3,a3] ~@2 [c3,e3,a3] ~ [d3,f#3,a3], a3 ~@15", B: "~@3 [d3,f#3,a3] ~ [d3,f#3,a3] ~@2",
  C: "[c3,e3,a3] ~ [c3,e3,a3] ~@2 [c3,e3,a3] ~ [d3,f#3,a3]", // Am D
  D: "[a3@2 c4 e4 g#3 c4 e4 g3@2 c4 e4 f#3@2 [c4,e4]@2 f#3]/2", // C
  E: "[a3@2 [c4,e4]@2 g#3 [c4,e4]@2 g3@2 [c4,e4]@2 f#3@2 [c4,e4]@2 f#3]/2", // C
  F: "[c3,a3,c4,e4,a4] ~ [c3,a3,c4,e4,a4] ~@2 [c3,a3,c4,e4,a4] ~ [a3,d4,f#4,a4]", // Am D
  G: "~@3 [a3,d4,f#4,a4] ~ [a3,d4,f#4,a4] ~@2", // D
})).s("gm_trumpet").gain(0.05)

// chords · brass section · "Chorus"
const brass_section = note("<~@22 A B A C D B A C ~@68 A B A C D B A C ~@32>".pickRestart({
  A: "[a3,c4]@2 [d4,f#4] ~ [c4,e4]@2 [d4,f#4]@2 [a3,c4]@2 ~@6", B: "~@6 [c4,e4] ~ [e4,g4]@4 [d4,f#4]@2 ~@2",
  C: "~@6 [g3,b3] ~ [a3,c4]@3 ~ [a3,c4]@3 ~", D: "[a3,c4]@2 [d4,f#4] ~ [c4,e4]@2 [d4,f#4] ~ [a3,c4]@2 ~@6",
})).s("gm_brass_section").gain(0.46)

// drums · snare
const snare = s("sd").struct("<~@21 [~@3 x] ~@17 [~@12 x!4] ~@98>").gain(0.53)

// drums · open hat
const open_hat = s("oh").struct("<~@21 A ~@10 B ~@3 B ~@3 B ~@7 C D E B@2 F ~ F ~ F ~@40 B ~@39>".pickRestart({
  A: "~@3 x", B: "x", C: "x ~@2 x ~@2 x ~", D: "~ x ~@2 x ~@2 x", E: "~@2 x ~@2 x ~@2", F: "~ x",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 A ~@21 A ~@3 A ~@3 A ~@10 A@2 B ~ B ~ B ~@12 A ~@27 A ~@11 A ~@26 C
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x!2 ~@3 x ~",
})).gain(0.38)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A ~@2 B C ~@11 D ~@12 E F ~@12 G H I J ~ K ~ L ~ D ~@2 B M ~@7 N ~@67 O
>`.pickRestart({
  A: "~ x ~@6", B: "~@14 x!2", C: "x ~@7 x!4 ~@4", D: "~@3 x", E: "~@15 x", F: "x!2 ~ x!3 ~@4 x ~@5",
  G: "x!2 ~@4 x!2 ~@4 x!2 ~@2", H: "~@2 x!2 ~@4 x!2 ~@4 x!2", I: "~@4 x!2 ~@4 x!2 ~@4", J: "x ~@4 x!5 ~@6", K: "~ x",
  L: "~ x!2 ~ x ~@3", M: "x!5 ~ x!2", N: "~@8 x ~@2 x ~@2 x ~", O: "~@6 x!2 ~@8",
})).gain(0.53)

// drums · ride
const ride = s("rd").struct("<~@53 [~ x!2 ~ x ~ x ~] ~ [~ x!2 ~ x ~ x ~] ~ [~ x!2 ~ x ~ x ~] ~@79 [~ x!2 ~@5]>")
  .gain(0.38)

// drums · cowbell
const cowbell = s("cb").struct("<~@5 A B@12 C D E F B@8 C D B@29 G ~@8 B@26 C D B@8 H@3 I B@24 C D E F>".pickRestart({
  A: "~@8 x!5 ~@3", B: "x!4", C: "x ~ x!2 ~ x!3", D: "~ x!6 ~", E: "x ~ x ~ x!2 ~ x", F: "~ x!2 ~@3 x ~",
  G: "x ~ x ~ x ~ x!2", H: "x!8", I: "x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~",
})).gain(0.53)

// drums · bongos
const bongos = s("bongo:4").struct("<~@134 [x ~ x!2 ~ x!3] [~ x!6 ~] [x ~ x ~ x!2 ~ x] [~ x!2 ~@3 x ~]>").gain(1.18)

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

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@6 A B A C D E F B D E F B G H I J K B D B K B K B G H K L K B K B A B A B A B A B A B A B A B A B A B A B A B A M N
  O A B A B A B A B A B A B K B A B A B K B K B K B K B K B K B K B G H P B K B K B K B Q@3 R K B K B K B K B K B K B K
  B K B A B A B A B A B G H I S
>`.pickRestart({
  A: "x ~@2 x ~@2 x!2", B: "~@3 x!2 ~@3", C: "~@6 x!2 ~@8", D: "x ~@2 x", E: "~@6 x ~ x!3 ~@5", F: "~@3 x",
  G: "x ~ x!2 ~ x!3", H: "~ x!6 ~", I: "x ~ x ~ x!2 ~ x", J: "~ x!2 ~@3 x ~", K: "x ~@5 x!2", L: "~@8 x!3 ~@5",
  M: "~@3 x!2 ~ x!2", N: "x", O: "~@3 x!9 ~@4", P: "~@6 x!2", Q: "x!8", R: "x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~",
  S: "~@2 x ~ x ~ x!2 ~@4 x ~@3",
})).gain(1.68)

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

// drums · mt
const mt = s("mt").struct(`<
  ~@9 A ~@8 B C D E ~@8 B C F ~@2 G F ~@11 H I J K F E ~ L ~ M ~@3 N ~@7 O ~@26 B C F ~@8 P@2 Q F ~@23 B C D M
>`.pickRestart({
  A: "~@2 x ~ x ~ x ~@5 x!4", B: "x ~ x!2 ~ x!3", C: "~ x!6 ~", D: "x ~ x ~ x!2 ~ x", E: "~ x!2 ~@3 x ~", F: "x",
  G: "~@7 x!2 ~@2 x!2 ~ x!2", H: "~@2 x ~@5 x!3 ~@3 x!2", I: "x ~@3 x!3 ~@3 x!3 ~@3", J: "x!3 ~@3 x!3 ~@3 x!3 ~",
  K: "~@2 x ~ x ~@5 x!3 ~@3", L: "~@3 x", M: "~ x!2 ~ x ~@3", N: "~@6 x!2", O: "~@8 x ~@2 x ~@2 x ~", P: "x!8",
  Q: "x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~",
})).gain(0.53)

// drums · mt · soft notes
const mt_soft = s("mt").struct("<~@106 [x!8] ~@31>").gain(0.3)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@63 [~@10 x ~@2 x ~@2] [x ~@2 x ~@12] ~@73>").gain(2.39)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@6 A@12 ~@4 B A@7 ~@2 B A@29 ~@8 A@26 ~@2 B A@7 ~@4 B A@23 ~@4>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "~@2 x!3 ~ x!2",
})).gain(1.9)

// drums · shaker
const shaker = s("sh").struct("<A B ~@4 C@12 ~@4 D C@7 ~@2 D C@29 E@7 F C@26 ~@2 D C@7 ~@4 D C@23 ~@4>".pickRestart({
  A: "x!2", B: "x!4", C: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", D: "~@2 x!3 ~ x ~ x ~ x!3 ~ x ~", E: "x!8",
  F: "x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~",
})).gain(0.45)

// drums · woodblocks
// … 8 more lines

More by Santana