Strudelify
Kisses of Fire cover art

Voulez-Vous

Kisses of Fire

ABBA

KeyG♭ majorTempo136 bpm
0:00/0:00
// Kisses of Fire — ABBA
// 136 bpm, 4/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 53, 4/4 at bar 53) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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@5 B@6 C@7 D@2 E@3 F@7 G H@3 I J K@4 ~@11 L M N@3 O P@2 Q R@2 S@2 R@2 T@2 U V@3 W X Y Z AA@2 AB ~ AC@2 AD@2 AC@2
  AE@2 AF@2 AG@2 AH AI AJ@2 AC@2 AD@2 AC@2 AE@2 AF@2 AG ~
>`.pickRestart({
  A: "[~@6 gb2@2 ~ db3@2 gb4@2 ab4@2 ~@3 eb5@2 ~ db5@2 ~@2 gb2@2 ~ eb3@2 eb4@2 ab4@2 ~@3 db5@2 ~@8 gb4@2 ab4@2 ~@3 db3@2 gb3@2 ab3@2 ~ a3@2 [eb4,gb4,ab4]@5 gb4@2 ab4@2 ~ a4@2 b4@2 db5@2 ~, ~@11 a3@14 ~@5 b3@14 gb2@9 ~@27, ~@16 a4@9 ~@10 b4@4 b4@5 ~@7 a4@12 b3@17, ~@23 eb5@14 ~@5 db5@5 ~@33]/5", // Ab7
  B: "[~@2 gb2@2 db3@2 ~ gb4@2 ab4@2 ~@3 eb5@2 db5@2 ~@3 b2@2 gb3@2 ~ eb4@2 ~@2 db5@5 b4@5 db3@2 ab3@2 ~ f4@4 ab4@5 f4@5 db3@2 ab3@2 ~ e4@2 gb4@2 db5@5 eb5@2 db5@2 ~ a2@2 e3@2 db4@2 ~ eb4@2 ~@5 db5@2 eb5@2, e5@14 ~@5 eb5@12 ~@9 db5@24 ~@14 e5@14 ~@4, ~@7 a3@14 ~@5 b3@14 ~@5 db4@14 ~@4 db4@14 ~@5 a3@14, ~@11 a4@9 ~@8 gb4@12 ~@19 e4@5 ~@4 ab4@9 ~@10 e4@9]/6",
  C: "[~ gb2@2 db3@2 [gb3,gb5]@5 b2@2 ~ gb3@2 db5@2 b4@2 ~ ab2@2 eb3@2 eb4@2 ~ ab4@2 ~@5 e5@4 db3@2 ~ ab3@2 ab4@2 ~ gb4@2 e4@2 eb4@2 ~ [db3,db4]@4 gb2@2 ~ db3@2 gb4@2 ab4@2 ~@5 eb5@2 ~ db5@2 ab2@2 ~ eb3@2 eb4@2 gb4@2 ~@5 db5@2 ~ eb5@2 a2@2 ~ e3@2 e4@2 a4@2 ~ [db5,e5]@4 [b4,eb5]@2 ~, ~ e5@5 ~@4 eb5@5 b3@5 ~@4 b3@14 ~@5 db4@9 ~@10 a3@14 ~@5 b3@14 ~@5 db4@12, ~@3 a4@7 ~@2 gb4@7 eb5@14 ~@5 db5@19 e5@14 ~@5 eb5@14 ~@5 e5@5 e5@5 ~@7, ~@29 b4@9 ~@29 a4@9 ~@10 b4@9 ~@17]/7", // Gb Db Dbm B
  D: "[[a4,db5]@2 b2@2 ~ gb3@2 [b3,gb4]@2 [eb4,b4]@2 ~ [b2,gb3,b3,gb4,b4,e5]@9 ~@11, ~@2 eb5@9 ~@21]/2", // A B5 Abm Bsus4
  E: "[~@4 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3 e4!3 eb4]/3", // E Ebm E Ebm E Ebm E
  F: "[~ e4@2 [gb3,eb4]@2 [ab3,e4]@2 [a3,gb4]@2 [b3,ab4]@3 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [gb4,a4]@2 [ab4,b4]@3 ~@3 [b3,eb4]@5 ~ [ab4,b4]!3, ~@45 [ab4,b4]@7 ~@4]/7", // Ebm Dbm D E Ebm E Ebm E …
  G: "[ab4,b4]@2 [e4,ab4]@2 [e4,ab4]@2 [e4,ab4] [e4,ab4]@3 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2", // Abm E Dbm
  H: "[[db4,e4] [a3,db4]!2 [a3,db4]@2 [ab3,b3] [ab3,b3]@6 [gb4,b4]@5 [e4,b4] [gb4,b4] [ab4,b4] ~ [ab4,b4]!3]/3", // Dbm A Abm B5 E5 B5 Abm
  I: "[ab4,b4] [e4,ab4]!4 [db4,e4]!3", J: "[db4,e4] [a3,db4]!2 [ab3,db4] [gb3,b3]!4",
  K: "[[gb3,b3]@4 [ab3,db4]!3 [gb3,b3]@2 [ab3,db4]@11 [g3,c4]!3 [gb3,b3]@2 [g3,c4]@3 ~@4]/4", // B5 Db5 B5 Db5 C5 B5 C5
  L: "~@2 [e4,a4,db5] [gb4,c5,eb5]", M: "[ab4,db5]@2 ~@3 db5 eb5 ~, e5@5 ~@3",
  N: "[[a4,db5,gb5]@2 ~ eb5@2 db5 ~@2 [gb4,b4]@6 e5 ~ [e4,ab4]@2 ~@4 [e4,ab4]@2, ~@3 gb4@5 ~@16, ~@3 b4@3 b4@2 ~@7 db5@9, ~@7 eb5@7 ~@10]/3", // Gbm B5 E
  O: "[db5,e5]@2 [db5,e5]@2 [e4,a4] [b4,eb5] [e4,a4,db5,e5] ~, [e4,a4] ~ [e4,a4] ~@5", // Dbm A5 B A A5
  P: "[[eb4,gb4]@2 [eb4,gb4]@2 ~ [a4,db5] [b4,eb5] [a4,db5,e5]@2 [a4,db5,e5]@2 [a4,db5,e5]@2 [a4,b4,eb5] [a4,db5,e5] [gb4,b4,eb5], b4@3 ~@5, eb5@5 ~@11, ~@2 [eb4,gb4]!2 ~@4]/2", // Ebm A B A B7 A B Ebm
  Q: "[gb4,b4,eb5]!4 [gb4,b4,e5]!4", // B Esus2
  R: "[[e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3]/2", // E Ebm E Ebm E Ebm E
  S: "[e4!3 eb4@2 e4@2 [gb3,eb4]@2 [ab3,e4]@2 [a3,gb4]@2 [b3,ab4]@3]/2", // Ebm Dbm D E
  T: "[[e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [gb4,a4]@2 [ab4,b4]@3]/2", // E Ebm E Ebm E Gbm Abm
  U: "~@3 [b3,eb4]@5, ~ [ab4,b4]@7", // B Abm
  V: "[~@2 [ab4,b4]@2 [ab4,b4]@2 [ab4,b4]@2 [ab4,b4]@2 [e4,ab4]@2 [e4,ab4]@2 [e4,ab4] [e4,ab4]@3 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2 [a3,db4]@2 [a3,db4]@2 [a3,db4]@4 [ab3,b3]@2 [ab3,b3]@12]/3", // Abm E Dbm A Abm
  W: "[gb4,b4]@5 [e4,b4] [gb4,b4] [ab4,b4]", X: "~ [ab4,b4]!4 [e4,ab4]!3",
  Y: "[e4,ab4] [db4,e4]!4 [a3,db4]!2 [ab3,db4]", Z: "~@3 [gb3,b3] [gb3,b3]@4",
  AA: "[[ab3,db4]!3 [gb3,b3]@2 [ab3,db4]@11]/2", AB: "[g3,c4]!3 [gb3,b3]@2 [g3,c4]@3",
  AC: "[[f4,a4]!3 [e4,g4]@2 [f4,a4]@2 [e4,g4]@2 [f4,a4]@2 [e4,g4]@2 [f4,a4]@3]/2", // F Em F Em F Em F
  AD: "[f4!3 e4@2 f4@2 [g3,e4]@2 [a3,f4]@2 [bb3,g4]@2 [c4,a4]@3]/2", // C Dm Eb F
  AE: "[[f4,a4]!3 [e4,g4]@2 [f4,a4]@2 [e4,g4]@3 ~ [f4,a4] [g4,bb4]@2 [a4,c5]@2]/2", // F Em F Em F Gm Am
  AF: "[[f4,a4,c5]!3 [e4,g4,c5]@2 [f4,a4,c5]@2 [e4,g4,c5]@2 [f4,a4,c5]@2 [e4,g4,c5]@2 [f4,a4,c5]@3]/2", // F C F C F C F
  AG: "[a4,c5]@3 [a4,c5]@5", AH: "[f4,a4]!3 [e4,g4]@2 [f4,a4]@3", AI: "~ [a4,c5]!4 [f4,a4]!3",
  AJ: "[[f4,a4] [d4,f4]!4 [bb3,d4]!2 [a3,d4]@2 g3 [g3,c4]@6]/2", // F Dm Bb D5 C5
})).s("gm_piano").gain(0.45).pan(0.6)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@21 A@8 B@8 C@4 D@5 E F G@2 E F H I J K L M K N O P Q R S P Q T U V Q W X Y Z AA AB AC@2 AD AE AF AG AH AI AF AG AH
  AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH ~
>`.pickRestart({
  A: "[~@4 e3@2 b2 e3@2 b2 e3 eb3 db3@2 ab2 db3@2 ab2 db3 b2 a2@2 e2 a2@2 ab2 a2!2 b2@2 gb2 b2@2 b2 db3 eb3 e3@2 b2 e3@2 b2 e3 eb3 db3@2 ab2 db3@2 ab2 db3 b2 a2@2 e2 a2@2 gb2 a2 bb2 b2@2 gb2 b2]/8",
  B: "[~ gb2 b2 a2 ab2@2 eb2 ab2@2 ab2 a2 b2 db3@2 ab2 db3@2 ab2 db3 b2 a2@2 e2 a2@2 a2 db3 eb3 e3@2 b2 e3@2 e3 eb3 db3 b2@2 gb2 b2@3 b2@2 e3@2 b2 e3@2 e2 gb2 ab2 a2@2 e2 a2@2 ab2 a2 bb2 b2@2 gb2 b2]/8",
  C: "[~ gb2 b2 c3 [db3,e3]!3 [b2,eb3]@2 db3@3 db3!4 db3!4 [c3,e3]@8 [c3,g3,c4]!4, ~@9 e3@11 ~@12]/4", // Dbm B C C5
  D: "[[c3,g3,c4]!4 gb2 db3 a3@6 gb2 eb3 b3@6 gb2 e3 a3@6 gb2 eb3 b3@6 gb2@3 db3]/5", E: "a3@2 db3@2 gb2@3 eb3",
  F: "b3@2 eb3@2 gb2@3 db3", G: "[a3@2 db3@2 [gb2,eb3]@8 gb2@3 db3]/2", H: "a3 db3 gb2 ab2", I: "db3@3 ab3 db4@2 db3@2",
  J: "a2 b2", K: "ab2@3 eb3 ab3@2 eb3@2", L: "db3@3 ab3 db4@2 ab3@2", M: "gb2@3 db3 gb3@2 db3@2",
  N: "a2@3 e3 a3@2 e3@2", O: "b2!4", P: "e3@2 b2 e3@2 b2 e3 eb3", Q: "db3@2 ab2 db3@2 ab2 db3 b2",
  R: "a2@2 e2 a2@2 ab2 a2!2", S: "b2@2 gb2 b2@2 b2 db3 eb3", T: "a2@2 e2 a2@2 gb2 a2 bb2", U: "b2@2 gb2 b2@2 gb2 b2 a2",
  V: "ab2@2 eb2 ab2@2 ab2 a2 b2", W: "a2@2 e2 a2@2 a2 db3 eb3", X: "e3@2 b2 e3@2 e3 eb3 db3", Y: "b2@2 gb2 b2@3 b2@2",
  Z: "e3@2 b2 e3@2 e2 gb2 ab2", AA: "a2@2 e2 a2@2 ab2 a2 bb2", AB: "b2@2 gb2 b2@2 gb2 b2 c3",
  AC: "[[db3,e3]!3 [b2,eb3]@2 db3@3 db3!8, ~@5 e3@11]/2", AD: "[c3,e3]", AE: "[c3,g3]!8", AF: "f3@2 c3 f3@2 c3 f3 e3",
  AG: "d3@2 a2 d3@2 a2 d3 c3", AH: "bb2@2 f2 bb2@2 a2 bb2 b2", AI: "c3@2 g2 c3@2 c3 d3 e3",
})).s("gm_electric_bass_finger").gain(0.35).pan(0.4)

// chords · acoustic guitar steel · "Guitar1"
const acoustic_guitar_steel = note(`<
  ~@21 A@8 B@8 C D@2 ~@12 E ~@8 F G H I F J H I K G L F I M H I N G ~@2 O P Q R S P Q R O T U V O P Q R O P Q R S P Q R
  O T U V
>`.pickRestart({
  A: "[~@4 [e2,b2,e3]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2 [db3,ab3,db4]@2 [db3,ab3,db4] [db3,ab3,db4]@3 [db3,ab3,db4]@2 [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [b2,gb3,b3]@2 [b2,gb3,b3] [b2,gb3,b3]@3 [b2,gb3,b3]@2 [e2,b2,e3]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@6 [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [b2,gb3,b3]@2 [b2,gb3,b3]!2]/8", // E5 Db5 A5 B5 E5 Db5 A5 B5
  B: "[~@2 [b2,gb3,b3]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [db3,ab3,db4]@2 [db3,ab3,db4] [db3,ab3,db4]@3 [db3,ab3,db4]@2 [a2,e3,a3]@2 [a2,e3,a3]@6 [e2,b2,e3]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2 [b2,gb3,b3]@2 [b2,gb3,b3] [b2,gb3,b3]@3 [b2,gb3,b3]@2 [e2,b2,e3]@2 [e2,b2,e3]@6 [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 [b2,gb3,b3]@2 [b2,gb3,b3]!2]/8", // B5 Ab5 Db5 A5 E5 B5 E5 A5 …
  C: "~ [b2,gb3,b3] [db3,ab3,db4] ~", D: "[~@4 [db3,ab3,db4]@2 [db3,ab3,db4] [db3,ab3,db4]@3 [db3,ab3,db4]@2 ~@4]/2",
  E: "~@2 [gb2,db3,gb3] [ab2,eb3,ab3]", F: "[e2,b2,e3]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2",
  G: "[db3,ab3,db4]@2 [db3,ab3,db4] [db3,ab3,db4]@3 [db3,ab3,db4]@2", // Db5
  H: "[a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2", I: "[b2,gb3,b3]@2 [b2,gb3,b3] [b2,gb3,b3]@3 [b2,gb3,b3]@2",
  J: "[db3,ab3,db4] [db3,ab3,db4]@3", K: "[ab2,eb3,ab3]@2 [ab2,eb3,ab3] [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2",
  L: "[a2,e3,a3] [a2,e3,a3]@3", M: "[e2,b2,e3] [e2,b2,e3]@3", N: "[db3,ab3,db4]!2 [b2,gb3,b3] [db3,ab3,db4]",
  O: "[f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@3 [f2,c3,f3]@2", P: "[d3,a3,d4] [d3,a3,d4]@3",
  Q: "[bb2,f3,bb3]@2 [bb2,f3,bb3] [bb2,f3,bb3]@3 [bb2,f3,bb3]@2", // Bb5
  R: "[c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2", S: "[f2,c3,f3] [f2,c3,f3]@3",
  T: "[d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@3 [d3,a3,d4]@2", U: "[bb2,f3,bb3] [bb2,f3,bb3]@3",
  V: "[c3,g3,c4] [c3,g3,c4]@3", // C5
})).s("gm_acoustic_guitar_steel").gain(0.48).pan(0.8)

// chords · acoustic guitar steel · "Guitar2"
const acoustic_guitar_steel_2 = note(`<
  ~@21 A@8 B@8 C D@2 ~@12 E ~@8 F G H I F G H I J K L F I F L I M G ~@2 N O P Q N O P Q N O P Q N O P Q N O P Q N O P Q
  N O P Q
>`.pickRestart({
  A: "[~@4 [e3,ab3,b3]@3 [e3,ab3,b3]@2 [e3,ab3,b3]@2 [e3,ab3,b3] [db3,e3,ab3]@3 [db3,e3,ab3]@2 [db3,e3,ab3]@2 [db3,e3,ab3] [e3,a3,db4]@3 [e3,a3,db4]@2 [e3,a3,db4]@2 [e3,a3,db4] [eb3,gb3,b3]@3 [eb3,gb3,b3]@2 [eb3,gb3,b3]@2 [eb3,gb3,b3] [e3,ab3,b3]@3 [e3,ab3,b3]@2 [e3,ab3,b3]@2 [e3,ab3,b3] [db3,e3,ab3]@3 [db3,e3,ab3]@2 [db3,e3,ab3]@2 [db3,e3,ab3] [e3,a3,db4]@3 [e3,a3,db4]@2 [e3,a3,db4]@2 [e3,a3,db4] [eb3,gb3,b3]@3 [eb3,gb3,b3]]/8", // E Dbm A B E Dbm A B
  B: "[~ [eb3,gb3,b3]@2 [eb3,gb3,b3] [eb3,ab3,b3]@3 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3] [e3,ab3,db4]@3 [e3,ab3,db4]@2 [e3,ab3,db4]@2 [e3,ab3,db4] [db3,e3,a3]@3 [db3,e3,a3]@2 [db3,e3,a3]@2 [db3,e3,a3] [e3,ab3,b3]@3 [e3,ab3,b3]@2 [e3,ab3,b3]@2 [e3,ab3,b3] [eb3,gb3,b3]@3 [eb3,gb3,b3]@2 [eb3,gb3,b3]@2 [eb3,gb3,b3] [e3,ab3,b3]@3 [e3,ab3,b3]@2 [e3,ab3,b3]@2 [e3,ab3,b3] [db3,e3,a3]@3 [db3,e3,a3]@2 [db3,e3,a3]@2 [db3,e3,a3] [eb3,gb3,b3]@3 [eb3,gb3,b3]]/8", // B Abm Dbm A E B E A …
  C: "~ [eb3,gb3,b3]@2 [eb3,gb3,b3] ab3@3 ~", // B
  D: "[~@4 [db3,e3,ab3]@3 [db3,e3,ab3]@2 [db3,e3,ab3]@2 [db3,e3,ab3] ~@4]/2", E: "~@2 [e3,a3,db4] [eb3,gb3,c4]",
  F: "[e3,ab3,b3]@3 [e3,ab3,b3]@2 [e3,ab3,b3]@2 [e3,ab3,b3]", // E
  G: "[db3,e3,ab3]@3 [db3,e3,ab3]@2 [db3,e3,ab3]@2 [db3,e3,ab3]", // Dbm
  H: "[e3,a3,db4]@3 [e3,a3,db4]@2 [e3,a3,db4]@2 [e3,a3,db4]", // A
  I: "[eb3,gb3,b3]@3 [eb3,gb3,b3]@2 [eb3,gb3,b3]@2 [eb3,gb3,b3]", // B
  J: "[eb3,ab3,b3]@3 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]", // Abm
  K: "[e3,ab3,db4]@3 [e3,ab3,db4]@2 [e3,ab3,db4]@2 [e3,ab3,db4]", // Dbm
  L: "[db3,e3,a3]@3 [db3,e3,a3]@2 [db3,e3,a3]@2 [db3,e3,a3]", // A
  M: "[db3,e3,ab3]@3 [db3,e3,ab3] [eb3,gb3,b3]@2 [db3,e3,ab3]@2", // Dbm B Dbm
  N: "[f3,a3,c4]@3 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]", O: "[d3,f3,a3]@3 [d3,f3,a3]@2 [d3,f3,a3]@2 [d3,f3,a3]",
  P: "[d3,f3,bb3]@3 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]", Q: "[e3,g3,c4]@3 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]",
})).s("gm_acoustic_guitar_steel").gain(0.41).pan(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@37 A B@3 C@8 D@4 E@2 F G H F H F ~@19 I ~@28>".pickRestart({
  A: "~@4 db4!3 ~",
  B: "[~@2 db4@22 e4@2 e4@2 e4@2 eb4@4 e4@6 [e4,gb4,a4,c5] ~ [e4,gb4,a4,c5] ~ [e4,gb4,a4,c5] ~ [e4,gb4,a4,c5] ~]/3", // Gbm7b5
  C: "[[e4,gb4,a4,c5] ~ [e4,gb4,a4,c5] ~ [e4,gb4,a4,c5] ~ [e4,gb4,a4,c5]@2 db4@16 eb4@16 e4@16 eb4@16 db4@16 eb4@16 e4@16 eb4@8]/8", // Gbm7b5
  D: "[~ db4@2 eb4@2 e4@2 ~]/4", E: "e4/2", F: "eb4", G: "db4", H: "e4", I: "[e4,bb4,c5]!8",
})).s("gm_string_ensemble_1").gain(0.48).pan(0.6)

// chords · epiano1 · "Piano2"
const epiano1 = note(`<
  ~@21 A@3 B@7 C D@3 E F G@4 ~@11 H I@4 J@3 K L@2 M@2 L@2 N@2 O P@3 Q R S T U@2 V ~ W@2 X@2 W@2 Y@2 Z@2 AA@2 AB AC AD@2
  W@2 X@2 W@2 Y@2 Z@2 AA ~
>`.pickRestart({
  A: "[~@4 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3 e4!3 eb4]/3", // E Ebm E Ebm E Ebm E
  B: "[~ e4@2 [gb3,eb4]@2 [ab3,e4]@2 [a3,gb4]@2 [b3,ab4]@3 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3 [e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [gb4,a4]@2 [ab4,b4]@3 ~@3 [b3,eb4]@5 ~ [ab4,b4]!3, ~@45 [ab4,b4]@7 ~@4]/7", // Ebm Dbm D E Ebm E Ebm E …
  C: "[ab4,b4]@2 [e4,ab4]@2 [e4,ab4]@2 [e4,ab4] [e4,ab4]@3 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2", // Abm E Dbm
  D: "[[db4,e4] [a3,db4]!2 [a3,db4]@2 [ab3,b3] [ab3,b3]@6 [gb4,b4]@5 [e4,b4] [gb4,b4] [ab4,b4] ~ [ab4,b4]!3]/3", // Dbm A Abm B5 E5 B5 Abm
  E: "[ab4,b4] [e4,ab4]!4 [db4,e4]!3", F: "[db4,e4] [a3,db4]!2 [ab3,db4] ~@3 [gb3,b3]",
  G: "[[gb3,b3]@4 [ab3,db4]!3 [gb3,b3]@2 [ab3,db4]@11 [g3,c4]!3 [gb3,b3]@2 [g3,c4]@3 ~@4]/4", // B5 Db5 B5 Db5 C5 B5 C5
  H: "~@2 [e4,a4,db5] [gb4,c5,eb5]", // A Cdim
  I: "[~@2 [ab4,db5]@2 ~ db5 eb5 [a4,db5,e5]@2 [a4,db5,gb5]@2 eb5@2 db5 ~@8 e5 ~@3 [e4,ab4]@2 ~@2 [e4,ab4]@2, e5@5 ~@6 gb4@5 ~@2 [gb4,b4]@6 ~@8, ~@11 b4@3 b4@2 ~@7 db5@9, ~@15 eb5@7 ~@10]/4", // Db5 A Gbm E B5
  J: "[~@2 [e4,a4]@2 ~ [b4,eb5] [db5,e5] ~@3 [eb4,gb4]@2 ~ [a4,db5] [b4,eb5] [a4,db5,e5]@2 [a4,db5,e5]@2 [a4,db5,e5]@2 [a4,b4,eb5] [a4,db5,e5] [gb4,b4,eb5], [db5,e5]@5 ~@2 [b4,eb5]@6 ~@11]/3", // A5 B Dbm Ebm A B A B7 …
  K: "[gb4,b4,eb5] [gb4,b4,e5]", // B Esus2
  L: "[[e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@3]/2", // E Ebm E Ebm E Ebm E
  M: "[e4!3 eb4@2 e4@2 [gb3,eb4]@2 [ab3,e4]@2 [a3,gb4]@2 [b3,ab4]@3]/2", // Ebm Dbm D E
  N: "[[e4,ab4]!3 [eb4,gb4]@2 [e4,ab4]@2 [eb4,gb4]@2 [e4,ab4]@2 [gb4,a4]@2 [ab4,b4]@3]/2", // E Ebm E Ebm E Gbm Abm
  O: "~@3 [b3,eb4]@5, ~ [ab4,b4]@7", // B Abm
  P: "[~@2 [ab4,b4]@2 [ab4,b4]@2 [ab4,b4]@2 [ab4,b4]@2 [e4,ab4]@2 [e4,ab4]@2 [e4,ab4] [e4,ab4]@3 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2 [db4,e4]@2 [a3,db4]@2 [a3,db4]@2 [a3,db4]@4 [ab3,b3]@2 [ab3,b3]@12]/3", // Abm E Dbm A Abm
  Q: "[gb4,b4]@5 [e4,b4] [gb4,b4] [ab4,b4]", R: "~ [ab4,b4]!4 [e4,ab4]!3",
  S: "[e4,ab4] [db4,e4]!4 [a3,db4]!2 [ab3,db4]", T: "~@3 [gb3,b3] [gb3,b3]@4",
  U: "[[ab3,db4]!3 [gb3,b3]@2 [ab3,db4]@11]/2", V: "[g3,c4]!3 [gb3,b3]@2 [g3,c4]@3",
  W: "[[f4,a4]!3 [e4,g4]@2 [f4,a4]@2 [e4,g4]@2 [f4,a4]@2 [e4,g4]@2 [f4,a4]@3]/2", // F Em F Em F Em F
  X: "[f4!3 e4@2 f4@2 [g3,e4]@2 [a3,f4]@2 [bb3,g4]@2 [c4,a4]@3]/2", // C Dm Eb F
  Y: "[[f4,a4]!3 [e4,g4]@2 [f4,a4]@2 [e4,g4]@3 ~ [f4,a4] [g4,bb4]@2 [a4,c5]@2]/2", // F Em F Em F Gm Am
  Z: "[[f4,a4,c5]!3 [e4,g4,c5]@2 [f4,a4,c5]@2 [e4,g4,c5]@2 [f4,a4,c5]@2 [e4,g4,c5]@2 [f4,a4,c5]@3]/2", // F C F C F C F
  AA: "[a4,c5]@3 [a4,c5]@5", AB: "[f4,a4]!3 [e4,g4]@2 [f4,a4]@3", AC: "~ [a4,c5]!4 [f4,a4]!3",
  AD: "[[f4,a4] [d4,f4]!4 [bb3,d4]!2 [a3,d4]@2 g3 [g3,c4]@6]/2", // F Dm Bb D5 C5
})).s("gm_epiano1").gain(0.55).pan(0.2)

// chords · electric guitar clean · "Guitar3"
const electric_guitar_clean = note("<~@41 A@8 B@4 ~@56>".pickRestart({
  A: "[~@12 [db4,gb4,a4,db5]@3 [db4,gb4,a4,db5]@2 ~@11 [eb4,gb4,b4,eb5]@3 [eb4,gb4,b4,eb5]@2 ~@11 [e4,ab4,db5,e5]@3 [e4,ab4,db5,e5]@2 ~@11 [eb4,gb4,b4,eb5]@3 [eb4,gb4,b4,eb5]@2 ~@11 [db4,gb4,a4,db5]@3 [db4,gb4,a4,db5]@2 ~@11 [eb4,gb4,b4,eb5]@3 [eb4,gb4,b4,eb5]@2 ~@11 [e4,ab4,db5,e5]@3 [e4,ab4,db5,e5]@2 ~@11 [eb4,gb4,b4,eb5]@3 [eb4,gb4,b4,eb5]]/8", // Gbm B Dbm B Gbm B Dbm B
  B: "[~@12 [db4,gb4,a4,db5]@3 [db4,gb4,a4,db5]@2 ~@11 [eb4,gb4,b4,eb5]@3 [eb4,gb4,b4,eb5]@2 ~@11 [e4,ab4,db5,e5]@3 [e4,ab4,db5,e5]@2 ~@15]/4", // Gbm B Dbm
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.7)

// bass · synth bass 1 · "Slap Bass"
const bass_2 = note("<~@41 A B@10 C ~@2 D E B D F G ~@48>".pickRestart({
  A: "~@8 gb2@2 e3 gb3 gb2@2 e3 gb3", B: "gb2@2 e3 gb3 gb2@2 e3 gb3 gb2@2 e3 gb3 gb2@2 e3 gb3",
  C: "gb2@2 e3 gb3 gb2@2 e3 gb3 ~@8", D: "ab2@2 gb3 ab3 ab2@2 gb3 ab3 ab2@2 gb3 ab3 ab2@2 gb3 ab3",
  E: "db2@2 b2 db3 db2@2 b2 db3 db2@2 b2 db3 db2@2 b2 db3", F: "a2@2 g3 a3 a2@2 g3 a3 a2@2 g3 a3 a2@2 g3 a3",
  G: "b2@2 a3 b3 b2@2 a3 b3 b2@2 a3 b3 b2@2 a3 b3",
})).s("gm_synth_bass_1").gain(0.44)

// drums · kick
const kick = s("bd").struct("<~@21 [~ x] [x!2]!16 [x!4]!3 [x!3 ~] [x!2]!35 [x!4]!3 [x!2]!29>").gain(0.62)

// drums · snare
const snare = s("sd").struct(`<
  ~@21 A B C B C B C B C B@7 C ~@3 A B@18 D B E B E B E B E B@8 ~@3 F B E B E B E B E B E B E B E B E B E B E B E B E
  B@3 E
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x!3 ~@2 x ~", D: "x!8", E: "~@2 x ~@2 x!3", F: "~ x!7",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct("<~@21 [~@2 x!2] [x!4]!87>").gain(0.62)

// drums · open hat
const open_hat = s("oh").struct("<~@22 [~@3 x ~@4]!17 ~@2 [~@3 x ~@4]!12 [~@7 x]!24 ~@2 [~@7 x]!30>").gain(0.62)

stack(
  piano, bass, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, epiano1, electric_guitar_clean,
  bass_2, kick, snare, hihat, open_hat
)

More by ABBA