Strudelify
Tiger cover art

Arrival

Tiger

ABBA

KeyA♭ majorTempo132 bpm
0:00/0:00
// Tiger — ABBA
// 131.5 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 95 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(131.5/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 · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A B C@2 D E C F G H@5 I@8 J@6 K@7 L@3 ~@3 M ~@2 N O P Q@4 R@7 S T@8 U ~@3 V ~@2 W@5 X@8 Y Z@7
>`.pickRestart({
  A: "[f4,ab4]@7 ~, ab3", B: "[e4,bb4]@7 ~, ab3", C: "c4 db4 eb4 [c4,e4]@3 [c4,eb4] ~", D: "[f4,ab4]@7 ~",
  E: "[e4,bb4]@7 ~", F: "c4 db4 eb4 [c4,e4]@3 [ab3,db4,f4]@2",
  G: "[g4,bb4] bb4 ab4!2 g4 g4@2 g4, eb4 [eb4,f4] [bb3,eb4]@2", // Gm Ebsus2 Eb5
  H: "[f4@2 f4@3 [bb3,f4,ab4]@3 [bb3,eb4,g4]@9 [ab3,db4,f4]@6 bb4@3 bb4@3 ab4@3 ab4@3 [eb4,g4]@3 g4@3 [bb3,f4]@3 [bb3,f4,ab4]@6 [bb3,eb4,g4]@8 [f3,ab3,db4]@6 [eb3,ab3,c4]@6 [g4,bb4]@3 bb4@3 ab4@3 ab4@3 g4@3 g4@6 g4@3 f4@3 f4@3 [bb3,f4,ab4]@3 eb4@3 eb4@5 [g3,bb3,eb4]@3 [c4,eb4,ab4]@3 ~@3, bb3@5 ~@18 [eb4,g4]@6 [eb4,f4]@6 bb3@6 ~@29 eb4@6 [eb4,f4]@6 [bb3,eb4]@12 bb3@6 ~@3 [bb3,g4]@9 ~@8]/5", // Bb7 Eb Db Eb Bb5 Bb7 Eb Db …
  I: "[~@9 c4@3 eb4@2 ~ [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@2 bb4@6 ab4@9 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ~@23 db4@3 eb4@3 c4@3 ~@3 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@8 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ~@24 db4@3, ~@3 eb3@12 ~@3 db4@15 db4@6 ~@2 db4@15 db4@6 ~@3 c4@27 c4@6 ~@5 c4@6 ~@3 db4@15 db4@6 ~@3 db4@14 db4@6 ~@3 c4@29 ~@4, ~@3 ab3@9 ~@2 f4@3 ~ f4@18 ~@5 e4@18 ~@6 eb4@32 ~@3 e4@9 ~@3 f4@18 ~@6 e4@17 ~@6 eb4@26 ~@7, ~@71 ab4@26 ~@68 ab4@26 ~]/8", // Ab Db Dbm Ab Db Dbm
  J: "[eb4@3 [c4,e4]@8 ~@3 bb4@3 [g4,bb4]@3 bb4@3 ab4@3 ab4@3 g4@3 g4@6 g4@3 f4@3 f4@3 [bb3,f4,ab4]@3 [bb3,eb4,g4]@8 [ab3,db4,f4]@6 bb4@3 bb4@3 ab4@3 ab4@3 [eb4,g4]@3 g4@3 [bb3,f4]@3 [bb3,f4,ab4]@6 [bb3,eb4,g4]@9 [f3,ab3,db4]@6 [eb3,ab3,c4]@5 [g4,bb4]@3 bb4@3 ab4@3 ab4@3 g4@3 g4@6 g4@3 f4@3 f4@3 [bb3,f4,ab4]@3, ~@11 [ab3,db4,f4]@6 eb4@6 [eb4,f4]@6 [bb3,eb4]@12 bb3@6 ~@17 [eb4,g4]@6 [eb4,f4]@6 bb3@6 ~@29 eb4@6 [eb4,f4]@6 [bb3,eb4]@12 bb3@6 ~@3]/6", // C Gm Bb7 Eb Db Eb Bb5 Bb7 …
  K: "[eb4@3 eb4@6 [g3,bb3,eb4]@3 [c4,eb4,ab4]@3 ~@11 c4@3 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@8 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ~@24 db4@3 eb4@3 c4@3 ~@3 eb4@2 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9, [bb3,g4]@9 ~@11 eb3@12 ~@3 db4@15 db4@6 ~@3 db4@14 db4@6 ~@3 c4@27 c4@6 ~@6 c4@5 ~@3 db4@15 db4@6 ~@3 [db4,e4]@15, ~@20 ab3@9 ~@6 f4@18 ~@6 e4@17 ~@6 eb4@32 ~@4 e4@9 ~@2 f4@18 ~@21, ~@44 ab4@13 ~@27]/7", // Eb Ab Db Dbm Ab Db Eb Dbm
  L: "[~@3 e4@3 [db4,e4,ab4]@3 bb4@5 ~@24 db4@3 eb4@3 [c4,e4]@9 [c4,eb4]@6 ~@13, db4@6 ~@3 c4@29 ~@34, ~@9 eb4@26 ~@37, ~@7 ab4@13 ~@16]/3", // Dbm C Cm
  M: "c4 eb4@2 ~@5", N: "~@10 f3@3 g3@3 ab3@3 ~@3 eb4@2, ~@19 c4@5",
  O: "~ [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@2, ~@2 f4@9 ~, ~@4 db4@15 db4@5", // Ab
  P: "~ [db4,f4,ab4]@3 bb4@5 ab4@9 ~@3 e4@3, ~@4 e4@17 ~@3, ~@2 db4@7 db4@3", // Db
  Q: "[[db4,e4,ab4]@3 bb4@6 ~@24 db4@3 eb4@2 c4@3 ~@3 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9 ~@2 e4@3 [db4,e4,ab4]@2, ~@3 eb4@32 ~@3 e4@9 ~@3 f4@18 ~@6 e4@17 ~@5, ~@3 c4@27 c4@6 ~@5 c4@6 ~@3 db4@15 db4@6 ~@3 db4@15 db4@5 ~@2, ~@9 ab4@26 ~@61]/4", // Dbm Ab Db Dbm
  R: "[~ bb4@6 ~@21 c4@3 db4@3 eb4@3 [c4,e4]@9 ~@2 bb4@3 [g4,bb4]@3 bb4@3 ab4@3 ab4@3 g4@3 g4@6 g4@3 f4@3 f4@3 [bb3,f4,ab4]@3 [bb3,eb4,g4]@9 [ab3,db4,f4]@6 bb4@2 bb4@3 ab4@3 ab4@3 [eb4,g4]@3 g4@3 [bb3,f4]@3 [bb3,f4,ab4]@6 [bb3,eb4,g4]@9 [f3,ab3,db4]@6 [eb3,ab3,c4]@6 [g4,bb4]@3 bb4@2 ab4@3 ab4@3 g4@3 g4@6 g4@2, ~ [c4,eb4]@26 ~@19 [ab3,db4,f4]@6 ~@11 [bb3,eb4]@12 bb3@6 ~@23 [eb4,f4]@6 bb3@6 ~@41 [bb3,eb4]@11, ~@7 ab4@26 ~@18 eb4@6 [eb4,f4]@6 ~@36 [eb4,g4]@6 ~@41 eb4@5 [eb4,f4]@6 ~@11]/7", // C Gm Bb7 Eb Db Eb Bb5 Bb7 …
  S: "~ f4@3 f4@3 [bb3,f4,ab4]@3 eb4@3 eb4@6 [g3,bb3,eb4]@3 [c4,eb4,ab4]@2, ~ bb3@6 ~@3 [bb3,g4]@9 ~@5", // Bb7 Eb Ab Eb
  T: "[~@12 c4@3 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9 ~@3 e4@2 [db4,e4,ab4]@3 bb4@6 ~@24 db4@3 eb4@3 c4@3 ~@3 eb4@3 [c4,eb4,ab4]@3 bb4@5 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ab4@23, ~@7 eb3@12 ~@2 db4@15 db4@6 ~@3 db4@15 db4@5 ~@3 c4@27 c4@6 ~@6 c4@6 ~@3 db4@14 db4@6 ~@3 db4@15 db4@6 ~@3 c4@29, ~@7 ab3@9 ~@5 f4@18 ~@6 e4@18 ~@5 eb4@32 ~@4 e4@9 ~@3 f4@17 ~@6 e4@18 ~@6 eb4@26 ~@3, ~@37 ab4@13 ~@46]/8", // Ab Db Dbm Ab Db Dbm
  U: "db4 eb4 [c4,e4]@3 [c4,eb4]@2 ~", V: "~@10 c4@3 eb4@6 ~@5",
  W: "[~@20 f3@3 g3@3 ab3@3 ~@3 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@8 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ~@24 db4@3 eb4@2, ~@29 c4@6 ~@3 f4@18 ~@6 e4@17 ~@6 eb4@32 ~@3, ~@38 db4@15 db4@6 ~@3 db4@14 db4@6 ~@3 c4@27 c4@6 ~@2, ~@91 ab4@26 ~@3]/5", // Ab Db Dbm
  X: "[~ c4@3 ~@2 eb4@3 [c4,eb4,ab4]@3 bb4@6 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9 ~@3 e4@3 [db4,e4,ab4]@2 bb4@6 ~@24 db4@3 eb4@3 c4@3 ~@3 eb4@3 [c4,eb4,ab4]@3 bb4@5 ab4@9 ~@3 f4@3 [db4,f4,ab4]@3 bb4@3 ~@3 ab4@9 ~@3 e4@3 [db4,e4,ab4]@3 bb4@6 ~@20 c4@3 db4@3 eb4@3 [c4,e4]@3, ~ e4@9 ~@2 f4@18 ~@6 e4@18 ~@11 ab4@26 ~@4 e4@9 ~@3 f4@17 ~@6 e4@18 ~@12 ab4@26 ~@6, ~@4 c4@5 ~@3 db4@15 db4@6 ~@3 db4@15 db4@6 ~@2 [c4,eb4]@26 ~ [c4,eb4]@6 ~@6 c4@6 ~@3 db4@14 db4@6 ~@3 db4@15 db4@6 ~@3 [c4,eb4]@26 ~@12]/8", // Ab Db Dbm Ab Db Dbm C Cm
  Y: "~ eb4 [c4,eb4,ab4] bb4@2 ab4@3, c4@2 ~ [db4,f4]@5", // Ab Db
  Z: "[db4@2 f4@3 [db4,f4,ab4]@3 bb4@6 ab4@9 db4@3 e4@3 [db4,e4,ab4]@3 bb4@6 ab4@6 db5@6 c5@5 f5@6 ~@21 c4@3 db4@3 eb4@3 [c4,f4]@9 [c4,eb4]@53 ~@15, ~@8 [db4,e4]@15 ~@9 [c4,eb4]@12 [eb4,ab4]@11 [ab4,c5]@26 ~@10 e4@3 ~@74, ~@61 eb5@91 ~@16]/7", // Db Dbm F5 Cm Dbm Cm Ab5 Ab
})).s("gm_overdriven_guitar").gain(0.22).pan(1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@2 A@2 B@2 A C D E@5 F@4 G H I A J@8 K L M N B O@3 ~@6 P@2 Q R S@8 T@2 U V B W@7 ~@6 X@8 Y@2 H L A Z AA@5 ~@2
>`.pickRestart({
  A: "ab2!4", B: "db3!4", C: "ab2!3 db3", D: "eb3!4",
  E: "[eb3@5 eb3@6 eb3@6 db3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@5 db3@6 ab2@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@5 eb3@6 ~@3]/5",
  F: "[~@3 ab2@18 db3@6 db3@6 db3@6 db3@5 db3@6 db3@6 db3@6 db3@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@4]/4",
  G: "~ ab2@6 ab2@6 ab2@6 db3@5", H: "~ db3@6 db3@6 db3@6 db3@5", I: "~ db3@5 db3@6 db3@6 ab2@6",
  J: "[ab2@6 ab2@5 db3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@5 db3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 db3@6 ab2@5 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 ~@5 ab2@18 db3@6 db3@4]/8",
  K: "~ db3@3 db3@3 db3@3 db3@2", L: "~ db3@6 db3@6 ab2@6 ab2@5", M: "~ ab2@6 ab2@6 ab2@6 ab2@5",
  N: "~ ab2@5 ab2@6 db3@6 db3@6", O: "[db3@6 db3@5 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ~@13]/3",
  P: "[~@10 f2@3 g2@3 ab2@15 db3@6 db3@6 db3@5]/2", Q: "~ db3@6 db3@5 db3@6 db3@6", R: "db3 ab2!3",
  S: "[ab2@6 ab2@6 ab2@5 ab2@6 ab2@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@5 db3@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 db3@5 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 eb3@6 db3@6 eb3@5 eb3@6 eb3@6 eb3@4]/8",
  T: "[~@2 eb3@6 eb3@6 db3@6 ab2@6 eb3@5 eb3@6 eb3@6 eb3@5]/2", U: "~ eb3@6 eb3@6 eb3@6 eb3@5", V: "~@7 ab2@17",
  W: "[db3@6 db3@6 db3@5 db3@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@5 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 ab2@5 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ~@3]/7",
  X: "[~@20 f2@3 g2@3 ab2@15 db3@6 db3@6 db3@6 db3@6 db3@6 db3@5 db3@6 db3@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@5 ab2@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@6 db3@5 ab2@6 ab2@4]/8",
  Y: "[~@2 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 db3@5 db3@5]/2", Z: "ab2!2 db3!2",
  AA: "[db3@5 db3@6 db3@6 db3@6 db3@6 db3@6 ab2@6 ab2@6 ab2@5 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ab2@6 ~@14]/5",
})).s("gm_electric_bass_finger").gain(0.35).pan(0)

// chords · piano
const piano = note("<~@37 A B@3 C@4 ~@22 D@4 E F G H ~@20>".pickRestart({
  A: "~@11 f4@3 c4@2 ab4@3 c4@3 c5@2",
  B: "[~ c4@3 eb4@3 c4@3 d4@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@2 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 bb4@6 ~@3, ~@16 ab4@6 bb4@6 d5@6 f4@6 ab4@5 c5@6 eb4@6 d4@6 ~@9]/3",
  C: "[c3@3 eb3@6 ~@3 c4@3 ~@3 c4@3 ~@2 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@2 c4@3 ~@17, ~@9 f4@6 ab4@6 c5@5 eb4@6 d4@6 ab4@6 bb4@6 d5@6 f4@6 ab4@6 c5@6 f5@6 ~@16]/4",
  D: "[~@24 c4@3 ~@3 c4@2 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@3 ~@3 c4@2 ~@3 c4@3 ~@3 c4@2, ~@21 f4@6 ab4@5 c5@6 eb4@6 d4@6 ab4@6 bb4@6 d5@6 f4@6 ab4@6 c5@5 eb4@6 d4@5]/4",
  E: "~@4 c4@3 ~@3 c3@3 eb3@6 ~@3 c4@2, ~ bb4@6 ~@12 f4@5",
  F: "~@4 c4@3 ~@3 c4@3 ~@3 c4@2 ~@3 c4@3, ~ ab4@6 c5@6 eb4@5 d4@6", G: "~ c4 ~ c4 ~ c4 ~ c4, ab4 bb4 d5 f4",
  H: "~ c4 ~ c4 ~ c4 ~@2, ab4 c5 f5 ~",
})).s("gm_piano").gain(0.35).pan(0)

// other · lead 1 square · "Square"
const lead_1_square = note("<~@40 A ~@29 B@2 ~@23>".pickRestart({
  A: "~@4 c5 eb5 d5@2", B: "[~@23 c5@2 eb5@3 d5@6 ~@14]/2",
})).s("gm_lead_1_square").gain(0.06)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@2 B ~@10 C ~@3 D ~@26 E ~@3 F ~@37>".pickRestart({
  A: "x", B: "~@11 x", C: "~@17 x ~@6", D: "~@5 x ~@2", E: "~ x ~@6", F: "~ x ~@10",
})).gain(0.4).pan(0)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@2 A B A B A B ~@7 C D E F G H I J ~@6 K L M N O P Q R S ~@7 T U V W X Y Z AA AB ~@6 AC AD AE AF AG AH AI AJ ~@7 AK
  AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA ~@3
>`.pickRestart({
  A: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", B: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x",
  C: "x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~ x ~ x!2 ~@2 x", D: "~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~@4 x",
  E: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~ x ~", F: "x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@3 x!2",
  G: "~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2", H: "~ x ~ x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@3 x ~ x",
  I: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~", J: "x ~@2 x!2 ~ x ~ x ~ x!2 ~@2 x ~ x ~@7",
  K: "~@17 x ~ x!2 ~@2 x", L: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x",
  M: "x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@3 x ~ x!2 ~@2 x ~", N: "x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2",
  O: "~ x ~@2 x!3 ~@2 x ~ x ~@3 x ~ x!2 ~@2 x ~ x", P: "x ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~",
  Q: "x ~@2 x!2 ~ x ~@2 x!2 ~@3 x ~ x!2 ~@2 x ~ x!2", R: "~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x",
  S: "~@2 x!2 ~ x ~@2 x!2 ~ x ~@12", T: "~@10 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2",
  U: "~ x ~@2 x!2 ~ x ~ x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", V: "x ~@2 x ~ x ~@3 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~",
  W: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~ x ~ x!2 ~@2 x ~ x!2", X: "~@2 x ~ x ~@3 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x",
  Y: "~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~ x ~ x!2 ~", Z: "~ x ~ x ~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~",
  AA: "~ x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~", AB: "x!2 ~@10",
  AC: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~", AD: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!3 ~@2 x ~ x ~",
  AE: "~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x", AF: "~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~@2",
  AG: "~ x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~", AH: "~ x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~@3",
  AI: "~ x!3 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2", AJ: "x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2",
  AK: "~@20 x ~ x!2", AL: "~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x",
  AM: "~ x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@3 x ~ x!2 ~", AN: "~ x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~",
  AO: "~ x!2 ~ x ~ x ~ x!2 ~@2 x ~ x ~@3 x ~ x!2 ~@2", AP: "x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2",
  AQ: "x!2 ~ x ~@2 x!2 ~ x ~ x ~ x ~@3 x ~ x!2 ~@2 x", AR: "~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x",
  AS: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~@3 x ~ x!2 ~@2 x ~", AT: "x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~ x ~@2 x!2",
  AU: "~ x ~@2 x!2 ~ x ~@2 x!2 ~@4 x!2 ~ x ~ x ~ x", AV: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x!2 ~",
  AW: "x ~@2 x!2 ~ x ~@2 x!2 ~@4 x!2 ~ x ~@2 x!2 ~", AX: "x ~ x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2",
  AY: "~@2 x!2 ~ x ~@2 x!2 ~@4 x!2 ~ x ~@2 x!2 ~ x", AZ: "~@2 x!3 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~",
  BA: "~ x ~ x!2 ~@2 x!2 ~@15",
})).gain(0.2).pan(0)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~@6 B C D E F G H ~@7 I J K L M N O ~@12 P ~@2 Q R ~@7 S T U V W X Y ~@11 Z ~@2 AA AB ~@19
>`.pickRestart({
  A: "~@3 x", B: "~@2 x!2 ~@2 x ~", C: "~@5 x ~@2 x ~@5 x ~@2 x ~@2 x ~@3", D: "~@5 x ~@2 x ~@8 x ~@6",
  E: "~@5 x ~@4 x ~@5 x ~@7", F: "~@4 x ~@2 x ~@8 x ~@7", G: "~@4 x ~@2 x ~@4 x ~@2 x ~@2 x ~@5", H: "~ x ~@6",
  I: "~@23 x", J: "~@2 x ~@8 x ~@11 x", K: "~@2 x ~@5 x ~ x ~@2 x ~@8 x ~", L: "~ x ~@8 x ~@11 x ~",
  M: "~@4 x ~@5 x ~@10 x ~@2", N: "x ~@2 x ~@3 x", O: "x ~@5 x ~@2 x ~@2 x ~@7 x ~@3", P: "x!2 ~ x ~@4",
  Q: "~@10 x ~@2 x ~@2 x ~@7", R: "~ x ~@5 x ~@16", S: "~@3 x!2 ~@2 x", T: "~@3 x!2 ~ x!2",
  U: "x ~@7 x ~@2 x ~@8 x ~@3", V: "~@4 x ~@2 x ~@2 x ~", W: "~@7 x ~@2 x ~@8 x ~@4",
  X: "~@7 x ~@2 x ~@5 x ~@2 x ~@2 x ~", Y: "~@7 x ~@16", Z: "~@10 x ~@2 x ~@5 x ~@4", AA: "~@20 x ~@2 x",
  AB: "~@2 x ~@8 x ~@12",
})).gain(0.4).pan(0)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@14 B ~@30 C ~@31 D ~@2>".pickRestart({
  A: "~@7 x", B: "~@7 x ~@4", C: "x", D: "~ x ~@4",
})).gain(0.2).pan(0)

stack(overdriven_guitar, bass, piano, lead_1_square, kick, snare, low_tom, pedal_hat, mid_tom, crash)

More by ABBA