Strudelify
KeyF minorTempo123 bpm
0:00/0:00
// One — Three Dog Night
// 123 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 89 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G D H I J D K L M D E F G D H I N D E F G D H I O P Q R S T U V W X Y Z AA X Y Z AB X AC AD AA X AC AD AB
  AE AF AG AH ~ Y Z AA X Y Z AB X AC AD AA X AC AD AB ~ Y Z AA X Y Z AB X AC AD AI AJ AK
>`.pickRestart({
  A: "[f4,ab4]@2 ~@4 [f4,ab4]@2 ~@4 [f4,ab4]@3 ~@3 [f4,ab4]@2 ~@4", // Fm
  B: "[f4,ab4]@2 ~@4 [f4,ab4]@2 ~@4 [f4,ab4]@3 ~@3 [f4,ab4]@3 ~@3", // Fm
  C: "[f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@3 ~@3", // Fm
  D: "[ab4,c5,eb5]@2 ~@4 [ab4,c5,eb5]@2 ~@4 [ab4,c5,eb5]@2 ~@4 [ab4,c5,eb5]@3 ~@3", // Ab
  E: "[bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~", // Bb
  F: "[db5,f5]@3 ~@3 [db5,f5]@3 ~@3 [g4,c5,e5]@2 ~@4 [g4,c5,e5]@3 ~@3", // Db C
  G: "[f4,ab4,c5]@3 ~@3 [f4,ab4,c5]@3 ~@3 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@3 ~@3", // Fm
  H: "[bb4,d5,f5] ~@2 [bb4,d5,f5] ~@2 [bb4,d5,f5] ~@2 [bb4,d5,f5] ~@2", // Bb
  I: "[ab4,db5,f5]@3 ~@3 [ab4,db5,f5]@3 ~@3 [g4,c5,e5]@2 ~@4 [g4,c5,e5]@2 ~@4", // Db C
  J: "[f4,ab4,c5]@3 ~@3 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4", // Fm
  K: "[bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@3 ~@3 [bb4,d5,f5]@2 ~@4 [bb4,d5,f5]@2 ~@4", // Bb
  L: "[db5,f5]@2 ~@4 [db5,f5]@3 ~@3 [g4,c5,e5]@2 ~@4 [g4,c5,e5]@3 ~@3", // Db C
  M: "[f4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@3 ~@3, ab4 ~@23", // F5 Fm
  N: "[ab4,c5]@3 ~@3 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@2 ~@4 [f4,ab4,c5]@3 ~@3", // Ab Fm
  O: "[f2,f3]@6 [c2,c3]@5 ~ [f2,f3]@6 [g2,g3]@4 ~@2", // F C F G
  P: "[ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@5", // Ab
  Q: "[g3,c4,eb4] ~@5 [g3,c4,eb4] ~@5 [g3,c4,eb4] ~@5 [g3,c4,eb4] ~@5", // Cm
  R: "[gb3,c4]@2 ~@4 [gb3,c4,eb4] ~@5 [gb3,c4,eb4] ~@5 [gb3,c4,eb4] ~@5, eb4 ~@23", // Gbdim Cdim
  S: "[gb3,c4]@2 ~@4 [gb3,c4]@2 ~@4 [c4,eb4] ~@5 [gb3,c4] ~@5, eb4 ~@5 eb4 ~@5 gb3@2 ~@4 eb4@2 ~@4", // Gbdim Cm Gbdim
  T: "[db4,f4]@2 ~@4 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [f4,ab4] ~@5, ab4 ~@17 db4@2 ~@4", // Db Fm
  U: "[db4,e4,ab4] ~@5 [db4,e4,ab4] ~@5 [db4,e4,ab4] ~@5 [db4,e4]@2 ~@4, ~@18 ab4 ~@5", // Dbm
  V: "[c4,f4,ab4]@2 ~@4 [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@5", // Fm
  W: "[c4,f4,ab4] ~@2 f3 f2@2 [f3,c4,f4,ab4] ~ f2 ~ f3@2 [c4,f4,ab4] ~ f3 ~ f2@2 [f3,c4,f4,ab4] ~@2 f3@2 ~, f2 ~@5 f2 ~@3 f2 ~", // Fm
  X: "[f3,ab3,c4]", Y: "[ab3,c4,eb4]", Z: "[bb3,d4,f4]@23 ~", AA: "[db4,f4,ab4]@11 ~ [c4,e4,g4]@12",
  AB: "[db4,f4,ab4]@11 ~ [c4,e4,g4]@11 ~", AC: "[ab3,c4,eb4]@23 ~", AD: "[bb3,d4,f4]@11 ~",
  AE: "~@3 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4] ~@2, ~@18 eb4 ~@5", // Ab
  AF: "[g3,c4,eb4] ~@2 [c4,eb4] ~@2 [c4,eb4] ~@2 [c4,eb4] ~@2, ~@6 g3 ~@5 g3 ~@5 g3 ~@5", // Cm
  AG: "[gb3,c4,eb4] ~@2 [gb3,c4] ~@2 [gb3,c4,eb4] ~@2 [gb3,c4] ~@2, ~@6 eb4 ~@11 eb4 ~@5", AH: "[ab3,c4] ~@2 f3 ~@8",
  AI: "[db4,f4,ab4]@11 ~ [c4,e4,g4]@5 ~@7", AJ: "[f2,f3]@6 [c2,c3]@5 ~ [f2,f3]@6 [g2,g3]@6", AK: "[ab2,ab3]",
})).s("gm_piano").gain(0.44).pan(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C D E B C F E B C G H B C D E B C F I J K L M N O P Q ~@2 R S T@2 U@2 V N O W X Y Z AA AB J AC AD AE AF AG AH
  AI ~@2 AJ AB N O W X Y Z AA AB J AC AD AE AF AK AH V N O W X Y Z AA AB J AC AD AL AM
>`.pickRestart({
  A: "f1@23 ~", B: "ab1", C: "bb1", D: "db2@10 ~@2 c2@4 bb1@2 c2@3 eb2@2 ~", E: "f1", F: "db2@12 c2@9 ~ f2@2",
  G: "db2@10 ~@2 c2@3 ~ bb1@2 ~@3 eb2@2 ~, ~@18 c2@5 ~", H: "f1@11 ~",
  I: "~@2 f2 ~@3 f2@6 ~@2 f2 ~@3 f2@6, f1@2 ~ f1@3", J: "~@2 ab2 ~@3 ab2@6 ~@2 ab2 ~@3 ab2@5 ~, ab1@9 ~@3 ab1@11 ~",
  K: "~@2 bb2 ~@3 bb2@6 ~@2 bb2 ~@3 bb2@6, bb1@10 ~@2 bb1@11 ~",
  L: "~@2 db3 ~@3 db3@5 ~@3 c3 ~@3 c3@6, db2@10 ~@2 c2@11 ~", M: "~@2 f2 ~@3 f2@6 ~@2 f2 ~@3 f2@6, f1@5 ~ f1@6",
  N: "~@2 ab2 ~@3 ab2@6 ~@2 ab2 ~@3 ab2@6, ab1@10 ~@2 ab1@11 ~",
  O: "~@2 bb2 ~@3 bb2@6 ~@2 bb2 ~@3 bb2@5 ~, bb1@9 ~@3 bb1@11 ~",
  P: "~@2 db3 ~@3 db3@5 ~@3 c3 ~@3 c3@4 ~@2, db2@5 ~ c2@5 ~", Q: "f2@5 ~ c2@6 f2@5 ~ g2@4 ~@2", R: "~@11 eb1",
  S: "f1@4 bb1@2 c2@4 eb2@2 f2@3 ~ c2@8", T: "[db2@47 ~]/2", U: "[f1@43 ~@5]/2",
  V: "~@2 f2 ~@3 f2@6 ~@2 f2 ~@3 f2@5 ~, f1@8 ~@4 f1@11 ~", W: "~@2 db3 ~@3 db3@5 ~@3 c3 ~@3 c3@5 ~, db2@5 ~ c2@5 ~",
  X: "~@2 f2 ~@3 f2@6 ~@2 f2 ~@3 f2@5 ~, f1@7 ~@5 f1@11 ~",
  Y: "~@2 ab2 ~@3 ab2@6 ~@2 ab2 ~@3 ab2@6, ab1@9 ~@3 ab1@11 ~",
  Z: "~@2 bb2 ~@3 bb2@5 ~@3 bb2 ~@3 bb2@5 ~, bb1@8 ~@4 bb1@11 ~",
  AA: "~@2 db3 ~@3 db3@5 ~@3 c3 ~@3 c3@5 ~, db2@10 ~@2 c2@11 ~", AB: "~@6 f2@6 ~@2 f2 ~@3 f2@5 ~, f1@10 ~@2 f1@11 ~",
  AC: "~@2 bb2 ~@3 bb2@5 ~@3 bb2 ~@3 bb2@5 ~, bb1@9 ~@3 bb1@11 ~",
  AD: "~@2 db3 ~@3 db3@6 ~@2 c3 ~@3 c3@5 ~, db2@5 ~ c2@5 ~", AE: "~@2 f2 ~@3 f2@6 ~@2 f2 ~@3 f2@6, f1@3 ~ f1@4",
  AF: "~@2 ab2 ~@3 ab2@5 ~@3 ab2 ~@3 ab2@6, ab1@9 ~@3 ab1@11 ~",
  AG: "~@2 bb2 ~@3 bb2@6 ~@2 bb2 ~ bb2@5 ~@3, bb1@5 ~ bb1@5 ~",
  AH: "~@2 db3 ~@3 db3@5 ~@3 c3 ~@3 c3@3 ~@3, db2@10 ~@2 c2@11 ~", AI: "[f1,f2] ~@7", AJ: "~@3 f1@2 ~@7",
  AK: "~@2 bb2 ~@3 bb2@6 ~@2 bb2 ~@3 bb2@5 ~, bb1@5 ~ bb1@5 ~", AL: "f2@5 ~ c2@6 f2@5 ~ g2@6", AM: "ab2@23 ~",
})).s("gm_electric_bass_finger").gain(0.49)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@11 A B C ~@8 D E F G H I J K ~@8 L M N O P Q R S T Q U V W X Y Z AA ~@4 M N O P Q R S T Q U V W X Y Z AA M N O P Q R
  S T Q U V W ~@2
>`.pickRestart({
  A: "~@6 f4@3 ~ f4 ~@3 f4 ~@3 [f3,f4]@3 ~ f4 ~", // F
  B: "f3 ~ f4 ~ f3 ~ [f3,f4]@3 ~ [f3,f4] ~ f3 ~ [f3,f4] ~ f3 ~ [f3,f4]@3 ~ [f3,f4] ~", // F
  C: "f3 ~ [f3,f4] ~ f3 ~ [f3,f4]@3 ~ [f3,f4] ~ f3 ~ [f3,f4] ~ f3 ~ [f3,f4]@3 ~ [f3,f4] ~", // F
  D: "~@2 f4 ~@3 f4@4 f3 ~@3 f4 ~@3 f4@5 ~",
  E: "~@2 [f3,f4] ~@3 f4@3 ~ f3 ~ f3 ~ [f3,f4] ~@3 f4@3 ~ f3@2, ~@6 f3 ~@11 f3 ~@5", // F
  F: "f3 ~ [f3,f4] ~@3 f4@3 ~ f3@2 f3 ~ [f3,f4] ~@3 f4@3 ~@3, ~@6 f3 ~@11 f3 ~@5", // F
  G: "~@2 [f3,f4] ~@3 [f3,f4]@2 ~@2 f3 ~ f3 ~ [f3,f4] ~@3 f4@3 ~ f3 ~", // F
  H: "~@2 f4 ~@3 f4@3 ~ f3 ~ f3 ~ f4 ~@3 [f3,f4]@3 ~ f3 ~, ~@6 f3 ~@17", // F
  I: "~@2 [f3,f4] ~@3 [f3,f4]@3 ~ f3 ~ f3 ~ [f3,f4] ~@3 [f3,f4]@3 ~ f3@2", // F
  J: "~@2 [f3,f4] ~ f3 ~ f4@3 ~ f3 ~@3 [f3,f4] ~@3 [f3,f4]@3 ~ f3@2, ~@6 f3 ~@17", // F
  K: "~@2 [f3,f4] ~@3 f4@3 ~ f3 ~ f3 ~ [f3,f4] ~@3 f4@3 ~ f3 ~, ~@6 f3 ~@11 f3 ~@5", // F
  L: "f3@2 f4 ~ f3@2 f4@2 f3@2 f4@2 ~ f4@2 f3@2 f4@2 f3@2 f4@2 ~, ~@6 f3 ~@5", M: "~@6 f3@7 ~@5 f3@5 ~",
  N: "~@6 ab3@6 ~@6 ab3@5 ~", O: "~@3 bb3@3 ~@3 bb3@2 ~", P: "~@6 db4@6 ~@6 c4@5 ~", Q: "~@6 f3@7 ~@5 f3@6",
  R: "~ ab3 ~ ab3", S: "~@6 bb3@7 ~@5 bb3@5 ~", T: "~@6 db4@5 ~@7 c4@5 ~", U: "~@6 ab3@6 ~@5 ab3@6 ~",
  V: "~@6 bb3@6 ~@5 bb3@5 ~@2", W: "~@5 db4@5 ~@8 c4@5 ~", X: "~@6 f3@6 ~@6 f3@5 ~", Y: "~@5 ab3@6 ~@6 ab3@6 ~",
  Z: "~@5 bb3@6 ~@6 bb3@5 ~@2", AA: "~@5 db4@5 ~@7 c4@5 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.38).pan(0.7)

// other · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note("<~@11 A B ~@9 C ~ D E F G H ~@60>".pickRestart({
  A: "~@2 f4 ~@3 f3@3 ~ f3 ~ f3 ~ f3 ~ f3 ~@5 f3 ~", B: "~@2 f3 ~@21", C: "~@12 f3 ~ f3 ~@3 f3 ~@3 f3@2",
  D: "~@22 f3 ~", E: "f3 ~@23", F: "f3 ~@3 f3 ~@3 f3 ~@15", G: "f3 ~@3 f3 ~@11 f3 ~@7", H: "~@12 f3 ~@11",
})).s("gm_electric_guitar_jazz").gain(0.16).pan(0.7)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@22 A B C D E F G H I ~@7 J K L M N O P Q R S T Q U V W X Y Z ~@3 K L M N O P Q R S T Q U V W X Y AA L M N O P Q R S
  T Q U AB AC
>`.pickRestart({
  A: "~@2 f4 ~@3 f4@5 ~ f3 ~ f4 ~@3 f4@2 f3@2 f4 ~, f3@7 ~@17",
  B: "f3@2 f4 ~ f3@2 f4@2 f3@2 f4 ~ f3 ~ f4 ~ f3 ~ f4@2 ~@2 f4 ~",
  C: "f3@2 f4 ~@3 f4@2 ~@2 f4 ~ f3 ~ f4 ~ f3 ~ f4@2 ~@2 f4 ~", D: "f3 ~ f4 ~ f3 ~ f4@6 f3 ~ f4 ~ f3 ~ f4@2 ~@2 f4@2",
  E: "f3@2 f4 ~@3 f4@3 ~ f4 ~ f3 ~ f4 ~ f3 ~ f4@2 ~@2 f4@2", F: "f3 ~ f4 ~ f3@2 f4@2 ~@2 f4@2 f3 ~ f4 ~@3 f4@3 ~ f4@2",
  G: "f3 ~ f4 ~ f3 ~ f4@4 f4@2 f3 ~ f4 ~ f3 ~ f4@3 ~ f4@2",
  H: "f3 ~ f4 ~ f3 ~ f4@3 ~ f4@2 f3@2 f4 ~ f3 ~ f4@2 ~@2 f4 ~", I: "f3@5 ~ c3@6 f3@6 g3@3 ~@3",
  J: "f3 f4 f3 f4 f3 f4 f3 f4 f3 f4 f3 f4", K: "f3@2 f4 ~ f3@2 f4@2 f3 ~ f4@2 f3@2 f4 ~ f3@2 f4 ~ f3 ~ f4@2",
  L: "ab3@2 ab4 ~ ab3@2 ab4 ~ ab3@2 ab4@2 ab3@2 ab4 ~ ab3@2 ab4@2 ab3@2 ab4@2",
  M: "bb3@2 bb4 ~ bb3@2 bb4 ~ bb3 ~ bb4@2 bb3@2 bb4 ~ bb3@2 bb4 ~ bb3@2 bb4@2",
  N: "db4@2 db5 ~ db4@2 db5 ~ db4@2 db5@2 db4 ~ c5@2 c4 ~ c5@2 c4 ~ c5@2",
  O: "f3@2 f4 ~ f3 ~ f4@2 f3 ~ f4@2 f3@2 f4@2 f3 ~ f4@2 f3@2 f4@2",
  P: "ab3@2 ab4 ~ ab3@2 ab4@2 ab3@2 ab4@2 ab3@2 ab4 ~ ab3@2 ab4@2 ab3@2 ab4@2",
  Q: "bb3@2 bb4 ~ bb3@2 bb4@2 bb3@2 bb4@2 bb3@2 bb4 ~ bb3@2 bb4 ~ bb3@2 bb4@2",
  R: "db4@2 db5 ~ db4@2 db5 ~ db4@2 db5 ~ c4@2 c5 ~ c4 ~ c5@2 c4@2 c5@2",
  S: "f3@2 f4 ~ f3 ~ f4@2 f3 ~ f4@2 f3@2 f4@2 f3@2 f4@2 f3@2 f4@2",
  T: "ab3@2 ab4 ~ ab3@2 ab4@2 ab3@2 ab4@2 ab3@2 ab4 ~ ab3@2 ab4 ~ [ab3,ab4]@2 ~@2", // Ab
  U: "db4@2 db5 ~ db4@2 db5 ~ db4@2 db5@2 c4@2 c5 ~ c4@2 c5@2 c4@2 c5@2",
  V: "f3@2 f4@2 f3@2 f4@2 f3@2 f4@2 f3@2 f4@2 f3 ~ f4@2 f3@2 f4@2",
  W: "ab3 ~ ab4 ~ ab3@2 ab4@2 ab3@2 ab4@2 ab3@2 ab4 ~ ab3@2 ab4 ~ [ab3,ab4]@3 ~", // Ab
  X: "bb3@2 bb4 ~ [bb3,bb4]@2 bb3@2 ~@2 bb4@2 bb3@2 bb4 ~ bb3@2 bb4@2 [bb3,bb4]@2 ~@2", // Bb
  Y: "db4@2 db5 ~ db4@2 db5 ~ db4@2 db5@2 c4@2 c5 ~ c4 ~ c5 ~ c4@2 c5@2", Z: "f2 ~@7",
  AA: "[f2,f3]@2 f4 ~ f3@2 f4@2 f3 ~ f4@2 f3@2 f4 ~ f3@2 f4 ~ f3 ~ f4@2", AB: "[f2,f3] [c2,c3] [f2,f3] [g2,g3]",
  AC: "[ab2,ab3]", // Ab
})).s("gm_overdriven_guitar").gain(0.33)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@36 A@3 B@3 C D@8 E@4 ~@4 B@3 C D@8 E@4 B@3 C D@8 ~@2>".pickRestart({
  A: "[~@12 f2@23 ~, ~@23 f3@46 ~@3]/3", B: "[f2@23 ab2@25 bb2@24]/3", C: "db3 c3",
  D: "[f2@23 ab2@24 bb2@24 db3@12 c3@12 ~]/4", E: "[f2@23 ab2@24 bb2@24 db3@12 c3@11 ~@2]/4",
})).s("gm_string_ensemble_1").gain(0.38)

// other · flute
const flute = note("<~@15 A B C@2 D E F ~@12 G@3 H@2 ~@50>".pickRestart({
  A: "eb5@23 ~", B: "d5@23 ~", C: "[db5@11 ~ c5@10 ~ f4@23 ~@2]/2", D: "g4@11 ~", E: "ab4@11 ~",
  F: "bb4@10 ~@2 c5@11 ~", G: "[~@23 f4@24 ~ e4@23 ~, ~@23 ab4@47 ~@2]/3", H: "[~@12 f4@25 ~@11]/2",
})).s("gm_flute").gain(0.27).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@10 [~@3 x!2 ~] [~ x ~ x!3] [x!2 ~ x!3] [x!6] ~@75>").gain(0.33)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@22
  [x!2 ~ x ~ x!2 ~ x ~ x ~]
  [~ x!3 ~@3 x!3 ~ x]
  [~ x ~ x!3 ~@2 x!3 ~]
  [~ x ~@10]
  ~@12
  [~ x ~@10]
  ~@50
>`).gain(0.33)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 [~@7 x ~@4] [~@3 x ~@5 x ~ x] [~@7 x ~ x ~@2] [~@3 x ~ x ~@3 x ~ x] ~@75>")
  .gain(0.38)

// drums · open hat
const open_hat = s("oh").struct(`<
// … 22 more lines

More by Three Dog Night