Strudelify

Truckin

Grateful Dead

KeyE majorTempo124 bpm
0:00/0:00
// Truckin — Grateful Dead
// 124 bpm, 2/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 323 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/2)

// 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 guitar clean · "GUITAR 1"
const electric_guitar_clean = note(`<
  ~@2 A@4 B@8 C@4 D@4 E@4 D@4 F G@6 H@3 B@4 I@4 B@6 C@4 D@4 E@4 D@4 F G@6 H@3 B@4 I@4 B@6 C@4 D@4 E@4 D@4 B@8 J@4 K L@2
  M@2 N@2 K L@2 ~@11 F G@6 H@3 B@4 I@4 B@6 C@4 D@4 E@4 D@4 F G@6 H@3 B@4 I@4 B@6 C@4 D@4 E@4 D@4 F G@6 H@3 O@2 B@2 O@2
  B@2 O@2 B@2 P Q J@4 K L@2 M@2 N@2 K L@2 R@2 S T@4 U@4 B@8 C@4 D@4 E@4 D@4 F G@6 V@2 G@6 V@2 G@6 W X@2 ~
>`.pickRestart({
  A: "[e2,b2,e3]@3 [g#3,d4,e4]@2 [e2,b2,e3]@3 [g#3,d4,e4]@3 [e2,b2,e3]@2 [g#3,d4,e4]@3", // E5 E7 E5 E7 E5 E7
  B: "[[e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 [e3,g#3,b3]@3, ~@5 [e3,g#3,b3]@7 ~ [e3,g#3,b3]@6 ~@2 [e3,g#3,b3]@6 ~@5]/2", // E5 E
  C: "[[e2,b2,e3]@5 ~@8 [g#3,b3,e4]@8 ~@3 [g#3,b3,e4]@4 ~@4 [e2,b2,e3]@5 ~@8 [g#3,b3,e4]@8 ~@3 [g#3,b3,e4]@3 ~@2 [g#3,b3,e4]@3, ~@5 [g#3,b3,e4]@6 ~@18 [g#3,b3,e4]@7 ~ [g#3,b3,e4]@5 ~@22, ~@8 [e2,b2,e3]@12 ~ [e2,b2,e3]@10 ~@9 [e2,b2,e3]@12 ~ [e2,b2,e3]@11]/4", // E5 E E5 E E5
  D: "[[a2,e3,a3]@5 ~@8 [c#4,e4,a4]@8 ~@3 [c#4,e4,a4]@4 ~@4 [a2,e3,a3]@5 ~@8 [c#4,e4,a4]@8 ~@3 [c#4,e4,a4]@3 ~@2 [c#4,e4,a4]@3, ~@5 [c#4,e4,a4]@6 ~@18 [c#4,e4,a4]@7 ~ [c#4,e4,a4]@5 ~@22, ~@8 [a2,e3,a3]@12 ~ [a2,e3,a3]@10 ~@9 [a2,e3,a3]@12 ~ [a2,e3,a3]@11]/4", // A5 A A5 A A5
  E: "[[b2,f#3,b3]@5 ~@8 [d#4,f#4,b4]@8 ~@3 [d#4,f#4,b4]@4 ~@4 [b2,f#3,b3]@5 ~@8 [d#4,f#4,b4]@8 ~@3 [d#4,f#4,b4]@3 ~@2 [d#4,f#4,b4]@3, ~@5 [d#4,f#4,b4]@6 ~@18 [d#4,f#4,b4]@7 ~ [d#4,f#4,b4]@5 ~@22, ~@8 [b2,f#3,b3]@12 ~ [b2,f#3,b3]@10 ~@9 [b2,f#3,b3]@12 ~ [b2,f#3,b3]@11]/4", // B5 B B5 B B5
  F: "[e2,b2]@5 e2@3 [e2,c#3]@5 e2@3", // E5 C#m
  G: "[[e2,b2]@4 ~ [e2,e3]@3 [e2,g3]@3 ~@2 [e2,b3,e4]@8 e2@3 [e2,c#3]@5 e2@3, ~@11 g#3@11 ~@10]/2", // E5 E Em E5 C#m
  H: "[[e2,b2]@4 ~ [e2,e3]@3 [e2,g3]@3 ~@2 e2@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 [e3,g#3,b3]@3, ~@11 g#3@10 [e3,g#3,b3]@7 ~ [e3,g#3,b3]@6 ~@2 [e3,g#3,b3]@6 ~@5, ~@13 [b3,e4]@9 ~@26]/3", // E5 E Em E5 E E5
  I: "[[e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 [g#3,b3]@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 ~@3 [e2,b2]@5 [e3,g#3,b3]@3, ~@5 [e3,g#3,b3]@7 ~ [e3,g#3,b3]@6 ~@2 [e3,g#3,b3]@6 ~@2 e3@8 [e3,g#3,b3]@7 ~ [e3,g#3,b3]@6 ~@2 [e3,g#3,b3]@6 ~@5]/4", // E5 G#m E5 E
  J: "[[a3,e4,a4]@7 ~ [a3,e4,a4]@5 ~@3 [a3,e4,a4]@5 ~@3 [a3,e4,a4]@5 ~@3 [a3,e4,a4]@7 ~ [a3,e4,a4]@5 ~@3 [a3,e4,a4]@12 ~@4, [a2,e3]@12 ~ [a2,e3]@6 ~@2 [a2,e3]@7 ~ [a2,e3]@14 ~@2 [a2,e3]@15 ~@4]/4", // A5
  K: "[g2,d3,g3,d4,g4]@12 ~ [e2,e3]@3", L: "[[f#2,f#3]@4 ~ [e2,e3]@3 [f#2,f#3]@5 [a2,e3,a3,e4,a4]@14 ~@5]/2",
  M: "[[a3,e4,a4]@7 ~ [a3,e4,a4]@5 ~@3 [a3,e4,a4]@5 ~@3 [a3,e4,a4]@5 [d3,a3]@3, [a2,e3]@12 ~ [a2,e3]@6 ~@2 [a2,e3]@7 ~@4]/2", // A5 D5 A5
  N: "[[d3,a3,d4,f#4]@8 [d3,a3,d4,f#4]@5 a3@3 [a3,e4,a4]@12 ~@4, ~@13 d3@15 ~@4]/2", // D A5
  O: "[[e2,b2]@5 ~@3 [e2,c#3]@5 ~@3 [e2,b2]@5 ~@3 [e2,c#3]@5 [e3,g#3,b3]@3, ~@5 [e3,g#3,b3]@7 ~ [e3,g#3,b3]@6 ~@2 [e3,g#3,b3]@6 ~@5]/2", // E5 C#m E5 C#m E
  P: "[e2,e3]@4 ~ [e2,b2]@5 ~ [f2,c3]@5", Q: "[f#2,c#3]@5 [g2,d3]@5 ~ [g#2,d#3]@4 ~",
  R: "[[d3,a3,d4,f#4]@6 ~@2 [d3,a3,d4,f#4]@5 ~@3 [a3,d4,f#4]@7 ~ [d3,a3,d4,f#4]@6 ~@2, ~@13 d3@10 ~@9]/2", // D
  S: "[b2,f#3,b3,d#4]@5 ~@3 [b2,f#3,b3,d#4]@6 ~@2", // B
  T: "[[a#3,c#4,f#4]@5 ~@3 [a#3,c#4,f#4]@5 ~@3 [a#3,c#4,f#4]@6 ~@2 [a#3,c#4,f#4]@5 ~@3 [b3,c#4,f#4]@5 ~@3 [b3,c#4,f#4]@5 ~@3 [a#3,c#4,f#4]@7 ~ [f#2,c#3,f#3,a#3,c#4,f#4]@6 ~@2, [f#2,c#3,f#3]@12 ~ [f#2,c#3,f#3]@14 ~@2 [f#2,c#3,f#3]@6 ~@2 [f#2,c#3,f#3]@6 ~@2 [f#2,c#3,f#3]@9 ~@10]/4", // F# Bsus2 F# F#5
  U: "[[e3,a3,e4,a4]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 ~@3 [a2,e3]@5 [a3,c#4,e4]@3, ~@5 [a3,c#4,e4]@7 ~ [a3,c#4,e4]@7 ~ a3@23 ~ [a3,c#4,e4]@7 ~ [a3,c#4,e4]@6 ~@5, ~@21 [c#4,e4]@7 ~ [c#4,e4]@7 ~ [c#4,e4]@6 ~@21]/4", // A5 A C#m
  V: "[[e2,b2]@4 ~ [e2,e3]@3 [e2,g3]@3 ~@2 e2@3 [e2,b2]@5 e2@3 [e2,c#3]@5 e2@3, ~@11 g#3@11 ~@10, ~@13 [b3,e4]@9 ~@10]/2", // E5 E Em E5 C#m E5
  W: "[e2,b2]@4 ~ [e2,e3]@3 [e2,g3]@3 ~@2 [e2,b3,e4]@3, ~@11 g#3@5", X: "[e2,b2,e3,g#3,b3,d4]/2",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.6)

// chords · electric guitar clean · "GUITAR 2"
const electric_guitar_clean_2 = note(`<
  ~@3 A@2 B C@12 D@4 E@4 D@4 F G F G F G F G F G F G F G F G F G F G F G F G C@4 D@4 E@4 D@4 F G F G F G F G F G F G F G
  F G F G F G F G F G C@4 D@4 E@4 D@4 H@6 I J K@3 L M N@2 O@3 P M Q@2 R@2 S T U@3 V@4 F G F G F G F G F G F G F G F G F
  G F G F G F G C@4 D@4 E@4 D@4 F G F G F G F G F G F G F G F G F G F G F G F G C@4 D@4 E@4 D@4 F G F G F G F G F G F G
  F G F G F G F G F G W X K@3 L M N@2 O@3 P M Q@2 R@2 S T U@3 V@4 Y C@11 D@4 E@4 D@4 F G F G F G F G F G F G F G F G F G
  F G F G F G Z@2 ~
>`.pickRestart({
  A: "d#3@3 e3@2 e3@3 e3@3 e3@2 e3@3", B: "e3@3 d3@2 b2@3 a2@3 g2@2 e2@3", C: "[e2,b2]@5 e2@3 [e2,c#3]@5 e2@3",
  D: "[a2,e3]@5 a2@3 [a2,f#3]@5 a2@3", E: "[b2,f#3]@5 b2@3 [b2,g#3]@5 b2@3",
  F: "e2@3 ~@5 g#2@3 b2@2 d3@3, ~@5 e2@5 ~@6", G: "e3@3 ~@2 e3@3 d3@3 c#3@2 b2@3",
  H: "[~@5 e2@3 b2@3 c#3@2 b2@5 ~@3 e2@3 b2@3 c#3@2 e3@3]/2", I: "~@5 a#2@3 b2@5 d3@3",
  J: "a#2@3 a2@2 g2@3 a2@3 g2@2 e2@3",
  K: "[[e3,a3]@7 ~ [e3,a3]@5 ~@3 [e3,a3]@8 [a2,e3,a3]@5 ~@3 [e3,a3]@7 ~ [a2,e3,a3]@5 e2@3, a2@11 ~@2 a2@8 ~@8 a2@8 ~@11]/3", // A5
  L: "a2@13 e2@3", M: "g2@13 e2@3", N: "[f#2@5 e2@3 f#2@5 a2@8 a2@3 e2@8]/2",
  O: "[[e3,a3]@7 ~ [e3,a3]@5 ~@3 [e3,a3]@8 [a2,e3,a3]@5 ~@3 [d3,a3,d4]@7 ~ [d3,a3,d4]@7 ~, a2@11 ~@2 a2@8 ~@8 a2@8 ~@11]/3", // A5 D5
  P: "[a2,e3,a3]@8 e2@5 a2@3", Q: "[f#2@5 e2@3 f#2@5 a2@11 e2@5 ~@3]/2",
  R: "[[d3,a3,d4]@7 ~ [a3,d4]@5 ~@3 [a3,d4]@7 ~ [d3,a3,d4]@7 ~, ~@8 d3@3 ~@2 d3@8 ~@11]/2", // D5
  S: "[b2,f#3,b3]@7 ~ [b2,f#3,b3]@7 ~", T: "[f#2,c#3,f#3]@7 ~ [f#2,c#3,f#3]@4 ~ f#2@3",
  U: "[[f#2,c#3,f#3]@7 ~ [f#2,c#3,f#3]@4 ~@4 [b2,f#3,b3]@5 [a#2,a#3]@3 [b2,f#3,b3]@5 [a#2,a#3]@3 [c#3,f#3]@8 [f#2,c#3,f#3]@5 ~@3, ~@13 f#2@5 ~@3 f#2@8 f#2@11 ~@8]/3", // F#5 B5 A# B5 A# F#5
  V: "[[a2,e3,a3]@7 ~ [a2,e3,a3]@5 ~@3 [e3,a3]@5 ~@3 [e3,a3]@5 ~@3 [e3,a3]@8 [e3,a3]@8 [e3,a3]@5 ~@3 [e3,a3]@5 a2@3, ~@13 a2@7 ~ a2@7 ~ a2@8 ~@3 a2@13 a2@8 ~@3]/4", // A5
  W: "[e2,e3]@4 ~ [e2,b2]@5 ~ [f2,c3]@5", X: "[f#2,c#3]@5 [g2,d3]@5 ~ [g#2,d#3]@4 ~",
  Y: "e2@3 ~@2 e2@3 [e2,c#3]@5 e2@3", Z: "[e2,b2,e3,b3,d4]/2",
})).s("gm_electric_guitar_clean").gain(0.44).pan(0.4)

// chords · rock organ · "ORGAN 1"
const rock_organ = note(`<
  ~@2 A@4 B@10 C@2 D@2 E@2 F@2 G@2 D@2 E@2 B@26 C@2 D@2 E@2 F@2 G@2 D@2 E@2 B@26 C@2 D@2 E@2 F@2 G@2 D@2 E@2 B@8 H@4 I
  J@2 K@2 L@2 I J@2 M@2 N O@4 P@4 B@26 C@2 D@2 E@2 F@2 G@2 D@2 E@2 B@26 C@2 D@2 E@2 F@2 G@2 D@2 E@2 B@21 Q@2 R S@4 I J@2
  K@2 L@2 I J@2 M@2 N O@4 P@4 B@10 C@2 D@2 E@2 F@2 G@2 D@2 E@2 ~@27
>`.pickRestart({
  A: "[~@57 f#6@3 [c#6,d#6,f6] d6 [f5,g5,g#5,a5,b5,c6] [c5,d5,e5], [g#5,b5,d6,e6,g6]@30 a#5 ~]/4", // C# F C E7
  B: "[e4,g#4,b4]@5 ~@3 [a4,c#5]@5 e4@3, ~@5 e4@7 ~@4", // E A
  C: "[[e4,g#4,b4]@5 g#4@3 [a4,c#5]@5 [e4,g#4,b4]@7 ~ e4@3 [e4,a4,c#5]@5 e4@3, ~@5 e4@7 ~@20]/2", // E A E A
  D: "[a4,c#5,e5]@5 ~@3 [d5,f#5]@5 a4@3, ~@5 a4@7 ~@4", // A D
  E: "[[a4,c#5,e5]@5 c#5@3 [d5,f#5]@5 [a4,c#5,e5]@7 ~ a4@3 [a4,d5,f#5]@5 a4@3, ~@5 a4@7 ~@20]/2", // A D A D
  F: "[b4,d#5,f#5]@5 ~@3 [e5,g#5]@5 b4@3, ~@5 b4@7 ~@4", // B E
  G: "[[b4,d#5,f#5]@5 d#5@3 [e5,g#5]@5 [b4,d#5,f#5]@7 ~ b4@3 [b4,e5,g#5]@5 b4@3, ~@5 b4@7 ~@20]/2", // B E B E
  H: "[[a4,e5,a5]@7 ~ [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 ~@3 [a4,e5,a5]@7 ~ [a4,e5,a5]@5 ~@3 [a4,e5,a5]@12 ~@4, a3@12 ~ [a3,e4]@6 ~@2 [a3,e4]@7 ~ [a3,e4]@14 ~@2 [a3,e4]@15 ~@4, e4 ~@15]/4", // A5
  I: "[g3,d4,g4,d5,g5]@13 [e3,e4]@3", J: "[[f#3,f#4]@4 ~ [e3,e4]@3 [f#3,f#4]@5 [a3,e4,a4,e5,a5]@14 ~@5]/2",
  K: "[[a4,e5,a5]@7 ~ [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 [d4,a4]@3, [a3,e4]@12 ~ [a3,e4]@6 ~@2 [a3,e4]@7 ~@4]/2", // A5 D5 A5
  L: "[[d4,a4,d5,f#5]@8 [d4,a4,d5,f#5]@5 a4@3 [a4,e5,a5]@12 ~@4, ~@13 d4@15 ~@4]/2", // D A5
  M: "[[d5,a5,d6,f#6]@6 ~@2 [d5,a5,d6,f#6]@5 ~@3 [a5,d6,f#6]@7 ~ [d5,a5,d6,f#6]@6 ~@2, ~@13 d5@10 ~@9]/2", // D
  N: "[b4,f#5,b5,d#6]@3 ~ [b4,f#5,b5,d#6]@3 ~", O: "[f#5,a#5,c#6,f#6]/4",
  P: "[[a4,c#5,e5,a5]@56 [b4,c5]@2 [g4,a4] [e4,f4] [b3,c4,d4] [f3,g3,a3] [c3,d3,e3] [a2,b2], ~@56 d5 ~@7]/4", // A Cmaj7 Gsus2 Fmaj7 Bm F C Asus2
  Q: "[[e4,g#4,b4]@5 ~@3 [a4,c#5]@5 ~@3 [e5,e6]@4 ~ [e5,b5]@5 ~ [f5,c6]@5, ~@5 e4@7 ~ e4@7 ~@12]/2", // E A E E5 F5
  R: "[f#5,c#6]@5 [g5,d6]@5 ~ [g#5,d#6]@4 ~", // F#5 G5 G#5
  S: "[[a4,e5,a5]@7 ~ [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 ~@3 [a4,e5,a5]@5 ~@3 [a4,e5,a5]@7 ~ [a4,e5,a5]@5 ~@3 [a4,e5,a5]@12 ~@4, a3@12 ~ [a3,e4]@6 ~@2 [a3,e4]@7 ~ [a3,e4]@14 ~@2 [a3,e4]@15 ~@4, e4 ~@63]/4", // A5
})).s("gm_rock_organ").gain(0.22)

// chords · rock organ · "ORGAN 2"
const rock_organ_2 = note("<~@78 A B C D E F G H I J C K L J M N O ~@201 P@24 Q@3>".pickRestart({
  A: "~@8 [b5,d6]@3 [b5,d6]@2 [b5,d6]@3", B: "[b5,d6]@3 [b5,d6]@2 [b5,d6]@3 [b5,d6]@3 [a5,c#6]@2 [g#5,b5]@3",
  C: "[e5,g#5]@5 [e5,g#5]@3 ~@8", D: "~@5 [b4,e5]@3 [e5,a5]@3 [e5,g5]@2 [b4,e5]@3", E: "~@5 e5@3 [b5,d6,e6,g6]@5 e5@3",
  F: "g6@3 e6@2 d6@3 e6@3 d6@2 b5@3", G: "[g#5,b5,d6,e6]@5 ~@11", H: "[b5,c#6]@3 [g#5,b5]@5 [b5,c#6]@3 [g#5,b5]@5",
  I: "[e5,g#5] ~@3", J: "~@8 [b5,d6]@3 [a5,c#6]@2 [g#5,b5]@3", K: "[e5,g#5]@3 [e5,g#5]@3 ~@2 [a5,c#6]@3 [g#5,b5]@4 ~",
  L: "[e5,g#5]@3 ~@13", // E
  M: "[e5,g#5,b5,d6,e6] ~@2 [e5,g#5,b5,d6,e6] ~ [e5,g#5,b5,d6,e6] ~@2 [e5,g#5,b5,d6,e6] ~@2 [e5,g#5,b5,d6,e6] ~ [e5,g#5,b5,d6,e6] ~@2", // E7
  N: "[e5,g#5,b5,d6,e6] ~@2 [e5,g#5,b5,d6,e6] ~ [e5,g#5,b5,d6,e6] ~@4 c6@2 [e5,f5,g5,a5] [c5,d5] [f4,g4,a4,b4] [c4,d4,e4], ~@2 [e5,g#5,b5,d6,e6] ~", // E7 Fmaj7 Csus2 G7 C E7
  O: "b3 ~@15",
  P: "[e4@3 e5@2 e4@3 [e5,g#5,d6,e6,g6]@3 ~@2 [e5,g#5,d6,e6,g6]@8 [e4,e5]@3 [g#5,d6,e6,g6]@3 [e4,e5]@2 [g#5,d6]@3, ~@13 f#6 ~@15 [e6,g6] ~@2]/2", // E7 E E7 E G#dim Em
  Q: "[[e5,g#5,b5,d6,e6]@30 c6 a5 f5 [b4,c5,d5,e5] [f4,g4,a4] [b3,c4,d4,e4] a3 ~@11, ~@31 g5@2 ~@15]/3", // E7 Cmaj7 F Cmaj7
})).s("gm_rock_organ").gain(0.28).pan(0.4)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~@2 A@2 B C D E D E D E D E F@2 G H I J K L M N O P I J K Q R@22 S T F@2 G H I J K L M N O P I J K Q R@22 S T F@2 G H
  I J K L M N O P I J K Q U V W X W X Y Z AA AB AC AD AE AF@2 AG AH AI AJ AE AF@2 AK AI AL AM@3 AN AH@2 AO AP R@20 AQ AR
  AS AT F@2 G H I J K L M N O P I J K Q R@20 AQ AU AV AW F@2 G H I J K L M N O P I J K Q R@22 AX AY AA AB AC AD AE AF@2
  AG AH AI AJ AE AF@2 AK AI AL AM@3 AN AH@2 AO AP AZ@2 BA BB AZ@2 BA BB F@2 G H I J K L M N O P I J K Q W BC W BC W BC W
  BC W BC BD BE W BC BD BE R@4 AQ AU BF BG BH@2 ~
>`.pickRestart({
  A: "e3@3 e3@2 e3@3 e3@3 e3@2 e3@3", B: "e3@3 e3@2 e3@3 a#2@3 b2@2 b2@3", C: "a#2@3 b2@2 b2@3 a2@3 g2@2 e2@3",
  D: "e2@4 ~ e2@3 g#1@4 ~ g#1@3", E: "b1@4 ~ b1@3 c#2@5 b1@3", F: "e2@4 ~ e2@3 e2@4 ~ e2@3",
  G: "e2@4 ~ e2@3 e1@4 ~ e1@3", H: "f#1@4 ~ f#1@3 g1@5 g#1@3", I: "a1@4 ~ a1@3 c#2@4 ~ c#2@3",
  J: "e2@4 ~ e2@3 f#2@5 e2@3", K: "a2@4 ~ a2@3 c#2@4 ~ c#2@3", L: "e2@4 ~ e2@3 c#2@5 c2@3",
  M: "b1@4 ~ b1@3 d#2@4 ~ d#2@3", N: "f#2@4 ~ f#2@3 g#2@5 f#2@3", O: "b2@4 ~ b2@3 g#2@4 ~ g#2@3",
  P: "f#2@4 ~ f#2@3 d#2@5 b1@3", Q: "e2@4 ~ e2@3 c#2@5 b1@3", R: "[e2@4 ~ e2@3 a#2@3 b2@2 d3@8 b2@3 g2@3 g#2@2 b2@3]/2",
  S: "e2@4 ~ e2@3 c#2@4 ~ c#2@3", T: "b1@4 ~ b1@3 g1@3 g#1@2 b1@3", U: "e2@4 ~ e2@3 b1@8", V: "c#2@8 b1@5 b1@3",
  W: "e2 g#2", X: "b2@8 c#3@5 b2@3", Y: "e2@4 ~ e2@3 d2@4 ~ d2@3", Z: "c#2@4 ~ c#2@3 b1@4 ~ b1@3",
  AA: "a1@8 a1@4 ~ e1@3", AB: "a1@4 ~ a1@3 a1@4 ~ e1@3", AC: "a1@8 a1@4 ~ e2@3", AD: "a2@13 e2@3", AE: "g2@13 e2@3",
  AF: "[f#2@5 e2@3 f#2@5 a2@8 ~@3 e2@8]/2", AG: "a1!2", AH: "a1@8 a1@5 a1@3", AI: "d2!2", AJ: "a1@8 e2@5 a2@3",
  AK: "d2@8 d2@5 d2@3", AL: "b1@8 b1@5 b1@3", AM: "f#2@8 f#2@5 c#2@3", AN: "f#2@8 f#2@5 f#1@3", AO: "a1 c#2",
  AP: "d2 d#2", AQ: "e2@4 ~ e2@3 a#2@3 b2@2 d3@3", AR: "f#3 e3", AS: "d3 c#3", AT: "b2@5 b2@3 g2@3 g#2@2 b2@3",
  AU: "a#2@3 b2@2 d3@3 a#2@3 b2@2 d3@3", AV: "a2@4 ~ a2@3 g2@4 ~ g2@3", AW: "e2@4 ~ b1@3 c#2@5 b1@3",
  AX: "e2@5 e1@5 ~ f1@5", AY: "f#1@5 g1@5 ~ g#1@5", AZ: "e2@8 e2@5 b1@3", BA: "e2 g#1", BB: "a1@8 a#1@5 b1@3",
  BC: "b2@8 c#3@5 b1@3", BD: "e2@4 ~ e2@3 g2@3 g#2@2 b2@3", BE: "e3@4 ~ e3@3 c#3@5 b2@3", BF: "e3@4 ~ e3@3 d3@4 ~ d3@3",
  BG: "b2@4 ~ b2@3 g2@3 g#2@2 b2@3", BH: "e1/2",
})).s("gm_electric_bass_finger").gain(0.58)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@4 C@3 D C@3 E D@2 F G D@3 C@2 G@2 E D F B@2 C@3 F C@3 E C F@2 G C@3 F C@3 F C@2 H A C F@2 C@4 F C G@2 F D F B@2
  C@3 F C@3 E F G C@8 F G C@3 F C F@2 I C@7 A D G D F C@3 F C@3 E C G F@3 C ~ F C F@3 C ~ F@3 E F@3 A@2 E@2 F@6 B F C
  F@2 C F@3 C F@3 C F@4 D F@3 C@3 F C G A F D F B@2 C@3 F C@3 E C@2 F C@4 F C@3 F C@2 F A C F@10 C E@2 B F C@3 F C@3 E C
  F@2 C F@3 C F@3 C F@2 J ~ C G F@3 C ~ C G F@3 C ~ F@5 B F G ~ F@2 C@3 D C@3 E C F@2 I C@7 A D G D K F@16 C@3 A D G D K
  F ~ L
>`.pickRestart({
  A: "~@5 x ~@10", B: "x!2", C: "x ~@12 x ~@2", D: "x ~@4 x ~@7 x ~@2", E: "x ~@4 x ~@10", F: "x", G: "~@5 x ~@7 x ~@2",
  H: "~ x", I: "~@13 x ~@2", J: "x ~@10 x ~@4", K: "~@3 x ~ x ~@10", L: "~ x ~@14",
})).gain(0.64)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@6 A@3 ~ A@3 ~@3 A ~@4 A@2 ~@4 A ~ B A@7 ~ A@3 ~ A@10 ~@2 A@9 ~@2 C D A ~ B A@7 ~ A ~ A@9 ~ A@15 E ~@4 A@7 ~ A ~ A@5
  ~ A@9 ~ A@2 ~@5 A@6 ~@2 A@16 ~ A@8 ~@2 C D A ~ B A@7 ~ A@14 ~@2 A@3 C A@3 C@2 A@3 ~@3 B A@7 ~ A@14 ~@2 A ~ A@6 ~ A@10
  ~@6 A@3 ~ A@3 ~ A@11 E ~@4 A@19 E ~@7
>`.pickRestart({
  A: "~@5 x ~@10", B: "~@9 x ~@6", C: "~@5 x ~@7 x ~@2", D: "~@3 x ~@12", E: "~@11 x ~@4",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct("<~@5 [~@13 x ~@2] ~@315 [~@15 x] x>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C ~ D E ~@32 F G@14 H ~@24 F I G@9 I G@3 H ~@57 F G@2 J G@3 J G@3 J G@4 ~@24 F G@15 ~@24 F G@2 J G@3 J G@3 J G@2 K
  L ~@76
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "~@11 x ~ x ~@2", E: "~@3 x ~ x ~@10",
  F: "~@5 x ~@2 x ~@4 x ~@2", G: "x ~@4 x ~@2 x ~@4 x ~@2", H: "x ~@4 x ~@2 x ~@2 x ~ x ~@2",
  I: "x ~@2 x ~ x ~@2 x ~@4 x ~@2", J: "x ~@4 x ~@7 x ~@2", K: "~@3 x ~@9 x ~@2", L: "~ x",
})).gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 [~@11 x ~@4] ~@315 [~@7 x] ~>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A B C ~@32 D ~@39 D ~@72 D ~@39 D ~@39 D ~@13 E F ~@76>".pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", B: "x ~@2 x ~ x ~@2 x ~@7", C: "x!2", D: "x", E: "x ~@10 x ~@4",
  F: "~@5 x ~@10",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@7 A ~@15 A ~@23 A ~@15 A ~@23 A ~@15 A ~@7 A ~@2 A@2 B ~ A@2 ~ A@2 B ~ A ~@6 A ~@3 A ~@23 A ~@15 A ~@23 A ~@15
  A ~@21 C D A ~@2 A@2 B ~ A ~@2 A@2 B ~ A ~@2 A ~@3 A ~@3 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@2
>`.pickRestart({
  A: "x", B: "x ~@12 x ~@2", C: "~@5 x ~@10", D: "x ~@10 x ~@4",
})).gain(0.64)

// drums · ride
// … 13 more lines

More by Grateful Dead