Strudelify

Old Apartment

Barenaked Ladies

KeyB♭ majorTempo80 bpm
0:00/0:00
// Old Apartment — Barenaked Ladies
// 80 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 48-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): guitar program 29.
setcpm(80/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 · acoustic bass
const bass = note("<A B A C D E F G ~@5 H A I J K L M N@8 ~@5 O@7 ~@6 P@8 Q@8 R@2 S>".pickRestart({
  A: "bb1@2 ~ bb1@3 ~@6 f1@2 ~ f1@3 ~@6", B: "eb2@2 ~ eb2@3 ~@6 eb2@2 ~ eb2@3 ~@6",
  C: "eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@3 bb1@2 ~ c2@2 ~@2 g1@2",
  D: "bb1@2 ~ bb1@2 ~@4 c2@2 ~ f1@2 ~ f1@2 ~ a1 ~ bb1 c2@2 ~",
  E: "g2@4 ~@2 g2@4 ~@2 f2@4 ~@2 f2@4 ~@2 eb2@4 ~@2 eb2@4 ~@5 bb1@2 ~ c2@2 ~@2 g1@2",
  F: "bb1@2 ~ bb1@2 ~@7 f1@2 ~ f1@2 ~@7", G: "eb2@2 ~ eb2@2 ~@7 eb2@2 ~ eb2@2 ~@7",
  H: "~@3 eb2@3 ~@3 g2@2 ~ f2 ~@2 f2@3 f1@2 ~ f1@2 ~",
  I: "eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@3 bb1@2 ~ c2@2 ~ g1@2 ~",
  J: "bb1@2 ~ bb1@3 c2@2 ~ c2@3 f1@2 ~ f1@3 ~@3 c2@3",
  K: "eb2@4 ~@2 eb2@6 ~@3 f1@2 ~ g1@4 ~@2 c2@4 ~@2 c2@6 ~@6 g1@4 ~@2",
  L: "bb1@2 ~ bb1@3 ~@3 c2@2 ~ f1@2 ~ f1@3 ~@3 c2@3", M: "eb2@2 ~ eb2@2 ~ c2@2 ~ c2@2 ~ f1@6 ~@6",
  N: "[bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@11 eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@12 bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@12 eb1@4 ~@2 eb1@6 ~@12 eb1@4 ~@2 eb1@6 ~@3 bb1@2 ~ c2@2 ~@2 g1@2 bb1@4 ~@2 bb1@6 ~@6 c2@4 ~@2 f1@4 ~@2 f1@6 a1@3 ~ bb1@2 c2@6 g2@4 ~@2 eb2@4 ~@2 bb2@12 a2@4 ~@2 g2@4 ~@2 f2@4 ~@2 eb2@2 ~ c2@2 ~ bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@3 bb1@2 ~ c2@4 ~@2 eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@13]/8",
  O: "[~@5 eb2@6 ~@6 g2@4 ~@2 f2@2 ~@4 f2@6 f1@4 ~@2 f1@4 ~@2 bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@12 eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@3 bb1@2 ~ c2@2 ~@2 g1@2 bb1@4 ~@2 bb1@6 ~@6 c2@6 f1@4 ~@2 f1@6 ~@6 c2@4 d2@2 eb2@4 ~@2 eb2@6 ~@3 f1@2 ~ g1@4 ~@2 c2@4 ~@2 c2@6 ~@6 g1@4 ~@2 bb1@4 ~@2 bb1@6 ~@6 c2@4 ~@2 f1@4 ~@2 f1@6 ~@6 c2@6 eb2@4 ~@2 eb2@4 ~@8 c2@4 ~@2 f1@12 ~@13]/7",
  P: "[~@47 bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@12 eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@3 bb1@2 ~ c2@2 ~@2 g1@2 bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@3 c2@2 ~ d2@4 ~@2 eb2@4 ~@2 eb2@6 c2@4 ~@2 c2@6 bb1@3 c2@3 bb1@6 bb1@3 g1@3 f1@6 bb1@4 ~@2 bb1@6 ~@12 f1@4 ~@2 f1@6 ~@6 c2@4 ~@2 eb2@4 ~@2 eb2@6 ~@12 eb2@4 ~@2 eb2@6 ~@12 bb1@4 ~@2 bb1@6 ~@3 bb1@2 ~ c2@4 ~@2 f1@4 ~@2 f1@6 a1@3 ~ bb1@2 c2@3 ~@3 eb2]/8",
  Q: "[~@5 eb2@4 ~@14 eb2@4 ~@2 eb2@4 ~@5 bb1@2 ~ c2@2 ~ g1@2 ~ bb1@6 f1@6 d2@6 bb1@6 f1@6 a1@6 c2@6 d2@6 eb2@6 eb2@6 ~@6 bb1@6 eb2@6 eb2@6 ~@12 bb1@6 f1@6 d2@6 g1@6 f1@6 a1@6 c2@6 f2@6 eb2@6 ~@6 c2@6 bb1@6 eb2@6 eb2@6 c2@6 g1@6 bb1@6 bb1@6 d2@6 bb1@6 f1@6 c2@6 f2@6 f2@6 eb2@6 eb2@6 d2@6 c2@6 eb2@6 eb2@6 c2@3 bb1@9 bb1@6 d2@6 bb1@6 f2@6 f2@6 c2@6 f2@6 a1@6 eb2]/8",
  R: "[~@5 eb2@6 ~@6 bb1@6 eb2@6 ~@5 eb2@6 eb2@6 bb1@12 d2@12 f2@12 c2@14]/2", S: "eb2@13 ~@11",
})).s("gm_acoustic_bass").gain(0.51)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@8 A B C D E F ~@13 G@7 ~@5 H@8 ~@18>".pickRestart({
  A: "g2@4 ~@2 bb2@3 f3@8 ~@31", B: "g2@4 ~@2 bb2@3 eb3@8 ~@31", C: "g2@4 ~@2 bb2@3 d3@8 ~ c3@8 ~@16 a2@4 ~@2",
  D: "bb2 ~@2 bb2@2 ~ a2 ~@2 a2@2 ~ g2 ~@2 g2@2 ~ f2 ~@2 f2@2 ~", E: "g2@4 ~@2 d2@3 c2@6 f1@16 ~@11 c2@4 ~@2",
  F: "eb2 ~@23",
  G: "[~@47 g2@4 ~@2 bb2@3 f3@8 ~@31 g2@4 ~@2 bb2@3 eb3@8 ~@31 g2@4 ~@2 bb2@3 d3@8 ~ c3@8 ~@16 a2@4 ~@2 bb2@2 ~@4 bb2@4 ~@2 a2@2 ~@4 a2@4 ~@2 g2@2 ~@4 g2@4 ~@2 f2@2 ~@4 f2@4 ~@2 g2@4 ~@2 d2@3 c2@6 f1@16 ~@11 c2@4 ~@2 eb2@2 ~@47]/7",
  H: "[~@47 g2@24 f2@24 bb2@12 d3@12 eb3@12 d3@12 c3@24 f2@24 bb2@12 d3@12 eb3@12 d3@12 g2@24 f2@24 bb2@12 d3@12 eb3@12 [d2,d3]@12 [c2,c3]@24 f1@12 c2@12 ~, ~@359 f2@24 ~]/8", // D C
})).s("gm_acoustic_bass").gain(0.31)

// chords · electric guitar clean
const electric_guitar_clean = note("<A B C D E F A G ~@6 C D ~@4 H@4 ~@9 I@3 ~@4 J ~@3 K L@7 M@8 N@4 O>".pickRestart({
  A: "[bb3,d4,f4]@2 ~ [bb3,f4]@3 ~@5 bb3 [f3,a3,c4]@2 ~ [f3,a3,c4]@3 ~@5 a3", // Bb Bb5 F
  B: "[eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@10 a3@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@10 a3 ~", // Eb
  C: "[bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@6 ~@9 [bb3,d4,f4] ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@10 a3@2", // Bb F
  D: "[eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@9 f3 a3@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@10 a3 ~", // Eb
  E: "[bb3,d4,f4]@2 ~ [bb3,d4,f4]@3 ~@5 bb3 [f3,a3,c4]@2 ~ [f3,a3,c4]@3 ~@5 a3", // Bb F
  F: "[g3,bb3,d4]@4 ~@2 [g3,bb3,d4]@8 ~@7 [g3,bb3,d4]@2 ~@4 [g3,bb3,d4]@2 ~@4 d3@2 ~ [eb3,g3,bb3,eb4]@3 c3@2 ~ [eb3,g3,bb3,eb4]@4 ~@2", // Gm Eb
  G: "[eb3,g3,bb3]@2 ~ [eb3,g3,bb3]@3 ~@5 a3 [eb3,g3,bb3]@2 ~ [eb3,g3,bb3]@3 ~@6", // Eb
  H: "[[bb3,d4,f4]@4 ~@2 [bb3,f4]@6 ~@10 bb3@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@11 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@12 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@11 a3 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@6 ~@9 [bb3,d4,f4] ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@12 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@9 f3 ~@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@11 a3 ~, ~@23 a3 ~@11 a3 ~@35 a3 ~@11 a3 ~@12]/4", // Bb Bb5 F Eb Bb F Eb
  I: "[~@47 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@6 ~@9 [bb3,d4,f4] ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@12 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@9 f3 ~@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@11 a3 ~, ~@47 a3 ~@11 a3 ~@12]/3", // Bb F Eb
  J: "~@11 [g3,bb3,d4,g4]@12 ~@25", K: "~@11 [g3,bb3,d4]@16 ~@5 a3@3 [f3,a3,c4]@13",
  L: "[~@17 g3@12 ~@6 d3@12 [g3,c4]@9 g3@12 ~@3 f3@9 f3@12 ~@3 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@6 ~@9 [bb3,d4,f4] ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@10 a3@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@9 f3 a3@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@10 a3 ~ [bb3,d4,f4]@6 [bb3,d4,f4]@6 ~@6 [bb3,d4,f4]@4 ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@6 [a3,d4]@6 [eb3,g3,bb3,eb4]@4 ~@2 [eb3,g3,bb3,eb4]@4 ~@11 [g3,bb3,eb4]@2 ~@4 [g3,bb3,eb4]@6 ~@3 [bb3,eb4]@2 ~ g3@2 ~ f3@4 ~@2 [bb3,d4,f4]@6 [bb3,d4,f4]@6 ~@6 [bb3,d4,f4]@6 [f3,a3,c4]@3 ~@3 [f3,a3,c4]@6 ~@6 [f3,a3,c4]@3 d4@2 ~ [eb3,g3,bb3], ~@281 bb3@2 ~@51 c4@2]/7", // C5 Bb F Eb Bb F D5 Eb …
  M: "[~@5 [eb3,g3,bb3]@6 ~@9 c4@2 ~ [eb3,g3,bb3]@6 [eb3,g3,bb3]@6 ~@12 [bb3,d4,f4]@6 [bb3,d4,f4]@12 [bb3,d4,f4]@6 [f3,a3,c4]@6 [f3,a3,c4]@9 [f3,a3,c4]@9 [eb3,g3,bb3]@6 [eb3,g3,bb3]@9 ~@3 c4@6 [eb3,g3,bb3]@6 [eb3,g3,bb3]@15 ~@3 [bb3,d4,f4]@6 [bb3,d4,f4]@12 [bb3,d4,f4]@6 [f3,a3,c4]@6 [f3,a3,c4]@9 [f3,a3,c4]@9 [eb3,g3,bb3]@6 [eb3,g3,bb3,f4]@6 eb4@6 d4@6 c4@6 bb3@6 g3@6 ~@6 [bb3,d4,f4]@9 [bb3,d4,f4]@9 [bb3,d4,f4]@6 [f3,a3,c4]@9 ~@6 [f3,a3,c4]@9 [eb3,g3,bb3]@18 f4@6 [eb3,g3,bb3,eb4]@6 d4@6 c4@6 bb3@6 [bb3,d4,f4]@6 [bb3,d4,f4]@6 ~@6 [bb3,d4,f4]@6 [f3,a3,c4]@9 [f3,a3,c4]@9 ~@6 [eb3,g3,bb3], ~@19 a3@3 f3@3 ~@208 f3@15 ~@136]/8", // Eb Bb F Eb Bb F Eb Bb …
  N: "[~@5 [eb3,g3,bb3,eb4,g4]@6 ~@6 [eb3,g3,bb3]@21 ~@9 [bb3,d4,f4]@6 [bb3,d4,f4]@6 ~@3 [bb3,d4,f4]@9 [f3,a3,c4]@6 [f3,a3,c4]@6 ~@3 [f3,c4]@9 [eb3,g3,bb3]@9 [eb3,g3,bb3]@9 ~@6 [eb3,g3,bb3]@8 [eb3,g3,bb3]@9 ~@6 [bb3,d4,f4]@9 [bb3,d4,f4]@9 [bb3,d4,f4]@6 [f3,a3,c4]@6 [f3,a3,c4]@6 ~@6 [f3,a3,c4]@8, ~@17 [eb4,g4]@6 ~@169]/4", // Eb Bb F F5 Eb Bb F Eb
  O: "[eb3,g3,bb3]@19 ~@29", // Eb
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@8 A B C D E F ~@2 G H I J ~@7 K@4 L M@2 ~ N@5 O P Q@2 ~@21>".pickRestart({
  A: "f4@2 ~ g4@2 ~@4 f4@8 ~@31", B: "eb4@2 ~ f4@2 ~ bb4@2 ~ eb4@8 ~ [eb4,g4,bb4,eb5]@4 ~@26",
  C: "d4@2 ~ eb4@2 ~@4 d4@4 ~@35", D: "~@9 bb4@4 ~@2 g4@4 ~@29", E: "~@9 g4@16 ~@23",
  F: "eb4@9 eb4@7 ~@8 [f4,a4,c5]@2 ~@4 [f4,a4,c5]@8 ~@10, [g4,bb4] ~@2", // F Gm
  G: "[bb3,d4,f4]@8 ~ d4@6 ~@3 f4@3 ~@3 [f3,a3,c4]@6 [f3,a3,c4]@15 a3@3, ~@3 [bb3,f4]@4 ~@9, ~@5 d4@2 ~@9", // Bb F Bb5
  H: "[bb3,eb4,g4]@6 [bb3,eb4,g4]@6 bb3@3 eb4@3 ~@3 [bb3,f4]@2 ~@4 [f3,a3,c4,f4]@16 ~@5, ~@15 [bb3,g4]@7 ~@26, ~@18 eb4@5 ~@25", // Eb Bb5 F Eb
  I: "d4@3 d4@5 ~ d4@6 ~@3 f4@3 bb3@3 [f3,a3,c4]@6 [f3,a3,c4]@15 a3@3, [bb3,f4]@8 ~ [bb3,f4]@12 ~@27, ~@5 d4@2 ~@9", // F Bb5
  J: "[bb3,eb4,g4]@9 [bb3,eb4,g4]@3 bb3@3 bb3@3 ~@6 [f3,a3,c4,f4]@16 ~@8, ~@6 [eb4,g4]@3 [bb3,eb4,g4]@5 ~@10", // Eb F Eb
  K: "[~@47 f4@2 ~ g4@2 ~@4 f4@8 ~@31 eb4@2 ~ f4@2 ~ bb4@2 ~ eb4@8 ~ [eb4,g4,bb4,eb5]@4 ~@26 d4@2 ~ eb4@2 ~@4 d4@4 ~@36]/4", // Eb
  L: "~@4 bb4@2 ~ g4@2 ~@15",
  M: "[~@8 g4@16 ~@23 eb4@9 eb4@7 ~@8 [f4,a4,c5]@2 ~@4 [f4,a4,c5]@8 ~@11, ~@47 [g4,bb4]@16 ~@33]/2", // F Gm
  N: "[~@47 [bb3,d4,f4]@8 ~ d4@6 ~@3 f4@3 ~@3 [f3,a3,c4]@6 [f3,a3,c4]@15 a3@3 [bb3,eb4,g4]@6 [bb3,eb4,g4]@6 bb3@3 eb4@3 ~@3 [bb3,f4]@2 ~@4 [f3,a3,c4,f4]@16 ~@5 d4@3 d4@5 ~ d4@6 ~@3 f4@3 bb3@3 [f3,a3,c4]@6 [f3,a3,c4]@15 a3@3 [bb3,eb4,g4]@9 [bb3,eb4,g4]@3 bb3@3 bb3@3 ~@6 [f3,a3,c4,f4]@16 ~@9, ~@56 [bb3,f4]@12 ~@42 [bb3,g4]@7 ~@26 [bb3,f4]@8 ~ [bb3,f4]@12 ~@45 [bb3,eb4,g4]@10 ~@21, ~@62 d4@6 ~@45 eb4@5 ~@40 d4@6 ~@39 [eb4,g4]@6 ~@31]/5", // Bb F Eb Bb5 F Eb F Bb5 …
  O: "~@35 [f3,a3,c4,f4]@12 ~", P: "~@29 [eb3,g3,bb3,eb4]@4 ~@8 [eb3,g3,bb3,eb4]@4 ~@3",
  Q: "[~@5 c3@4 ~@2 [g3,c4,eb4]@8 ~@4 [f3,a3,c4]@8 ~@16 [bb3,d4]@12 ~@18 [eb3,g3,bb3,eb4]@4 ~@8 [eb3,g3,bb3,eb4]@4 ~@3, ~@11 f3@3 ~@10]/2", // Cm F Bb Eb
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · overdriven guitar
const overdriven_guitar = note("<~@23 A@5 ~@5 B ~@18 C@2 ~@11>".pickRestart({
  A: "[~@47 [bb3,d4,f4]@4 ~@2 [bb3,f4]@6 ~@12 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@12 [bb3,eb4,g4]@6 [bb3,eb4,g4]@6 bb3@3 eb4@3 ~@3 [bb3,f4]@2 ~@4 [f3,a3,c4,f4]@16 ~@5 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@6 ~@9 [bb3,d4,f4] ~@2 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@6 ~@12 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@9 f3 ~@2 [eb3,g3,bb3]@4 ~@2 [eb3,g3,bb3]@6 ~@13, ~@70 bb3@2 ~@38 [bb3,g4]@7 ~@73 a3@2 ~@22 a3@2 ~@24, ~@113 eb4@5 ~@122]/5", // Bb Bb5 F Eb Bb5 F Bb F …
  B: "~@41 eb3@4 ~@3", C: "[~@5 f4@6 eb4@6 d4@6 c4@6 ~@6 g3@6 f3@15 ~@40]/2",
})).s("gm_overdriven_guitar").gain(0.31)

// chords · overdriven guitar · soft notes · Eb
const overdriven_guitar_soft = note(`<
  ~@33
  [~@5 g3@4 ~@2 [eb3,g3,bb3]@4 ~@2 bb3@3 bb3@4 ~@2 [eb3,g3]@3 [eb3,g3,bb3]@4 ~@2 [eb3,g3]@4 ~@9]
  ~@31
>`).s("gm_overdriven_guitar").gain(0.15)

// drums · kick
const kick = s("bd").struct("<A@7 B ~@6 A@5 B C D@6 E ~@5 F D@5 G ~@6 F D@5 H D@3 I J D@4 K L M>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x ~@3", C: "x ~@5 x ~@17 x ~@5 x ~@16 x", D: "~@5 x ~@17 x ~@5 x ~@17 x",
  E: "~@5 x ~@17 x ~@5 x ~@18", F: "~@47 x", G: "~@5 x ~@17 x ~@24", H: "~@5 x ~@41 x", I: "~@23 x ~@5 x ~@17 x",
  J: "~@5 x ~@23 x ~@17 x", K: "~@5 x ~@17 x ~@4 x ~@17 x ~", L: "~@2 x ~@8 x ~@2 x ~@9", M: "x",
})).gain(0.31)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 A B A B A C ~@13 D E F E F E G ~@5 D H E H E H E ~@19>".pickRestart({
  A: "x!2 ~@3 x ~@2", B: "x ~ x ~@6 x!2 ~@5", C: "x!2 ~@6", D: "~@47 x", E: "~@5 x ~@23 x ~@17 x",
  F: "~@5 x ~@20 x ~@2 x ~@17 x", G: "~@5 x ~@42", H: "~@29 x ~@17 x",
})).gain(0.1)

// drums · rim
const rim = s("rim").struct("<~@39 [~@32 x ~@2 x ~@12] ~@25>").gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  A@7 B ~@5 C A@5 D A E@2 F E@3 G ~@5 H E@5 I ~@7 E@3 J E K E L E M L N L O E P Q ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!3 ~", C: "~@14 x!2", D: "~ x", E: "~@11 x ~@23 x ~@12",
  F: "~@11 x ~@23 x ~@2 x ~@2 x ~@6", G: "~@11 x ~@17 x ~@2 x ~@2 x ~@12", H: "~@41 x ~@2 x ~@3", I: "~@23 x ~@24",
  J: "~@11 x ~@23 x ~@8 x ~@3", K: "~@11 x ~@2 x ~@2 x ~@2 x ~@14 x ~@12", L: "~@11 x ~@8 x ~@14 x ~@12",
  M: "~@5 x ~@5 x ~@5 x ~@14 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", N: "~@11 x ~@23 x ~@5 x ~@2 x ~@3",
  O: "~@11 x ~@21 x ~ x ~@8 x ~@3", P: "~@11 x ~@8 x ~@13 x ~@13", Q: "~@5 x ~@11 x ~@6",
})).gain(0.31)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A B A@3 C ~@13 D E F E@3 G ~@6 E@2 H E@2 I J ~@18>".pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@4 x ~@2 x ~ x ~@2 x ~@3", C: "~@4 x ~@2 x ~ x ~@2 x!2 ~@2", D: "~@41 x ~@6",
  E: "~@11 x ~@14 x ~@8 x ~@12", F: "~@11 x ~@8 x ~@5 x ~@8 x ~@12", G: "~@11 x ~@8 x ~@5 x ~@8 x ~@2 x ~@9",
  H: "~@11 x ~@23 x ~@12", I: "~@11 x ~@14 x ~@8 x ~@8 x ~@3", J: "~@11 x ~@17 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@5 B ~@19 C ~@18 D ~@3 D ~@3 E ~@4>".pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~@41 x ~@2 x ~@3", D: "~@38 x ~@2 x ~@2 x ~@3", E: "~@41 x ~@6",
})).gain(0.2)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@13 [~@12 x!2 ~@2] ~@13 [~@35 x ~@5 x ~@6] ~@5 [~@35 x ~@2 x ~@9] ~@31>")
  .gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@39 [~@32 x ~@2 x ~@12] ~@12 [~@33 x ~ x ~@12] ~@3 [~@32 x ~@2 x ~@12] ~@8>")
  .gain(0.41)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@7 [~@12 x!2 ~@2] ~@19 [~@29 x ~@2 x ~@15] ~@37>").gain(0.15)

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

// drums · china
const china = s("cr").struct(`<
  A ~@3 A ~@11 A ~ A B A C ~ C ~ C ~@9 C ~ C ~ D ~@12 C ~@3 E D C D C F G H A
>`.pickRestart({
  A: "x", B: "~ x", C: "~@47 x", D: "~@23 x ~@24", E: "~@11 x ~@35 x", F: "~@5 x ~@41 x", G: "~@23 x", H: "~@11 x ~@12",
})).gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct("<~@8 A@6 ~@13 B C@5 D ~@6 E C F G H I J ~@18>".pickRestart({
  A: "x!8", B: "~@47 x", C: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
  D: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6", E: "~@5 x ~@35 x ~@5 x",
  F: "~@5 x ~@14 x ~@2 x ~@5 x ~@5 x ~@5 x ~@6", G: "~@5 x ~@11 x ~@14 x ~@5 x ~@8 x",
  H: "~@5 x ~@11 x ~@17 x ~@5 x ~@5 x", I: "~@5 x ~@11 x ~@14 x ~@8 x ~@5 x",
  J: "~@29 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.05)

stack(
  bass, bass_soft, electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, overdriven_guitar_soft, kick,
  kick_soft, rim, snare, snare_soft, low_tom, low_tom_soft, mid_tom, mid_tom_soft, open_hat, china, ride_bell
)

More by Barenaked Ladies