Strudelify
S.O.S cover art

2008 · Testament van de Seventies

S.O.S

ABBA

KeyD minorTempo120 bpm
0:00/0:00
// S.O.S — ABBA
// 120 bpm, 4/4, key D 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 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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
const piano = note(`<
  A B C@2 D E F@8 G@5 H I J K L M N O P Q R S T U V W X Y Z@7 G@5 H I J K L M N O P Q R S T U V W X Y AA@6 J K L M N O P
  Q R S AB AC AD AE AF AG AH AI AJ AK AL AM AN AO@2 AP AQ@2 ~
>`.pickRestart({
  A: "[f4,a4] ~ [f4,a4]@2 [e4,g4] ~ [e4,g4]@2 [d4,f4]@6 ~@2", // F Em Dm
  B: "[d4,f4] ~ [d4,f4]@2 [c4,e4] ~ [c4,e4]@2 [bb3,d4]@6 ~@2", // Dm C Bb
  C: "[[bb3,d4] ~ [bb3,d4]@2 [a3,c4] ~ [a3,c4]@2 [g3,bb3] ~ bb3@2 [d2,d3]@2 ~@2 d2@2 ~@2 [d2,d3]@2 ~@2 [d2,d3]@2 a3@2 [d2,d3,f4,a4] ~ [f4,a4]@2, ~@10 g3 ~ f3@15 ~@5, ~@6 a3@4 bb3@3 ~@3, ~@16 d3 ~@15]/2", // Bb Am Gm D Dm F
  D: "[d2,d3,e4,g4] ~ [e4,g4]@2 [d2,d3]@2 ~@2 [d2,d3]@2 ~@2 [d2,d3]@2 [d4,f4]@2, ~@4 [d4,f4]@6 ~@2 [d4,f4] ~@3", // Em7 Em D Dm
  E: "[d2,d3] [c4,e4] [d2,d3] ~ [d2,d3] ~ [d2,d3] [bb3,d4], [c4,e4] ~@3 [bb3,d4]@6 ~@2 [bb3,d4] ~@3", // D C D Bb C Bb
  F: "[[d2,d3]@2 [a3,c4]@2 [d2,d3]@2 bb3@2 [f3,a3]@4 [d2,d3,d4]@2 a3@2 [d2,d3] ~@3 [d2,d3]@2 a3@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [db4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 e5@2 a3@2 ~@2 a3@2 ~@2 a3@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [d4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [db4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 f4@2 [a3,g4]@2 ~@6 [c3,c4]@2, [a3,c4] ~@3 [g3,bb3] ~ g3 ~ [d2,d3] ~@5 f3@10 d3@6 ~@2 f5@8 e5@8 ~@8 f5@4 ~@2 a4@10 ~@16 e5@8 ~@8 f5@4 e5@4 d5@4 ~@8 [f3,a3,f4]@4, ~@16 bb3@6 ~@6 d4@6 ~@2 [d4,bb4]@4 ~@4 db4@7 ~@9 d4@6 ~@2 d4@6 ~@2 d4@6 ~@10 db4@6 ~@10 d4@6 ~@2 d4@4 ~@2 c3@4 ~@2, ~@32 d3@6 ~@2 db3@6 ~@2 [db3,g5]@8 d3@7 ~ [d3,f4]@7 ~ d3@6 ~@2 [d3,f5]@8 db3@6 ~@2 [db3,g5]@8 d3@7 ~ d3@8 f2@8]/8", // D Am D F D A Gb A …
  G: "[c4 ~ c4@2 ~@2 [c3,a4]@2 ~@20 [bb3,d4]@2 ~@8 d3@2 ~@14 f3@2 ~@12 [d4,bb4]@2 [a3,a4]@2 ~@6 [a3,a4]@2, f2@4 [c2,g4]@6 c4 d4@2 ~@2 g3@5 ~ f3@2 d3@2 f3@2 ~@2 [a3,a4]@2 [a3,a4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~, a4@6 ~@6 d4@6 g3@6 ~@2 d3@5 ~ a3@8 ~@4 a3@8 [d3,a3]@4 d3@8 [d3,f5]@7 ~ [db3,e5]@8, ~ c3@2 ~@2 c3@2 e4@5 ~@4 d4 d3 [bb3,d4]@2 ~@3 f3 d4@4 ~@2 [d4,bb4]@4 ~@4 [db4,bb4]@2, ~@2 [f3,c4,bb4]@2 ~ c4@3 c3@4 g2@8 [d2,e4]@8 ~@12]/5", // F Bb Gm A C5 A D5 Dm …
  H: "~@3 [a3,a4] ~@3 a3, [db3,g5] [d3,d4], ~ [a3,a4]@2 ~@2 a3@2 ~, ~ [db4,bb4] ~ [db3,e4]", // A Dbdim D A Gb Dbm
  I: "~ d4 ~ c4 ~ f4 ~ d4, [d3,f4] [e3,g4] [f3,a4] [g3,bb4]", // Dm Em F Gm
  J: "~@2 c4@2 ~@2 c4@2 [a3,c4,f4] ~ [a3,c4,f4] ~ [c4,f4] ~ [a3,c4,f4] ~, [f3,a4]@2 [e3,g4]@2 ~@2 a3 ~", // F F5 F Em
  K: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4]@2", // C Gm
  L: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4] ~ [a3,c4,f4] ~, ~@6 f4 ~", // Bb F Am F
  M: "[bb3,d4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4] ~ [c4,f4] ~ [a3,c4,f4] ~ [c4,f4] ~ [a3,c4,f4] ~, f4 ~@2 f4 a3 ~ a3 ~", // Bb F5 F F5 F
  N: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // F
  O: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,g4] ~, ~@7 d4", // C Gm Eb
  P: "[d4,f4] ~ [bb3,d4,f4] ~ [d4,f4] ~ [bb3,d4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~, bb3 ~ bb3 f4 ~@4", // Dm Bb Dm Bb F
  Q: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~, ~@3 f4 ~@4", // Bb F
  R: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // F Bb
  S: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [ab3,f4]@2 [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [db4,f4]@2, ~@6 db4 ~@7 ab3 ~", // Bb Db
  T: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~, ~@3 eb4 ~@4", // Eb Gm F Bb
  U: "[a4,c5]@2 f4 ~ [bb4,d5] ~ [a4,c5]@4 f4 ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~, [f4,ab4] ~@3 f4@2 f4@2 ~@8, ~@6 ab4 ~@9", // Am Bb Am Bb Fm
  V: "[a4,c5]@2 f4@2 [f4,bb4,d5]@2 ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4] ~ [bb3,d4] ~, [f4,ab4] ~@11 f4@2 ~@2", // Am Bb Fm
  W: "[bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4] ~ [ab3,db4,f4] ~ [ab3,db4] ~, ~@3 ab3 ~ f4 ~ f4", // Bb Db Db5 Db Db5
  X: "[bb3,eb4] ~ [bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4]@2, g3 ~@2 eb4 ~@4", // Eb5 Eb Gm F Bb
  Y: "[a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [a3,f4]@2 c4 ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~, ~@6 c4 ~@9", // F Bb Dm F Bb
  Z: "[[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~@3 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [db4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 e5@2 a3@2 ~@2 a3@2 ~@2 a3@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [d4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 bb4@2 [a3,a4]@2 ~@2 [a3,a4]@2 [db4,bb4]@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 ~@2 [a3,a4]@2 f4@2 [a3,g4]@2 ~@6 [c3,c4]@2, ~@4 d3@3 ~ f5@4 e5@4 ~@4 f5@2 ~ a4@5 ~@8 e5@4 ~@4 f5@2 e5@2 d5@2 ~@4 [f3,a3,f4]@2, ~@12 d4@6 ~@2 [d4,bb4]@4 ~@4 db4@7 ~@9 d4@6 ~@2 d4@6 ~@2 d4@6 ~@10 db4@6 ~@10 d4@6 ~@2 d4@4 ~@2 c3@4 ~@2, ~@16 d3@6 ~@2 db3@6 ~@2 [db3,g5]@8 d3@7 ~ [d3,f4]@7 ~ d3@6 ~@2 [d3,f5]@8 db3@6 ~@2 [db3,g5]@8 d3@7 ~ d3@8 f2@8]/7", // F A Gb A Gm A Gb A …
  AA: "[[a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~@3 [a4,d5,f5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [d3,a4,d5,f5]@3 ~ [d3,a4,db5,e5]@2 ~@2 d3@2 [a4,db5,e5,g5] ~ [db5,e5,g5]@2 [db5,e5,g5]@2 [d3,a4,db5,e5,g5]@3 ~ [d3,db5,e5]@2 ~@2 d3@4 d3@3 ~ d3@3 ~@7 [d5,f5,a5]@2 [d3,d5,f5,a5]@2 [d5,f5,a5] ~ [d3,d5,f5,a5]@3 ~ [db5,e5]@2 ~@4 [a4,db5,e5,g5]@2 [a4,db5,e5] ~ [a4,db5,e5] ~ [d3,a4,db5,e5,g5]@3 ~ [d3,a4,db5,e5]@4 ~@2 f4@2 ~@2 d4@2, ~@4 d2@15 [d5,f5]@10 ~@5 g5@3 ~@11, ~@8 d3@4 d3@4 ~@6 [a4,db5,e5]@4 ~@2 [d3,a4]@4 ~@4 a4@27 ~@7 [db5,e5]@4 ~@22, ~@20 d2@6 d3@4 ~@4 d3@2 d3@2 [d3,g5] ~@5 [d3,a4]@2 [g3,bb4]@2, ~@7 d2@4 ~]/6", // F Dm A A7 Dbdim A7 Dbm Dm …
  AB: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4] ~, ~@3 eb4 ~@3 f4", // Eb Gm F Am
  AC: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [c4,f4] ~ [a3,c4,f4] ~, ~@6 a3 ~", // F F5 F
  AD: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [d4,f4] ~ f4@2 [d4,f4] ~ [bb3,d4,f4] ~, ~@4 bb3@2 bb3 ~, ~@10 d4 ~@5", // F Dm Bb
  AE: "[d4,f4] ~ [d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~, bb3 ~@2 f4 ~@4", // Dm Bb Db
  AF: "[bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~, g3 ~@7", // Eb5 Eb F Bb
  AG: "[a3,c4] ~ [a3,c4] ~ [bb3,d4,f4] ~ [a3,c4,f4]@3 ~ [a3,f4]@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~, f4@2 ~@8 c4 ~@5", // Am Bb F Dm Bb
  AH: "[a3,c4,f4] ~ [a3,c4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4] ~ [f3,bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~, ~ f4 ~@2 f3 ~ f3!2", // F Am Bb
  AI: "[bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~, f3 ~@7", // Bb Db
  AJ: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~", // Eb F Bb
  AK: "[a3,c4,f4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [c4,f4]@2 [a3,c4] ~ [a3,c4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~, ~@6 a3 ~@9", // F Bb F5 Am F Bb
  AL: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] f4 [a3,c4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [f3,bb3,d4] ~, ~@4 f3 ~ f3 ~", // F Am Bb
  AM: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~", // Bb Db
  AN: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [c4,f4] ~ [a3,c4,f4] ~, ~@6 a3 ~", // Eb F F5 F
  AO: "[[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~@3 [d2,d3]@3 ~ d3@3 ~ [d4,f4,a4] ~ [d4,f4,a4]@2 [d3,e4,g4] ~ [e4,g4]@2 d3@2 ~@2 d3@2 ~@2, ~@6 d2@9 ~, ~@16 d3@2 ~@6 [d4,f4]@7 ~]/2", // F D Dm Em7 Em Dm
  AP: "[d4,f4] ~ [d4,f4]@2 [c4,e4] ~ c4@2 d3@2 ~@2 d3@3 ~, d2@13 ~@3, d3@2 ~@2 d3@2 e4 ~ [bb3,d4]@6 ~@2", // Dm C Bb
  AQ: "[[bb3,d4] ~ [bb3,d4]@2 [a3,c4] ~ [a3,c4]@2 [g3,bb3] ~ bb3@2 [d3,f3,a3]@20, d2, d3@2 ~@2 d3@2 ~@2 d3@2 g3 ~@21]/2", // Bb Am Gm Dm
})).s("gm_piano").gain(0.06).pan(0.7)

// bass · fretless bass
const bass = note(`<
  ~@7 A@7 ~@7 B C D E F G D H I J K L M N K L O@7 ~@7 B C D E F G D H I J K L M N K L P@3 ~@3 B C D E F G D H I J K L Q
  J K L Q J K L M N K R@2 ~@4
>`.pickRestart({
  A: "[~@8 d2@16 db2@16 d2@15 ~ d2@16 db2@16 d2@16 ~@8]/7", B: "~@8 f2@5 ~ f2@2", C: "c2@4 ~@2 c2@2 g2@6 g1 a1",
  D: "bb1@5 ~ bb1@2 f2@2 f2@2 ~@2 c2@2", E: "f2 ~ f2@3 ~ c2@2 f2 ~ f2@2 ~@2 c2@2", F: "f2 c2 f2 c2 f2@2 ~ f2",
  G: "c2@3 ~@3 c2@2 g2@6 g1 a1", H: "f2@2 f2@2 ~@2 c2@2 f2 ~ f2@2 ~@2 c2@2",
  I: "f2@2 c2@2 f2@2 c2@2 bb1 ~ bb1 ~ bb1@3 ~", J: "bb1 ~ bb1 ~ bb1 c2 db2@2 db2@2 db2 ~ db2 ~ db2@2",
  K: "eb2 ~ eb2 ~ eb2 ~ eb2 f2 f1 ~ f1@2 f2 ~ f2@2", L: "f1 ~ f1@2 f2 ~ f2@2 f1 ~ f1@2 f2 ~ f2@2",
  M: "f1 ~ f1@2 f2@2 ab1 a1 bb1 ~ bb1 ~ bb1 ~ bb1 ~", N: "bb1 ~ bb1 ~ bb1 c2 db2 ~ db2 ~ db2 ~ db2 ~ db2@2",
  O: "[f1 ~ f1@2 f2@4 d2@16 db2@16 d2@15 ~ d2@16 db2@16 d2@16 ~@8]/7", P: "[f1 ~ f1@2 f2@4 d2@30 ~@10]/3",
  Q: "f1 ~ f1@2 f2@2 ab1 a1 bb1 ~ bb1 ~ bb1@3 ~", R: "[f2@4 e2@4 d2@15 ~@9]/2",
})).s("gm_fretless_bass").gain(0.47).pan(0.6)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@29 A B C D E F C G H@2 ~@20 A B C D E F C G I@3 ~@11 J@2 C D K@2 C D K@2 C D L@2 M N@2 ~@4
>`.pickRestart({
  A: "~@8 bb1 ~@7", B: "~@4 bb1 c2 db2@4 ~@6", C: "eb2@8 f1 ~@3 [eb2,e2] ~@3, ~@3 f2",
  D: "f1@4 [eb2,e2] ~@3 f1@4 [eb2,e2] ~@3, ~ f2 ~ f2", E: "f1 ~ f1@2 [eb2,e2] ~@3 bb1 ~@7, ~ f2 ~@2",
  F: "~@4 bb1 c2 db2@3 ~@7", G: "f1@4 [eb2,e2] ~@3 f1 ~@3 [eb2,e2] ~@3, ~ f2 ~ f2",
  H: "[f1@2 f1@2 [eb2,e2] ~@3 d2@12 ~@12, ~ f2 ~@6]/2", I: "[f1@2 f1@2 [eb2,e2] ~@3 d2@30 ~@10, ~ f2 ~@10]/3",
  J: "[~@8 bb1@12 bb1 c2 db2@4 ~@6]/2", K: "[f1 ~ f1@2 [eb2,e2] ~@3 bb1@12 bb1 c2 db2@4 ~@6, ~ f2 ~@6]/2",
  L: "[f1 ~ f1@2 [eb2,e2] ~@3 bb1@11 ~ bb1 c2 db2@3 ~@7, ~ f2 ~@6]/2", M: "eb2@8 f1 ~@3 [eb2,e2] ~@3, ~@12 f2@3 ~",
  N: "[f2@4 e2@4 d2@15 ~@9]/2",
})).s("gm_lead_1_square").gain(0.25).pan(0.4)

// other · pad poly
const pad_poly = note("<~@2 A@3 ~ B C ~@11 D E F ~@27 D E F ~@20 G F ~@28>".pickRestart({
  A: "[~@8 f4 a3 bb3 f4 bb3 a3@9 ~@2, ~@2 a3 ~@5]/3", B: "~@4 a3@2 f4 a3", C: "bb3 f4 bb3 a3 ~@4",
  D: "~@8 f5 a4 d5 f5 g5 db5 e5 g5", E: "a5 d5 f5 a5 bb5 e5 g5 bb5 c6 f5 a5 c6 d6 f5 bb5 d6",
  F: "c6 f5 a5 c6 bb5 e5 g5 bb5 a5@8", G: "~@8 c6 f5 a5 c6 d6 f5 bb5 d6",
})).s("gm_pad_poly").gain(0.21).pan(0.7)

// bass · synth bass 2
const bass_2 = note("<~@2 A B C D E F ~@59 G H I@2 J K ~@29>".pickRestart({
  A: "~@6 d2 ~", B: "d2@3 ~ d2@2 ~@2 d2@2 ~@2 d2@2 ~@2", C: "d2@2 ~@2 d2@3 ~ d2@2 ~@2 d2@2 ~@2",
  D: "d2 ~ d2 ~ d2 ~ d2 ~", E: "d2@2 ~@2 d2@2 ~@2 d2 ~@3 d2@2 ~@2", F: "d2 ~ d2 ~@5", G: "~@8 d2@2 ~@2 d2@3 ~",
  H: "d2 ~ d2 ~ d2@2 d2@2", I: "d2@2 d2 ~ d2@2 d2@2", J: "d2!4", K: "d2@4 d2@3 ~@9",
})).s("gm_synth_bass_2").gain(0.27)

// chords · epiano1
const epiano1 = note(`<
  A B C@2 D E F@2 G H I J@2 K ~@3 L M N ~@17 O G H I J@2 K ~@3 L M N ~@17 P Q R@2 S T@2 ~@28
>`.pickRestart({
  A: "[f4,a4] ~ [f4,a4]@2 [e4,g4] ~ [e4,g4]@2 [d4,f4]@6 ~@2", // F Em Dm
  B: "[d4,f4] ~ [d4,f4]@2 [c4,e4] ~ [c4,e4]@2 [bb3,d4]@6 ~@2", // Dm C Bb
  C: "[[bb3,d4] ~ [bb3,d4]@2 [a3,c4] ~ [a3,c4]@2 [g3,bb3] ~ bb3@2 [d2,d3]@2 ~@2 d2@2 ~@2 [d2,d3]@2 ~@2 [d2,d3]@2 a3@2 [d2,d3,f4,a4] ~ [f4,a4]@2, ~@10 g3 ~ f3@15 ~@5, ~@6 a3@4 bb3@3 ~@3, ~@16 d3 ~@15]/2", // Bb Am Gm D Dm F
  D: "[d2,d3,e4,g4] ~ [e4,g4]@2 [d2,d3]@2 ~@2 [d2,d3]@2 ~@2 [d2,d3]@2 [d4,f4]@2, ~@4 [d4,f4]@6 ~@2 [d4,f4] ~@3", // Em7 Em D Dm
  E: "[d2,d3] [c4,e4] [d2,d3] ~ [d2,d3] ~ [d2,d3] [bb3,d4], [c4,e4] ~@3 [bb3,d4]@6 ~@2 [bb3,d4] ~@3", // D C D Bb C Bb
  F: "[[d2,d3]@2 [a3,c4]@2 [d2,d3]@2 bb3@2 [f3,a3]@4 [d2,d3,d4]@2 a3@2 [d2,d3] ~@3 [d2,d3]@2 a3@2 ~@2 [a3,a4]@2 [d4,bb4]@2 [a3,a4]@2, [a3,c4] ~@3 [g3,bb3] ~ g3 ~ [d2,d3] ~@5 f3@10 d3@6 ~@2, ~@8 bb3@3 ~@5]/2", // D Am D F D A Gm A …
  G: "~ [a3,a4] [d4,bb4] [a3,a4] ~ [a3,a4] [db4,bb4] [a3,a4], f5 ~, d3@5 ~@3 [db3,e5]@8", // A Gm A Gb A Dbm
  H: "~ [a3,a4] [db4,bb4] [a3,a4] ~ [a3,a4] [d4,e5] [a3,a4], g5@2 f5 ~, db3@5 ~@3 d3@7 ~", // A Gb A Dsus2 A
  I: "~ a3 d4 a3 ~ [a3,a4] [d4,bb4] [a3,a4], f4 ~, d3@5 ~@3 d3@6 ~@2", // A Gm A
  J: "[~ [a3,a4] [d4,bb4] [a3,a4] ~ [a3,a4] db4 [a3,a4] db3 [a3,a4] [db4,bb4] [a3,a4] ~ [a3,a4] d4 [a3,a4], f5@7 ~@5 bb4@6 ~@6 d3@7 ~, d3 ~ [db3,e5]@2 g5@2 f5 e5]/2", // A Gm A Gb A Dbm
  K: "~ [a3,a4] [d4,f4] g4 ~@4, [d3,d5]@5 ~@11", L: "~@5 a4 ~ a4, ~@3 bb4",
  M: "~ a4 bb4 a4 ~ a4 bb4 a4, f5@2 ~@2 e5@3 ~", N: "~@2 a4@2 bb4@2 a4@2 f5 ~@7, g5@5 ~@11",
  O: "~@5 [a3,a4] [d4,bb4] [a3,a4]", P: "~@10 f5@2 f5 ~ f5 ~", Q: "f5@4 e5@2 e5@2 ~@2 g5 ~ g5 ~ g5 ~",
  R: "[g5@4 e5@2 f5@19 ~ [d5,f5]@2 [d5,f5] ~ [d5,f5]@2, ~@26 a4@5 ~]/2", // Dm
  S: "[a4,d5,f5]@4 [db5,e5]@2 [a4,db5]@4 [a4,db5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~, ~@4 a4 ~ e5@6 ~@4, ~@5 g5!3", // Dm Dbm A
  T: "[[a4,db5,e5,g5] e5 [f4,d5]@4 ~@2, ~ a4@5 ~@2, ~@2 db5 ~@13]/2", // A7 Dm
})).s("gm_epiano1").gain(0.24).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A B@2 ~ C D ~ E@3 ~@11 F G H ~ I J K@2 L@4 M@2 ~@2 E@3 ~@11 F G H ~ I J K@2 L@4 M@2 ~@8 F G H ~ I J K@2 N ~ O@2 N
  ~ O@2 N ~ P@2 Q@2 ~@5
>`.pickRestart({
  A: "~@3 a3", B: "[f4 a3 bb3 f4 bb3 a3@9 ~@2]/2", C: "~@4 a3@2 f4 a3", D: "bb3 f4 bb3 a3 ~@4",
  E: "[~@2 f4 ~ a3@2 ~@6, ~@4 e4@7 ~@5]/3", F: "~@4 c4@2 f4 c4, ~ a3",
  G: "d4@2 ~@2 d4@2 c4@3 ~@5 c4@2, bb3@3 a3@5, ~ a4@6 ~, ~@3 f4", H: "d4 ~ d4 [a3,c4]@5, bb3@3 ~@5, ~ a4@4 ~@3",
  I: "~@4 c4@2 f4 c4, ~@8 a3 ~@7", J: "d4@2 a4@2 d4@2 [a3,c4]@3 ~@3 f4@2 c4@2, bb3@3 ~@5",
  K: "[d4 a4 d4 c4 [f3,bb3]@8 [ab3,db4]@4, bb3@3 ~@13]/2", // Bb5 Db5
  L: "[[bb3,eb4]@6 ~@2 c4@29 ~@3 f3@13 ~@3 [ab3,db4] ~@7, ~@8 f4 ~@31 bb3 ~@23]/4", // Eb5 Db5
  M: "[[bb3,eb4]@3 ~ [c4,f4]@8 ~@4]/2", N: "[bb3,eb4]@6 ~@2 [c4,f4] ~@7", O: "[~ [f3,bb3]@2 [ab3,db4]]/2",
  P: "[~@8 [f3,bb3]@13 ~@3 [ab3,db4] ~@7]/2", Q: "[[bb3,eb4]@3 ~ c4@8 ~@4, ~@8 f4 ~@23]/2",
})).s("gm_overdriven_guitar").gain(0.07).pan(0.3)

// other · recorder
const recorder = note("<~@9 A B ~ C D@2 ~@4 E F G@2 ~@14 H@8 I J@4 F G@2 ~@19 K G@2 ~@27>".pickRestart({
  A: "~@2 f4 e4", B: "a3@9 ~@7", C: "~@8 a4 ~@3 g4@4", D: "[f4@4 e4@3 ~ f4@16 ~@8]/2",
  E: "~@8 d5 f4 a4 d5 e5 a4 db5 e5", F: "f5 a4 d5 f5 g5 c5 g5 bb5 a5 c5 f5 a5 bb5 c5 f5 bb5",
  G: "[a5 c5 f5 a5 g5 c5 e5 g5 f5@12 ~@12]/2",
  H: "[~@8 d5@16 ~ f5 g5@14 ~ g5 ~@2 e4@4 a3@8 g5 f5 e5@12 ~@3 f5 g5@13 ~ a4 g5 ~@2 g4@4 f4@4 e4@2 a5 bb5 c6@8 c5@8 g5@8, ~@12 e5@4 ~@4 [f4,f5]@2 ~@23 a5@5 ~@14, ~@21 a5@7 ~@8 e5@4 ~@4 f5@2 ~@6 f4@8 ~@4]/8", // F
  I: "e5 c5 bb4 g4", J: "[e5@4 f5@4 g5@14 a5 g5 f5@16 ~ f5 g5@14 d5 f4 a4 d5 e5 a4 db5 e5, ~@4 a4@14 ~@2 e5@3 ~@9]/4",
  K: "~@8 a5 c5 f5 a5 bb5 c5 f5 bb5",
})).s("gm_recorder").gain(0.4).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@12 A B@2 ~@6 C@2 D E F G D H I ~@12 A B@2 ~@6 C@2 D E F G D H I ~@13 C@2 D E F G D H I ~@20
>`.pickRestart({
  A: "~@2 f4 [g3,e4], ~@8 a3 ~@7", B: "[[f3,d4] [e3,c4] f3@4 ~@2, ~@8 a3 ~@23]/2",
  C: "[~@8 [a3,c4,f4]@2 [a3,c4,f4]@4 [a3,f4]@2 [g3,e4]@2 [c4,e4]@4 [g3,c4,e4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@2, ~@7 c4@2 g3 ~@6]/2", // F Dm C Gm
  D: "[f3,bb3,d4]@2 [f3,bb3,d4]@3 ~ [f3,bb3,d4]@2 c4@4 f4@2 c4@2, ~@8 a3 ~@7", // Bb
  E: "d4@2 a4@2 d4@2 c4@3 ~@3 f4@2 c4@2, bb3@3 a3@5",
  F: "d4@2 a4@2 d4@2 c4 ~ [a3,c4,f4]@2 [a3,c4,f4]@3 ~ [a3,c4,f4]@2, bb3 ~", // F
  G: "c4@2 [c4,e4]@3 ~ [g3,c4,e4]@2 [f3,bb3,d4] ~ [g3,bb3,d4]@3 ~ [g3,bb3,d4]@2, g3@5 ~@11, e4 ~@15", // C Bb Gm
  H: "d4@2 a4@2 d4@2 [a3,c4]@3 ~ c4@2 f4@2 c4@2, bb3@3 ~@5", I: "d4 a4 d4 c4 ~@4, bb3@3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@21 A B@14 C D ~@13 A B@14 C D ~@5 A B@22 C ~@5>".pickRestart({
  A: "~@4 x ~@2 x", B: "x ~@3 x ~@2 x", C: "x!2", D: "x",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@21 A B@14 C ~@14 A B@14 C ~@6 A B@22 C ~@5>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct("<~@21 A B@5 C B@2 C@7 D ~@13 A B@5 C B@2 C@7 D ~@5 A B@5 C B@2 C@14 E ~@5>".pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x!3 ~ x!4", D: "x!3 ~@5", E: "x",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@36 [~@4 x!2 ~ x] [~ x!2 ~@5] ~@28 [~@4 x!2 ~ x] [~ x!2 ~@5] ~@34>").gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 A ~@6 B C ~@21 A ~@6 B C ~@13 A ~@20>".pickRestart({
  A: "~ x ~ x ~@4", B: "~@4 x!2 ~ x", C: "~ x!2 ~@5",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@27 A ~@2 A@8 ~@19 A ~@2 A@8 ~@11 A ~@2 A@14 ~@6>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@29 A B C D@2 E@2 F G ~@21 A B C D@2 E@2 F G ~@13 A B C D H B C D H B C D@2 E@2 I ~@5
>`.pickRestart({
  A: "~@8 x ~@6 x", B: "x ~ x!3 ~@2 x!2 ~ x!3 ~@2 x", C: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!2",
  D: "x ~ x!3 ~ x ~ x ~ x!3 ~ x!2", E: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", F: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", G: "x",
  H: "x ~ x!3 ~ x ~ x ~@6 x", I: "x ~ x!3 ~ x!2 ~@8",
})).gain(0.11)

// … 16 more lines

More by ABBA