Strudelify

Corazon espinado

Santana

KeyB minorTempo121 bpm
0:00/0:00
// Corazon espinado — Santana
// 121 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 26.
setcpm(121/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
const bass = note(`<
  ~@5 A@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D ~ E F B C B C B
  C G H B C B C B C I J K@2 L@2 K@2 M@2 N@2 O@2 P@2 Q ~ R@6 S T R@32 U
>`.pickRestart({
  A: "[b1@4 ~@2 d2 ~ d2@3 ~ f#1 ~ f#1@6 ~@2 a#1 ~ c#2@3 ~ a#1 ~ c#2 ~]/2", B: "b1@2 ~@4 d2@3 ~@3 f#1 ~ f#1@2",
  C: "~@6 a#1 ~ c#2@2 ~@2 a#1 ~ c#2 ~", D: "b1@2 ~@4 d2@2 ~@4 f#1 ~ f#1@2", E: "b1 ~ b1 ~ b1@2 ~@4 d2@2 b1@2 c#2@2",
  F: "~@2 f#1@2 a#1@2 c#2@2 f#2@2 ~@2 e1@3 ~", G: "b1@3 ~ d2 ~ d2@5 ~ f#1 ~ f#1@2",
  H: "~@2 b1 ~ c#2 ~ f#2@5 ~ e2@2 d2@2", I: "b1@4 ~@2 d2 ~ d2@2 ~@2 f#1 ~ f#1@2",
  J: "~@2 a#1 ~ c#2 ~ f#2 ~ e2@3 ~ d2@2 ~@2", K: "[e2@5 ~ g2@5 ~ e2 ~ e2@6 ~@2 g2 ~ g2@3 ~ b2@2 ~@2]/2",
  L: "[b1@5 ~ d2@5 ~ b1 ~ b1@7 ~ d2 ~ d2@3 ~ f#2@2 ~@2]/2", M: "[b1@5 ~ d2@5 ~ b1 ~ b1@7 ~ a1 ~ b1@2 f#2 ~ e2@3 ~]/2",
  N: "[d2@5 ~ a2@5 ~ d2 ~ d2@7 ~ f#2@6 a2@3 ~]/2", O: "[a1@5 ~ e2@5 ~ a1 ~ a1@7 ~ c#2@6 e2@3 ~]/2",
  P: "[e2@5 ~ g2@5 ~ e2 ~ e2@7 ~ g2@5 ~ b2@3 ~]/2", Q: "f#1@3 ~@3 f#1@2 ~@4 f#1 ~ f#1@2",
  R: "[b1@5 ~ d2 ~ d2@4 f#1 ~ f#1@6 ~@2 a#1 ~ c#2@4 a#1@2 c#2@2]/2", S: "b1@2 b1@2 b1 ~ b1 ~ b1 ~ b1@2 b1@2 b1@2",
  T: "f#1@2 f#1 ~ f#1@2 f#1@2 f#1@2 ~ f#1@2 f#1@2 ~", U: "b1 ~ b1!2 ~@4",
})).s("gm_electric_bass_finger").gain(0.5)

// other · flute
const flute = note(`<
  ~@13 A B C D E@2 F G H I J@2 K@2 L M N@3 O P Q ~@2 R S T@2 U@2 L M N@3 O P Q ~@2 V@3 ~ V@3 ~@19 W X Y ~ W Z@2 ~ AA AB
  AC ~ AD@2 ~ AE AF AE AF AE AF AE AF ~@9 AG AH AG AH AG AH AG AH ~@17
>`.pickRestart({
  A: "~@2 f#4@2 d5 ~ d5 ~ d5@4 ~@2 c#5@2", B: "d5@2 c#5@2 d5@2 c#5@3 ~@7", C: "~@2 b4@3 ~ c#5@2 d5@2 e5@2 d5@2 c#5 ~",
  D: "c#5@3 ~@13", E: "[~@2 f#4@2 f#5@2 d5 ~ f#5 d5 c#5@2 d5@2 e5@4 c#5@3 ~@9 c#5@2]/2",
  F: "d5 ~ d5@4 ~@4 d5@2 c#5@2 d5@2, ~@10 c#5 ~@5", G: "c#5@3 ~@5", H: "~@2 b4@2 c#5@2 d5@2 g5@2 ~ g5@3 f#5@2",
  I: "g5 f#5@2 ~@5", J: "[~@2 d5 ~ d5 ~ d5 ~ d5@2 f#5@2 d5@2 e5@4 c#5@3 ~@5 b4 ~ b4@2 c#5@2]/2",
  K: "[d5@3 ~@3 b4@2 d5@2 b4@2 ~@2 f#5@4 e5@2 d5@2 e5@2 ~@4 f#5 ~ f#5 ~]/2", L: "f#5@4 ~@6 e5 ~ e5 ~ e5 ~",
  M: "e5@2 f#5@2 e5@2 d5@3 ~@7",
  N: "[b4@8 d5@6 c#5@4 ~@2 c#5 ~ c#5@2 d5@2 c#5@2 b4 ~ b4@4 f#4@2 f#5 ~ f#5 ~ f#5 ~ f#5@2 ~@2 f#5@2]/3",
  O: "e5@2 c#5@2 d5@2 e5@3 ~@7", P: "b4@4 d5@3 c#5", Q: "~@2 c#5 ~ c#5 ~ c#5@2 d5@2 c#5@2 b4@2 b4@2",
  R: "~@4 f#5@2 f#5 ~ f#5 ~ f#5@3 ~ f#5!2", S: "g5@2 f#5@2 e5 d5 e5@5 ~@5",
  T: "[~@2 d5 ~ d5 ~ d5 ~ d5@2 f#5@2 d5@2 e5@4 c#5@3 ~@5 d5 ~ d5@2 b4@2]/2",
  U: "[d5 ~ d5@2 b4@2 d5@4 f#5 ~ f#5@2 e5@4 c#5@2 d5@2 e5@2 ~@4 f#5 ~ f#5 ~]/2",
  V: "[b4@8 d5@6 c#5@4 ~@2 c#5 ~ c#5@2 d5@2 c#5@2 b4 ~ b4@4 f#4@2 ~@12]/3", W: "~@8 g4 ~ g4@3 ~ g4@2",
  X: "~@2 g4@3 ~ a4@4 g4@4 f#4@2", Y: "e4@2 d4@11 ~@3", Z: "[~@2 g4@3 ~ a4@4 g4@2 f#4@8 ~@12]/2",
  AA: "~@8 a4 ~ a4@3 ~ a4@2", AB: "~@2 a4@3 ~ g4@3 ~ f#4@4 e4@2", AC: "d4@2 c#4@7 ~@7",
  AD: "[~@8 e4 ~ e4@3 ~ e4@4 g4@3 ~ g4@4 e4@2 f#4@4]/2", AE: "~@2 f#4@3 ~ f#4 ~ f#4@4 e4@2 c#4@2", AF: "d4@2 b3@3 ~@11",
  AG: "~@2 d5@2 ~@2 f#5@2 ~@2 f#5@3 ~ e5@2", AH: "~ d5 e5!2 ~@4",
})).s("gm_flute").gain(0.45)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@4 A B C@2 D E@3 F@2 ~@2 G@2 ~@2 H ~ I J ~ K ~@9 L M@2 ~@2 N ~@2 O P ~@6 Q R S@2 T U V@3 W@2 ~ X@2 Y Z AA AB AC AD@3
  AE@2 AF AG@2 AH ~@2 AI AJ ~@2 AK@2 ~@2 AL AM@2 ~ AN ~ AO@2 AP@2 AQ@2 AR AS AT@2 AU AV AW AX@3 AY@2 AZ@5 BA BB BC BD BE
  BF BG BH BI BJ BK@2 BL BM@3 BN BO
>`.pickRestart({
  A: "~@10 f#3 a3 b3 d4 b3 a3", B: "b3@10 d4@2 f#4@2 b4 ~", C: "[a#4@2 f#4 e4@2 d4 e4@9 ~, b4 ~@31]/2",
  D: "e4@2 c#4 ~ d4 ~ e4@2 ~@2 f#4 a4 b4 d5 b4 a4",
  E: "[b4@10 d5@2 f#5@2 a#5@6 f#5@2 e5@4 d5@2 f#5@8 f5 f#5!5 f5 f#5!5]/3",
  F: "[e5@2 c#5@2 d5 ~ e5@4 d5@2 c#5@6 b4@14]/2",
  G: "[~@2 f#4@4 e4 d4 e4 ~ d4 ~ f#4 d4 b3@4 d4@3 ~@11, ~@2 a4@7 ~@23]/2", H: "~@2 c#4 ~ d4 ~ e4@6 e4 d4 b3@2",
  I: "~@6 a4 ~ g4 ~ f#4 e4 d4 e4@2 ~", J: "f#4 e4 f#4@5 ~@9", K: "~@2 f#3@2 b3@2 c#4@2 d4@5 ~@3",
  L: "~@2 a#4 b4!5 a#4 b4!5 a#4 b4", M: "[b4@2 a4 f#4 e4@2 f#4@2 e4@2 f#4@2 e4@13 ~@7]/2", N: "~ c#4 d4 e4@2 d4 c#4@2",
  O: "~@2 f#4 ~ f#4 ~ f#4 ~ f#4@3 ~@5", P: "~@2 f#4 ~ f#4 ~ f#4@2 e4 d4 b3 ~ e4 d4 b3@2",
  Q: "b4@7 a4 ~ f#4 a4 a#4 a4 f#4 e4 f#4", R: "e4@6 b4 a4 f#4 e4 ~ e4 d4 b3 f#4 d4", S: "[b3@4 d4@3 c#4@4 ~@5]/2",
  T: "~@2 e5 d5 e5!3 d5 e5!3 d5 e5!3 d5", U: "e5@4 e5@9 d5 [b4,c#5]@2", V: "[b4@4 d5@3 c#5@5 d5 c#5 b4 b4@2 ~@7]/3",
  W: "[~@4 [e3,f#3] e3 f#3@14 ~@12]/2", X: "[a4@7 ~ a4@4 f#4@2 e4@4 f#4@6 ~@2 c#5@4 b4@2]/2",
  Y: "a4@2 a4!4 a4@2 a4@3 f#4 e4@3 d4", Z: "e4@5 ~@3", AA: "b4 d5!2 b4 d5!2 b4 d5 b4 d5!2 b4 d5!2 b4 d5",
  AB: "c#5 e5!2 c#5 e5!2 c#5 e5 c#5 e5!2 c#5 e5!2 d5 f#5", AC: "f#5 [f#5,g5]!7 [f#5,g5]@2 g5@2 f#5@2 g5@2",
  AD: "[f#5@2 g5@2 f#5@2 g5 ~ g5@4 f#5@2 a5@4 a5@5 ~ a5@4 f#5@2 e5@4 f#5@6 ~@2 a5@2 ~ a5@3]/3",
  AE: "[a5@3 f#5 e5 f#5 e5@3 d5 e5@2 f#5 d5 e5@4 d5 c#5 b4@6 ~@5 b4]/2",
  AF: "d5 [b4,c#5] d5 [b4,c#5] d5 [b4,c#5] d5 [b4,c#5] d5 [b4,c#5] d5 [b4,c#5] d5@3 c#5", // Bsus2
  AG: "[e5 [c#5,d5] e5 [c#5,d5] e5 [c#5,d5] e5 [c#5,d5] e5 [c#5,d5] e5 [c#5,d5] e5 [c#5,d5]@2 e5@4 [c#4,f#4,b4]!2 [c#4,d4,f#4,g4,b4,c5] [d4,g4,c5] [d4,d#4,g4,g#4,c5,c#5] [d#4,g#4,c#5] [d#4,e4,g#4,a4,c#5,d5] [e4,a4,d5] [e4,f4,a4,a#4,d5,d#5] [f4,a#4,d#5] [f#4,b4,e5] [g4,c5,f5] [g4,g#4,c5,c#5,f5,f#5]]/2", // Dmaj7 F#sus4 Gmaj7 Csus2 G#maj7 C#sus2 Amaj7 Dsus2 …
  AH: "[g#4,c#5,f#5] [a4,d5,g5] [a#4,d#5,g#5] [a#4,b4,d#5,e5,g#5,a5] [b4,e5,a5] [c5,f5,a#5] [c#5,f#5,b5] [c#5,d5,f#5,g5,b5,c6] [d5,g5,c6] [c5,c#5,f5,f#5,a#5,b5] [a#4,b4,d#5,e5,g#5,a5] [g#4,a4,c#5,d5,f#5,g5] [f#4,g4,b4,c5,e5,f5] [f4,a#4,d#5] ~@2", // C#sus4 Dsus4 D#sus4 Emaj7 Esus4 Fsus4 F#sus4 Gmaj7 …
  AI: "~@9 a4 ~ g4 f#4 ~ e4 d4", AJ: "~ e4 f#4 ~ f#4@12", AK: "[~@5 f#4 b4 c#5@2 d5 c#5 b4@2 f#4 d4 b3]/2",
  AL: "~@10 a3@2 c#4@2 e4 ~", AM: "[e4 d4 e4 f#4 g4 f#4 e4 e4@2 d4@5 ~@2]/2", AN: "~@2 e3 ~ e3@2 ~@2 e3 ~ e3@3 ~@3",
  AO: "[b3@8 d4@6 e4@7 ~ e4@2 f#4@2 d4@2 b3@2 a3@2]/2", AP: "[b3@8 d4@6 c#4@5 ~ c#4 ~ c#4@2 d4@2 c#4@2 a3@2 f#3@2]/2",
  AQ: "[b3@8 d4@2 e4@2 f#4@2 e4@5 ~ f#4 ~ b4@2 a4 f#4 e4@2 e4 d4 b3 a3]/2", AR: "b3@4 d4 f#4!2 b4",
  AS: "f#4@2 f#4@2 b4@2 f#4@2 f#4@2 b4@2 f#4@3 ~", AT: "[e5@9 ~ e5@2 d5@2 e5@5 ~ e5@3 ~ e5@3 d5 e5 b4@2 ~]/2",
  AU: "b4@2 d5 b4 b4@2 d5 b4 b4@4 ~@2 c#5 e5", AV: "e5@2 c#5 e5!2 ~ c#5 e5 e5@5 ~@3", AW: "d5@2 f#5!10 d5@2 c#5@2",
  AX: "[d5@2 e5@2 f#5@2 a5 f#5 a5 f#5 a5@8 a5@2 a5!4 a5@2 a5!4 a5@5 f#5 e5@4 d5@8]/3",
  AY: "[b4@8 d5@6 c#5@7 ~ c#5@2 d5@2 c#5@2 a4@2 f#4@2]/2",
  AZ: "[b4@8 d5@6 c#5@7 ~ c#5@2 d5@2 c#5@2 b4@2 b4@10 d5@6 c#5@4 a4@5 ~ e4@3 d4 b3@8 a3@2 b3@2 d4@2 e4@2 b3@2 d4@2, ~@30 a4 ~@24 f#4@2 ~@23]/5",
  BA: "e4@4 e4@11 ~", BB: "b4@2 b4!4 b4@2 b4!4 b4@2 b4!2", BC: "c#5@2 c#5!4 c#5@2 c#5!5 ~ c#5!2",
  BD: "d5@2 d5!4 d5@2 d5!5 ~ d5!2", BE: "e5@2 e5!4 e5@2 e5!5 ~ e5!2", BF: "f#5@3 e5@3 f#5 e5@2 f#5 e5@2 f#5 e5@2 f#5",
  BG: "e5 a5@3 a5 f#5 e5@3 d5 b4 a4 d5 b4 a4 f#4", BH: "e4 f#4 d4 e4 b3@5 d4 e4 f#4 a4 b4 d5!2",
  BI: "b4 c#5 e5!2 c#5 e5!2 c#5 e5!2 c#5 e5!2 c#5 e5 d5", BJ: "f#5@5 d5 b4 e5@2 e5 d5 b4 a4@3 f#4",
  BK: "[e4@3 d4 b3 d4 a3@2 a3@2 f#3 a3 b3 d4 a3 b3@5 b3 d4 e4 f#4 a4 b4 d5 a4 b4 d5 e5@2]/2",
  BL: "e5@5 d5 b4 d5 e5 f#5 d5 b4 a5@3 ~",
  BM: "[a5@3 a5@2 a5!2 ~ a5 a5@2 a5!2 ~ a5 a5@3 e5@3 d5 b4 e5 a4@3 f#4 e4 f#4 d4@4 b3@5 a3 b3 d4 e4 b3 d4 e4 b3 a3]/3",
  BN: "e4@2 e4@5 ~", BO: "b3 ~ b3!2 ~@4",
})).s("gm_overdriven_guitar").gain(0.32)

// chords · rock organ
const rock_organ = note(`<
  ~@3 A@2 B@2 C@2 D@4 ~@16 E ~ F@2 G@2 H@2 ~@8 E ~ F@2 G@2 H@2 E ~ F@2 E ~ I ~ J ~ K@2 L@2 K@2 L@2 K@2 L@2 K@2 L@2 M@8
  N@2 O@2 P@2 Q ~ R@6 S T R@8 U@24 V
>`.pickRestart({
  A: "[[b5,b6]@28 d6@3 ~]/2", B: "[[f#5,b5]@7 [f#5,a#5]@9]/2", C: "[[f#5,b5]@14 [c#5,f#5,a#5]@17 ~]/2",
  D: "[[f#5,b5]@6 ~@14 f#5@2 f#5@5 ~@5 [d5,b5]@6 [d5,f#5]@6 d5@2 ~@2 c#5@2 ~ c#5 ~@2 [c#5,f#5,a#5]@9 ~, d5@11 ~ d5@4 a#5@6 a#5@10 ~@6 b5@10 a#5@5 ~@11, ~@6 [f#5,b5]@8 f#5@6 ~@8 f#5@9 ~@9 f#5@7 ~@11, ~@18 c#5@13 ~@33]/4", // B5 G D F# B5
  E: "[f#5,b5,d6,f#6]@7 [f#5,a#5,c#6]", // Bm F#
  F: "[d6@7 ~ d6@5 ~ [f#5,a#5,c#6]@7 ~ [f#5,a#5] ~ [f#5,a#5,c#6]@3 ~ [f#5,a#5,c#6]@3 ~, [f#5,b5]@7 ~@9]/2", // F# B5
  G: "[[b5,d6]@7 ~ [b5,d6]@6 a#5@3 ~ a#5@3 ~ [a#5,c#6] ~ [a#5,c#6]@3 ~ [f#5,a#5]@4, f#5@17 ~ f#5@9 ~@5, ~@14 c#6@7 ~@11]/2", // Bm A#m F#
  H: "[[f#5,b5,d6]@7 ~ [f#5,b5,d6]@6 [f#5,a#5]@3 ~ a#5@3 ~ [a#5,c#6] ~ [a#5,c#6]@4 [f#5,a#5,c#6]@3 ~, ~@14 c#6@4 f#5@9 ~@5]/2", // Bm F# A#m F#
  I: "[d5,f#5,b5,d6]@3 ~@3 [f#5,b5,d6]@3 ~@3 [c#5,f#5,a#5,c#6]@2 [c#5,f#5,a#5,c#6]@2, ~@6 d5 ~@9", // Bm F#
  J: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5]@2 ~@4 [b5,d6]@2 [d5,f#5,b5,d6] ~ [c#5,f#5,a#5,c#6]@2, ~@10 f#5 ~@5", // Bm F#
  K: "[[f#5,b5,d6]@3 ~ [f#5,b5,d6]@4 ~@2 [f#5,b5,d6]@2 ~@2 [f#5,a#5,c#6]@8 [f#5,a#5] ~ [f#5,a#5,c#6]@3 ~ [f#5,a#5,c#6]@4]/2", // Bm F#
  L: "[[f#5,b5,d6]@3 ~ [f#5,b5,d6]@3 ~@3 [b5,d6] ~@3 [a#5,c#6]@9 ~@5 f#5@2 ~@2, ~@10 f#5@2 ~@2 f#5@13 ~@5, ~@24 [a#5,c#6]@7 ~]/2", // Bm A#m
  M: "[[e5,g5] [d5,f#5], b5@63 ~]/4", N: "[d5,f#5,a5]/2", O: "[c#5,e5,a5]/2", P: "[f#5@7 e5, [b4,d5]]/2",
  Q: "[a#4,c#5,f#5]@3 ~@3 [a#4,c#5,f#5]@3 ~@3 [a#4,f#5]@2 [a#4,c#5,f#5]@2, ~@12 c#5 ~@3", // F# D#m F#
  R: "[[f#4,d5]@8 [f#4,d5,f#5]@6 [f#4,a#4,c#5,e5]@14 [f#4,a#4,c#5]@3 ~, b4@13 ~@19]/2", S: "[d5,f#5,b5,d6]@15 ~",
  T: "[e5,f#5,a#5,c#6]@7 ~ [e5,f#5,a#5,c#6]@2 ~ [e5,f#5,a#5,c#6]@2 [f#5,c#6]@2 ~, ~@13 [e5,a#5] ~@2", // F#7 F#5 Edim
  U: "[[f#5,b5,d6]@7 ~ [f#5,b5,d6]@5 ~ [f#5,a#5,c#6]@7 ~@3 [f#5,a#5,c#6]@3 ~ [e5,f#5,a#5,c#6]@3 ~, d5@14 ~@8 e5@5 ~@5]/2", // Bm F# F#7
  V: "[d5,f#5,b5]@2 ~@2 [d5,f#5,b5] ~ [d5,f#5,b5] ~@9", // Bm
})).s("gm_rock_organ").gain(0.2).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@79 A@2 B@2 A@2 B@2 C@2 D@2 E@2 ~@43>".pickRestart({
  A: "[~@28 e4@3 ~, e3@15 ~, ~@2 e4@8 ~@2 e4@7 ~ e4@6 ~@6, ~@4 g4@5 ~ g4@7 ~ g4@7 ~ g4@5 ~, ~@6 c#5@7 ~ d5@7 ~ c#5@8 ~@2]/2",
  B: "[d4 ~@25 f#4@2 ~@2 [f#4,b4]@2, ~ d4@4 ~ d4@3 ~ d4@3 ~ d4@2, ~@4 f#4@4 ~@2 f#4@6 ~@2 f#4@5 ~@9, ~@6 b4@6 ~@2 c#5@6 ~@2 b4@7 ~@3]/2", // B5
  C: "[~@10 f#4@2 ~@16 d4@3 ~, d4@11 ~ d4@7 ~ d4@6 ~@6, ~@4 f#4@5 ~@9 f#4@4 ~@4 f#4@5 ~, ~@6 a4@8 b4@8 a4@9 ~]/2",
  D: "[~@28 e4@3 ~, e4@6 f#4@6 a3@6 c#4@6 ~@2 c#4@5 ~, ~@2 a3@3 c#4@2 e4@4 f#4@3 ~@2, ~@20 a3@5 ~@7]/2",
  E: "[~@2 c#4@2 ~@24 g3@3 ~, g3@10 ~@2 g3@7 ~ g3@6 ~@6, ~@4 d4@5 ~ b3@5 ~@3 b3@5 ~@3 b3@5 ~, ~@6 g4@7 ~ f#4@8 e4@9 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@79 A@2 B@2 A@2 B@2 C@2 D@2 E@2 ~@43>".pickRestart({
  A: "[~@28 e3@3 ~, ~@2 g3@8 ~@2 g3@12 ~@2 g3@5 ~, ~@4 b3@4 ~@2 b3@5 ~@3 e4@10 ~@4, ~@6 e4@8 f#4@7 ~ b3@9 ~]/2",
  B: "[~@13 b3 ~ b3, ~@2 f#3@9 ~ f#3@7 ~ f#3@6 ~@2 f#3@4, ~@2 b3@2 ~ b3@2 ~@2 b3@3 ~@4, ~@3 d4@4 e4@4 d4@5]/2",
  C: "[d4@4 ~@24 a3@3 ~, ~@4 a3@6 d4@4 f#4@6 a3@6 d4@5 ~, ~@6 f#4@6 a3@6 d4@4 f#4@9 ~]/2",
  D: "[~@28 a3@3 ~, c#4@6 e4@6 a3@6 ~@2 a3@7 ~@5, ~@4 a3@6 c#4@6 ~@2 c#4@7 ~ c#4@5 ~, ~@14 e4@7 ~ e4@9 ~]/2",
  E: "[~@4 f#3@2 g3@4 ~@4 e3@5 ~ e3 ~ e3@4 ~@2 e3@3 ~, b2@10 f#3@5 ~@5 g3@10 ~@2, ~@12 b2@19 ~, ~@13 b3@2 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.7)

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

// drums · rim
const rim = s("rim").struct("<~@13 [~ x ~ x]!15 ~@9 [~ x ~ x]!7 ~@35 [~ x ~ x]!14 ~@43>").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@57 A ~@7 B ~@22 C ~@7 D E ~@15 F ~@16 G>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x ~@2 x ~@2 x!2", D: "x!8", E: "x ~ x ~ x ~ x ~ x ~@2 x ~ x ~@2", F: "~ x!7",
  G: "~@2 x!2 ~@4",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A ~@4 B@54 ~@20 B@13 C D ~@41 E>".pickRestart({
  A: "x!4", B: "x!3 ~ x ~ x!2", C: "x!3 ~ x ~@3", D: "x ~@2 x ~@2 x!2", E: "~ x ~@2",
})).gain(0.28)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 [~@3 x ~ x ~@2]!54 ~@20 [~@3 x ~ x ~@2]!14 ~@43>").gain(0.16)

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

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@11 A ~@15 A B ~@31 C ~ D ~@30 E ~@4 C ~@19 F ~@17>".pickRestart({
  A: "~@7 x", B: "~@13 x!2 ~", C: "~ x ~@6", D: "~@14 x!2", E: "~@10 x!2 ~@4", F: "~ x!3 ~@4",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@63 A@16 ~@13 B ~ B A@6 ~@2 A@32 C>".pickRestart({
  A: "x!4", B: "~@3 x", C: "x",
})).gain(0.28)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@63 [~ x ~ x ~ x ~ x]!16 ~@16 [~ x ~ x ~ x ~ x]!6 ~@2 [~ x ~ x ~ x ~ x]!32 ~>")
  .gain(0.16)

// drums · high tom
// … 78 more lines

More by Santana