Strudelify
The Winner Takes It All cover art

1980 · Super Trouper

The Winner Takes It All

ABBA

KeyD♭ majorTempo124 bpm
0:00/0:00
// The Winner Takes It All — ABBA
// 124 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A@4 B C D@2 E@4 F@5 G@2 H@2 I@2 J K L@2 M N O@2 P Q R@2 S@2 T@2 U V W@2 X@2 Y@2 Z@2 AA@2 AB AC AD@2 AE@2 AF@2 AG@2
  AH@2 U V AF@2 S@2 AH@2 U V AI@2 AJ@2 AK@2 AL@4 AJ@2 AM@4 AF@2 S@2 AH@2 U V AF@2 S@2 AH@2 U AN@2 AO@2 AP@2 AQ@2 AR@2
  AS@2 AT@2 AU@2 AV@2 AF@2 S@2 AH@2 U V AF@2 S@2 AH@2 U V AF@2 S@2 AH@2 U V AW ~
>`.pickRestart({
  A: "[~@11 db3 ~@3 bb2 ~@11 bb2 ~@3 eb3, [gb2,db4]@3 db3 gb2@2 gb3 [db3,db4] [gb2,ab4]@4 d2@4 eb2@3 bb3@2 gb4@4 bb2 [eb3,gb3] eb4@5, ~ db3@2 gb4 db4 db3 gb4@3 db4@3 ~@2 d3@2 ~@2 ab4@10 ~@2 [g3,db4]@2, ~@2 b4@7 db3 [gb3,bb3]@2 ~ bb2@2 ~@2 bb2 eb3@2 gb3 bb2 eb3 bb2 [eb2,f4]@4 g2@4, ~@2 gb3@3 bb4@6 gb4@8 bb2 eb2@2 bb3 gb3@2 bb3@3 ~ eb3@2 ~]/4", // Gb5 Db Gbsus2 Ebm Gdim Gb Ebsus2
  B: "~@7 [eb3,eb4], [ab2,eb4]@3 eb3 ab2@4, ~ eb3@2 ab4 eb4 eb3 [ab3,ab4]@2, ~ db5@3, ~@2 ab3@3 b4@3", // Eb Ab5 Ab
  C: "~@7 eb3, bb4@3 eb3 ab2 eb3 ab3@2, ab2@2 ab3 ab4@5, ~@2 eb4@13 ~, ~@2 eb3@2 b3@11 ~",
  D: "[~@15 ab2, db2@3 ab2 db2@2 db3 [ab2,ab3] eb4@2 db3 [ab2,db4] db2 ab2 db3@2, ~ ab2@2 db4 ab3 ab2 db4@2 db2 ab3@7, ~@2 gb4@7 ab2 f3@6, ~@2 db3@3 f4@11]/2", // Ab Db5
  E: "[~@11 db3 ~@3 bb2 ~@11 bb2 ~@3 eb3, gb2@3 db3 [gb2,db4]@2 gb3 [db3,db4] [gb2,ab4] db3 [gb3,bb3] gb4@8 bb2 eb2@2 bb3 [bb2,gb3] [eb2,f4] bb2 [eb3,gb3] eb4@5, ~ db3@2 gb4@2 db3 gb4@3 db4@3 d2@4 eb2@3 bb3@2 gb4@7 ~ eb3@2 ~, ~ b4@5 ~ d3 ~ ab4@5 ~ [g3,db4], ~@2 gb3@3 bb4@7 ~ bb2@2 ~@2 bb2 eb3@2 gb3 bb2 eb3@3 bb3@3 g2@4]/4", // Gb5 Db Gbsus2 Gb Ebm Ebsus2 Ebm Gdim
  F: "[~@3 eb3 ~@11 eb3 ~@12 db2@10 ~@2, [ab2,eb4]@8 ab2@4 ab3@2 [eb3,eb4]@2 bb4@2 eb3@2 b3@6 eb3@2 ab3@4 ~@2 ab2@2 db3@2 ab2@2 db2@2 ab2@2 [db3,db4]@2 [ab2,ab3]@2 [db2,eb4]@2 ab3@29 ~, ~ eb3@2 ab4 eb4 eb3 ab4@2 ab2 eb4@7 ~@2 gb4@7 ab2 [db3,f3]@13 ~, ~@4 db5@18 eb3@2 ab2@8 db2@6 db4@2 ab3@2 f4@12 db4@25 ~, ~@4 ab3@6 b4@10 ab3@2 ab4@32 ab2@23 ~@3]/5", // Ab5 Eb Db Ab Dbsus2 Db
  G: "[~@13 db4 ~ db4, gb2@7 bb3@4 bb4@3 bb3@2, ~ db3@7 gb2@3 db4 gb4@4, ~@2 gb3 bb3 db4 bb3 gb3@3 db3@7, ~@3 gb4@7 gb3@6]/2",
  H: "[~@15 ab3, f2@3 ab3 db4 ab3 db4@5 ab4@5, ~ db3@6 ab3@2 db3@2 ab3 db4 ab3 [db3,db4]@2, ~@4 f3@12 f2@15 ~, ~@6 ab4@14 f3@11 ~]/2", // Db
  I: "[~@2 b3 ~@7 ab3 ~@4 b3, ab2@5 b3 eb4@3 eb3@7, ~ eb3@2 b3 ab4@3 eb3 ab2@3 ab3 eb4@4, ~@3 b4@13, ~@3 ab3@4 b3@4 ab4@2 b3 ab3@2]/2",
  J: "~@7 ab3, f2@5 ab3 db3@2, ~@2 db3@4 ab3@2 db4@7 ~, ~@4 f3@11 ~, ~@6 ab4@9 ~",
  K: "~@7 ab4, [db2,eb4]@3 ab3, ~@2 f3@4 db3@2 f3@7 ~, ~@2 ab3@3 [db3,gb4]@3, ~@6 f4@9 ~", // Dbsus2 Gb5
  L: "[~@15 [db3,bb3], gb2@3 db4 gb4 ab4@8 gb3 gb4@2, ~ db3@5 db4 gb4 b4@8, ~ bb4@3 gb3 db3 db4@2, ~@2 gb3@3 gb2@4 gb4 db4 [gb2,bb4]@5]/2", // Gb
  M: "~@7 [db3,ab3], f2, ~ db3@4 c4@3, ~ db4@3, ~@3 f3 ab3@2 f3@2", // Db5
  N: "~@4 f3 ~@2 f3, [f2,eb4]@15 ~, ~ f3@2 db3@2 f3@2 ~, ~ ab3@2 [db3,ab3], ~@6 db4@9 ~", // F7 Db5
  O: "[~@12 eb3 ~@2 [ab2,eb3], ab2@5 bb3@8 eb3 ab3@2, ~ eb3@3 eb3 ab2@4 eb3@2 b3@5, ~@2 b3@8 ab3 ab2@4 ~, ~@3 ab3@3 eb3 ab3 db4@7 ~]/2", // Ab5
  P: "~@7 db4, db2, ~ db3@5 ab3@2, ~ f4@3, ~@3 db4 ab3 eb4@3",
  Q: "~@7 ab3, db2@15 ~, gb4@5 ab3 db3@2, ~ ab3@3 db4@4, ~@2 db4 f4@5",
  R: "[~ db3 ~ db3 ~ db3 gb4 [db3,db4] ~ [db3,db4] ~ db3 ~ bb2 ~ bb2, gb2@4 [gb3,b4]@7 ~ gb3@8 bb3@10 ~@2, ~@6 gb4@4 bb4@6 ab4@4 gb3@5 ~@3 d3@4, ~@8 [gb2,db4]@6 ~@2 gb2@8 d2@7 ~, ~@11 gb4@5]/2", // Db B5 Gb5
  S: "[~@9 bb2 ~ bb2 ~ eb3 ~ eb3, eb2@6 bb2@2 gb3@2 bb2@2 bb3@5 ~ bb3@7 ~@3 [g3,db4]@4, ~@2 bb2@4 bb3@6 eb3@7 ~ [eb3,gb3]@4 ~@8, ~@4 [eb3,ab4]@6 gb4@6 [eb2,f4]@6 ~@2 g2@5 ~@3, ~@4 eb2@3 [bb2,gb3]@2 ~@2 eb4@3 ~@2]/2", // Gdim Ebm Ab5 Ebsus2 Ebm
  T: "[~@2 eb3@2 ~@2 [eb3,ab4]@2 eb4@2 [eb3,b4]@2 [ab3,eb4]@2 eb3@2 ~@2 [eb3,eb4]@2 [ab3,b3]@2 eb3@2 ~@2 eb3@2 ab3@2 eb3 ~, [ab2,eb4]@2 [ab3,db5]@2 ab2@3 b3@2 ~@7, ~@16 ab2@6 ~@2 ab2@5 ~@3, ~@8 bb4@2 ~ ab4@5]/2", // Ab5 Abm Ab5 Eb Abm Ab5 Db5
  U: "~ ab2 db3 ab2 ab3 [ab2,f4] [db3,db4] [ab2,ab3], db2@3 db4@2 ~@3, ~@2 gb4@2 db2@3 ~", // Db Ab
  V: "~ [ab2,ab3] [db3,f3] ab2 db2 ab2 db3 ab2, db2@3 ~@5, eb4@2 ~ db4@5", // Ab Db
  W: "[~@3 db4 ~@2 db4 bb3 ~ db4 bb3 ~ db4 bb3 ~ bb3, gb2@13 ~@3, ~ gb3@11 ~@2 gb3@2, ~@4 bb4@6 ab4@6 b4@4 ~@2 bb4@9 ~, ~@2 bb3 ~@5]/2",
  X: "[~ f3 ~ ab3 ~@2 ab3 ~@2 ab3 f3 ~ ab3 f3 ab3 f3, f2@27 ~@5, ~@4 db4@6 c4@6 eb4@5 ~ db4@10, ~@4 f3@2 ~ f3@2 ~@7]/2",
  Y: "[~ eb3 ~ ab3 eb3 bb3 ~@6 ab3 eb3 ab3 eb3, eb2@27 ~@5, ~@4 b3@5 ~@3 ab3@4 db4@4 eb3@4 ~@8, ~@7 eb3@2 ab3@2 b3@5]/2",
  Z: "[~@3 db4 ~@9 ab3 ~ ab3, db2@23 ~@9, ~ db3@12 ~ db3@2, ~@4 f4@6 eb4@4 ab3@4 db4@4 f4@9 ~, ~@4 ab3@2 db4@2 gb4@2 ab3@2 db4@3 ~]/2",
  AA: "[~@3 db4 bb3 ~ db4 bb3 ~ db4 bb3 ~ db4 bb3 gb3 bb3, gb2 ~, ~@2 gb3@21 ~@9, ~@4 bb4@6 ab4@5 ~ b4@4 ~@2 bb4@10]/2",
  AB: "~ f3 ~ ab3 ~@2 ab3 f3, f2@2 f3 ~, ~@2 db4@3 c4@3", AC: "~ ab3 f3 ~ ab3 f3 ~ f3, eb4@4 ~@2 db4@9 ~, ~@3 ab3",
  AD: "[~ eb3 ~ ab3 ~ bb3 ab3 ~@3 eb3 ~@2 eb3 ~ eb3, eb2@8 db4@2 ~ b3@5, ~@2 b3@2 eb3@2 ~ eb3@2 ab3@2 ~ ab3@2 ab2@2]/2",
  AE: "[~@3 db4 ab3 eb4 db4 ~@3 ab3 ~@2 ab3 ~ ab3, db2@8 gb4@2 ~ f4@4 ~, ~ db3@12 ~ db3@2, ~@4 f4@5 ~@5 ab3@4 db4@4 ~@2 db4@8]/2",
  AF: "[~ db3 ~ db3 ~ db3 gb4 [db3,db4] ~ [db3,db4] ~ db3 ~ bb2 ~ bb2, gb2@4 [gb3,b4]@7 ~ gb3@8 bb3@9 ~@3, ~@6 gb4@4 bb4@6 ab4@4 gb3@5 ~@3 d3@4, ~@4 [gb2,db4]@3 ~ gb2@4 d2@3 ~, ~@22 gb4@9 ~]/2", // Db B5 Gb5
  AG: "[~@9 bb2 ~ bb2 ~ eb3 ~ eb3, eb2@6 bb2@4 gb4@6 f4@6 eb4@5 ~@5, ~@2 bb2@4 bb3@6 [eb3,bb3]@5 ~@3 gb3@4 ~@4 [g3,db4]@4, ~@4 [eb3,ab4]@6 bb2@4 gb3@4 bb3@7 ~@7, ~@8 [eb2,gb3]@4 ~@4 eb2@4 ~@4 g2@5 ~@3]/2", // Eb5 Gdim Ab5 Ebm
  AH: "[~@2 eb3@2 ~@2 [eb3,ab4]@2 eb4@2 [eb3,b4]@2 [ab3,eb4]@2 eb3@2 ~@2 [eb3,eb4]@2 [ab3,b3]@2 eb3@2 ~@2 eb3@2 ab3@2 eb3 ~, [ab2,eb4]@2 [ab3,db5]@2 ab2@3 b3@2 ~@7, ~@8 ab2@3 ~ ab2@3 ~, ~@8 bb4@2 ~ ab4@5]/2", // Ab5 Abm Ab5 Eb Abm Ab5 Db5
  AI: "[~@4 [bb5,bb6]@5 ~ [ab5,ab6]@6 [b5,b6]@6 ~@6 [bb3,gb4]@4, [bb3,db4,gb4]@12 ~@2 db4 ~, ~@22 [bb5,bb6]@9 ~]/2", // Bb Ab B Ebm Gb Bb
  AJ: "[~@2 [db5,db6]@3 [c5,c6]@3 [eb5,eb6]@3 ~@3 [ab3,db4,f4]@2, db4@3 ~, [ab3,f4]@11 [db5,db6]@5]/2", // Db C Eb Db
  AK: "[~@2 [b4,b5]@3 [bb4,bb5]@3 [db5,db6]@3 ~@3 [b3,eb4,ab4]@2, b3@13 ~@3, eb4@3 ~, ab4@21 ~ [b4,b5]@10]/2", // B Bb Db Abm B
  AL: "[~@4 [f5,f6]@5 ~ [eb5,eb6]@6 gb6@6 ~@6 f4@4 ~@4 [bb5,bb6]@6 [ab5,ab6]@6 [b5,b6]@6 ~@6 [bb3,db4,gb4]@4, [f4,ab4]@24 ~@4 ab4@2 ~@2 [bb3,gb4]@21 ~@11, db4@21 ~@7 db4@23 ~@13, ~@16 gb5@5 ~ [f5,f6]@9 ~@23 [bb5,bb6]@9 ~]/4", // F Eb Bb Ab B Gb Fm Ebm …
  AM: "[~@4 [b4,b5]@6 [bb4,bb5]@6 [db5,db6]@6 ~@6 [b3,eb4]@4 ~@4 [f5,f6]@5 ~ [eb5,eb6]@5 ~ [gb5,gb6]@6 [f5,f6]@7 ~@3, [b3,eb4,ab4]@13 ~ ab4@13 ~@5, ~@22 [b4,b5]@9 ~ [db4,f4]@23 ~@9]/4", // B Bb Db B F Eb Gb F …
  AN: "[~@2 [ab2,ab3]@2 [db3,f3]@2 ~@2 db2@15 ~@9, [db2,eb4]@5 ~ db4@10 ~@16]/2", // Ab Db Dbsus2
  AO: "[~@4 db4 ~@8 gb3 ~ bb3, gb2@5 [gb2,ab4]@6 gb3 bb3@2 gb3@2, ~@2 db3@7 ~@7 b4@16, ~@2 [gb3,bb4]@3 ~@2 bb3@2 db4@7, ~@5 bb3@5 ~@2 db4@4 gb3@4 bb3@2 bb4@10]/2", // Gbsus2 Gb
  AP: "[~@4 ab3 ~@10 f3, f2@11 db3 ab3 f3 db3@2, ~@2 db3@8 db3@8 ab3@2 f3@2 db4@9 ~, ~@2 db4@3 c4@11, ~@3 f3@2 ~ f3 ab3 eb4@8]/2",
  AQ: "[~@4 eb3 ~@10 eb3, eb2@11 ab2 ab3 eb3 ab2@2, ~ ab2@4 ab2@4 ab3 eb3 b3@5, ~@2 b3@3 bb3@11, ~@3 ab3@2 ~ ab3 eb3 db4@8]/2",
  AR: "[~@4 f3 ~@10 f3, db2@11 db3 f3 db3@3, ~ db3@4 db3@2 f3 db3 ab3 f3 f4@3 ab3@2, ~@4 f4@6 eb4@21 ~, ~@6 ab3@4 ~@2 ab3@4 gb4@15 ~]/2",
  AS: "[~@7 bb3 ~@7 bb3, gb2@13 bb3 gb3@2, ~ db3@5 db4@2 ~ db4@2 bb4@5, ~ bb4@3 b4@4, ~@2 gb3 bb3 db4 [gb3,ab4]@3 gb3@2 bb3 gb3 db4@4]/2", // Gbsus2
  AT: "[~@4 ab3 ~@2 f3 ~ ab3 f3 ~@4 ab3, f2@7 db3, ~@2 db3@8 [db3,c4]@6 [db3,eb4]@6 db3@4 f3@5 ~, ~@4 db4@6 ~@12 db4@9 ~, ~@6 f3@5 ~ ab3@4 ~@8 ab3@6 ~@2]/2", // Dbmaj7 Dbsus2
  AU: "[eb2 ~@3 ab3 ~@2 eb3 ~@2 eb3 ~@4 eb3, ~ ab2@4 ab2@6 ab2@3 ab2@2, ~@2 b3@3 bb3@3 db4@3 b3@5, ~@3 eb3@2 ~ ab3@2 ~ ab3@2 ~ ab3@4, ~@13 eb3@2 ~]/2",
  AV: "[~@6 ab2@2 ~@2 ab2 ~ db4@2 [ab2,ab3]@2 ~@2 ab2@2 ~@2 ab2@2 db2@7 ~, db2@7 ~ db2@8 [db2,eb4]@6 db4@10, ~@2 ab2@4 db4@4 f4@6 ~@4 f3@5 ~@7, ~@4 [db3,gb4]@7 ~ db3@6 ~@2 db3@10 ~@2, ~@8 ab3@5 ~@5 ab3@6 ~@8]/2", // Ab Dbsus2 Gb5
  AW: "[bb3,db4,gb4]", // Gb
})).s("gm_piano").gain(0.33)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@33 A@2 B@2 C@2 D E F G H I J K L M F G H I J K L N O P Q R S T U V W P X R Y T Z AA F G H I J K L M F G H I J K L AB
  O P Q R S T U V W P X R Y T Z AC@2 ~@14 AD AE O P Q R S T U V O P Q R S T U V W P X R Y T Z AA AF ~
>`.pickRestart({
  A: "[gb2@22 ~@2 d2@7 ~]/2", B: "[eb2@24 g1@7 ~]/2", C: "[ab1@23 ~ ab2@8]/2", D: "db2@13 ~ bb2 [b2,c3]",
  E: "[db3,f3]@15 ~", F: "gb2@7 ~ gb2@2 gb2 ~@3 db2 eb2", G: "gb2@8 gb2@2 gb2 ~@3 gb2!2",
  H: "f2@7 ~ f2@2 f2 ~@3 db2 eb2", I: "f2@7 ~ f2 ~ f2 ~@3 db2 f2", J: "eb2@7 ~ eb2@2 eb2 ~@3 db2 eb2",
  K: "eb2@7 ~ eb2@2 eb2 ~@3 b1 eb2", L: "db2@7 ~ db2@2 db2 ~@3 b1 c2", M: "db2@7 ~ db2@2 db2@2 ~@2 db2@2",
  N: "db2@3 ab2 db3@3 ~", O: "gb2@4 db2@4 gb2 ~ gb2@3 eb2 e2 f2", P: "gb2 ~ gb2@2 db2@2 ~ db2 d2 ~ d2@3 ~ d2@2",
  Q: "eb2 ~ eb2@2 bb1@4 eb2 ~ eb2@3 bb1 db2 d2", R: "eb2 ~ eb2@2 bb1@4 eb2 ~ eb2@4 g1@2",
  S: "ab1@4 eb2@4 ab2 ~ ab2@4 gb2 g2", T: "ab2 ~ ab2@2 eb2@4 ab2 ~ ab2 ~ a2 bb2 b2 c3",
  U: "db3 ~ db3@2 db2@4 db3 ~ db3@2 db2@4", V: "db3@2 db2 ~ db2@4 db3@2 db2 ~ db2 ~ db2!2",
  W: "gb2 ~ gb2@2 db2@4 gb2 ~ gb2@3 eb2 e2 f2", X: "eb2 ~ eb2@2 bb1@4 eb2 ~ eb2@2 ~ bb1 db2 d2",
  Y: "ab1 ~ ab1@2 eb2@4 ab2 ~ ab2@4 gb2 g2", Z: "db3 ~ db3@2 ab2@3 ~@3 db3@6, ~@2 db2 ~",
  AA: "db2@2 db2 ~ db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2@2", AB: "db2@5 ~ ab2@2 db3@7 ~", AC: "[db2@6 db2@17 ~@9]/2",
  AD: "db2@15 ~", AE: "db2@4 db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2@2", AF: "gb1",
})).s("gm_fretless_bass").gain(0.38)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note(`<
  ~@6 A@2 B@2 C@2 D E F@3 ~@16 G H I@2 J K L M ~@16 G H I@2 J K L M G H I@2 J K L M ~@16 G H I@2 J K L M G H I@2 J K L M
  ~@15 N@2 G H I@2 J K L M G H I@2 J K L M G H I@2 J K L M ~@2
>`.pickRestart({
  A: "[~@15 db3, db3@6 db3@5 ~ db3@5 ~ db3@8 db3@4 ~@2, ~@2 ab3@5 ~ ab3@5 ~ ab3@5 ~ ab3@4 ab3@4 ab3@4, ~@4 db4@5 ~ db4@6 db4@6 db4@9 ~]/2",
  B: "[~@11 gb4 ~@3 bb3, gb3@4 gb3@3 gb3@3 gb3@2 ~ bb3@2 ~, ~@2 db4@4 db4@6 db4@6 db4@5 ~ d4@7 ~, ~@4 gb4@5 ~ gb4@5 ~ gb4@5 ~@7 f4@4]/2",
  C: "[~@6 bb3 ~@5 bb3 ~@2 bb3, bb3@3 bb3@2 ~@4 bb3@3 ~@4, ~@2 eb3@6 eb3@6 eb3@5 ~ eb3@5 ~ eb3@6, ~@4 eb4@5 ~ eb4@5 ~ eb4@6 eb4@5 ~ db4@4]/2",
  D: "~ eb4 ~ eb4 ~@3 b3, b3@7 ~ b3@6 ~@2, ~@4 ab4@5 ~ ab4@6, ~@3 eb4",
  E: "~@7 b3, ab4@2 b3@3 b3@2 ~, ~ eb4@3 eb4@2 eb4@2, ~@6 ab4@9 ~",
  F: "[~@2 db4@2 ~@18 db4@15 ~@11, ab3@8 ab3@5 ~ ab3@4 db4@4 ~@26, ~@2 gb4@3 f4@6 ~@13, ~@3 db4@2 ~ db4@2 eb4@3 ~@13, ~@20 ab3@13 ~@15]/3",
  G: "~ db4 ~ db4 gb3 ~ db4 gb3, gb3@3 ~@5, ~@4 gb4@5 ~ gb4@5 ~", H: "gb4 db4 gb3 gb4 d4 bb3 f4 bb3",
  I: "[~ eb3 ~@4 bb3 ~@2 bb3 ~ eb4 bb3 ~ db4 bb3, bb3@2 eb4@2 eb3@2 ~ eb3@2 ~ eb3@2 ~ eb3@2 ~, ~@3 bb3@2 eb4@2 ~ eb4@2 ~@6]/2",
  J: "~ eb4 ~ eb4 ~@2 eb4 b3, b3@3 ~ b3@2 ~@2, ~@4 ab4@5 ~ ab4@5 ~", K: "~ eb4 b3 ~ eb4 b3 eb4 b3, ab4@2 ~ ab4@2 ~@3",
  L: "db2 ab2 db3 ab2 db2 db3 ab2 db2", M: "db3 ab2 db2 db3 ab2 db2 db3 ab2",
  N: "[~@2 db4@2 ~@18 db4@9 ~, ab3@8 ab3@5 ~ ab3@4 db4@4 ~@10, ~@2 gb4@3 f4@6 ~@5, ~@3 db4@2 ~ db4@2 eb4@3 ~@5, ~@5 ab3@3]/2",
})).s("gm_harpsichord").gain(0.1).pan(0.7)

// other · pad halo · "HALO PAD"
const pad_halo = note(`<
  ~@6 A B@2 C D E F G@2 H@2 ~@16 I J@2 K@2 G@2 L ~@16 I J@2 K@2 G@2 L I J@2 K@2 G@2 L ~@16 I J@2 K@2 G@2 L I J@2 K@2 G@2
  L ~@15 A L I J@2 K@2 G@2 L I J@2 K@2 G@2 L I J@2 K@2 G@2 L ~@2
>`.pickRestart({
  A: "~@2 gb4@3 f4@3", B: "[eb4@6 db4@13 ~ b4@5 ~ bb4@5 ~]/2", C: "ab4@3 gb4@3 f4@2", D: "~@4 ab4@5 ~ gb4@6",
  E: "f4@3 eb4@3 db4@2", F: "~@4 db5@5 ~ b4@6", G: "[bb4@3 ab4@7 gb4@3 f4@3]/2", H: "[eb4@6 db4@19 ~@7]/2",
  I: "~@4 b4@5 ~ bb4@5 ~", J: "[ab4@6 gb4@14 ab4@5 ~ gb4@6]/2", K: "[f4@6 eb4@13 ~ db5@5 ~ b4@6]/2", L: "eb4@3 db4@5",
})).s("gm_pad_halo").gain(0.33).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@17 A B C D E F G H I J K@2 L M N O ~@8 P Q R@2 S T U V W X Y R Z AA AB AC ~@91
>`.pickRestart({
  A: "gb4 ~ [bb3,db4] gb4@2 gb4!3, [bb3,db4]@2 ~ [bb3,db4]@3 [bb3,db4]@2, ~ gb4@2 ~@5", // Bbm
  B: "gb4!2 [bb3,db4,gb4] [bb3,db4,gb4]@2 [bb3,db4,gb4] gb4!2, [bb3,db4] ~@2 [bb3,db4]", // Gb Bbm
  C: "f4@2 [ab3,db4,f4] ab3!3 ~ db4, ab3 ~@5 [db4,f4]@4 f4@6, ~@5 db4@2 ~, ~@3 ab3", // Db
  D: "[db4,f4]@2 [db4,f4]@4 ab3@2 ab3@2 [ab3,db4,f4]@2 [ab3,db4,f4]@3 ~, ab3@3 [db4,f4]@2 ~@3", // Db
  E: "ab3 [ab3,eb4] [ab3,b3,eb4] [ab3,b3,eb4]@2 [ab3,b3,eb4] [ab3,eb4] [ab3,b3,eb4], b3 ~@3", // Ab5 Abm Ab5 Abm
  F: "[ab3,b3,eb4]@2 [ab3,b3]@2 [ab3,b3]@2 [ab3,b3,eb4]@4 [ab3,b3,eb4]@2 [ab3,b3,eb4]@2 [b3,eb4] ~, ~ eb4@2 ~@5", // Abm B
  G: "db4!2 [ab3,db4,f4] ab3 ab3@2 [ab3,db4,f4]@2, [ab3,f4]@2 ~ [db4,f4]@3 ~@2", // Db
  H: "f4 f4@2 [ab3,db4,f4]@2 [ab3,db4,f4]!2 [ab3,f4], [ab3,db4]@3 ~@5", // Db Db5
  I: "[bb3,db4,gb4] ~ [bb3,db4,gb4]@2 [bb3,db4,gb4]@2 bb3@2 bb3@2 [bb3,gb4]@4 [bb3,gb4]@2, ~@3 [db4,gb4]@2 db4@3", // Gb Ebm Gb5
  J: "[bb3,gb4]@2 [bb3,db4,gb4]@4 bb3@2 ~@2 gb4@2 [bb3,db4,gb4]@2 [bb3,db4,gb4] ~, ~@6 [db4,gb4]@5 ~@5, ~@2 bb3 ~", // Ebm Gb Gb5
  K: "[f4@2 f4@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,f4]@2 [ab3,f4]@2 [ab3,f4]@2 [ab3,f4]@2 [ab3,f4]@2 [ab3,f4]@4 [ab3,db4,f4]@3 ~ [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2, ab3@2 ~@3 db4@6 ~@5]/2", // Db
  L: "[b3,eb4] ~ eb4@2 [ab3,b3,eb4]@2 [ab3,b3,eb4]@4 [ab3,b3,eb4]@4 [ab3,b3,eb4]@2, ab3 ~@3", // B Abm
  M: "[b3,eb4]@2 ~@2 ab3@2 [ab3,b3,eb4]@4 [ab3,b3,eb4]@2 [ab3,b3,eb4]@2 [ab3,b3,eb4] ~, ab3 ~@3, ~ [b3,eb4]@2 ~@5", // B Abm B
  N: "[ab3,db4,f4]@2 [ab3,db4,f4] ab3!3 ~ f4, ~@3 [db4,f4]@2 db4@3, ~@5 f4@2 ~, ~@3 ab3", // Db
  O: "[ab3,db4,f4]@2 [ab3,f4]@2 [ab3,f4]@2 ab3@2 ab3@2 [ab3,f4]@2 [ab3,f4]@3 ~, ~ db4@2 db4@4 ~, ~@3 f4@2 ~@3", // Db
  P: "[gb3,bb3,db4]@2 [gb3,bb3]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4] ~", // Gb
  Q: "[gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4] ~", // Gb
  R: "[f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~", // Db
  S: "[eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,b3]@2 [eb3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3] ~, ~ ab3 ~@2", // Abm
  T: "[eb3,b3]@2 [eb3,b3]@2 [eb3,ab3,b3] ~ [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3] ~, ab3 ~@3", // Abm
  U: "[f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~ [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~", // Db
  V: "[f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~ [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~", // Db
  W: "[bb3,db4]@2 [bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4] ~, gb3 ~@3", // Bbm Gb
  X: "[gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4] ~ [gb3,bb3,db4]@2 [gb3,bb3,db4] ~", // Gb
  Y: "db4@2 db4@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~, [f3,ab3] ~@3", // Db Fm
  Z: "[eb3,b3]@2 [eb3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3] ~, ab3 ~@3", // Abm
  AA: "[eb3,ab3,b3]!8", // Abm
  AB: "[f3,bb3,db4] ~ [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,db4]@2 [f3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2, ~@3 ab3@2 ~@3", // Bbm Db
  AC: "[f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4] ~ [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2", // Db
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@33 A@4 B@2 C@2 ~@15 D E@4 F@2 G@2 E@4 H@2 I@2 J K L M N O P Q J K L M N O P R E@4 H@2 S@2 E@4 H@2 T@3 ~@10 U@5 D E@4
  H@2 G@2 E@4 F@2 V@2 E@4 H@2 W@2 ~@2
>`.pickRestart({
  A: "[gb4@25 ~@3 g4@4]/4", B: "[ab4@15 ~]/2", C: "[db4@31 ~]/2",
  D: "~@8 [ab3,ab4] [bb3,bb4] [b3,b4] [db4,db5] [eb4,eb5] [f4,f5] [gb4,gb5] [ab4,ab5]", E: "[bb4,bb5]/4",
  F: "[b5, b4@29 ~@3]/2",
  G: "[[ab4,ab5]@22 ~@2 [ab3,ab4] [bb3,bb4] [b3,b4] [db4,db5] [eb4,eb5] [f4,f5] [gb4,gb5] [ab4,ab5]]/2", H: "[b4,b5]/2",
  I: "[ab5@15 ~, ab4@13 ~@3]/2", J: "~@4 bb4@5 ~ ab4@6", K: "b4@6 bb4@9 ~", L: "~@2 db4@3 c4@3", M: "eb4@3 db4@5",
  N: "~@4 b3@5 ~ bb3@5 ~", O: "db4@5 ~ b3@10", P: "~@2 f4@3 eb4@3", Q: "gb4@3 f4@5",
  R: "gb4@6 ~@2 [ab3,ab4] [bb3,bb4] [b3,b4] [db4,db5] [eb4,eb5] [f4,f5] [gb4,gb5] [ab4,ab5], ~@3 f4@3 ~@2", // Ab Bb B Db Eb F Gb Ab
  S: "[[ab4,ab5]@24 [ab3,ab4] [bb3,bb4] [b3,b4] [db4,db5] [eb4,eb5] [f4,f5] [gb4,gb5] [ab4,ab5]]/2", // Ab Bb B Db Eb F Gb Ab
  T: "[[ab4,ab5]@41 ~@7]/3", U: "[ab4@37 ~@3]/5",
  V: "[ab5@24 [ab3,ab4] [bb3,bb4] [b3,b4] [db4,db5] [eb4,eb5] [f4,f5] [gb4,gb5] [ab4,ab5], ab4@21 ~@11]/2", // Ab Bb B Db Eb F Gb Ab
  W: "[[ab4,ab5]@15 ~]/2", // Ab
})).s("gm_string_ensemble_1").gain(0.27)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  ~@41 A@6 B@8 C@2 D@3 E@8 F@5 G@6 H@8 I@2 D@3 J@8 K@4 L@2 ~@6 M N O P Q R@2 S@2 T D@3 U@5 D@3 V@8 W@6 ~
>`.pickRestart({
  A: "[[bb3,gb4]@30 ~@2 f4@25 ~@7 [b3,eb4]@30 ~@2, db4@21 ~@11, ~ ab4@2]/6", // Ebm B
  B: "[~@16 [gb4,bb4]@16 f4@15 ~ b4@16, [db4,f4]@15 ~@17 ab4@28 ~@4, ~@8 db5@37 ~@3 eb4@14 ~@2]/8", // Gb Db
  C: "[[f4,ab4]@3 ~, db4@21 ~@11]/2", // Fm
  D: "[~@4 b4@5 ~ bb4@6 ab4@5 ~@3 d4@8 ~@4 ab4@6 gb4@6, db4@11 gb4@7 ~@6, ~@32 eb4@15 ~]/3",
  E: "[f4@6 ~@6 g3@3 ~@5 db5@6 b4@5 ~ bb4@6 ~@14 gb4@5 ~ f4@6 eb4@6 ~@14 b4@6 bb4@5 ~ ab4@5 ~@3 d4@8 ~@4 ab4@6 gb4@6, bb3@11 ~@5 ab3@32 ~@80, ~@6 eb4@39 ~@3 db4@18 ~@4 db4@34 ~@8 eb4@15 ~, ~@38 ab4@13 ~@51 gb4@14 ~@12]/8",
  F: "[f4@6 ~@6 g3@4 ~@4 db5@6 b4@5 ~ bb4@6 ~@14 gb4@5 ~ f4@6 eb4@6 db4@10, bb3@3 ~ ab3@8 ~@8, ~@3 eb4@21 db4@9 ~@7, ~@38 ab4@13 ~@29]/5",
  G: "[[bb3,gb4]@31 ~ f4@27 ~@5 [b3,eb4]@30 ~@2, db4@5 ~@3, ~ ab4@2]/6", // Ebm B
  H: "[~@32 gb4@32 f4@30 ~@2 [eb4,b4]@31 ~, f4@32 bb4@29 ~@3 ab4@56 ~@8, db4@29 ~@99, ~@16 db5@71 ~@41]/8", // Abm
  I: "[[db4,ab4]@11 ~@5, f4@3 ~]/2", // Db5
  J: "[f4@6 ~@6 g3@4 ~@4 db5@5 ~ b4@6 bb4@6 ~@14 gb4@6 f4@6 eb4@6 ~@14 b4@6 bb4@5 ~ ab4@5 ~@3 d4@8 ~@4 ab4@6 gb4@6, bb3@6 ~@2 ab3@15 ~@41, ~@6 eb4@42 db4@20 ~@2 db4@31 ~@11 eb4@15 ~, ~@38 ab4@13 ~@51 gb4@14 ~@12]/8",
  K: "[f4@6 ~@6 g3@4 ~@4 db5@5 ~ b4@6 bb4@6 ~@14 gb4@6 f4@6, bb3@5 ~@3 ab3@15 ~@9, ~@6 eb4@41 ~ db4@16, ~@38 ab4@13 ~@13]/4",
  L: "[eb4@3 db4@9 ~@4]/2", M: "~@2 [f3,f4]@3 [eb3,eb4]@3", N: "[gb3,gb4]@3 [f3,f4]@5",
  O: "~@4 [bb3,bb4]@5 ~ [ab3,ab4]@6", P: "[b3,b4]@3 [bb3,bb4]@5", Q: "db4@9 ~ c4@6", R: "[eb4@6 db4@14 b3@6 bb3@5 ~]/2",
  S: "[db4@3 b3@7 gb4@3 f4@3]/2", T: "eb4@3 db4@5",
  U: "[f4@6 ~@6 g3@3 ~@5 db5@6 b4@5 ~ bb4@6 ~@14 gb4@5 ~ f4@6 eb4@6 db4@10, bb3@11 ~@5 ab3@28 ~@36, ~@6 eb4@39 ~@3 db4@18 ~@14, ~@38 ab4@13 ~@29]/5",
  V: "[f4@6 ~@6 g3@4 ~@4 db5@6 b4@5 ~ bb4@6 ~@14 gb4@5 ~ f4@6 eb4@6 ~@14 b4@6 bb4@5 ~ ab4@5 ~@3 d4@8 ~@4 ab4@6 gb4@6, bb3@3 ~ ab3@7 ~@21, ~@6 eb4@41 ~ db4@18 ~@4 db4@32 ~@10 eb4@15 ~, ~@38 ab4@13 ~@51 gb4@14 ~@12]/8",
  W: "[f4@6 ~@6 g3@4 ~@4 db5@6 b4@5 ~ bb4@6 ~@14 gb4@5 ~ f4@6 eb4@5 ~ db4@26, bb3@11 ~@5 ab3@28 ~@52, ~@3 eb4@19 ~@2 db4@9 ~@15, ~@38 ab4@13 ~@45]/6",
})).s("gm_string_ensemble_1").gain(0.33)

// drums · kick
const kick = s("bd").struct("<~@41 A@15 B A@7 B A@7 C A@15 C A@7 B A@7 D ~@15 E F A@7 B A@7 B A@7 C D ~>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@6 x", D: "x", E: "x ~@4 x ~@2", F: "x ~@2 x ~@4",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct(`<
  ~@40 A B@7 C B@6 D ~ B@6 D ~ B@6 D E B@7 C B@6 D E B@6 D ~ B@6 D ~@16 F G B@6 D ~ B@6 D ~ B@6 D E ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x ~@2", E: "~ x!6 ~", F: "~@2 x!2 ~@2 x ~", G: "~ x ~@2 x ~@3",
})).gain(0.44)
// … 63 more lines

More by ABBA