Strudelify

Help Me

Joni Mitchell

KeyF majorTempo155 bpm
0:00/0:00
// Help Me — Joni Mitchell
// 155 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 21, 4/4 at bar 22, 3/4 at bar 35, 4/4 at bar 36, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Staff-10.
setcpm(155/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.

// bass · electric bass finger · "Staff-3"
const bass = note(`<
  ~@4 A B C D E F G H G H G I J D E D K L@4 M@7 N@2 O@8 P@8 Q@6 R@2 S@5 T@4 U@2 V@2 W@2 X@2 Y@4 Z@2 W@2 Z@2 W@2 AA@4
  AB@8 AC@8 AD@4 AE@8 AF@2 ~
>`.pickRestart({
  A: "a2", B: "e2", C: "g2@6 g2 d2", D: "g1@7 d2", E: "g2@7 d2", F: "a1@6 gb2 g2", G: "f2@7 c2", H: "f1@7 c2",
  I: "f1@7 g1", J: "c2@7 c2", K: "g2@5 c2@3", L: "[a1@3 c2@3 d2@7 a1 d2@6 d2 c2 bb1@7 f2 bb1@2]/4",
  M: "[~@3 bb1 g1@2 f1@7 c2 f2@7 c2 f1@7 c2 f2@8 g1 g1@2 g1@2 g1 a1@10 g1!2]/7", N: "[~ g1@2 g1 a1@10 g1!2]/2",
  O: "[~ g1@2 g1 a1@16 a2@8 e2@8 g2@6 g2 d2 g1@7 d2 g2@7 d2 a1@4]/8",
  P: "[~@2 gb2 g2 f2@7 c2 f1@7 c2 f2@7 c2 f1@7 c2 f2@7 c2 f1@7 g1 c2@7 c2 g1@4]/8",
  Q: "[~@3 d2 g2@7 d2 g1@7 d2 g2@5 c2@3 a1@3 c2@3 d2@7 a1 d2@6]/6", R: "[d2 c2 bb1@7 f2 bb1@5 bb1]/2",
  S: "[g1@2 f1@7 c2 f2@7 c2 f1@7 c2 f2@8 g1 g1@2 g1@2 g1]/5", T: "[a1@10 g1 g1@2 g1@2 g1]/2", U: "a1/2",
  V: "[g2@2 g2@3 d2 e2 g2@2 g2@2 e2 g2@3 d2]/2", W: "[g2@2 g2@3 d2 e2 g2@2 g2@2 e2 g2 e2 d2@2]/2",
  X: "[f2@2 f2@3 c2 d2 f2@2 f2@2 d2 f2@4]/2", Y: "[f2@2 f2@3 c2 d2 f2@2 f2@2 d2 f2 d2 c2@2]/2",
  Z: "[d2@2 d2@3 a1 b1 d2@2 d2@2 b1 d2@3 d2]/2", AA: "[g1 g1@2 g1@2 g1 a1@10]/2",
  AB: "[g1 g1@2 g1@2 g1 a1@16 a2@8 e2@8 g2@6 g2 d2 g1@7 d2 g2@7 d2 a1@2]/8",
  AC: "[~@4 gb2 g2 f2@7 c2 f1@7 c2 f2@7 c2 f1@7 c2 f2@7 c2 f1@7 g1 c2@7 c2 g1@2]/8",
  AD: "[~@5 d2 g2@7 d2 g1@7 d2 g2@5 c2@3 a1@2]/4",
  AE: "[~ c2@3 d2@7 a1 d2@8 bb1@7 f2 bb1@7 c2 f2@7 c3 f2@5 f2 g2 f2 d2@7 a2 d2@4]/8", AF: "[~ d2 e2 d2 f2@7 c3 ~@4]/2",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · electric guitar jazz · "Staff-4"
const electric_guitar_jazz = note(`<
  A B C D E F@5 G H G I@8 J K@2 L@2 M@4 N@4 O@6 P@6 Q@8 R@2 S@2 T@2 U@2 V W@4 X@2 Y@4 Z@6 AA@2 Y@2 AA@2 Y@2 AB@6 AC@8
  AD@2 AE@8 AF AG AH AI AJ AK@4 AL ~
>`.pickRestart({
  A: "[e3,a3,b3]@2 ~ [e3,a3,b3]!3 ~ [e3,a3,b3]", B: "[e3,a3,b3]!2 ~ [e3,a3,b3] ~ [e3,a3,b3]@2 [e3,a3,b3]",
  C: "[e3,a3,b3]!2 ~ [e3,a3,b3]!3 ~ [e3,a3,b3]", D: "[e3,a3,b3]!2 ~ [e3,a3,b3] ~ [e3,a3,b3] ~ [e3,a3,b3]",
  E: "[a3,db4,e4]@3 [a3,db4,e4]@3 [a3,db4,e4]@2", // A
  F: "[[g3,b3,d4]@6 [g3,b3,d4]@8 gb5 ~ [b3,d4,gb4]@8 ~@2 [b3,d4,gb4]@2 [b3,d4,gb4]@10 [b3,d4,gb4]@6 [b3,d4,gb4]@10 ~@2 [b3,d4,gb4]@6 [b3,d4,gb4]@6 [b3,d4,gb4]@6 [b3,d4,gb4]@6, ~@15 [b4,d5,gb5]@17 ~@48]/5", // G Bm
  G: "[a3,c4,e4]@3 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4]", H: "[a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4] [a3,c4,e4]@2",
  I: "[[a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@2 ~ [a3,c4,e4]@3 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [b3,e4,g4]@3 [b3,e4,g4]@3 [b3,e4,g4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 ~ [b3,d4,gb4]!4 [b3,e4,g4]@3, ~@7 e5@9 ~@48, ~@15 c5@113, ~@15 a4@17 ~@96]/8", // Am Em Bm Em
  J: "[db4,e4,a4]@3 [b3,e4,g4]@3 ~@2", // A Em
  K: "[[db4,gb4,a4]@3 [db4,gb4,a4]@3 [db4,gb4,a4]@3 [db4,gb4,a4]@3 [db4,gb4,a4]@2 ~@2]/2", // Gbm
  L: "[[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@2 ~@2]/2", // Dm
  M: "[[c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@2 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@2 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@2 [b3,d4,g4]!2]/4", // Am G
  N: "[~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@10 [b3,d4,g4]!2]/2", // G A G
  O: "[~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@10 ~ [a3,db4,e4]@2 [a3,db4,e4]@3 [a3,db4,e4]@3 [a3,db4,e4]@3 [a3,db4,e4]@2 [g3,b3,d4]@3 [g3,b3,d4]@4 ~ [b3,d4,gb4]@4 ~ [b3,d4,gb4] [b3,d4,gb4]@6, ~@35 gb5@9 ~@4, ~@71 [b4,d5]@17 ~@8]/6", // G A G Bm
  P: "[[b3,d4,gb4]@2 [b3,d4,gb4]@5 [b3,d4,gb4]@3 [b3,d4,gb4]@5 [b3,d4,gb4]@3 [b3,d4,gb4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]]/6", // Bm Am
  Q: "[~ [a3,c4,e4]@2 ~ [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [b3,e4,g4]@3 [b3,e4,g4]@3 [b3,e4,g4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@2 [b3,e4,g4]@3 [db4,e4,a4]@3 [b3,e4,g4], ~@3 e5@9 ~@52, ~@7 c5@121, ~@7 a4@17 ~@104]/8", // Am Em Bm Em A Em
  R: "[~@4 [db4,gb4,a4]@3 [db4,gb4,a4]@3 [db4,gb4,a4]@3 [db4,gb4,a4]@3]/2", // Gbm
  S: "[[db4,gb4,a4]@2 ~@2 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3]/2", // Gbm Dm
  T: "[[d4,f4,a4]@2 ~@2 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3]/2", // Dm Am
  U: "[c4,e4,a4]@2 [c4,e4,a4]@3 [c4,e4,a4]@3", V: "[c4,e4,a4]@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4]",
  W: "[[db4,e4,a4]@10 [b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4]]/2", X: "[[db4,e4,a4]@10 ~ [a3,db4,e4]@2 [a3,db4,e4]@3]/2",
  Y: "[[b3,d4,gb4]@2 [b3,d4,gb4]@5 [b3,d4,gb4]@5 [b3,d4,gb4]@2 [b3,d4,gb4]@2]/2", // Bm
  Z: "[[a3,c4,e4]@2 [a3,c4,e4]@5 [a3,c4,e4]@5 [a3,c4,e4]@2 [a3,c4,e4]@2]/2", // Am
  AA: "[[a3,db4,gb4]@2 [a3,db4,gb4]@5 [a3,db4,gb4]@5 [a3,db4,gb4]@2 [a3,db4,gb4]@2]/2", // Gbm
  AB: "[[b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@10]/2", // G A
  AC: "[~ [a3,db4,e4]@2 [a3,db4,e4]@3 [a3,db4,e4]@3 [a3,db4,e4]@3 [a3,db4,e4]@2 [g3,b3,d4]@3 [g3,b3,d4]@4 ~ [b3,d4,gb4]@4 ~ [b3,d4,gb4] [b3,d4,gb4]@6 [b3,d4,gb4]@2 [b3,d4,gb4]@5 [b3,d4,gb4]@3 [b3,d4,gb4]@5 [b3,d4,gb4]@3 [b3,d4,gb4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@2, ~@21 gb5@9 ~@34, ~@43 [b4,d5]@17 ~@68]/8", // A G Bm Am Bm
  AD: "[~ [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@2]/2", // Am
  AE: "[~ [a3,c4,e4]@2 [a3,c4,e4]@2 ~ [a3,c4,e4]@3 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [b3,e4,g4]@3 [b3,e4,g4]@3 [b3,e4,g4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@2 ~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3 ~ [b3,d4,gb4]@3 [b3,d4,gb4] [b3,e4,g4]@3 [db4,e4,a4]@2, ~@5 e5@9 ~@50, ~@11 c5@117, ~@11 a4@17 ~@100]/8", // Am Em Bm Em A
  AF: "~ [b3,e4,g4]@3 ~ [d4,gb4,a4,db5]!3", // Em Dmaj7
  AG: "[d4,gb4,a4,db5] [d4,gb4,a4,db5]@2 [d4,gb4,a4,db5]@2 [d4,gb4,a4,db5]@2 [d4,gb4,a4,db5]", // Dmaj7
  AH: "[d4,gb4,a4,db5]@4 ~ [f4,a4,d5]!3", AI: "[f4,a4,d5] [f4,a4,d5]@2 [db5,f5]@2 [a4,d5]@2 c4",
  AJ: "[f4,a4]@2 f4@2 ~@2 [f4,a4,c5,e5]!2", // F Fmaj7
  AK: "[[f4,a4,c5,e5]@3 c5@2 g4 [a4,d5]@6 ~ [d4,gb4,a4,db5]!3 [d4,gb4,a4,db5]@3 [e4,a4] ~ [e4,a4] [gb4,b4]@6 ~ g4 [a4,d5] g4, ~@3 g4 ~ c5@24 c5@3]/4", // Fmaj7 D5 Dmaj7 A5 B5 D5
  AL: "[e4,a4]@3 [d4,g4] ~@4", // A5 G5
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.7)

// chords · french horn · "Staff-6"
const french_horn = note(`<
  ~@4 A B C@4 D@6 E F@4 G@8 H@8 I@5 J@7 K@4 L@5 M@5 N@4 O@2 C@4 P@6 Q@2 R@2 Q@2 S@2 T@4 U@8 V@7 W@5 X@4 Y@7
>`.pickRestart({
  A: "[a3,db4,e4]", B: "[g3,b3,d4]", C: "[b3,d4,gb4]/4", D: "[~ e4@5, [a3,c4]]/6", E: "[b3,e4,g4]",
  F: "[[b3,d4,gb4]@29 [b3,e4,g4]@3]/4", G: "[[db4,e4,a4]@3 [b3,e4,g4]@3 [db4,gb4,a4]@16 [d4,f4,a4]@16 [c4,e4,a4]@26]/8",
  H: "[~@3 [b3,d4,g4]@3 [db4,e4,a4]@5 [b3,d4,g4]@3 [db4,e4,a4]@5 [b3,d4,g4]@3 [db4,e4,a4]@8 [a3,db4,e4]@2]/8", // G A G A G A
  I: "[~ [g3,b3,d4]@2 [b3,d4,gb4]@7]/5", J: "[~@3 e4@10 [b3,e4,g4], ~ [a3,c4]@12 ~]/7", K: "[~ [b3,d4,gb4]@7]/4",
  L: "[~ [b3,e4,g4]@3 [db4,e4,a4]@3 [b3,e4,g4]@3 [db4,gb4,a4]@16 [d4,f4,a4]@14]/5", // Em A Em Gbm Dm
  M: "[~ [c4,e4,a4]@16 [b3,d4,g4]@3]/5", N: "[[db4,e4,a4]@5 [b3,d4,g4]@3]/2", O: "[db4,e4,a4]/2", P: "[a3,c4,e4]/6",
  Q: "[db4,gb4,a4]/2", R: "[d4,gb4,b4]/2", S: "[b3,d4,gb4]/2", T: "[[b3,d4,g4]@3 [db4,e4,a4]@5]/2",
  U: "[[b3,d4,g4]@3 [db4,e4,a4]@8 [a3,db4,e4]@4 [g3,b3,d4]@4 [b3,d4,gb4]@13]/8", // G A G Bm
  V: "[~@7 e4@20 [b3,e4,g4], ~@3 [a3,c4]@24 ~]/7", W: "[~@6 [b3,d4,gb4]@29 [b3,e4,g4]@3 [db4,e4,a4]@2]/5",
  X: "[~ [b3,e4,g4]@3 [d4,gb4,a4,db5]@16 [f4,a4,d5]@12]/4", // Em Dmaj7 Dm
  Y: "[~ [f4,a4,c5,e5]@4 [d4,gb4,a4,db5]@4 [f4,a4,c5,e5]@4 ~]/7", // Fmaj7 Dmaj7 Fmaj7
})).s("gm_french_horn").gain(0.4)

// chords · flute · "Staff-7"
const flute = note("<~@17 A B@2 ~@9 C D@4 E@3 ~@13 F@3 ~@9 G H@4 I@2 ~@18 J@4 K@3 ~@13 L@3 ~@12>".pickRestart({
  A: "~@4 b4!2 db5 b4", B: "[gb5@3 d5@10 ~@3]/2", C: "~@6 [b3,d4,g4]!2",
  D: "[~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@10 [b3,d4,g4]!2]/2", E: "[~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@16 ~@4]/3",
  F: "[b4!2 db5 b4 gb5@3 d5@10 ~@7]/3", G: "~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4]",
  H: "[[db4,e4,a4]@10 [b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4]]/2", I: "[db4,e4,a4]/2",
  J: "[[b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@10]/2", // G A
  K: "[[b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4] [db4,e4,a4]@16 ~@2]/3", L: "[~@2 b4!2 db5 b4 gb5@3 d5@10 ~@5]/3",
})).s("gm_flute").gain(0.4)

// other · acoustic guitar nylon · "Staff-2"
const acoustic_guitar_nylon = note("<~@22 A@3 B C D E ~@25 F G H@2 I ~ J@2 ~@60>".pickRestart({
  A: "[gb4 a4!2 db5 a4 db5@5 ~@5 d5@2 ~@2 f5@2 ~ d5 e5]/3", B: "d5@2 ~@4 c5 d5", C: "c5 ~", D: "~@6 a4 e4",
  E: "a4 c5 ~ e5@3 ~@2", F: "~@4 gb4 a4!2 db5", G: "a4 db5@5 ~@2", H: "[~@4 d5 ~@2 f5@2 ~ d5 e5 d5@2 ~@2]/2",
  I: "~@2 c5 d5 c5@4", J: "[~@2 a4 e4 a4 c5 ~ e5@3 ~@6]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// other · distortion guitar · "Staff-9"
const distortion_guitar = note("<~@30 A B ~@31 C D ~@23 E ~@33>".pickRestart({
  A: "~@7 db4", B: "e4 a4 g4 a4 g4@2 ~@2", C: "~@3 db4 e4 a4 g4 a4", D: "g4@3 ~", E: "~ db4 e4 a4 g4 a4 g4@2",
})).s("gm_distortion_guitar").gain(0.4)

// chords · acoustic guitar steel · "Staff-10"
const acoustic_guitar_steel = note(`<
  ~@7 A ~ B C ~ C D C ~@23 E F@2 G@2 ~@2 H I H ~ J ~@2 K L ~@41 M@3 N O ~@2 P Q ~@2 R ~@12 S ~@2
>`.pickRestart({
  A: "~@2 [b3,d4,gb4] ~", B: "~@3 [b3,d4,gb4]@3 [b3,d4,gb4]@2", C: "~@3 [a3,c4,e4]", D: "~@6 [a3,c4,e4] ~",
  E: "~@7 gb5@9", F: "[[b3,d4,gb4]@3 [b3,d4,gb4]@4 [b3,d4,gb4]@3 ~@6]/2",
  G: "[[b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 [b3,d4,gb4]@3 ~@4]/2", H: "[a3,c4,e4]@3 [a3,c4,e4] ~@4",
  I: "~ [a3,c4,e4] ~@2", J: "[b3,e4,g4] ~@3", K: "~@5 [b3,d4,gb4]@3", L: "[b3,d4,gb4] ~@7",
  M: "[~@11 gb5@9 [b3,d4,gb4]@6 [b3,d4,gb4]@8 [b3,d4,gb4]@6 ~@8]/3", N: "~@2 [b3,d4,gb4]@3 [b3,d4,gb4]@3",
  O: "[b3,d4,gb4]@3 [b3,d4,gb4]@3 ~@2", P: "~@2 [a3,c4,e4]@3 [a3,c4,e4] ~@2", Q: "~@2 [a3,c4,e4] ~",
  R: "~ [b3,e4,g4] ~@2", S: "~@7 c5",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@16 B C D@8 E F E F E G H I@15 J@2 K L@7 M N O N O N ~ C@17 ~ C P C P C P Q D@16 R E I@6 J S T ~
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "~ x!5 ~@2", C: "x ~@2 x ~@2 x ~", D: "~@2 x ~@2 x!2 ~", E: "~ x ~@2 x ~@3",
  F: "~ x ~ x ~@2 x ~", G: "~ x ~ x ~@4", H: "~ x", I: "x ~@2 x!2 ~@3", J: "x ~@2 x!2 ~@2 x", K: "~ x ~ x",
  L: "~ x!2 ~@3 x ~", M: "~ x!2 ~@2 x ~@2", N: "x ~@4 x ~ x", O: "~@2 x ~@2 x ~@2", P: "~@3 x ~ x ~@2", Q: "~@3 x",
  R: "~ x!2 ~@2 x!2 ~", S: "~@2 x ~ x ~@2 x", T: "~ x ~@2",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@25 B ~@6 C ~@25 D ~@5 E ~@3 E ~@5 F ~@7 E ~@6 B ~@28>".pickRestart({
  A: "~@5 x!3", B: "~@4 x!2 ~@2", C: "~@2 x!2 ~@4", D: "x!2 ~@6", E: "~@6 x!2", F: "~@5 x!2 ~",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B@16 C@8 D E B F B F A G A G@16 H@8 I H J K J K B@19 L A M A M A C A C@16 G@9 N ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~ x!2", D: "x!5 ~ x ~", E: "~ x ~@2 x ~ x!2", F: "~@2 x ~@3 x!2", G: "x!3 ~ x!4",
  H: "x ~ x!6", I: "x ~ x ~@2 x ~@2", J: "x!3 ~@3 x ~", K: "~@2 x!6", L: "x ~@2 x ~@2 x ~", M: "x!2", N: "x!4 ~@4",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@25 B C D C D C E F ~@24 G ~ H ~ H ~ H I ~@3 J ~@5 K ~@7 I ~ F ~ F ~ L M ~@28
>`.pickRestart({
  A: "~ x ~ x!4 ~", B: "x!4 ~@4", C: "~@7 x", D: "x", E: "x ~@4 x ~ x", F: "~ x!2 ~@5", G: "~@4 x!4", H: "~@3 x!2 ~@3",
  I: "~ x ~ x ~ x!2 ~", J: "~ x ~ x ~ x ~@2", K: "~ x ~ x!3 ~@2", L: "~ x!2 ~@4 x", M: "~ x ~ x!2 ~@3",
})).gain(0.48)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@4 A B@3 ~ B@10 ~ B C@9 ~ C ~ C ~ D ~ E D@3 ~ D@10 ~ D F@9 ~ F ~ F B ~ B@18 ~ B ~ B ~ C ~ G C@3 ~ C@10 ~ C D@10 ~
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x ~@2", D: "~@3 x ~@4", E: "~ x ~@2", F: "~ x ~@6", G: "~ x",
})).gain(0.16)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@2 A B ~@24 C D A ~ A ~ A E ~@25 F ~ G ~ G ~ G H ~@3 H ~@5 I ~@7 H ~ D ~ D ~ J ~@29
>`.pickRestart({
  A: "~@3 x", B: "x!2 ~ x ~@4", C: "~@6 x!2", D: "x", E: "~@5 x ~@2", F: "~@2 x!3 ~@3", G: "~ x ~@2", H: "~ x ~@6",
  I: "~ x ~ x ~@4", J: "x ~@6 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@15 B C ~@7 C D ~ E ~ E@3 ~@17 F ~@7 G A ~ A ~ A@3 ~@3 A ~@5 A ~@7 H ~ C ~ C@3 ~@17 E ~@10
>`.pickRestart({
  A: "x", B: "~@5 x ~@2", C: "~@3 x", D: "~ x ~@2 x ~@3", E: "~ x", F: "~ x ~@2", G: "~@2 x ~@2 x ~@2",
  H: "x ~@2 x ~@2 x ~",
})).gain(0.4)

stack(
  bass, electric_guitar_jazz, french_horn, flute, acoustic_guitar_nylon, distortion_guitar, acoustic_guitar_steel, kick,
  low_tom, hihat, mid_tom, open_hat, open_hat_soft, high_tom, crash
)

More by Joni Mitchell