Strudelify
KeyA majorTempo98 bpm
0:00/0:00
// Bitch — Meredith Brooks
// 98 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "Warm Guitar Strum" named as a guitar, played on electric guitar clean (its pad warm patch is not one); ch 3 "Guitar 2 (Intro)" named as a guitar, played on electric guitar clean (its electric bass pick patch is not one)
// note: duplicate parts dropped: ch 2 "Warm Guitar Strum" electric guitar clean (copy of ch 1 "Guitar 1 (Intro)" acoustic guitar steel); ch 3 "Guitar 2 (Intro)" electric guitar clean (copy of ch 1 "Guitar 1 (Intro)" acoustic guitar steel); ch 7 "Distorted Guitar 1" distortion guitar (copy of ch 6 "Overdriven Guitar 1" overdriven guitar)
// note: Full arrangement: all 103 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · acoustic guitar steel · "Guitar 1 (Intro)"
const acoustic_guitar_steel = note("<~@2 A@7 B@5 C@2 D@7 ~@7 C@2 D@7 ~@64>".pickRestart({
  A: "[~@16 e3@2 ~@22 [d3,e3]@3 ~@5 [d2,d3]@32 e3@2 ~@22 [d2,d3]@2 ~@6 [d2,d3]@32 e3@2 ~@22 [d2,d3,e3]@2 ~@6 [d2,d3]@32 [a1,a2]@16, ~ a1@4 [a1,a2]@2 ~@2 [a1,a2]@2 ~@3, ~@16 a2@32 ~@56 e3 ~ a3@32 ~@32 a3@32 ~@6 e3@2 ~@14, ~@5 e2 ~@7 e2 f#3@6 ~ e2 f#3@6]/7", // Dsus2 D Dsus2 D A
  B: "[~@8 [d2,d3]@2 ~@6 [d2,d3]@31 ~@2 c#4@30 ~@2 d#4@30 ~@2 d4@40 ~@7, ~@8 e2@8 f#3@2 ~@29 [f#1,f#2]@32 [b1,b2,f#3]@32 [d2,d3,f#3]@40 ~@9, ~@8 e3 ~ a3@32 ~@5 f#3@17 ~@96, ~@6 a3@4 b3@4 a3@5 ~]/5", // D F# B5 D
  C: "[e3 ~@11 [d2,d3] ~@3 [d2,d3,f#3]@16, [a1,a2] ~, ~@3 e2 ~@4, ~@24 e3 ~ a3@32 ~@6]/2", // D A
  D: "[e3@22 ~@2 [d2,d3]@2 ~@6 [d2,d3]@31 ~@2 f#4@30 ~@2 f#4@30 ~@2 f#4@30 ~@2 f#4@16 ~@14 [c#4,e4]@10 ~@23, [a1,a2]@32 ~@31 [f#1,f#2]@32 [b1,b2,f#3]@32 [d2,d3,f#3]@32 [d2,d3,f#3]@32 ~@33, ~@24 [e2,e3]@8 f#3@2 ~@29 f#3@17 ~@144, ~@13 a3@16 ~@3 [a3,c#4]@16 [b3,d#4]@16 [a3,d4]@16 [a3,d4]@8 ~@24]/7", // D C#m A F# B5 D E A …
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.2)

// bass · electric bass finger · "Bass Line"
const bass = note(`<
  ~@10 A@4 B C D E F G H ~ I J K L M N O P B C D E F G H ~ I J K L M N O P I J K L M N O P I J K L M N O P Q R S T U V W
  X I J K L M N O Y I J K L M N O P I J K L M N O P I J K L M N O P ~
>`.pickRestart({
  A: "[~@16 f#1@22 ~@2 f#1@2 a1@5 ~ b1@22 ~@2 b1@8 d2@33 ~@15]/4", B: "a1@7 ~", C: "d1@15 ~", D: "a1@29 ~@3",
  E: "d1@7 ~", F: "f#1@22 ~@2 f#1@2 a1@5 ~", G: "b1@11 ~ b1@4", H: "d2",
  I: "a1@5 ~@3 a1@4 a1 ~ a1 ~ a1@5 ~ a1@3 ~ a1@3 ~ a1@2", J: "e1@4 ~@2 e1@2 ~@4 e1@2 ~@2 e1@5 ~ e1 ~ e1@4 d1@2 c#1@2",
  K: "b0@5 ~ b0@3 ~@3 b0@2 ~@2 b0@4 ~ b0 ~ b0@3 ~@2 b0 ~ b0@2",
  L: "d1@5 ~@3 d1@5 ~ d1 ~ d1@3 ~ d1 ~@3 d1@2 e1@2 f#1@2 g#1@2",
  M: "a1@4 ~@2 a1@2 ~@2 a1@2 ~@3 a1@4 ~@3 a1@2 ~ f#1@3 a1@4, g#1 ~@23 e1@3 ~ b1 ~@3",
  N: "e1@4 ~@4 e1@4 ~@2 e1 ~ e1@4 e1@4 b0@2 c#1@2 e1@2 c#1@2",
  O: "f#1@6 ~@2 f#1@5 ~@3 f#1@4 ~@2 f#1@2 e1@2 ~ e1@5, e1 ~@25 f#1@3 ~@3",
  P: "d1@5 ~@3 d1@5 ~ d1@2 ~@2 d1@2 e1@2 d1@2 ~@4 b0@2 ~@2, ~@24 e1@3 ~@5, ~@25 d1@5 ~@2",
  Q: "e2@4 ~@2 e2@2 ~@2 e2 ~ e2@3 ~ e2@2 ~@2 e2@2 ~ e2@2 ~@3 e2 ~ e2@2",
  R: "d2@2 e2@2 ~@2 e2@2 ~@2 e2@2 ~@4 c#2 ~@3 e2@2 ~@2 c#2@2 ~@2 e2@2 ~@2, ~@7 e2@2 ~@7",
  S: "f#2@2 ~@2 f#2 ~ f#2@2 ~@2 f#2@2 ~@2 f#2 ~ f#2@2 ~ f#2 ~@2 f#2@2 ~ f#2@2 e2@3 ~@2, ~@12 e2 ~@3",
  T: "d2@3 ~ d2 ~ d2@2 ~@2 d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 c#2@2 d2@2 c#2@2 d2@2",
  U: "e2@3 ~ e2 ~ e2@2 ~@2 e2 ~ e2@2 ~@2 e2@2 ~@2 e2 ~ e2 ~ e2@2 c#2@2 e2@4",
  V: "f#2@2 ~@2 f#2 ~ f#2@2 ~ f#2 ~@2 f#2@2 ~@2 f#2@2 ~@2 f#2 ~ f#2@2 e2@3 ~ e2 ~ e2@2",
  W: "d2@3 ~@3 d2@2 ~@4 d2@2 ~@2 d2@2 ~@2 d2!2 ~@2 d2@3 ~ d2 ~ d2@2", X: "d2 d3 d2 d3 d2 d3 d2 d3 d2 ~@7",
  Y: "d1@5 ~@3 d1@5 ~ d1@2 ~@2 d1@2 e1@2 d1 ~ d1!2 e1 ~ [b0,f#1]@2 g#1@2, ~@20 d1 ~@3 e1@2 ~@6", // B5
})).s("gm_electric_bass_finger").gain(0.72).pan(0.6)

// chords · overdriven guitar · "Overdriven Guitar 1"
const overdriven_guitar = note(`<
  ~@14 A B C D@2 E F G@2 H I J K L M N A B C D@2 E F G@2 H I J K L M N O H I J K L M N O H I J K L M N ~@7 P@2 H I J K L
  M N O H I J K L M N O H I J K L M N O H I J K L M N ~
>`.pickRestart({
  A: "[a3,e4,a4]@3 ~ a3 ~ [a3,e4,a4]@2 ~@2 a3 ~ [e4,a4]@3 ~@3 a4@2 ~@3 [e4,a4]@3 ~ a3 ~@2 e4 ~, ~@16 a3@2 ~@4 a3@3 ~@7, ~@17 e4@3 ~@12", // A5
  B: "[a3,d4,e4,a4]@3 ~ a3 ~ [a3,d4,e4,a4]@3 ~ a3 ~ [d4,e4,a4]@3 ~ a3 ~ [d4,e4,a4]@2 ~@2 a3 ~ [a3,d4,e4,a4]@2 ~@2 [d4,e4,a4] ~ a3 ~, ~@12 a3 ~@19", // Asus4 Dsus2 Asus4 Dsus2
  C: "[a3,e4,a4]@3 ~ a3 ~ [a3,e4,a4]@3 ~ a3 ~ [a3,e4,a4]@3 ~ a3 ~ [a3,e4,a4]@2 ~@2 a3 ~ [a3,e4,a4]@2 ~@2 [a3,e4,a4] ~ a3 ~", // A5
  D: "[[a3,d4,e4,a4]@3 ~ a3 ~ [a3,d4,e4,a4]@3 ~ a3 ~ [a3,d4,e4,a4]@3 ~ a3 ~ [d4,e4,a4]@3 ~ a3 ~ [a3,d4,e4,a4]@2 ~@2 [d4,e4] ~ a3 ~ [a3,c#4,f#4]@3 ~ a3 ~ [a3,c#4,f#4,a4]@3 ~ a3 ~ [a3,c#4,f#4,a4]@3 ~ a3!2 [c#4,f#4,a4]@2 ~@2 c#4 [c#4,f#4,a4]@3 ~@2 [c#4,f#4,a4] ~ [c#4,a4] ~, ~@18 a3 ~@12 a4@3 ~@30]/2", // Asus4 Dsus2 Asus4 Dsus2 F#m
  E: "[d#4,f#4,b4]@3 ~ [d#4,f#4] ~ [d#4,f#4,b4]@3 ~ [d#4,f#4] ~ [d#4,f#4,b4]@3 ~ d#4 ~ [d#4,f#4,b4]@3 ~ d#4 ~ [d#4,f#4,b4]@3 ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~", // B D#m B D#m B
  F: "[d4,f#4,a4]@3 ~ [d4,f#4] ~ [d4,f#4,a4]@3 ~ d4 ~ [d4,f#4,a4]@2 ~@2 d4 ~ [d4,f#4,a4]@2 ~@2 [d4,f#4] ~ [d4,f#4,a4]@3 ~ [d4,f#4,a4] d4 ~@2", // D
  G: "[[a3,d4,e4,f#4,a4,d5,e5,a5]@3 ~ [a3,d4] ~ [a3,d4,e4,f#4,a4]@2 [d5,e5,a5]@2 d4 ~ [a3,d4,e4,f#4,a4] ~ [a3,d4] ~ [a3,d4,e4,f#4,a4,d5,e5,a5]@3 ~@12 [c#4,e4,a4]@2 ~@3 e4 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 e4 a4 ~ a4@2 ~@2 [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~, ~@8 a4 ~@7 g#4 ~@28 [c#4,e4]@3 ~@16]/2", // D D5 D Dsus2 D D5 D A …
  H: "[b3,e4,a4]@3 ~ [b3,e4,a4] ~ [b3,e4,a4] ~ [b3,e4,a4]@3 ~ [b3,e4,a4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2 ~@2 [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~", // Esus4 E
  I: "[b3,d4,f#4]@3 ~ [b3,d4,f#4]!2 ~@2 [b3,d4,f#4]@3 ~ [b3,d4,f#4] ~ [c#4,d4,f#4]@3 ~ [c#4,d4,f#4]@2 ~@2 [c#4,d4] ~ [b3,d4,f#4]@3 ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~, ~@14 b3 ~@17", // Bm Dmaj7 Bm
  J: "[a3,d4,f#4]@3 ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,e4,f#4] ~ [a3,e4,f#4]@3 ~ [a3,e4,f#4] ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4] f#4 [a3,d4] ~, ~@24 e4 ~@7", // D F#m7 D D5
  K: "[a3,c#4,e4]@3 ~ [a3,c#4,e4] e4 [a3,c#4] ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4] ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 ~@2 e4 ~ [c#4,e4,a4]@2 ~@2 e4 ~ [c#4,e4,a4] ~", // A
  L: "[b3,e4,a4]@2 ~@2 [b3,e4,a4] ~ [b3,e4,a4] ~ [b3,e4,a4]@2 ~@2 [b3,e4,a4] ~ [b3,e4,a4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4]@2 ~@2 [b3,e4,f#4] ~ [b3,e4,g#4]@3 ~", // Esus4 E Bsus4 E
  M: "[c#4,f#4,a4]@3 ~ [c#4,f#4,a4] a4 [c#4,f#4] ~ [c#4,g#4,a4]@3 ~ [c#4,g#4,a4] ~ [c#4,f#4,a4]@3 [c#4,f#4,a4] ~ [c#4,f#4,a4]@2 ~ [c#4,f#4,a4] ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4] ~@3", // F#m F#5 Amaj7 F#m A
  N: "[a3,e4,f#4]@3 ~ [a3,e4,f#4] ~ [a3,e4,f#4] ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4] ~ [a3,c#4,f#4]@2 ~@2 [a3,c#4,f#4] ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2 ~@2 [a3,d4,f#4] ~ [a3,d4,f#4] ~", // F#m7 D F#m D
  O: "~@4 e4 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 e4 a4 ~ a4@2 ~@2 [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~, ~@13 [c#4,e4]@3 ~@16", // A C#m
  P: "[~@16 [g#4,a5]@2 ~@13 [c#4,e4,a4]@2 ~@3 e4 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 e4 a4 ~ a4@2 ~@2 [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~, ~@45 [c#4,e4]@3 ~@16]/2", // Amaj7 A C#m
})).s("gm_overdriven_guitar").gain(0.15).pan(0.9)

// chords · string ensemble 2 · "Strings for Warmth"
const string_ensemble_2 = note("<~@21 A@7 B@2 ~@7 A@7 C@3 D@5 E@8 F G@8 A@7 H@8 C@3 D@5 E@8 B@2 ~>".pickRestart({
  A: "[~@31 c#4@33 ~@15 g#4@16 [d4,f#4]@30 ~@34 [c#4,e4]@29 ~@3 a4@8 g#4@9 f#4@8 g#4@5 ~@3, ~@31 e4@65 ~@31 [d4,f#4]@33 ~@64, ~@31 a4@48 ~@72 a4@36 ~@37, ~@64 b3@63 a3@28 ~@36 [b3,e4]@31 ~@2]/7", // D C#m D E5
  B: "[f#4@7 g#4@8 f#4@8 e4@8 [d4,f#4]@27 ~@6, a4@29 ~@3, c#4@27 ~@37]/2", // D
  C: "[f#4@7 g#4@8 f#4@8 e4@8 ~@24 [e3,a3,c#4,e4]@40 ~, a4@29 ~@19, c#4@27 ~@4 [d4,f#4]@27 ~@38]/3", // A D
  D: "[~@15 g#4@16 [d4,f#4]@30 ~@34 [c#4,e4]@29 ~@3 a4@8 g#4@9 f#4@8 g#4@5 ~@3, b3@63 [d4,f#4]@33 ~@64, ~@63 a3@28 ~@36 [b3,e4]@31 ~@2, ~@87 a4@36 ~@37]/5", // D C#m D E5
  E: "[f#4@7 g#4@8 f#4@8 e4@8 [d4,f#4]@26 ~@54 g#4@16 [d4,f#4]@30 ~@34 [c#4,e4]@29 ~@3 a4@8 g#4@9 f#4@8 g#4@5 ~@3, a4@58 ~@38 b3@63 [d4,f#4]@33 ~@64, c#4@27 ~@30 [e3,a3,c#4,e4]@64 ~@38 a3@28 ~@36 [b3,e4]@31 ~@2, ~@183 a4@36 ~@37]/8", // D C#m D A E5
  F: "f#4@7 g#4@8 f#4@8 e4@8 [d4,f#4], a4, c#4@27 ~@5", // D
  G: "[~@88 [f#3,a3,c#4,f#4]@66 ~@37 c#4@31 d4@34, ~@26 g#3@64 ~@65 [b3,e4]@36 [a3,f#4]@65, ~@27 [e3,b3,e4]@64 ~@65 [e3,g#3]@38 ~@62]/8", // F#m E5 D E5 E
  H: "[f#4@7 g#4@8 f#4@8 e4@8 [d4,f#4]@27 ~@4 [a3,c#4,e4,a4]@34 ~@15 g#4@16 [d4,f#4]@30 ~@34 [c#4,e4]@29 ~@3 a4@8 g#4@9 f#4@8 g#4@5 ~@3, a4@58 ~@101 a3@28 ~@36 [b3,e4]@31 ~@2, c#4@27 ~@69 b3@63 [d4,f#4]@33 ~@64, ~@183 a4@36 ~@37]/8", // D A D C#m E5 D
})).s("gm_string_ensemble_2").gain(0.54).pan(0.8)

// other · synth drum · "Synth Drum (chorus impact)"
const synth_drum = note("<~@22 [c3@3 ~@29] ~@15 [c3@3 ~@29] ~@31 [c3@3 ~@29] ~@31 d4>").s("gm_synth_drum").gain(0.45)

// chords · distortion guitar · "Guitar Slide (Chorus)"
const distortion_guitar = note(`<
  ~@21 A ~@15 B ~@7 C D E@2 F@3 G@4 H@2 I@2 J@3 ~@6 B ~@7 C ~@7 C D E@2 F@3 G@4 H@2 I@2 K@2 ~
>`.pickRestart({
  A: "~@3 [e2,a2,b4]", B: "~@3 [c#2,f#2,g#4]", C: "~@15 e4",
  D: "[c#4,a4]@4 ~ a4@4 ~@2 b4@5 [a4,c#5]@4 [b4,d5]@3 ~ [c#5,e5]@4 ~@2 e5 ~, ~@4 e4@3 ~@2 e4@23, ~@7 b4", // F#m A Bm C#m
  E: "[~@2 b4 ~ e4@2 b4@4 ~@2 a4@4 ~@2 g#4@4 e4@2 ~ e4@2 b4@2 e4@2 ~ f#4@4 ~@2 b4@4 f#4@2 c#5@4 ~@2 d5@4 d4@2 c#5@3 b4@4 ~, e5@13 ~@11 f#4@3 f#4@5, ~@10 e4@5 ~ e4@5 ~@3 a4@4 ~@3 b4@5 d4@18 ~@10]/2",
  F: "[d4@2 ~ d4@3 f#4@4 d4@2 f#4@2 d4@2 e4@4 ~@2 f#4@4 d4@2 ~ d4@2 ~@5 a4@2 b4@2 ~@2 b4@2 a4@2 ~@5 c#4@3 ~@2 [c#4,e4]@3 ~ [c#4,e4]@3 ~ [b3,e4,b4]@4 [g#4,a4]@2 [b3,e4]@4 [b3,b4] ~ [b3,b4]@2 e4@2 [g#4,b4]@4 ~@8 b3@3 ~, a4@5 ~ a4@24 ~ a4@2 e4@7 a4@4 [c#4,c#5]@4 a4@3 c#5@5 e5@25 ~@5 b3@3 ~ e4@5 ~, ~@2 f#4@3 ~@15 d4@5 ~@3 e4@4 c#4@6 c#4@4 e4@5 b4@3 e4@4 a4@9 ~@11 a4@2 e4 ~@3 b3@3 ~ e4@3 b4@6 ~@3, ~@56 d5 ~@29 g#4@7 ~@3]/3", // C#m E5 Amaj7 E5 B G#m C#
  G: "[~@2 f#4@2 ~@10 c#4@3 f#4@3 ~ f#4 ~ e4@4 c#4@2 ~ e4@2 f#4@2 ~@10 a3@3 ~ a3@2 e4@4 [a3,d4]@2 ~@2 d4@2 [a3,a4]@3 ~ b4@4 ~@7 c#4 c#4@3 ~@3 e5@4 e4@2 d5@2 e4@2 c#5@2 ~@4 g#4@2 ~@2 [b3,g#4]@4 ~@8 [b3,g#4]@4 e4@2 f#4@4 e4@2 ~@2, a4@4 c#4@4 f#4@6 ~@20 d4@6 ~ d4@6 ~ d4@4 ~@11 e4@3 ~@2 e4@5 ~ e4@4 ~@16 e4@4 ~@2 e4@5 ~@3 [b3,a4]@5 ~@7 b3@3 ~@5, ~@6 a4@29 ~@2 g#4@8 ~@31 a4@19 ~ b4@13 ~@3 e4@4 ~@12, ~@10 c#4@3 ~@7 c#4@5 ~@5 c#4 ~ a3@9 ~@23 c#4@10 ~@6 [c#4,e4]@5 ~@3 c#4@6 ~@2 e3@9 ~ [e3,e4]@4 ~ e3@4 ~@3 e3@7 ~@3, ~@11 g#4@10 ~@15 f#4@3 ~@5 a4@11 ~ a4@4 ~@10 c#5@11 ~@47]/4", // D5 A E B7 C#m E
  H: "[d4@2 ~@21 b4 ~@5 b4 ~@8 e5@2 ~@12 d4@2 ~@2 e5@4 [d4,d5]@2 e5@2, ~@2 b3@7 b3@9 ~ b3@5 ~@3 c#5@3 ~ a4@3 f#4@7 ~@9 d5@7 ~@7, ~@4 d4@6 ~ d4@7 ~@5 d4@6 ~@3 d4@8 ~ d4@6 ~ d4@4 ~@4 d4@2 ~@6, ~@6 f#4@6 ~ f#4@6 ~@2 f#4@7 b3@2 ~@8 d5@7 ~ f#5@5 ~ a5@12, ~@15 b4@7 ~@2 d5@6 ~@5 a4@7 ~@2 a4@6 a4@11 ~@3]/2", // D
  I: "[d5@4 ~@14 a4@2 ~@6 c#5@2 a4@3 [e4,b4]@4 a4@2 ~ e4@3 ~ g#4@2 b4@4 g#4@2 ~@4 g#4@2 e5@4 d5@2 c#5@2, a4 ~@3 a4@5 ~ a4@5 ~@5 e4@7 ~ e4@2 ~@14 e4@3 ~ e4 ~@15, ~@5 c#5@13 ~@4 a4@4 ~@11 b4@5 ~@8 b4@11 ~@3, ~@12 e5@11 ~ e5@30 ~@10]/2", // E5
  J: "[~@2 f#4@2 ~@2 d5@4 ~@2 b3@3 ~ [c#4,a4]@4 ~@4 b4@4 f#4@3 ~@2 f#4@2 d4@2 ~@2 f#4@2 d4@2 f#4@3 d4@2 f#4@2 d4@2 ~@7 f#4@2 d4@2 e4@16 ~@17, [b3,d5]@4 b4@6 f#4@6 ~@4 f#4@4 ~@7 a4@4 ~@2 a4@22 ~@37, ~@12 c#5@10 [c#4,a4]@5 ~ c#4@2 ~@13 a3@9 e3@4 a3@5 ~@35, ~@27 f#4@2 d4 ~@18]/3", // F#m Bm F#m
  K: "[~@2 f#4@2 ~@2 d5@4 ~@2 b3@3 ~ [c#4,a4]@4 ~@4 b4@4 f#4@3 ~@2 f#4@2 d4@2 ~@2 f#4@2 d4@2 f#4@3 d4@2 f#4@2 d4@2 ~@7 f#4@2 d4@3, [b3,d5]@4 b4@6 f#4@6 ~@4 f#4@4 ~@7 a4@4 ~@2 a4@22 ~@5, ~@12 c#5@10 [c#4,a4]@5 ~ c#4@2 ~@13 a3@9 e3@4 a3@5 ~@3, ~@27 f#4@2 d4 ~@2]/2", // F#m Bm F#m
})).s("gm_distortion_guitar").gain(0.36).pan(0.8)

// chords · overdriven guitar · "Overdriven Guitar 2"
const overdriven_guitar_2 = note("<~@54 A@2 B C D@2 E F G ~@31 A@2 B C D@2 E F ~>".pickRestart({
  A: "[b4@4 ~@7 c#4 ~ c#4@3 ~@3 e5@3 e4@2 d5@2 e4@2 c#5@2 ~@4 g#4@2 ~@2 [b3,g#4]@4 ~@2 [b3,a4]@4 ~@2 [b3,g#4]@4 e4@2 f#4@4 e4@2 ~@2, c#4@10 ~@3 a4@19 b4@13 ~@19, ~@4 e4@5 ~ e4@4 ~@2 e4@4 ~@10 e4@4 ~@2 e4@5 ~@15 b3@3 ~@5, ~@6 c#5@11 c#4@5 ~@2 c#4@6 ~@2 e3@9 ~ [e3,e4]@4 ~@2 [e3,e4]@4 ~@2 e3@7 ~@3]/2", // E B7 E
  B: "d4@2 ~@4 f#4@4 ~@14 [d4,d5]@4 [b3,c#5]@2 b4 ~, ~@2 b3@7 ~ b3@9 ~ b3@5 ~@7, ~@4 d4@6 ~@2 d4@7 ~@13, ~@13 f#4@6 ~@3 f#4@7 ~@3, ~@16 b4@7 ~ b4 ~@7", // D Bsus2
  C: "a4@2 ~@4 e5@2 ~@8 d4@3 ~@2 d4@2 ~@5 [d4,d5]@2 e5@2, d4@6 d5@7 ~ f#5@5 d5@5 d4@2 ~@6, ~@2 f#4@7 d4@6 ~@6 a5@11, ~@4 a4@7 ~ a4@6 ~ a4@11 ~@2, ~@25 e5@5 ~@2", // D
  D: "[~ a4 ~@16 a4@2 ~@2 a4@3 ~ c#5@2 a4@4 [e4,b4]@4 a4@2 b4@4 g#4@2 b4@4 ~ e4 ~@4 g#4@3 e5@3 d5@2 c#5@2, d5@4 a4@5 ~ a4@5 ~@5 e4@7 ~ e4@2 ~@8 e4@3 ~@3 e4@3 ~ g#4@3 ~@13, ~@6 c#5@13 ~@31 b4@11 ~@3, ~@12 e5@11 ~@2 e5@30 ~@9]/2", // E5
  E: "~@2 f#4@2 ~@2 d5@4 ~@2 b3@3 ~ [c#4,a4]@4 ~@5 b4@3 ~ c#4@2 ~, [b3,d5]@4 b4@6 f#4@6 ~@4 f#4@3 c#4@5 ~@4, ~@6 c#5@5 a4@2 ~ f#4@2", // F#m Bm
  F: "~@2 f#4@2 d4@2 ~@2 f#4@2 d4@2 f#4@2 d4@2 f#4@3 ~@7 d4@2 f#4@2 d4@2, a4@2 ~ a4@11 ~@2, ~@12 a3@8 e3@4 a3@5 ~@3, ~@19 d4@3 f#4@4 ~@6",
  G: "e4 ~",
})).s("gm_overdriven_guitar").gain(0.16).pan(0.2)

// drums · kick
const kick = s("bd").struct("<A B@12 C D@7 E F@8 D@7 E F@31 G F@32 H>".pickRestart({
  A: "~@8 x ~@6 x", B: "x ~ x ~@3 x ~ x ~@6 x", C: "x!2 ~ x!2 ~@3", D: "x ~@6 x!2 ~ x ~@3 x ~",
  E: "x ~ x ~ x ~ x!3 ~@7", F: "x ~@2 x ~@2 x ~ x ~@7", G: "x ~ x!3 ~ x!3 ~@7", H: "x",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<A B@20 C B@15 C B@31 C B@32 D>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x!5 ~@3", D: "x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~ A@13 B@7 C ~@8 B@7 C ~@31 C ~@33>".pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@102 x>").gain(0.8)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@21 A B C@2 D E C@3 ~@7 A B C@2 D E C@3 B C@2 D E C@3 B C@2 D E C@3 F C@3 F C@2 G B C@2 D E C@3 B C@2 D E C@3 B C@2 D
  E C@3 B C@2 D E C@3 ~
>`.pickRestart({
  A: "~ x", B: "~ x!7", C: "x!8", D: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4",
  E: "x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@4 x ~@3", F: "~@4 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@4 x ~@3",
  G: "x!5 ~@3",
})).gain(0.72)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@2 A ~ A ~ B C@4 D@3 E D E D E D E F ~@8 E D E D E D E F ~@7 G H ~@2 I ~@3 J H ~@22 G ~@7 G H ~@2 I ~@3 J H ~@8
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@2 x ~", C: "~@2 x!2 ~@2 x ~", D: "~ x ~ x", E: "~@2 x ~@3 x!2", F: "~ x ~@2",
  G: "~@13 x ~ x", H: "x!2 ~ x ~@12", I: "~@11 x ~ x!3", J: "~@11 x ~ x ~ x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A B@13 C D@6 E ~@8 C D@6 E ~@31 E ~@33>".pickRestart({
  A: "~@8 x ~ x ~ x ~ x!2", B: "~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "~@2 x ~@2 x!2 ~ x ~ x ~ x ~ x ~",
  D: "x ~ x ~ x ~ x!2 ~ x!2 ~ x ~ x ~", E: "x!5 ~@3",
})).gain(1.62)

// drums · shaker
const shaker = s("sh").struct(`<
  A B@20 C D E F G H I J K B@7 C D E F G H I J K D E F G H I J K D E F G H I J K H I J K H I J L D E F G H I J K D E F G
  H I J K D E F G H I J K D E F G H I J K ~
>`.pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x!3 ~", D: "~@5 x ~@4 x ~@2 x ~@4 x ~@2 x ~@4 x ~@3 x ~",
  E: "~@2 x ~@3 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@2 x ~@2", F: "~@2 x ~@2 x ~@3 x ~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2",
  G: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@4 x ~", H: "~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@4 x ~",
  I: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", J: "~@2 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@2",
  K: "~@2 x ~@3 x ~@2 x ~@3 x ~@4 x ~@3 x ~@3 x ~@3 x ~", L: "x ~ x ~@3 x ~ x!2 ~@3 x ~@2 x ~@15",
})).gain(0.72)

stack(
  acoustic_guitar_steel, bass, overdriven_guitar, string_ensemble_2, synth_drum, distortion_guitar, overdriven_guitar_2,
  kick, snare, clap, hihat, open_hat, tambourine, tambourine_soft, cabasa, shaker
)