Strudelify
Hair cover art

1969

Hair

The Cowsills

KeyC minorTempo114 bpm
0:00/0:00
// Hair — The Cowsills
// 114 bpm, 4/4, key C minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(114/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 pick
const bass = note(`<
  ~ A B A B C@2 D@2 E F G H I J K A L M@2 D@2 E F G H N O P L Q R@4 S T U V W@3 X ~ Y@5 Z AA AB@2 AC@8 AD AE@6
>`.pickRestart({
  A: "c2 c2@3 ab1 ab1@3", B: "c2 c2@3 eb2 eb2@3", C: "[g1!2 g1@2 eb1 f1 g1 g1@2 g1 g1@2 bb1 c2 d2 bb1]/2",
  D: "[g1!2 g1@2 eb1 f1 g1 g1@2 g1 g1@2 bb1!3 b1]/2", E: "c2@2 c2@2 c2@2 c2@2 c2@2 d1 eb1@2 g1 eb1@2", F: "c2!4 eb2@4",
  G: "bb1 eb2", H: "ab1 bb1", I: "~@5 g1@5 ~ g1@5 f2@5 f2@5 ~ f2@5", J: "c2@4 c2@12 ab1@4 ab1@4 c2@3 ~ eb2@3 ~",
  K: "c2@2 bb1@2 c2@2 eb2@4 ~@2 bb2 c3 eb3@2", L: "c2!8", M: "[g1!2 g1@2 eb1 f1 g1 g1@2 g1 g1@2 bb1@4]/2",
  N: "~@8 eb2@5 ~@19", O: "c2!4 b1!4", P: "a1!4 b1!4", Q: "c2!2 e2 f2 g2 f2 e2 c2", R: "c2!2 bb1 g1 f2 g2 a2 c3",
  S: "bb1@16 bb1@3 ~@5 bb2@2 ~ c3@2 d3@2 ~", T: "eb3@2 ~@5 bb2@2 ~@6 eb3@2 ~@5 bb2@2 ~ c3@2 d3@2 ~ eb3@2",
  U: "~@5 bb2@2 ~@6 eb3@2 ~@5 bb2@2 ~ c3@2 d3@2 ~ eb3@2 ~@2", V: "~@3 bb2@2 ~@6 c3@2 ~@5 f3@2 ~@6 bb2@2 ~@4",
  W: "[~@24 c2@15 ab1@15 c2@15 ab1@15 bb1@4 bb1@4 bb1@4]/3", X: "bb1 ~@7",
  Y: "[~@16 c2@4 c2@11 ab1@4 ab1@12 c2@4 c2@12 eb2@4 eb2@12 c2@3 c2@12 ab1@4 ab1@12 c2@4 c2@12 eb2@4 eb2@11 g1@4 g1@4 g1@8 eb1@3]/5",
  Z: "~@13 g1@4 g1@4 g1@8 bb1@3", AA: "~@3 g1!2 g1@2 eb1",
  AB: "[f1@4 g1@4 g1@8 g1@4 g1@7 bb1@4 bb1@4 bb1@4 b1@4 c2@4 c2@4 c2@4 c2@4 c2@4 d1]/2",
  AC: "[~ eb1@4 g1@2 eb1@4 c2@4 c2@4 c2@3 c2@4 eb2@16 bb1@16 eb2@16 ab1@15 bb1@16 c2@4 c2@4 c2@4 c2@4 c2@4 d1@2 eb1@4 g1@2 eb1@3 c2@4 c2@4 c2@4 c2@4 eb2@16 bb1@16 eb2@15 ab1@16 bb1@16 c2@4 c2@4 c2@4 c2@4 c2@3 d1@2 eb1@4]/8",
  AD: "g1 eb1@2 c2@2 c2@2 c2@2 c2@2 c2@2 d1 eb1@2",
  AE: "[g1@2 eb1@4 c2@4 c2@4 c2@3 c2@4 c2@4 d1@2 eb1@4 g1@2 eb1@4 c2@4 c2@4 c2@4 c2@4 c2@4 d1@2 eb1@4 g1@2 eb1@4 c2@31 c2@12 bb1@12 g1@47 ~@21]/6",
})).s("gm_electric_bass_pick").gain(0.78)

// chords · piano
const piano = note(`<
  ~ A B A B C@2 D@2 E F G H I A J A K L@2 D@2 E F G H M N O P@2 Q@4 R ~@3 S@3 T ~ U@4 V@4 W@5 X@8 Y@3
>`.pickRestart({
  A: "c3 ~ [c4,eb4,g4]@2 ab2 ~ [eb4,ab4,c5]@2, ~ c3@3 ~ ab2@3", // Cm Ab
  B: "c3 ~ [c4,eb4,g4]@2 eb3 ~ [eb4,g4,bb4]@2, ~ c3@3 ~ eb3@3", // Cm Eb
  C: "[[bb3,d4,g4] [bb3,d4,g4]@3 [eb4,g4,bb4]@2 [bb4,eb5] [g4,bb4,d5]@3 [g4,bb4,d5]@2 [f4,bb4,d5] [f4,bb4,d5]@2 [f4,bb4,d5]]/2", // Gm Eb Eb5 Gm Bb
  D: "[[bb3,d4,g4]@2 [bb3,d4,g4]@6 [eb4,g4,bb4]@4 [bb4,eb5]@2 [g4,bb4,d5]@6 [bb3,d4,g4]@4 ~ [f4,bb4,d5]@2 ~ [f4,bb4,d5]@4, ~@24 bb3@3 bb3@3 ~@2]/2", // Gm Eb Eb5 Gm Bb
  E: "[g4,c5,eb5]!2 [ab4,c5,eb5]!2", F: "[g4,c5,eb5]!2 [eb4,g4,bb4]@2", G: "[d4,f4,bb4] [eb4,g4,bb4,db5]",
  H: "[eb4,ab4,c5] [d4,f4,bb4]", I: "~@5 g5@4 ~@12 g5@5 ~ f5@5", J: "c3!3 [eb4,g4,bb4]@2 eb4 [eb4,g4,bb4]@2",
  K: "[c3,eb3]!8", // Cm
  L: "[[bb3,d4,g4] [bb3,d4,g4]@3 [eb4,g4,bb4]@2 [bb4,eb5] [g4,bb4,d5]@3 [g4,bb4,d5]@2 [f4,bb4,d5]@4]/2", // Gm Eb Eb5 Gm Bb
  M: "~@2 [bb4,eb5,g5] ~@5", N: "[d4,g4,c5]!2 [d4,g4,b4]!2", O: "[d4,g4,a4]!2 [d4,g4,b4]!2",
  P: "[g4,c5,f5]@4 [g4,c5,f5]@4 [g4,c5,e5] [g4,e5] ~@2 [g4,c5,e5]@4", // Csus4 C
  Q: "[bb4,c5,f5]@4 [bb4,c5,f5]@4 [a4,c5,f5] [a4,f5] d5@2 [a4,c5,f5]@4", R: "[d4,bb4,f5] ~",
  S: "[~@24 [c3,g3,c4,eb4]@15 [ab2,eb3,ab3,c4]@15 [c3,g3,c4,eb4]@15 [ab2,eb3,ab3,c4]@15 [bb2,f3,bb3,d4]@3 ~ [bb2,f3,bb3,d4]@3 ~ [bb2,f3,bb3,d4]@3 ~]/3", // Cm Ab Cm Ab Bb
  T: "[bb2,f3,bb3,d4]@3 ~@29", // Bb
  U: "[~@16 c3@4 ~@3 [c4,eb4,g4]@8 ab2@4 ~@4 [eb4,ab4,c5]@8 c3@4 ~@4 [c4,eb4,g4]@8 eb3@4 ~@4 [eb4,g4,bb4]@8 c3@3 ~@4 [c4,eb4,g4]@8 ab2@4 ~@4 [eb4,ab4,c5]@8 c3@4 ~@4 [c4,eb4,g4]@8 eb3@2, ~@20 c3@12 ~@3 ab2@12 ~@4 c3@12 ~@4 eb3@12 ~@3 c3@12 ~@4 ab2@12 ~@4 c3@12 ~@2]/4", // Cm Ab Cm Eb Cm Ab Cm
  V: "[~@6 [eb4,g4,bb4]@7 [bb3,d4,g4]@4 [bb3,d4,g4]@12 [eb4,g4,bb4]@5 ~@19 [g4,bb4,d5]@8 [f4,bb4,d5]@5 ~@10 [bb3,d4,g4]@4 [bb3,d4,g4]@12 [eb4,g4,bb4]@8 [bb4,eb5]@4 [g4,bb4,d5]@12 [bb3,d4,g4]@7 ~@2 [f4,bb4,d5]@3, ~@2 eb3@12 ~@109 bb3@5]/4", // Eb Gm Eb Gm Bb Gm Eb Eb5 …
  W: "[~@3 [f4,bb4,d5]@8 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [ab4,c5,eb5]@8 [ab4,c5,eb5]@8 [g4,c5,eb5]@8 [g4,c5,eb5]@7 [eb4,g4,bb4]@16 [d4,f4,bb4]@16 [eb4,g4,bb4,db5]@16 [eb4,ab4,c5]@15 [d4,f4,bb4]@16 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [ab4,c5,eb5]@7, ~ bb3@6 ~@153]/5", // Bb Cm Ab Cm Eb Bb Eb7 Ab …
  X: "[~ [ab4,c5,eb5]@7 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [eb4,g4,bb4]@16 [d4,f4,bb4]@16 [eb4,g4,bb4,db5]@15 [eb4,ab4,c5]@16 [d4,f4,bb4]@16 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [ab4,c5,eb5]@7 [ab4,c5,eb5]@8 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [ab4,c5,eb5]@8 [ab4,c5,eb5]@8 [g4,c5,eb5]@8 [g4,c5,eb5]@7 [ab4,c5,eb5]@8 [ab4,c5,eb5]@8 [g4,c5,eb5]@8 [g4,c5,eb5]@8 [ab4,c5,eb5]@8 [ab4,c5,eb5]@8 [g4,c5,eb5]@27]/8", // Ab Cm Eb Bb Eb7 Ab Bb Cm …
  Y: "[~@4 [g3,c4,eb4]@12 [f3,bb3,d4,bb4]@8 ~@4 [d3,g3,b3,g4]@47 ~@21]/3", // Cm Bb G
})).s("gm_piano").gain(0.14).pan(1)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B A B C@4 D E F G H A I A J K@2 C@2 D E F G L M@2 N@2 O@4 P ~@3 Q@3 R ~ S@5 T U V@6 W@6 X Y@4
>`.pickRestart({
  A: "c3 ~ [c4,eb4,g4]@2 ab2 ~ [eb4,ab4,c5]@2, ~ c3@3 ~ ab2@3", // Cm Ab
  B: "c3 ~ [c4,eb4,g4]@2 eb3 ~ [eb4,g4,bb4]@2, ~ c3@3 ~ eb3@3", // Cm Eb
  C: "[[g3,bb3,d4]!4 [eb3,g3,bb3]!3 [g3,bb3,d4]@2 [g3,bb3,d4]!3 [f3,bb3,d4]!4]/2", D: "[c4,eb4,g4]!4 [ab3,c4,eb4]!4",
  E: "[c4,eb4,g4]!4 [g3,bb3,eb4,g4,bb4]@4", F: "[d4,f4,bb4] [eb4,g4,bb4,db5]", G: "[eb4,ab4,c5] [d4,f4,bb4]",
  H: "~@5 g2@5 ~ g2@5 g2@5 g3@5 ~ f3@5", I: "c3 ~ [c4,eb4,g4]@2 ~ [bb3,eb4] [eb4,bb4]!2, ~ c3@3 ~@4",
  J: "[c4,eb4,g4]!8", K: "[[g3,bb3,d4]!4 [eb3,g3,bb3]!3 [g3,bb3,d4]@2 [g3,bb3,d4]!3 [f3,bb3,d4]@4]/2",
  L: "~ [eb3,g3,bb4] ~@2", M: "[g4,c5]!8 [g4,b4]!8", N: "[c3,g3,f4]!4 [c3,g3,e4]!4", O: "[f3,bb3,c4]!4 [f3,a3,c4]!4",
  P: "[f3,bb3,d4]@16 [f3,bb3,d4]@3 ~@13", // Bb
  Q: "[~@24 [c3,g3,c4,eb4]@15 [ab2,eb3,ab3,c4]@15 [c3,g3,c4,eb4]@15 [ab2,eb3,ab3,c4]@15 [bb2,f3,bb3,d4]@3 ~ [bb2,f3,bb3,d4]@3 ~ [bb2,f3,bb3,d4]@3 ~]/3", // Cm Ab Cm Ab Bb
  R: "[bb2,f3,bb3,d4]@3 ~@29", // Bb
  S: "[~@16 c3@4 ~@4 [eb4,g4]@7 ab2@4 ~@4 [eb4,ab4,c5]@8 c3@4 ~@4 [c4,eb4,g4]@8 eb3@4 ~@4 [eb4,g4,bb4]@8 c3@3 ~@4 [c4,eb4,g4]@8 ab2@4 ~@4 [eb4,ab4,c5]@8 c3@4 ~@4 [c4,eb4,g4]@8 eb3@4 ~@4 [eb4,g4,bb4]@7 ~ d4@3 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [eb3,g3,bb3]@3, ~@20 c3@12 ~@3 ab2@12 ~@4 c3@12 ~@4 eb3@12 ~@3 c3@12 ~@4 ab2@12 ~@4 c3@12 ~@4 eb3@12 ~@18, ~@23 c4@8 ~@110 [g3,bb3]@4 ~@15]/5", // Eb Ab Cm Eb Cm Ab Cm Eb …
  T: "~@17 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [f3,bb3,d4]@3", U: "~@3 [g3,bb3,d4]!4 [eb3,g3,bb3]",
  V: "[[eb3,g3,bb3]@4 [eb3,g3,bb3]@4 [g3,bb3,d4]@8 [g3,bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3,d4]@3 ~ [bb3,d4]@3 ~ f3@3 [f3,bb3,d4]@4 [f3,bb3,d4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@3 ~ c4@3 eb4 [eb4,g4,bb4]@15 [d4,f4,bb4]@16 [eb4,g4,bb4,db5]@16 [eb4,ab4,c5]@15 [d4,f4,bb4]@16 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@3, ~@27 f3@4 [bb3,d4]@4 ~@51 [eb4,g4]@4 [g3,bb3]@16 ~@86]/6", // Eb Gm Bb Cm Ab Cm Eb Bb …
  W: "[~ [ab3,c4,eb4]@4 [ab3,c4,eb4]@3 ~ g4@3 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [g3,bb3,eb4,g4,bb4]@16 [d4,f4,bb4]@16 [eb4,g4,bb4,db5]@15 [eb4,ab4,c5]@16 [d4,f4,bb4]@16 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [ab3,c4,eb4]@3 ~ ab3@3 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@3 ~ [c4,eb4]@3 ~ eb4@3 [ab3,c4,eb4]@4 [ab3,c4,eb4]@3, ~@8 [c4,eb4]@4 ~@110 [c4,eb4]@4 ~@51 g4@4 [ab3,c4]@4 ~@7]/6", // Ab Cm Eb Bb Eb7 Ab Bb Cm …
  X: "~ [ab3,c4,eb4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [c4,eb4,g4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@3", // Ab Cm Ab
  Y: "[~ [ab3,c4,eb4]@4 [c4,eb4,g4]@31 [c3,g3,eb4,c5]@12 [bb2,f3,bb3,d5]@8 ~@4 [g2,b2,d3,g3,b3,d5]@47 ~@21]/4", // Ab Cm Bb G
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0)

// other · distortion guitar
const distortion_guitar = note("<~@13 [~@6 g3@5 ~@11 g3@5 ~@5] ~@54>").s("gm_distortion_guitar").gain(0.25).pan(0)

// other · trombone
const trombone = note("<~@26 A B C ~@7 D@3 E ~@8 F@2 G@4 ~@14>".pickRestart({
  A: "~@5 c4 eb4 f4", B: "g4@8 g4@5 ~@3 d4@4 d4@2 d4@5 ~ d4@4", C: "f4@2 f4@2 f4@2 f4@2 f4@2 g4 d4@3 d4@2",
  D: "[eb3@15 g3@7 ~ bb3@7 eb4@11 ~@4 g4@7 ~ f4@7 eb4@15 g3@7 ~ a3@7 bb3@6]/3",
  E: "~ bb3@5 ~ a3@2 bb3@3 ~ c4@3 bb3@5 ~@11",
  F: "[~@8 d4 d4@2 d4@2 d4@2 d4@6 d4@4 d4@2 c4@4 bb3@8 ~@6 d4@4 d4@4 d4@4 bb3@2 d4@5]/2",
  G: "[~ f4@8 ~@3 d4@8 c4@4 bb3@4 d4@8 c4@4 bb3@8 d4@4 d4@4 d4@3 d4@4 d4@2 eb4@6 f4@4 g4@31 ~@22]/4",
})).s("gm_trombone").gain(0.51).pan(0.3)

// other · english horn
const english_horn = note(`<
  ~@29
  [g4@2 g4@2 g4@2 g4@2 g4@2 bb4@2 e4 d4 c4@2]
  [c4!2 e4 f4 g4 c4 e4 c4]
  ~@3
  [~@24 a4@5 a4@3]
  [c5@3 bb4@11 ~@18]
  ~@32
>`).s("gm_english_horn").gain(0.41).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B A@2 C D A E F@2 ~ A G A B C H C D A E F@2 I J@8 K L M N O P Q R ~ S T U V W@2 X Y Z AA AB AC AD AE I AF AG AH
  AI AJ Q AK ~@2
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@6", C: "x!2 ~@2 x!2 ~ x", D: "~ x ~@6", E: "x!2 ~@2 x ~@3", F: "x!2", G: "~@3 x ~@4",
  H: "~ x ~@2 x ~@3", I: "~ x ~ x", J: "x!2 ~ x!3 ~ x", K: "~ x", L: "x ~@6 x ~@7 x ~@6 x ~@7 x ~",
  M: "~@5 x ~@7 x ~@6 x ~@7 x ~@3", N: "~@3 x ~@7 x ~@6 x ~@7 x ~@5", O: "~@3 x", P: "~@7 x ~@14 x ~@9",
  Q: "~@5 x ~@26", R: "x", S: "~@16 x ~@3 x ~@10 x", T: "~@3 x ~@11 x ~@3 x ~@11 x", U: "~@3 x ~@11 x ~@2 x ~@11 x ~",
  V: "~ x ~@5 x ~ x ~@6", W: "~@13 x ~@3 x ~@11 x ~@2", X: "~@3 x!2 ~@2 x", Y: "x!3 ~", Z: "~@11 x ~@3 x ~@11 x ~@3 x",
  AA: "~@11 x ~@3 x ~@10 x ~@5", AB: "~@5 x ~@7 x ~@2", AC: "~@10 x ~@14 x ~@6", AD: "~@9 x ~@3 x ~@11 x ~@3 x ~@2",
  AE: "~@2 x!2 ~@2 x ~", AF: "~@7 x ~@15 x ~@8", AG: "~@7 x ~@3 x ~@11 x ~@2 x ~@5", AH: "~@3 x ~ x ~@5 x ~ x ~@2",
  AI: "~@6 x ~@3 x ~@10 x ~@3 x ~@6", AJ: "~@5 x ~@3 x ~@11 x ~@3 x ~@6", AK: "~@2 x!2 ~ x!3",
})).gain(0.51)

// drums · clap
const clap = s("cp").struct("<~@15 [~@5 x!3] ~@26 [~@13 x ~@2] [~@10 x ~@14 x ~@3 x ~@2] ~@24>").gain(0.51)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@2 C D E ~@4 F B A B C G C D E ~@21 H I J K L@2 M N O ~@3 P ~@3 Q ~@7
>`.pickRestart({
  A: "x!8", B: "x!3 ~@5", C: "x!7 ~", D: "~ x!4 ~@3", E: "x", F: "~ x!7", G: "~ x!3 ~@4",
  H: "~@16 x ~@3 x ~@2 x ~@3 x ~@3 x", I: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  J: "~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~", K: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
  L: "~@13 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", M: "~@3 x!5", N: "x ~@3 x ~@11 x ~@3 x ~@3 x ~@2 x ~@4", O: "~@11 x ~@20",
  P: "~@9 x ~@22", Q: "~@7 x ~@24",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A ~@8 B ~@3 A ~@21 C D E ~@6 F ~@19>".pickRestart({
  A: "~@12 x!4", B: "~@5 x ~@5 x ~@4 x ~@4 x ~@5 x ~@4", C: "~@29 x ~ x", D: "~@5 x ~@7 x!2 ~@13 x ~ x ~",
  E: "~@3 x ~@7 x ~ x ~@18", F: "~@6 x ~ x!2 ~ x ~@20",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A ~ B C D@2 ~ B E ~@2 A C A ~ B C D@2 ~@13 F G ~ B ~@8 H I J K L M F N O P ~@3 Q A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~ x", D: "x!2", E: "~@3 x ~@4", F: "~@3 x", G: "~@11 x ~@4", H: "~ x ~@2", I: "~@11 x ~@20",
  J: "~@13 x ~@2", K: "~@5 x ~@7 x ~@2", L: "~@10 x ~@14 x ~@6", M: "~@9 x ~@22", N: "~ x ~ x", O: "~@7 x ~@15 x ~@8",
  P: "~@7 x ~@24", Q: "~@5 x ~@26",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@9 A B ~@11 A B ~@28 C D ~@2 E F ~@2 G H I J ~@4>".pickRestart({
  A: "~ x!3", B: "x!2 ~@2", C: "~@19 x ~@7 x ~@4", D: "~@3 x ~@7 x ~@7 x ~@12", E: "~@17 x ~@7 x ~@6",
  F: "~ x ~@6 x ~@7 x ~@15", G: "~@15 x ~@7 x ~@6 x ~", H: "~@3 x ~@3 x ~@3 x ~@3 x", I: "~@6 x ~@7 x ~@6 x ~@7 x ~@2",
  J: "~@5 x ~@7 x ~@7 x ~@7 x ~@2",
})).gain(0.51)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A B A B A B A B A C ~@3 B A B A B D B ~ B C ~@3 E@8 ~@17 F G ~@2 H I ~@2 J K L M ~@4
>`.pickRestart({
  A: "x", B: "x!4", C: "x!2 ~@2", D: "x!3 ~", E: "x!8", F: "~@11 x ~@7 x ~@7 x ~@4", G: "~@3 x ~@7 x ~@7 x ~@12",
  H: "~@9 x ~@7 x ~@7 x ~@6", I: "~ x ~@6 x ~@7 x ~@15", J: "~@7 x ~@7 x ~@7 x ~@6 x ~", K: "~@3 x ~@3 x ~@3 x ~@3 x",
  L: "~@6 x ~@7 x ~@6 x ~@7 x ~@2", M: "~@5 x ~@7 x ~@7 x ~@7 x ~@2",
})).gain(0.51)

stack(
  bass, piano, acoustic_guitar_steel, distortion_guitar, trombone, english_horn, kick, clap, snare, hihat, high_tom,
  crash, ride, tambourine
)

More by The Cowsills