Strudelify

Summer Song

Joe Satriani

KeyA majorTempo160 bpm
0:00/0:00
// Summer Song — Joe Satriani
// 160 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "E. Guitar" guitar harmonics (copy of ch 1 "E. Guitar" guitar harmonics); ch 3 "E. Guitar" guitar harmonics (copy of ch 1 "E. Guitar" guitar harmonics); ch 5 "E. Guitar" distortion guitar (copy of ch 4 "E. Guitar" distortion guitar); ch 7 "Bass 1" slap bass 2 (copy of ch 8 "Bass 2" fretless bass)
// note: Full arrangement: all 197 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · distortion guitar · "E. Guitar"
const distortion_guitar = note(`<
  A@8 B@8 C@8 D@5 E@3 F@8 G@8 H I J I J I K@2 L I J I J I K@2 L I M@3 N O@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 R@8 S T U T V W
  X Y Z@8 D@5 AA@4 I J I J I K@2 L I J I J I K@2 L I M@3 N M@3 AB@2 AC AD AC AD AC AD AC AE@8 B@8 C@8 AF@8 AG@8 AH@5
>`.pickRestart({
  A: "[~@7 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  B: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  C: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] e2 g2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  D: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 b2 [b2,f#3,b3]]/5", // A5 D A5 B5
  E: "[~ [b2,f#3,b3] b2!2 [b2,f#3,b3] b2!2 [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4] g2!2 [g2,d3,g3,d4,g4] a2 e2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4] e2 g2 [a2,e3,a3,c#4]]/3", // B5 G5 A
  F: "[~ [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4] e2 g2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A A5 D A5 D A5
  G: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 b2 [b2,f#3,b3,d4]@2 [b2,f#3,b3] b2!2 [b2,f#3,b3,d4] b2!2 [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4] g2!2 [g2,d3,g3,d4,g4] a2 e2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4] e2 g2 [a2,e3,a3,c#4]]/8", // A5 D A5 Bm B5 Bm G5 A
  H: "~ [a2,e3,a3,c#4] a2!2 c3 a2 e2 g2", I: "g2@2 g2@2 a2 [a#2,b2] d3@2 d3@2 d3@2 e3 [f3,f#3] a3@2",
  J: "~ [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4]@2 e2 g2", // A
  K: "[~@2 [a2,e3,a3,c#4]@2 a2@2 [a2,e3,a3]@2 [a2,e3,a3,c#4]@4 e2@2 f2@4 f2@2 g2 [g#2,a2] c3@4 c3@2 d3 [d#3,e3] g3@2]/2", // A A5 A Amaj7 Emaj7
  L: "e2 ~ [g2,d3,g3,d4] g2 [g2,d3,g3,d4,g4]@3 g2", // G5
  M: "[a2 [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4] f#2@2 e2@3 [e2,b2,e3,b3,e4]@3 e2 f#2 g2@3 [g2,d3,g3,d4,g4]@4 g2 a2]/3", // A E5 G5
  N: "c3 a2 g2 [a2,e3,a3]@3 [a2,e3,a3]@2", O: "[~@7 g2@2 [g2,d3,g3] g2!6]/2",
  P: "[g2!4 a#2 g2 a#2 [c3,g3]@2 c3 [c3,a3] [c3,g3] [c3,g3,a#3,e4] [c3,g3,a#3,d4] c3!2]/2", // C5 F C5 C7 Gm
  Q: "[[c3,g3,a#3,e4] c3!2 [c3,g3,a#3,e4]@2 [c3,g3,a#3,e4] a#2 g2@2 [g2,d3,g3] g2!6]/2", // C7 G5
  R: "[[c3,g3,a#3,e4] c3!2 [c3,g3,a#3,e4]@2 [c3,g3,a#3,e4] e2 [f#2,e3,a3]@2 [e3,a3] f#2!3 [e3,a3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] f#2 e2 f#2 g2 g#2 [a2,g3,c4,e4]@2 [g3,c4,e4] a2!3 [g3,c4,e4] ~ [a2,e3,a3]@3 a2!3 g#2 g2 [f#2,e3,a3]@2 [e3,a3] f#2!3 [e3,a3] ~ [f#2,c#3,f#3]@2 [f#2,c#3,f#3] f#2 e2 f#2 g2 g#2 [a2,g3,c4,e4]@2 [g3,c4,e4] a2!3 [g3,c4,e4] ~ [a2,e3,a3]]/8", // C7 F#m7 A5 F#5 Am7 C A5 F#m7 …
  S: "a2!2 b2!2 c3!2 c#3!2", T: "[d3,a3]!2 [d3,b3] [d3,a3] [d3,a3,c4,f#4] [d3,a3] [d3,b3] d3",
  U: "[d3,a3,c4,f#4] d3 [d3,b3] [d3,a3,c4,f#4] f3 f#3 [d3,a3,c4,f#4] [d3,b3]", // D7 G D7 G
  V: "[d3,a3,c4,f#4] d3 [d3,b3] [d3,a3,c4,f#4]@2 [d3,a3,c4,f#4]!2 e2", // D7 G D7
  W: "[e3,b3]!2 [e3,c#4] [e3,b3] [e3,b3,d4,g#4]!2 [e3,c#4] [e3,b3]", // E5 C#m E5 E7 C#m E5
  X: "[e3,b3,d4,g#4] e3 [e3,c#4] [e3,b3,d4,g#4] g3 g#3 [e3,b3,d4,g#4] [e3,c#4]", Y: "e3 [e3,b3] e3!2 [e3,b3]!4",
  Z: "[[e3,b3]!7 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // E5 A5 D A5 D A5
  AA: "[~ [b2,f#3,b3] b2!2 [b2,f#3,b3] b2!2 [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4] g2!2 [g2,d3,g3,d4,g4] a2 e2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] a2!2 [a2,e3,a3,c#4] e2 g2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4] a2!2 c3 a2 e2 g2]/4", // B5 G5 A
  AB: "[c3 a2 g2 [a2,e3,a3,e4,a4]@13]/2", AC: "[a2,g3,b3,d4,a4]", AD: "[a2,a3,c#4,e4,a4]",
  AE: "[a2!7 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  AF: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] e2 g2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  AG: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]]/8", // A5 D A5 D A5
  AH: "[~ [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,f#3,a3,d4,f#4]@2 [a2,f#3,a3,d4,f#4] a2!2 [a2,f#3,a3,d4,f#4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4]@2 ~@7]/5", // A5 D A5
})).s("gm_distortion_guitar").gain(0.12).pan(0.3)

// bass · fretless bass · "Bass 2"
const bass = note(`<
  A@8 B@8 C@8 D@8 C@8 D@8 E F G F G F H@2 I F J F J F H@2 I K L@3 M N@2 O@2 P@2 O@2 P@2 O@2 P@2 O@2 Q@8 R S T S U V W X
  Y@8 D@8 E F G F G F H@2 I F G F G F H@2 I K L@3 M L@3 Z@2 AA@7 AB@8 B@8 C@8 AC@8 B@8 AD@4 ~
>`.pickRestart({
  A: "[~@7 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!7]/8",
  B: "[~ a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!7]/8",
  C: "[~ a1!4 e1 g1 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!7]/8",
  D: "[~ a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!5 b1 b1@2 b1!6 g1@2 g1!4 a1 e1 a1@2 a1!4 e1 g1 a1]/8",
  E: "~ a1!3 c2 a1 e1 g1", F: "g1@2 g1@2 a1 [a#1,b1] d2@2 d2@2 d2@2 e2 [f2,f#2] a2@2", G: "a1!4 a1@2 e1 g1",
  H: "[~@2 a1@2 a1@2 a1@2 a1@4 e1@2 f1@4 f1@2 g1 [g#1,a1] c2@4 c2@2 d2 [d#2,e2] g2@2]/2", I: "e1 ~ g1!2 g1@3 g1",
  J: "~ a1!3 a1@2 e1 g1", K: "g1@2 g1@2 a1 [a#1,b1] d2@2 d2@2 d2@2 ~@4",
  L: "[a1@2 a1@2 a1@2 a1@2 a1@2 f#1@4 e1@6 e1@6 e1@2 f#1@2 g1@6 g1@7 ~ g1@2 a1@2]/3", M: "c2 a1 g1 a1@3 a1@2",
  N: "[~@7 g1@2 g1!7]/2", O: "[g1!4 a#1 g1 a#1 c2@2 c2!7]/2", P: "[c2!3 c2@2 c2 a#1 g1@2 g1!7]/2",
  Q: "[c2!3 c2@2 c2 e1 f#1@2 ~ f#1!5 f#1@2 f#1!2 e1 f#1 g1 g#1 a1@2 ~ a1!5 a1@3 a1!3 g#1 g1 f#1@2 ~ f#1!5 f#1@2 f#1!2 e1 f#1 g1 g#1 a1@2 ~ a1!6]/8",
  R: "a1!2 b1!2 c2!2 c#2!2", S: "d2!8", T: "d2!4 f2 f#2 d2!2", U: "d2!3 d2@2 d2!2 e1", V: "e2!6 ~ e2",
  W: "e2!4 g2 g#2 e2!2", X: "e2!8", Y: "[e2!7 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!7]/8",
  Z: "[c2 a1 g1 a1@12 ~]/2", AA: "a1@15 ~",
  AB: "[a1!7 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!7]/8",
  AC: "[~ a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!4 e1 g1 a1]/8",
  AD: "[~ a1!6 a1@2 a1!6 a1@2 a1!6 a1@2 a1!6 ~]/4",
})).s("gm_fretless_bass").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~ [x ~@3 x!2 ~@2]!143 x!8 [x ~@3 x!2 ~@2]!44 ~>").gain(0.43)

// drums · snare
const snare = s("sd").struct("<A B@15 C B@31 C B@21 D B@15 E B@15 F B@41 ~@8 F G B@42 ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~ x!5 ~@2", E: "~@2 x!6", F: "~ x!3", G: "x!2 ~ x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@2 B@4 A B A B@2 A B@2 A B A B@2 A B A B@2 A B A B A@2 B@2 A B@2 A B A B A C B@2 A B A B@4 A B@2 A@2 B@2 A B@4 A B
  A B A B@3 A@48 B@2 A B@2 A@2 B@3 A B@2 A@2 B A B A B@3 A B A D@8 A@43 E ~
>`.pickRestart({
  A: "x!6 ~ x", B: "x!2 ~ x!3 ~ x", C: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~@2", D: "x!8", E: "x!6 ~@2",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct("<~@70 [~@7 x] x ~@125>").gain(0.71)

// drums · mid tom
const mid_tom = s("mt").struct("<~@70 [~@3 x] ~@126>").gain(0.71)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@2 B@4 A B A B@2 A B@2 A B A B@2 A B A B@2 A B A B A@2 B@2 A B@2 A B A B A@2 B@2 A B A B@4 A B@2 A@2 B@2 A B@4 A B
  A B A B@3 A@48 B@2 A B@2 A@2 B@3 A B@2 A@2 B A B A B@3 A B A ~@8 A@44 ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  A ~@16 B ~@15 B ~@15 B ~@3 B ~@3 B ~@3 B ~@5 C@2 D ~@16 E ~@16 B ~@15 B ~@3 B ~@3 B ~@3 B ~@5 C@2 D ~ C@2 D ~@9 B ~@43
>`.pickRestart({
  A: "~@15 x", B: "x", C: "~ x ~@2", D: "~@3 x", E: "~ x",
})).gain(0.57)

stack(distortion_guitar, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, crash)

More by Joe Satriani