Strudelify

1983... (A Merman I Should Turn to Be)

Jimi Hendrix

KeyA majorTempo69 bpm
0:00/0:00
// 1983... (A Merman I Should Turn to Be) — Jimi Hendrix
// 69 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "BASS" named as a bass, played on electric bass finger (its piano patch is not one); ch 3 "GUITAR 1" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 69 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(69/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 · electric bass finger · "BASS"
const electric_bass_finger = note("<~@9 A B C D E F ~@27 G H I@2 J K L M@5 ~@3 N@7 ~@5>".pickRestart({
  A: "d3", B: "c#3", C: "c3", D: "b2", E: "a#2", F: "a2", G: "~@40 [d4,f#4]@3 c#4@3 b3@2",
  H: "a3@3 [d4,f#4]@3 c#4@3 b3@3 a3@3 [d4,f#4]@3 c#4@3 b3@2 a3@3 [d4,f#4]@3 c#4@3 b3@3 a3@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@2 [g#3,b4]@2", // D A G#m F#m G#m
  I: "[~ [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@3 [g#3,b4]@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@2 [g#3,b4]@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@3 [g#3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@2 [g3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@3 [d3,b4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g#4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g#4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3]/2", // A G#m F#m G#m A G#m F#m G#m …
  J: "[f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [d4,g#4]@3 [c#4,f#4]@3 [b3,e4]@2 [a3,d4]@3 [d4,g#4]@3 [c#4,f#4]@2", // Fdim A5 G5 C5 Fdim A5 G5 C5 …
  K: "~ [b3,e4]@3 [a3,d4]@3 [d4,g#4]@2 [c#4,f#4]@3 [b3,e4]@3 [a3,d4]@3 [d4,g#4]@3 [c#4,f#4]@3 [b3,e4]@2 [d3,d4]@3 [a3,c#5]@3 [g3,b4]@3 [f#3,a4]@3 [g3,b4]@3 [a3,c#5]@2 [g3,b4]@3 [f#3,a4]@2", // E5 D5 Ddim F#5 E5 D5 Ddim F#5 …
  L: "~ [e3,b4]@3 [a3,c#5]@3 [f#3,b4]@3 [f#3,a4]@2 [g3,b4]@3 [a3,c#5]@3 [g3,b4]@3 [f#3,a4]@3 [g3,b4]@3 [c4,e5]@2 [b3,d5]@3 [a3,c5]@3 [g3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@2 [d3,b4]@2", // E5 A B5 F#m G A G F#m …
  M: "[~ [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@2 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@2 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@3 [f#4,a4]@3 [e4,g4]@2 [d4,f#4]@3 [c#4,g4]@3 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@2 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@3 [c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3 [g#3,b4]@3 [c#4,c#5]@3 [b3,b4]@3 [a3,a4]@3 [g#3,b4]@2 [c#4,c#5]@3 [b3,b4]@3 [a3,a4]@3 [g#3,b4]@3 [c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3 [g3,b4]@3 f5@3 e5@6 d5@3 c5@12 ~@12 a3@12 a3@6 b3@12 ~@14, ~@20 [g2,c3,e3,g3,c4]@3 [g2,d3,g3,b3,d4]@3 ~@4]/5", // C5 Fdim A5 G5 C5 Fdim A5 G5 …
  N: "[~ d3@3 c#3@3 c3@3 b2@3 a#2@3 a2@3 ~@2]/7",
})).s("gm_electric_bass_finger").gain(0.26)

// chords · electric guitar clean · "GUITAR 1"
const electric_guitar_clean = note(`<
  A B C D E F G H I J K L M N O P Q R S T J K L M N O P Q R S T U V W X Y@6 Z@2 AA AB@2 AC AD AE AF@5 ~@3 AG@5 AH@5 AI@2
>`.pickRestart({
  A: "~@3 [e4,a4], b4", B: "a3@2 e4@2 [e4,a4]@2 [e3,a3] c4 d4 e4 g#4 c5 g#4 c4 [d4,a4] ~",
  C: "[d3,a3]@2 [a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 a3 c4 e4@2 a3 g3@2 a3", // D5
  D: "a3@2 [e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4] [e3,a3] [g3,c4,g4] [f3,b3,f4] [g3,c4,g4] [f3,b3,f4] [g3,c4,g4,c5]@2 [f3,b3,f4,b4]@2", // A5 C5 Fdim C5 Fdim C5 Fdim
  E: "[d3,a3]@3 [d3,a3] d4 [d3,a3]!2 a2 d3 g3 a3 g2 [c3,c#5] [g3,e5] [c3,c#5]@2, a4@3 ~", // D5 C#maj7 C C#maj7
  F: "[a2,e3]@2 a2@2 a3@2 a2 e2 [g2,c3,g3,c4] [f#2,b2,f#3,b3] [g2,c3,g3,c4] [f#2,b2,f#3,b3] [g2,c3,g3,c4,c5]@2 [f#2,b2,f#3,b3,e5]@2, a4@4 a4 b4 ~@2", // A5 C5 B5 C5 B5 C5 Esus2
  G: "[a2,d3]@6 [g3,d4]@6 [g3,d4]@6 [a3,d4]@3 [d3,a3]@3 d3@3 g3@3 a3@3 a2@3 [c3,c5]@3 ~ d#5 ~ [a3,c5]@6, a4@12 ~ e3 ~@2", // D5 G5 D5 C Am
  H: "[a2,e3]@2 [a2,e3]@2 [e3,a3]@2 a2!2 [g2,c3,g3,c4] [f#2,b2,f#3,b3] [g2,c3,g3,c4] [f#2,b2,f#3,b3] [g2,c3,g3,c4,c5]@2 [f#2,b2,f#3,b3,b4]@2, a4@4 e5 d5 ~@2", // A5 C5 B5 C5 B5 C5 B5
  I: "[d3,a3,d4]@3 [d3,a3,d4] [d3,a3,d4]@2 d3!2 a4@2 [c#3,g#3,c#4]@4 ~@2, a4 ~", J: "[d3,a3]@2 f#4 a3 d3 a3 d4 d3",
  K: "~@3 e3@3 g#3@6 e4@2 f#4@2 e4@2 c#4@3 b3@3 b3@2 c#4@2 b3@2 c#3@3 [b2,f#3]@3 [c#3,g#3]@3 [b2,f#3,g#3]@3 [c#3,g#3,b3]@3 c#3@3, c#3 ~ c#3!2 ~ g#3 ~@2", // B5 C#5 G#m7 C#7
  L: "~ e3 g3@2 [c3,c4,e4,a4]@2 c3@2 a4 e4 c4 g3 c3@2 g3 [c3,c4], c3 ~@4 c3 ~@2", // Am C
  M: "c#3 d3 ~@2 [d4,e4] d4 [f#3,a3]!2 b2 f#3 [b2,f#3] [a2,e3] [b2,f#3,d5] [a2,e3,a4] [b2,f#3,g#4] [b2,b3], b2 [f#3,b3]@2 g3 ~ a3 ~@2", // Dsus2 F#m B5 A5 Bm A5 G#m7 B …
  N: "[g#3,a#3]@2 [b3,g4]@2 a#4@2 a#3@2 g#5 d5 a#4 f4 a#2@2 f3@2", // G#sus2 Em
  O: "[a2,e3,a3,d4]@4 ~ b2 c#3 e3 [a3,b3] a3 g#3 f#3 ~ d3 c#3 b2, ~@2 [a2,e3,a3,d4] a3 [e3,d4] [e3,a3,d4]!2 [a2,d3]", // Asus4 Asus2 Asus4 E7 Dsus2 D5
  P: "[a2,e3,a3] ~@2 a4!2 d5 ~ g#3, e2 ~@2 c5", // A5
  Q: "~@4 [a3,b3,e4]@4 [a2,c3] d3 e3 g3@2 c3@2 ~, [a2,e3,a3] ~@3, ~ a4@3 a4@4", // Asus2 Am A5
  R: "~@2 d5 c5 [d3,a3,d4]@2 e2 g2 a2 g2 a2@2 d3 c3@3, [d3,a3,d4] ~@3", // D5
  S: "a2@2 e3!2 [a3,b3,e4]@2 e3 a2!2 c3 d3 e3 g3 c4 g3@2", // Asus2
  T: "[d3,a3,d4,f#4]@3 [d3,a3,d4] [d3,a3,d4,f#4]@2 [d3,a3] [d3,a3,d4] ~@2 [c#3,g#3,c#4,e4]@4 ~@2", // D D5 D D5 C#m
  U: "[g3,d4,f#4]@2 d3@2 [a3,d4,f#4]@2 d3 [a3,d4,f#4]!3 d3!2 [a3,d4,f#4]!3 d3, ~@3 d5!2 ~@3", // Gmaj7 D
  V: "[a2,d3,a3]!4 [a2,d3,a3,c#4,e4]@2 [a2,d3,a3] [a2,d3,a3,c#4,e4] [a2,d3,a3,c#4,e4,a4]@2 [a2,d3,a3,c#4,e4] [a2,d3,a3] [a2,d3,a3,c#4,e4]!2 [a2,d3,a3]@2, ~ a4 ~@2", // D5 A D5 A D5 A D5
  W: "[c3,g3,c4,e4]@2 ~@2 [c3,e3,c4,e4,g4]@3 [g2,d3,g3,b3,d4] [g2,d3,g3,b3,d4]@2 ~@2 [g2,d3,g3,b3,d4,g4]@2 b4@2", // C G
  X: "[g2,d3,g3,b3,d4,d5]@6 ~@3 a4 g4 ~ f4@3 g4@6 [g2,d3,g3,b3,d4]@3 [g2,d3,g3,b3,d4,a4]@6 [g2,d3,g3,b3,d4]@6 [g2,d3,g3,b3,d4,a4]@6 ~@6, ~@2 [g2,d3,g3,b3,d4] ~@5", // G
  Y: "[~@3 d5@9 [d3,a3,d4,f#4,a4]@9 [d3,a3,d4,f#4,d5]@3 a4@6 d5@5 [d3,a3,d4,f#4,d5]@6 [d3,a3,d4,f#4,a4]@6 ~@6 d5@3 c#5@3 d5@3 c#5@3 d5@3 [a2,e3,a3,c#4,c#5]@3 d5@3 c#5@3 a4@6 a4@6 c5@6 [c3,g3,c4,g4,c5]@6 ~@5 [c3,g3,c4,g4,c5]@6 ~@6 [g2,d3,g3,b3]@6 ~@6 [g2,d3,g3,b3]@6 ~@6 [g2,d3,g3,b3]@6 ~@6 [g2,d3,g3,b3]@6 ~@6 [g2,d3,g3,b3]@6 [g2,d3,g3,b3]@5 [g2,d3,g3,b3]@6 [g2,d3,g3,b3]@6 [d3,a3]@6 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@6 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@5 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [a2,e3,a3,c#4,e4]@12 [g2,e3,a3,c#4,e4]@2 [g2,e3,a3,c#4,e4] [g2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@6 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@6 [a2,e3,a3,c#4,e4]@6 [a2,e3,a3,c#4,e4]@6 [c3,g3,c4,e4,g4]@5, [d3,a3,d4,f#4]@6 ~@18 [d3,a3,d4,f#4]@11 ~@12 [a2,d3,a3,c#4]@12 [a2,e3,a3,c#4]@6 ~@6 [a2,e3,a3,c#4]@12 [a2,e3,a3,c#4]@12 ~@193]/6", // D A C5 G D5 A A7 A …
  Z: "[[c3,e3,c4,e4,g4]@2 [c3,e3,c4,e4,g4]@2 [c3,e3,c4,e4,g4]@2 [c3,g3,c4,e4,g4]@6 [c3,g3,c4,e4,g4]@6 [g2,e3,g3,b3,d4]@6 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@5 [g2,d3,g3,b3,d4]@6 [g2,d3,g3,b3,d4]@6 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@6 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4] [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [g2,d3,g3,b3,d4]@2 [d4,f#4]@3 c#4@3 b3@2]/2", // C Em7 G D
  AA: "a3@3 [d4,f#4]@3 c#4@3 b3@3 a3@3 [d4,f#4]@3 c#4@3 b3@2 a3@3 [d4,f#4]@3 c#4@3 b3@3 a3@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@2 [g#3,b4]@2", // D A G#m F#m G#m
  AB: "[~ [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@3 [g#3,b4]@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@2 [g#3,b4]@3 [a3,c#5]@3 [g#3,b4]@3 [f#3,a4]@3 [g#3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@2 [g3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@3 [d3,b4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g#4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g#4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3]/2", // A G#m F#m G#m A G#m F#m G#m …
  AC: "[f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [d4,g#4]@3 [c#4,f#4]@3 [b3,e4]@2 [a3,d4]@3 [d4,g#4]@3 [c#4,f#4]@2", // Fdim A5 G5 C5 Fdim A5 G5 C5 …
  AD: "~ [b3,e4]@3 [a3,d4]@3 [d4,g#4]@2 [c#4,f#4]@3 [b3,e4]@3 [a3,d4]@3 [d4,g#4]@3 [c#4,f#4]@3 [b3,e4]@2 [d3,d4]@3 [a3,c#5]@3 [g3,b4]@3 [f#3,a4]@3 [g3,b4]@3 [a3,c#5]@2 [g3,b4]@3 [f#3,a4]@2", // E5 D5 Ddim F#5 E5 D5 Ddim F#5 …
  AE: "~ [e3,b4]@3 [a3,c#5]@3 [f#3,b4]@3 [f#3,a4]@2 [g3,b4]@3 [a3,c#5]@3 [g3,b4]@3 [f#3,a4]@3 [g3,b4]@3 [c4,e5]@2 [b3,d5]@3 [a3,c5]@3 [g3,b4]@3 [c4,e5]@3 [b3,d5]@3 [a3,c5]@2 [d3,b4]@2", // E5 A B5 F#m G A G F#m …
  AF: "[~ [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@2 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@2 [f3,b4]@3 [e3,a4]@3 [d3,g4]@3 [g3,c5]@3 [f3,b4]@3 [e3,a4]@2 [d3,g4]@3 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@3 [f#4,a4]@3 [e4,g4]@2 [d4,f#4]@3 [c#4,g4]@3 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@2 [f#4,a4]@3 [e4,g4]@3 [d4,f#4]@3 [c#4,g4]@3 [c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3 [g#3,b4]@3 [c#4,c#5]@3 [b3,b4]@3 [a3,a4]@3 [g#3,b4]@2 [c#4,c#5]@3 [b3,b4]@3 [a3,a4]@3 [g#3,b4]@3 [c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3 [g3,b4]@3 f5@3 e5@6 d5@3 c5@12 ~@12 a3@12 a3@6 b3@12 ~@14, ~@20 [g2,c3,e3,g3,c4]@3 [g2,d3,g3,b3,d4]@3 ~@4]/5", // C5 Fdim A5 G5 C5 Fdim A5 G5 …
  AG: "[~@16 [d3,a3]@12 f#4@6 a3@6 d3@6 a3@6 d4@6 d3@6 ~@3 e3@3 g#3@6 e4@2 f#4@2 e4@2 c#4@3 b3@3 b3@2 c#4@2 b3@2 c#3@3 [b2,f#3]@3 [c#3,g#3]@3 [b2,f#3,g#3]@3 [c#3,g#3,b3]@3 c#3@3 ~@3 e3@3 g3@6 [c3,c4,e4,a4]@6 c3@6 a4@3 e4@3 c4@3 g3@3 c3@6 g3@3 [c3,c4]@3 c#3@3 d3@3 ~@6 [d4,e4]@3 d4@3 [f#3,a3]@3 [f#3,a3]@3 b2@3 f#3@3 [b2,f#3]@3 [a2,e3]@3 [b2,f#3,d5]@3 [a2,e3,a4]@3 [b2,f#3,g#4]@3 [b2,b3]@3 [g#3,a#3]@6 [b3,g4]@6 a#4@6 a#3@6 g#5@3 d5@3 a#4@2, ~@32 c#3@3 ~@3 c#3@3 c#3@3 ~@3 g#3@3 ~@6 c3@3 ~@12 c3@3 ~@6 b2@3 [f#3,b3]@6 g3@3 ~@3 a3@3 ~@22]/5", // D5 B5 C#5 G#m7 C#7 Am C Dsus2 …
  AH: "[~ f4@3 a#2@6 f3@6 [a2,e3,a3,d4]@12 ~@3 b2@3 c#3@3 e3@3 [a3,b3]@3 a3@3 g#3@3 f#3@3 ~@3 d3@3 c#3@3 b2@3 [a2,e3,a3]@6 ~@12 a4@6 a4@6 d5@6 ~@6 g#3@6 ~@12 [a3,b3,e4]@12 [a2,c3]@3 d3@3 e3@3 g3@6 c3@6 ~@9 d5@3 c5@3 [d3,a3,d4]@6 e2@3 g2@3 a2@3 g2@3 a2@6 d3@3 c3@9 a2@6 e3@3 e3@3 [a3,b3,e4]@6 e3@3 a2@3 a2@3 c3@3 d3@2, ~@14 [a2,e3,a3,d4]@3 a3@3 [e3,d4]@3 [e3,a3,d4]@3 [e3,a3,d4]@3 [a2,d3]@3 e2@6 ~@12 c5@6 [a2,e3,a3]@6 ~@18 [d3,a3,d4]@6 ~@34, ~@59 a4@9 a4@12 ~@40]/5", // Asus4 Asus2 A5 Asus2 Am D5 Asus2 Asus4 …
  AI: "[~ e3@3 g3@3 c4@3 g3@6 [d3,a3,d4,f#4]@9 [d3,a3,d4]@3 [d3,a3,d4,f#4]@6 [d3,a3]@3 [d3,a3,d4]@3 ~@6 [c#3,g#3,c#4,e4]@12 ~@38]/2", // D D5 D D5 C#m
})).s("gm_electric_guitar_clean").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B C D E F G@3 H I J K L M E F G@3 H I J K L M N G O G P Q R S T U V W X Y Z AA AB AC AD AE AF AG@2 ~ AH AI AJ AK
  AL AM@2 AN AO ~ AP AQ AR ~
>`.pickRestart({
  A: "x!2", B: "~ x", C: "x ~@2 x ~@4 x ~@7", D: "x!2 ~@6", E: "x ~@2 x ~@4 x ~@3 x ~@3", F: "x!2 ~@2 x!2 ~@2",
  G: "x ~@3 x!3 ~", H: "x ~@3 x ~@3 x ~@2 x ~@4", I: "x", J: "~@12 x!2 ~@2", K: "x ~ x ~@5 x ~@4 x ~ x",
  L: "x ~@7 x ~@2 x ~@4", M: "x ~@2 x ~@12", N: "x!2 ~@2 x ~ x ~", O: "x ~ x!2", P: "x ~@23 x ~@8 x ~@13 x",
  Q: "~@11 x ~@11 x ~@5 x ~@17 x", R: "~@22 x ~@8 x ~@14 x ~", S: "~@10 x ~@11 x ~@5 x ~@16 x ~@2",
  T: "~@29 x ~@5 x ~@5 x ~@2 x ~@3", U: "~@28 x ~@5 x ~@5 x ~@2 x ~@4", V: "x ~@17 x ~@22 x ~@6",
  W: "~@25 x ~@5 x ~@5 x ~@2 x ~@7", X: "~@23 x ~@5 x ~@5 x ~@2 x ~@9", Y: "~@7 x ~ x ~ x!2 ~@3",
  Z: "~@19 x ~@5 x ~@5 x ~@2 x ~@7 x ~@5", AA: "~@3 x ~@12 x ~@7", AB: "~@15 x ~@5 x ~@4 x ~@2 x ~@18",
  AC: "~@12 x ~@5 x ~@5 x ~@2 x ~@4 x ~@15", AD: "~ x ~@22 x ~@7 x ~@11 x ~@3", AE: "~@7 x ~@8", AF: "~@19 x ~@28",
  AG: "~ x ~", AH: "~@4 x ~@2 x ~@32 x ~@7", AI: "~@7 x ~@5 x ~@2 x ~@8 x ~@22", AJ: "~@16 x ~@8 x ~@14 x ~@7",
  AK: "~@2 x ~@5 x ~@2 x ~@8 x ~@2 x", AL: "~@8 x ~@11 x ~@2 x", AM: "~@2 x ~@5 x ~@11 x ~@2 x",
  AN: "~ x ~@2 x ~@2 x ~@2 x ~", AO: "~ x ~@14 x ~@31", AP: "~@4 x ~@2 x ~@8 x ~@5 x ~@17 x ~@7",
  AQ: "~@7 x ~@5 x ~@2 x ~@23 x ~@7", AR: "~ x ~@14 x ~@8 x ~@22",
})).gain(0.41)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@5 A B@2 C ~ D E@3 ~@2 F ~ E G ~ D E@3 ~@2 F ~ E G ~ E@4 H I J K L M N O P Q R S T U V ~@3 W ~ X ~@2 Y Z@2 ~@2 W ~ Z
  X ~
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@5 x ~@2", C: "~@2 x ~@2 x ~@2", D: "~@3 x", E: "~ x ~@6", F: "x!2", G: "~ x",
  H: "~@35 x ~@12", I: "~@5 x ~@42", J: "~@11 x ~@4", K: "~@21 x ~@4 x ~@21", L: "~@19 x ~@5 x ~@22", M: "~@19 x ~@4",
  N: "~@17 x ~@4 x ~@25", O: "~@5 x ~ x ~@8", P: "~@13 x ~@5 x ~@28", Q: "~@11 x ~@5 x ~@30",
  R: "~@12 x!2 ~@3 x ~ x ~@3 x ~ x ~@3 x ~@18", S: "~@7 x ~@4 x ~@35", T: "~@2 x ~@2 x ~@18", U: "~@7 x ~@8",
  V: "~ x ~ x ~@3 x ~ x ~@3 x!2 ~@3 x ~@29", W: "~@2 x ~@2 x", X: "~@5 x", Y: "~@2 x ~@8 x ~@12", Z: "~@11 x ~@12",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C D E F G H I@3 J K L M N O G H I@3 J K L M N O H I@3 P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK
  AL AM AN@3 AO AP AI AQ AR AS AT
>`.pickRestart({
  A: "~@23 x", B: "x ~@5 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  C: "x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~ x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~",
  D: "x ~@5 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~",
  E: "~@6 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~",
  F: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~ x ~@17 x ~@5",
  G: "~@6 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~",
  H: "x ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~",
  I: "x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~",
  J: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~ x ~@5 x ~@5 x ~@5 x ~@2 x ~@2", K: "x", L: "~@2 x ~ x ~ x!7 ~@3",
  M: "x ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~ x ~@11",
  N: "x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~@7 x ~@5 x ~@5 x ~@2 x ~@2", O: "x!3 ~ x ~ x!3 ~@5 x ~",
  P: "x ~@5 x ~@5 x ~@5 x!2 ~ x!2 ~@7 x ~@4 x ~@5 x ~@2 x ~@2 x",
  Q: "~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~ x!3 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~ x",
  R: "~@5 x ~@4 x ~@5 x ~ x!2 ~ x ~@6 x ~@5 x ~@5 x ~@2 x ~@2 x ~",
  S: "~ x ~@2 x ~@2 x ~@2 x ~@5 x!2 ~ x!2 ~ x ~@2 x ~@2 x ~ x ~@2 x ~@5 x ~ x!2 ~ x ~@3", T: "~@9 x ~@8 x ~@13 x ~@15",
  U: "~@8 x ~@7 x ~@14 x ~@16", V: "~@6 x ~@8 x ~@11 x ~@4 x ~@2 x ~@12", W: "~@5 x ~@8 x ~@13 x ~@19",
  X: "~@3 x ~@8 x ~@13 x ~@21", Y: "~ x ~@8 x ~@13 x ~@22 x", Z: "~@4 x ~@6 x ~@12",
  AA: "~@9 x ~@5 x ~@4 x ~@5 x ~@16 x ~@4", AB: "~@4 x ~@13 x ~@22 x ~@6", AC: "~ x ~@13 x ~@22 x ~@7 x ~",
  AD: "~@10 x ~@4 x ~@2 x ~@28 x", AE: "~@4 x ~@5 x ~@5 x ~@16 x ~@4 x ~@2 x ~@2 x ~@3",
  AF: "~@2 x ~@2 x ~ x ~@5 x ~@16 x ~@5 x ~@2 x ~ x ~@5 x", AG: "~@2 x ~@2 x ~@4 x ~@17 x ~@5 x ~@2 x ~@2 x ~@5 x ~",
  AH: "~ x ~@2 x ~@5 x ~@5 x ~@31", AI: "~@22 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  AJ: "~ x ~@2 x ~@11 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@5 x ~",
  AK: "x!2 ~ x!2 ~@11 x ~@2 x ~@2 x ~@5 x ~@5 x ~@2 x ~@2 x ~@7",
  AL: "~@10 x ~@11 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  AM: "~ x ~@2 x ~@5 x ~ x!2 ~ x!2 ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  AN: "~ x ~@2 x ~@5 x ~ x!2 ~ x!2 ~@5 x ~@5 x ~@5 x ~ x!2 ~ x!2 ~@2 x ~@2 x ~",
  AO: "~ x ~@2 x ~@5 x ~ x!2 ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~ x!2 ~ x!2 ~@5 x ~",
  AP: "~@4 x ~@5 x ~@2 x ~@2 x ~@31", AQ: "~ x ~@2 x ~@11 x ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~",
  AR: "x!2 ~ x!2 ~@11 x ~@5 x ~@5 x ~@5 x ~ x!2 ~ x ~@6 x ~",
  AS: "~@4 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@5 x ~@2 x ~@2 x ~@7", AT: "~@5 x ~@18",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@50
  [~@27 x ~@5 x ~@4 x ~@2 x ~@2 x ~@3]
  [~@2 x ~@2 x ~ x ~@5 x ~@10 x ~@5 x ~@5 x ~@2 x ~ x ~@5 x]
  [~@2 x ~@2 x ~@4 x ~@11 x ~@5 x ~@5 x ~@2 x ~@2 x ~@5 x ~]
  [~ x ~@2 x ~@5 x ~@37]
  ~@15
>`).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@41 [~ x] ~@7 [~@7 x ~@40] ~@19>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~@5 x ~@2] ~@41 [~@11 x] [~@41 x ~@6] [~@5 x] ~@16>").gain(0.41)

// drums · ride
const ride = s("rd").struct(`<
  ~@8 A ~ B ~@5 C B ~ A ~ B ~@5 C B ~ A ~@5 D ~ E F G H I F J K L M N O P Q R ~ S ~ T U ~ V ~@4 S ~ V W U
>`.pickRestart({
  A: "~@2 x ~ x ~@2 x", B: "~@3 x", C: "x!2 ~@2", D: "~@35 x ~@12", E: "~@11 x ~@3 x",
  F: "~@3 x ~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@3", G: "~@2 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  H: "x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~ x ~@2 x ~@5 x ~@5 x", I: "~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@5 x ~",
  J: "~ x ~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@4 x", K: "~@5 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@4 x ~@2",
  L: "~@3 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@5 x ~@4 x ~@4", M: "~ x ~@5 x ~@4 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@4 x ~",
  N: "~@4 x ~@5 x ~@4 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x ~@3",
  O: "~ x ~@5 x ~@5 x ~ x ~@2 x ~@5 x ~@5 x ~@4 x ~@5 x ~@5 x", P: "~@4 x ~@5 x ~@5 x ~@4 x ~@26", Q: "~@19 x ~@28",
  R: "~ x ~", S: "~@4 x ~@2 x ~@4", T: "~ x ~@5 x ~@2 x ~", U: "~@5 x ~@18", V: "~ x ~@10", W: "~@7 x ~@2 x ~",
})).gain(0.2)

stack(electric_bass_finger, electric_guitar_clean, kick, kick_soft, snare, low_tom, hihat, open_hat, ride)

More by Jimi Hendrix