Strudelify

The Lonely Bull (El Solo Toro)

Herb Alpert

KeyA♭ majorTempo114 bpm
0:00/0:00
// The Lonely Bull (El Solo Toro) — Herb Alpert
// 114 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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.

// other · trumpet
const trumpet = note("<A@2 B C@2 ~ D@2 E F@7 G H@2 I J K L@2 M@2 ~@5 N@4 O@4 P@7 ~@5 Q@8 R@2 S T S U>".pickRestart({
  A: "[~@20 eb4 ~ eb4 ~ ab4@20 eb4 ~ eb4 ~ eb4@2 ~ c4 ~ eb4 ~@2 eb4 ~ c4 ~@2 eb4@2 ~]/2",
  B: "ab4@11 ~@2 ab4@3 ~ eb4@3 ~@3 eb4@3 ~ c4@3 ~@2", C: "[~ c4@2 ab3@24 ~@5]/2",
  D: "[~@13 c5@4 db5@4 ~@8 c5@8 bb4@7 gb4@4 gb4@12 ab4@4]/2", E: "bb4@4 ab4@7 ~ eb4@4 ~ eb4@11 ab4@4",
  F: "[eb4@4 gb4@32 ~@8 c5@4 db5@4 ~@8 c5@7 bb4@8 gb4@4 gb4@12 ab4@4 bb4@4 ab4@12 ab4@4 g4@4 f4@4 g4@8 ab4@63 ~@8 c5@4 db5@4 ~@8 c5@6]/7",
  G: "~@2 bb4@8 gb4@4 gb4@11 ab4@4 bb4@3", H: "[~@2 ab4@7 eb4@4 ~ eb4@11 ~ ab4@4 eb4@4 gb4@30]/2",
  I: "~@9 c5@4 db5@4 ~@8 c5@7", J: "~ bb4@8 gb4@4 gb4@12 ab4@4 bb4@3", K: "~ ab4@12 ab4@4 g4@3 f4@4 g4@8",
  L: "[ab4@9 ~@2 ab4 g4 f4 g4@2]/2", M: "[ab4@63 ~]/2", N: "[~@30 f4@12 f4@3 f4@4 f4@4 g4@4 ab4@4 bb4@67]/4",
  O: "[~@5 c5@4 db5@4 ~@8 c5@7 bb4@8 gb4@4 gb4@12 ab4@4 bb4@4 ab4@7 ~ eb4@4 ~ eb4@11 ab4@4 eb4@4 gb4@32 ~@4]/4",
  P: "[~@4 c5@4 db5@4 ~@7 c5@8 bb4@8 gb4@4 gb4@12 ab4@4 bb4@4 ab4@12 ab4@4 g4@4 f4@4 g4@7 ab4@40 ~@4 ab4@4 g4@4 f4@4 g4@8 ab4@40 ~@30]/7",
  Q: "[~@24 f4@12 f4@4 f4@4 f4@4 g4@4 ab4@4 bb4@31 b4@67 ~@5 db5@4 d5@4 ~@8 db5@8 b4@8 g4@4 g4@20 ~@7 db5@4 d5@4 ~@8 db5@8 b4@8 g4@2]/8",
  R: "[~@2 g4@20 ~@8 db5@4 d5@4 ~@8 db5@8 b4@7 g4@3]/2", S: "~ g4@20 ~@8 db5@3", T: "~ d5@4 ~@8 db5@8 b4@8 g4@3",
  U: "~ d5@4 ~@7 db5@8 ~@12",
})).s("gm_trumpet").gain(0.71)

// other · trumpet · soft notes
const trumpet_soft = note("<~@6 A ~@3 B ~@4 C ~@3 D ~@15 E ~@3 F ~@16 G ~ H ~ I ~ J ~ K>".pickRestart({
  A: "~@21 eb5 f5 eb5 ~ db5@4 ~@3", B: "~@20 eb5 f5 eb5 ~ db5@4 ~@4", C: "~@18 eb5 ~ f5 eb5 db5@4 ~@6",
  D: "~@17 eb5 f5 ~ eb5 db5@4 ~@7", E: "~@13 eb5 f5 eb5 ~ db5@4 ~@11", F: "~@12 eb5 f5 eb5 db5@4 ~@13",
  G: "~@7 e5 gb5 e5 ~ d5@4 ~@17", H: "~@6 e5 ~ gb5 e5 d5@4 ~@18", I: "~@6 e5 gb5 e5 ~ d5@4 ~@18",
  J: "~@5 e5 gb5 ~ e5 d5@4 ~@19", K: "~@5 e5 gb5 e5 ~ d5@4 ~@19",
})).s("gm_trumpet").gain(0.43)

// other · electric guitar clean · "EL GUITAR"
const electric_guitar_clean = note("<~@26 A B@2 C D@2 ~@14 E@2 F@2 G H ~@13>".pickRestart({
  A: "~@7 f3@2 f3@6 db3 db3@7 c3 c3@3 bb2 bb2@3 ab2",
  B: "[ab2@7 eb2 eb2@31 eb2 eb2@7 gb2 gb2@10 ab2@2 ~@2 eb2@2, ~@15 ab2]/2", C: "eb2",
  D: "[~@6 f3 f3@7 db3 db3@7 c3 c3@3 bb2 bb2@3 ab2 ab2@7 eb2 eb2@24 ~]/2",
  E: "[~@2 f3 f3@7 db3 db3@7 c3 ~@2 bb2@2 ~@2 ab2@2 ab2@6 eb2@2 eb2@29, ~@19 c3@4 bb2@4 ~@37]/2",
  F: "[~ eb2 eb2@7 gb2 gb2@11 ab2 ab2@3 eb2 eb2@32 ~@6]/2",
  G: "~ f3 f3@6 db3@2 db3@6 c3@2 ~@2 bb2@2 ~@2 ab2@2 ab2@6, ~@9 c3@2 bb2@2 ~@3", H: "eb2 eb2@12 ~@3",
})).s("gm_electric_guitar_clean").gain(0.8).pan(0.7)

// chords · acoustic guitar steel · "GUITAR STRUM"
const acoustic_guitar_steel = note(`<
  ~@4 A@8 B@4 C D E F G H I J K L@8 M N@8 O@4 P Q R S T U V W@2 X@8 Y@2
>`.pickRestart({
  A: "[~@14 [c4,eb4]@3 ~ [c4,eb4]@11 ~ [c4,eb4]@7 ~@9 eb4@3 ~ eb4@11 ~ eb4@7 ~@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@12 [ab3,c4,eb4]@8 ~@8 [bb3,db4]@3 ~ [bb3,db4]@11 ~ [bb3,db4]@7 ~@9 [c4,eb4]@3 ~ [c4,eb4]@11 ~ eb4@7 ~@9 db4@3 ~ db4@11 [gb3,bb3,db4]@8 ~@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@12 [ab3,c4,eb4]@7 ~@9 [bb3,db4]@3 ~ [bb3,db4]@11 ~ [bb3,db4]@4, ~@5 ab2@24 ~@8 ab2@24 ~@8 ab2@24 ~@8 gb2@24 ~@7 ab2@24 ~@8 gb2@24 ~@8 ab2@24 ~@7 gb2@24 ~@5, ~@13 ab3@4 ab3@12 ab3@8 ~@8 [ab3,c4]@4 [ab3,c4]@12 [ab3,c4]@8 ~@39 gb3@4 gb3@12 gb3@8 ~@8 ab3@4 ab3@12 [ab3,c4]@8 ~@8 [gb3,bb3]@4 [gb3,bb3]@12 ~@47 gb3@4 gb3@12 gb3@5]/8", // Cm Ab Bbm Cm Gb Ab Bbm Ab …
  B: "[~@3 e2@8 ~ b3@7 eb2@8 ~ bb3@7 ab2@8 [ab3,c4,eb4]@8 f2@8 [ab3,c4,f4]@8 db2@8 [ab3,db4,f4]@7 eb2@4 eb2@4 f2@4 g2@4 ~@9 [c4,eb4]@3 ~ [c4,eb4]@11 ~ eb4@5, ~@11 [e3,ab3]@8 ~@8 [eb3,g3]@8 ~@63 ab2@24 ~@6, ~@53 ab3@2 ab3@6 [ab3,c4]@3]/4", // Ab Fm Db Cm E Eb Ab
  C: "~@11 db4@3 ~ db4@11 ~ db4@5, ~ gb2@12 ~@3, ~@5 [gb3,bb3]@2 [gb3,bb3]@6 [gb3,bb3]@3", // Gb
  D: "~@5 [ab3,c4,eb4]@2 [ab3,c4,eb4]@6 [ab3,c4,eb4]@3, ~ ab2@12 ~@3", // Ab
  E: "~@10 [bb3,db4]@3 ~ [bb3,db4]@11 ~ [bb3,db4]@6, ~ gb2@12 ~@3, ~@9 gb3@4 gb3@12 gb3@7", // Bbm
  F: "~@10 eb4@3 ~ eb4@11 ~ eb4@6, ~ ab2@24 ~@7, ~@9 [ab3,c4]@4 [ab3,c4]@12 [ab3,c4]@7", // Ab
  G: "~@10 db4@3 ~ db4@11 [gb3,bb3,db4]@7, ~ gb2@24 ~@7, ~@9 [gb3,bb3]@4 [gb3,bb3]@12 ~@7", // Gb
  H: "~ e2@8 [e3,ab3,b3]@8 eb2@7 ~ [g3,bb3]@7, ~@3 eb3", I: "ab2@8 ~ [c4,eb4]@7 f2@8 ~ [c4,f4]@7, ~ ab3 ~ ab3",
  J: "db2@8 ~ f4@7 eb2@4 eb2@4 f2@4 g2@4, ~ [ab3,db4] ~@2", K: "~ [ab3,c4,eb4] db2 [ab3,db4,f4], ab2 ~",
  L: "[~@8 [c4,eb4]@7 [ab2,c4]@4 [gb2,bb3]@4 [f2,ab3]@4 [eb2,gb3]@4 [db2,f3]@8 ~ [ab3,db4]@7 db2@8 ~ db4@7 ab2@8 ~ eb4@7 ab2@8 [ab3,c4,eb4]@8 gb2@8 [gb3,bb3,db4]@8 gb2@8 [gb3,bb3,db4]@7 ab2@8 ~ [c4,eb4]@7 [ab2,c4]@4 [gb2,bb3]@4 [f2,ab3]@4 [eb2,gb3]@4 db2@8 ~ db4@7 db2@8 ~ db4@7 ab2@8 [ab3,c4,eb4]@8 ab2@8 [ab3,c4,eb4]@8 bb2@8 [bb3,d4,f4]@7 bb2@8 ~ [d4,f4]@7 eb2@3, ab2@15 ~@241, ~@7 ab3@8 ~@24 f3@8 ~@8 [f3,ab3]@8 ~@8 [ab3,c4]@8 ~@55 ab3@8 ~@24 [f3,ab3]@8 ~@8 [f3,ab3]@8 ~@55 bb3@8 ~@3]/8", // Cm Ab Gb Fm Ebm Db Db5 Ab …
  M: "~@6 [eb4,g4]@7 eb2@8 ~ g4@7 [g3,eb4]@3, ~@5 bb3@8 ~@8 [bb3,eb4]@8 ~@3", // Eb Cm Eb5
  N: "[~ [g3,eb4]@4 [f3,db4]@4 [f3,db4]@4 [eb3,c4]@4 [eb3,c4]@4 [db3,bb3]@4 [db3,bb3]@4 c3@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@12 [ab3,c4,eb4]@7 ~@9 [bb3,db4]@3 ~ [bb3,db4]@11 ~ [bb3,db4]@7 ~@9 eb4@3 ~ eb4@11 ~ eb4@7 ~@9 db4@3 [gb3,bb3,db4]@12 [gb3,bb3,db4]@8 ~@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@11 ~ [c4,eb4]@7 ~@9 [bb3,db4]@3 ~ [bb3,db4]@11 ~ [bb3,db4]@7 e2@8 ~ b3@7 eb2@8 ~ bb3@7 ab2@5, ~@29 ab2@24 ~@7 gb2@24 ~@8 ab2@24 ~@8 gb2@24 ~@8 ab2@24 ~@7 gb2@24 ~@45, ~@68 gb3@4 gb3@12 gb3@8 ~@8 [ab3,c4]@4 [ab3,c4]@12 [ab3,c4]@8 ~@8 [gb3,bb3]@4 ~@43 ab3@8 ~@8 gb3@4 gb3@12 gb3@8 ~@8 [e3,ab3]@8 ~@8 [eb3,g3]@8 ~@5]/8", // Cm Db Cm Gb Ab Bbm Gb Ab …
  O: "[~@3 [ab3,c4,eb4]@8 f2@8 [ab3,c4,f4]@8 db2@7 ~ [db4,f4]@7 eb2@4 eb2@4 f2@4 g2@4 ~@9 [c4,eb4]@7 db2@8 ~ f4@7 ~@9 eb4@7 [ab2,c4]@4 [gb2,bb3]@4 [f2,ab3]@4 [eb2,gb3]@4 [db2,f3]@6, ~@17 ab3@4 ~@8 ab2@8 ~@8 ab2@8 ~@11, ~@33 ab3@4 ~@4 [ab3,db4]@4 ~@4 [ab3,c4]@4 ~@11]/4", // Ab Fm Db Cm Ab Gb Fm Ebm …
  P: "~@2 [f3,ab3,db4]@8 db2@8 [f3,ab3,db4]@7 ab2@7", // Db
  Q: "~@2 [c4,eb4]@7 ab2@8 ~ [c4,eb4]@7 gb2@7, ~ ab3@8 ~@8 ab3@8 ~@7", // Cm
  R: "~@2 db4@7 gb2@8 ~ db4@7 ab2@7, ~ [gb3,bb3]@8 ~@8 [gb3,bb3]@8 ~@7", // Gb
  S: "~ [ab3,c4,eb4]@8 [ab2,c4]@4 [gb2,bb3]@4 [f2,ab3]@4 [eb2,gb3]@4 [db2,f3]@7", // Ab Gb Fm Ebm Db
  T: "~ [f3,ab3,db4]@7 db2@8 ~ [ab3,db4]@7 ab2@8, ~@2 f3 ~", U: "~ [c4,eb4]@7 ab2@8 ~ eb4@7 bb2@8, ab3 ~ [ab3,c4] ~",
  V: "~ f4@7 bb2@8 [bb3,d4,f4]@8 eb2@8, [bb3,d4] ~@3", // Bb
  W: "[[bb3,eb4,g4]@8 eb2@8 [bb3,eb4,g4]@7 e2@8 ~ [e4,ab4]@7 e2@8 ~ [e4,ab4]@7 [ab3,e4]@4 [ab3,e4]@4 [gb3,d4], ~@31 b3@8 ~@8 b3@8 ~@9]/2", // Eb E Dbm D
  X: "[~@3 [gb3,d4]@4 [e3,db4]@4 [e3,db4]@4 [d3,b3]@4 [d3,b3]@4 db3@8 ~ e4@3 [a3,db4,e4]@12 [a3,db4,e4]@8 ~@8 [g3,b3,d4]@4 [g3,b3,d4]@11 ~ [b3,d4]@7 ~@9 [db4,e4]@3 ~ [db4,e4]@11 ~ e4@7 ~@9 d4@3 ~ d4@11 ~ d4@7 ~@8 [a3,db4,e4]@4 [a3,db4,e4]@12 [a3,db4,e4]@8 ~@8 [b3,d4]@3 ~ [b3,d4]@11 ~ [b3,d4]@7 ~@9 [db4,e4]@3 ~ e4@11 ~ e4@7 ~@9 d4@2, ~@23 a2@24 ~@8 g2@24 ~@7 a2@24 ~@8 g2@24 ~@8 a2@24 ~@8 g2@24 ~@7 a2@24 ~@8 g2@11, ~@31 [a3,db4]@4 ~@43 g3@8 ~@8 a3@4 a3@12 [a3,db4]@8 ~@8 [g3,b3]@4 [g3,b3]@12 [g3,b3]@8 ~@39 g3@4 g3@12 g3@8 ~@8 a3@4 [a3,db4]@12 [a3,db4]@8 ~@8 [g3,b3]@3]/8", // D Dbm G A G Bm Dbm A …
  Y: "[~@2 d4@11 [g3,b3,d4]@8 ~@8 [a3,db4,e4]@4 [a3,db4,e4]@11 ~ [db4,e4]@8 ~@11, ~ [g3,b3]@12 ~@8 a2@23 a3@8 ~@12]/2", // G A Dbm G
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.7)

// other · acoustic guitar steel · "GUITAR ARPEGGIO"
const acoustic_guitar_steel_2 = note(`<
  ~@4 A B@2 C D E F@8 G H I J K L M N@8 O P Q R S T U@5 V W X@5 Y Z AA@8 AB AC AB AD
>`.pickRestart({
  A: "~@9 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@3", B: "~ eb3@4 ~@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@3",
  C: "~ ab3@4 gb3@4 gb3@2 ~ db4@4 bb3@4 gb4@4 db4@4 bb3@4, ~@11 bb3@2 ~@19",
  D: "gb3@2 ab3@2 ab3 c4 eb4@2 c4@2 ab4@2 eb4@2 c4@2", E: "ab3@2 gb3@2 gb3 bb3 db4@2 bb3@2 gb4@2 db4@2 bb3@2",
  F: "[eb3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@3 ab3@4 gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 gb3@2 ~@2 e3@4 e3@2 ab3@2 b3@4 e4@4 eb3@4 eb3@2 g3@2 bb3@4 eb4@4 ab3@4 ab3@2 c4@2 eb4@4 ab4@4 f3@4 f3@2 ab3@2 c4@4 f4@4 db3@4 db3@2 f3@2 ab3@4 db4@3 eb3@4 eb3@2 g3@2 bb3@4 eb4@4 ~@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 gb3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@2]/8",
  G: "~@2 gb3@3 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 eb3@3",
  H: "~ ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@3",
  I: "~ gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 gb3@2 ~",
  J: "~ e3@4 e3@2 ab3@2 b3@4 e4@4 eb3@3 eb3@2 g3@2 bb3@4 eb4@4", K: "ab3@2 ab3 c4 eb4@2 ab4@2 f3@2 f3 ab3 c4@2 f4@2",
  L: "db3@2 db3 f3 ab3@2 db4@2 eb3@2 eb3 g3 bb3@2 eb4@2", M: "ab3@2 ab3 c4 eb4@2 c4@2 db3@2 db3 f3 ab3@2 f3@2",
  N: "[ab3@4 ab3@2 ~ eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 db3@4 db3@2 f3@2 ab3@4 f3@4 db4@4 ab3@4 f3@4 db3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@3 gb3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 db3@4 db3@2 f3@2 ab3@4 f3@4 db4@4 ab3@4 f3@4 db3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 bb3@4 bb3@2 d4@2 f4@4 d4@3 bb4@4 f4@4 d4@4 bb3@4 eb3@3, ~@3 c4 ~@124]/8",
  O: "~ eb3@2 g3@2 bb3@4 g3@4 eb4@4 bb3@4 g3@4 eb3@2 ~@2 eb3@3",
  P: "~ eb3@2 g3@2 bb3@4 g3@4 eb4@4 bb3@4 g3@4 eb3@4 ~@3", Q: "~ ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@3 gb3@4",
  R: "gb3 bb3 db4@2 bb3@2 gb4@2 db4@2 bb3@2 gb3@2 ab3@2", S: "ab3 c4 eb4@2 c4@2 ab4@2 eb4@2 c4@2 ab3@2 gb3@2",
  T: "gb3 bb3 db4@2 bb3@2 gb4@2 db4@2 bb3@2 eb3@2 ab3@2",
  U: "[ab3@2 c4@2 eb4@4 c4@4 ~@3 eb4@4 c4@4 ab3@4 gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 gb3@2 ~@2 e3@4 e3@2 ab3@2 b3@4 e4@4 eb3@4 eb3@2 g3@2 bb3@4 eb4@4 ab3@4 ab3@2 c4@2 eb4@4 ab4@4 f3@4 f3@2 ab3@2 c4@4 f4@4 db3@4 ~ f3@2 ab3@4 db4@4 eb3@4 eb3@2 g3@2 bb3@4 eb4@4 ab3@4 ab3@2, ~@12 ab4@6 ~@109 db3@2 ~@31]/5",
  V: "c4 eb4@2 c4@2 db3@2 db3 f3 ab3@2 f3@2 ab3@2 ab3", W: "c4 eb4@2 c4@2 ab4@2 eb4@2 c4@2 ab3@2 db3@2 db3",
  X: "[f3@2 ab3@4 f3@4 db4@4 ab3@4 f3@3 db3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 gb3@4 gb3@2 bb3@2 db4@4 bb3@4 gb4@4 db4@4 bb3@4 gb3@4 ab3@4 ab3@2 c4@2 eb4@4 c4@4 ab4@4 eb4@4 c4@4 ab3@4 db3@4 db3@2 f3@2 ab3@3 f3@4 db4@4 ab3@4 f3@4 db3@4 ab3@4 ab3@2 c4@2]/5",
  Y: "eb4@2 c4@2 ab4@2 eb4@2 c4@2 ab3@2 bb3@2 bb3 d4", Z: "f4@2 d4@2 bb4@2 f4@2 d4@2 bb3@2 eb3@2 eb3 g3",
  AA: "[bb3@4 g3@4 eb4@4 bb3@4 g3@4 eb3@2 ~ e3@4 e3@2 ab3@2 b3@4 ab3@4 e4@4 b3@4 ab3@4 e3@2 ~@2 e3@4 e3@2 ab3@2 b3@4 ab3@4 e4@4 b3@4 ab3@4 e3@4 ~@4 a3@2 db4@2 e4@4 db4@4 a4@4 e4@4 db4@4 a3@4 g3@4 g3@2 b3@2 d4@4 b3@4 ~@3 d4@4 b3@4 g3@4 ~@4 a3@2 db4@2 e4@4 db4@4 a4@4 e4@4 db4@4 a3@4 g3@4 g3@2 b3@2 d4@4 b3@4 g4@4 d4@4 b3@4 g3@4 ~@4 a3@2 db4@2 e4@4 db4@4 a4@4 e4@4 db4@4 a3@4 g3@4 ~ b3@2 d4@3, ~@135 g4@6 ~@109 g3@2 ~@4]/8",
  AB: "~ b3@4 g4@4 d4@4 b3@4 g3@4 ~@4 a3@2 db4@2 e4@3", AC: "~ db4@4 a4@4 e4@4 db4@4 a3@4 g3@4 g3@2 b3@2 d4@3",
  AD: "~ db4@4 a4@4 e4@4 ~@19",
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.3)

// bass · acoustic bass · "BASS"
const bass = note("<~@4 A@2 B C D E F@8 G H I J K L M N@8 O P@8 Q@8 R@8 S T S U V U W>".pickRestart({
  A: "[~@5 ab2@12 ab2@12 ab2@8 ab2@12 ab2@12 ab2@3]/2", B: "~ eb2@4 ab2@12 ab2@12 ab2@3",
  C: "~ eb2@4 gb2@11 gb2@12 gb2@4", D: "eb2 ab2@3 ab2@3 ab2", E: "eb2 gb2@3 gb2@3 gb2",
  F: "[eb2@4 ab2@12 ab2@12 ab2@3 eb2@4 gb2@12 gb2@12 gb2@8 e2@12 e2@4 eb2@12 eb2@4 ab2@12 ab2@4 f2@12 f2@4 db2@12 db2@3 eb2@4 eb2@4 f2@4 g2@4 ab2@12 ab2@12 ab2@4 eb2@4 gb2@12 gb2@12 gb2@4 eb2@4 ab2@12 ab2@12 ab2@4 eb2@2]/8",
  G: "~@2 gb2@11 gb2@12 gb2@4 eb2@3", H: "~ ab2@12 ab2@12 ab2@4 eb2@3", I: "~ gb2@12 gb2@12 gb2@7",
  J: "~ e2@12 e2@4 eb2@11 eb2@4", K: "ab2@3 ab2 f2@3 f2", L: "db2@3 db2 eb2!2 f2 g2", M: "ab2@3 ab2 db2@3 db2",
  N: "[ab2@11 eb2@4 ab2@4 gb2@4 f2@4 eb2@4 db2@12 db2@4 db2@16 ab1@12 ab1@4 ab1@16 gb1@12 gb1@4 gb1@15 ab1@12 ab1@4 ab1@16 db2@12 db2@4 db2@16 ab1@12 ab1@4 ab1@16 bb1@12 bb1@19 eb2@3]/8",
  O: "~@9 eb2@8 eb2@4 g2@4 bb2@4 eb3@3",
  P: "[~ eb3@4 db3@4 db3@4 c3@4 c3@4 bb2@4 bb2@4 ab2@12 ab2@12 ab2@4 eb2@3 gb2@12 gb2@12 gb2@4 eb2@4 ab2@12 ab2@12 ab2@4 eb2@4 gb2@12 gb2@12 gb2@4 eb2@4 ab2@12 ab2@11 ab2@4 eb2@4 gb2@12 gb2@12 gb2@8 e2@12 e2@4 eb2@12 eb2@4 ab2@5]/8",
  Q: "[~@7 ab2@4 f2@12 f2@4 db2@11 db2@4 eb2@4 eb2@4 f2@4 g2@4 ab2@12 ab2@4 db2@12 db2@4 ab2@12 eb2@4 ab2@4 gb2@4 f2@4 eb2@4 db2@12 db2@4 db2@15 ab1@12 ab1@4 ab1@16 gb1@12 gb1@4 gb1@16 ab1@12 ab1@4 ab1@16 db2@7]/8",
  R: "[~@4 db2@4 db2@16 ab1@12 ab1@4 ab1@16 bb1@12 bb1@20 eb2@12 eb2@19 e2@12 e2@8 e2@4 ab2@4 b2@4 e3@4 e3@4 d3@4 d3@4 db3@4 db3@4 b2@4 b2@4 a2@12 a2@12 a2@4 e2@4 g2@12 g2@11 g2@4 e2@4 a2@10]/8",
  S: "~ a2@6 a2@2 e2@2 g2@5", T: "~ g2@6 g2@2 e2@2 a2@5", U: "~ g2@12 g2@4 e2@4 a2@11", V: "~ a2@12 a2@4 e2@4 g2@11",
  W: "~ a2@12 ~@19",
})).s("gm_acoustic_bass").gain(0.25).pan(0.2)

// other · timpani
const timpani = note("<A B C D E ~@20 F@7 G@2 H@7 I@2 J@3 K@2 L@2 M N O@2 P@2 Q R S T S U V U W>".pickRestart({
  A: "~@12 eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2]", // Eb
  B: "eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2]", // Eb
  C: "eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 eb1 [eb1,eb2] eb2 eb1 [eb1,eb2] eb2 eb1 eb2 [eb1,eb2] eb1 eb2 eb1 [eb1,eb2] eb2 eb1 eb2 eb1 eb2 [eb1,eb2] eb1", // Eb
  D: "eb2 eb1 eb2 eb1 eb2 eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 [eb1,eb2] eb1 [eb1,eb2]!2 eb2 [eb1,eb2] eb1 [eb1,eb2]", // Eb
  E: "eb2 [eb1,eb2] eb1 [eb1,eb2] eb2 eb1@8 ~@19", // Eb
  F: "[~@31 db3@8 ~@4 db3@4 ab2@12 ~@4 ab2@12 ~@20 gb2@8 ~@4 gb2@4 db2@8 ~@7 ab1@16 ~@16 db3@8 ~@4 db3@4 ab2@8 ~@8 ab2@8 ~@24 bb2@2]/7",
  G: "[~@13 f2@8 ~@8 eb3@11 ~@5 bb2@10 ~@6 eb3@3]/2",
  H: "[~ eb3@4 db3@4 db3@4 c3@4 c3@4 bb2@4 bb2@4 ~@28 db2@3 gb2@24 ~@8 ab2@28 db2@4 gb2@28 ~@4 ab2@27 db2@4 gb2@24 ~@8 e2@5, ~@29 ab2@32 ~@163]/7",
  I: "[~@11 eb2@12 ~@4 ab2@32 ~@5]/2", J: "[~@26 ab2@15 ~ f2@13 ~@3 ab2@29 ~@3 db3@6]/3",
  K: "[~@6 db3@4 ab2@12 ~@3 ab2@12 ~@20 gb2@7]/2", L: "[~@5 gb2@4 db2@8 ~@8 ab1@16 ~@16 db3@7]/2",
  M: "~ db3 ab2@2 ~@2 ab2@2", N: "~@3 bb2", O: "[~@8 f2@8 ~@8 eb3@11 ~@5 bb2@10 ~@5 e3@9]/2",
  P: "[~@7 b2@10 ~@6 e3@4 e3@4 d3@4 d3@4 db3@4 db3@4 b2@4 b2@4 a2@8 ~]/2", Q: "~@3 a2@4 a2@12 ~@4 g2@8 ~",
  R: "~@3 g2@4 g2@12 ~@3 a2@8 ~@2", S: "~ a2@2 a2@6 ~@2 g2@4 ~", T: "~ g2@2 g2@6 ~@2 a2@4 ~",
  U: "~ g2@4 g2@12 ~@4 a2@8 ~@3", V: "~ a2@4 a2@12 ~@4 g2@8 ~@3", W: "~ a2@4 a2@12 ~@15",
})).s("gm_timpani").gain(0.24).pan(0.7)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C D E@2 F G@2 H I J@2 K L M N O P@2 Q R S T U V@2 W X Y@2 Z AA AB AC AD AE@2 AF AG AH AI AJ AK@2 AL AM@3 AN
  AO@2 AP AQ AR@2 AS AT@2 AU ~
>`.pickRestart({
  A: "~@5 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", B: "~ x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  C: "~ x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2", D: "x ~@4 x ~@2 x ~@2 x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  E: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", F: "x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x",
  G: "~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", H: "~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~",
  I: "~@3 x ~@3 x ~ x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~", J: "~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x",
  K: "~@2 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@2",
  L: "~@2 x ~@2 x ~@2 x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", M: "~ x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  N: "~ x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3", O: "~ x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3",
  P: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", Q: "x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4",
  R: "x ~@2 x ~@2 x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", S: "~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  T: "~@3 x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x", U: "~@3 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3 x ~",
  V: "~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x", W: "~@2 x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~",
  X: "~@2 x ~ x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", Y: "~ x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  Z: "~ x ~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3", AA: "x ~@2 x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  AB: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", AC: "x ~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3",
  AD: "x ~ x ~ x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x", AE: "~ x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  AF: "~ x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~", AG: "~ x!2 ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~",
  AH: "x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x", AI: "x ~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~",
  AJ: "x ~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x ~ x", AK: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x",
  AL: "~ x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@3 x ~ x", AM: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  AN: "x ~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2 x!2", AO: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~ x",
  AP: "~@3 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@3 x ~ x ~ x", AQ: "~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@3 x ~@3 x ~ x ~ x ~",
  AR: "~ x ~ x ~ x ~ x ~ x ~ x ~ x!3", AS: "~@2 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x ~@2 x!2 ~@2",
  AT: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~ x ~@2", AU: "~ x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~ x ~ x ~@2",
})).gain(0.16).pan(0)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@20 B ~ B ~ C ~ C ~@2 D ~@10 E ~ F ~ F ~ G ~@3 H ~ I ~ I ~ J ~ J ~>".pickRestart({
  A: "~@5 x ~@26", B: "~@31 x", C: "~@15 x", D: "~@29 x ~@2", E: "~@13 x ~@2", F: "~@25 x ~@6", G: "~@3 x",
  H: "~@23 x ~@8", I: "~@11 x ~@4", J: "~@21 x ~@10",
})).gain(0.18).pan(0)

// drums · tambourine
const tambourine = s("tb").struct("<~@25 A B@2 C D@3 E F G ~@10 H I J@3 K L@2 M N O P Q R@2 S T@3 ~>".pickRestart({
  A: "~@31 x", B: "~@7 x ~@7 x ~@7 x ~@7 x", C: "~@7 x ~@7 x ~@7 x ~@6 x ~", D: "~@3 x ~@3 x ~@3 x ~@3 x",
  E: "~@6 x ~@6 x ~@7 x ~@7 x ~@2", F: "~@5 x ~@7 x ~@7 x ~@7 x ~@2", G: "~@5 x ~@7 x ~@7 x ~@10", H: "~@13 x ~@2",
  I: "~@2 x ~@7 x ~@7 x ~@6 x ~@6", J: "~ x ~@7 x ~@7 x ~@7 x ~@6", K: "~ x ~@6 x ~@7 x ~@7 x ~@7", L: "x!4",
  M: "x ~@7 x ~@7 x ~@6 x ~@7 x", N: "~@7 x ~@7 x ~@7 x ~@3 x ~@3 x", O: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x",
// … 8 more lines

More by Herb Alpert