Strudelify
Dance (While the Music Still Goes on) cover art

Waterloo

Dance (While the Music Still Goes on)

ABBA

KeyG majorTempo130 bpm
0:00/0:00
// Dance (While the Music Still Goes on) — ABBA
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Guitar3" named as a guitar, played on electric guitar clean (its lead 5 charang patch is not one)
// note: duplicate parts dropped: ch 8 "Choir" synth choir (copy of ch 1 "Melody" flute)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar3.
setcpm(130/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 · electric bass finger · "Bass"
const bass = note(`<
  ~ A@2 B@2 C D E@2 F@2 G H F@2 G H F@2 G@2 F I G H F@2 G H F@2 G H F@2 G@2 F I G H F J K@2 L@2 M N O@2 F@2 G H F@2 G H
  F@2 G@2 F I P Q F R S@2 T U S@2 T U S@2 T@2 S V W X S Y Z@2 H AA Z@2 H AA Z@2 H AA Z@2 H AA
>`.pickRestart({
  A: "[a2,e3]/2", B: "[g2,d3]/2", C: "[c3,g3]", D: "[a2,e3]", E: "[[d3,a3]@5 ~@3]/2", F: "g2@3 g2 g2@2 ~@2",
  G: "c3@3 c3 c3@2 ~@2", H: "d3@3 d3 d3@2 ~@2", I: "e2@3 e2 e2@2 ~@2", J: "g2 ~ c3 b2",
  K: "[a2@3 a2 a2@2 ~@2 a2@3 a2 a2@2 ~@2, e3]/2", L: "[g2@3 g2 g2@2 ~@2 g2@3 g2 g2@2 ~@2, d3]/2",
  M: "c3@3 c3 c3@2 b2@2, g3", N: "a2@3 a2 a2@2 ~@2, e3", O: "[d3@3 d3 d3@2 ~@2 d3@3 d3 ~@4, a3@5 ~@3]/2",
  P: "c2@3 c2 c2@2 ~@2", Q: "d2@3 d2 d2@2 ~@2", R: "d#3@2 d#3!2 f3 g#3!2 f3", S: "g#2@3 g#2 g#2@2 ~@2",
  T: "c#3@3 c#3 c#3@2 ~@2", U: "d#3@3 d#3 d#3@2 ~@2", V: "f2@3 f2 f2@2 ~@2", W: "c#2@3 c#2 c#2@2 ~@2",
  X: "d#2@3 d#2 d#2@2 ~@2", Y: "e3@2 e3!2 f#3 a3!2 f#3", Z: "a2@3 a2 a2@2 ~@2", AA: "e3@3 e3 e3@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.35).pan(0.3)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@8 A@3 B@2 C@4 D E F G H@2 I@2 J@2 B@2 C@4 D E F G H@2 K@3 L M@2 N@3 O@2 P@3 Q@2 R@4 S T F U V@3 W@2 X Y@4 Z@4 AA AB
  AC AD AE@4 AF AG AH@4 AI AJ AK@2 AH@4 AI AJ AK@2
>`.pickRestart({
  A: "[~@7 b3 [g3,b3,d4]@3 b3!2 f#4 g4 [g3,b3,d4] ~ g4@2 b3!2 ~ g4@2, ~@7 g4@5 ~@3 a4@2 ~@2 f#4@3 ~@2, ~@11 [g3,d4]@2 [g3,b3,d4]@2 ~ [g3,b3,d4]@3 [g3,d4]@2 [g3,b3,d4]@3]/3", // G G5 G G5 G
  B: "[[e3,g3,c4]@3 c5 ~@2 b4 [e3,g3,c4] ~ a4@2 g4!2 [f#3,a3,d4,a4]@2 [f#3,a3,d4], ~@3 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [f#3,a3,d4]@3 [f#3,a3,d4]@2 ~@3, ~ e4 f#4!2, ~@4 c5@2 ~ b4@2 ~@7]/2", // C D C D
  C: "[[g3,b3,d4]@3 b3!2 f#4 g4 ~@2 g4@2 [b3,f#4]!2 [g3,b3,d4,g4]@2 [g3,b3,d4] [e3,g3,c4]@3 c5 ~@2 b4 [e3,g3,c4] ~ a4@2 ~@2 [d3,f#3,a3]@2 [d3,f#3,a3,c5], g4@4 ~@3 a4@2 ~@6 e4@3 ~@2 e4@4 f#4@4 f#4@4, ~@3 [g3,d4]@2 [g3,b3,d4]@3 [g3,b3,d4]@3 [g3,d4]@2 ~@6 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [d3,f#3,a3]@3 [d3,f#3,a3,b4]@2 ~@3, ~@20 c5@2 ~ b4@2 ~@4 c5 ~@2]/4", // G B5 G C D D7 G5 G …
  D: "e5!3 [e3,g3,c4] ~ d5 ~ [g3,b3,d4,d5], [e3,g3,c4,g4,c5]@3 [g4,b4,d5]@2 ~@3, ~@4 [g3,b3,d4]@3 ~", // C G C G
  E: "c5!3 [e3,g3,c4,g4,b4] [d3,g3,b3]@3 [d3,g3,b3,b4], [e3,g3,c4,e4,g4]@3 d4@3 ~@2, ~@2 [g4,b4] ~", // Cmaj7 G C G
  F: "d5!3 [e3,g3,c4,c5]@2 [e3,g3,c4]@2 [e3,g3,c4,c5], [e3,g3,c4,e4,g4]@3 [e4,g4]@3 ~@2, ~@5 c5 ~@2", // C Em
  G: "b4!3 [d#3,g3,c4,a4]@2 b4 ~ [d#3,g3,c4], [d#3,g3,c4,d#4,g4]@3 [d#4,g4]@3 a4@2, ~@5 [d#3,g3,c4]@2 ~", // Am7b5 Cm D# Cm
  H: "[[g3,b3,d4]@3 b3!2 f#4 g4 ~@2 g4@2 b3!2 [e3,g3,b3,g4]@2 [e3,g3,b3,e4], g4@4 ~@3 a4@2 ~@7, ~@3 [g3,d4]@2 [g3,b3,d4]@3 [e3,g3,b3]@3 [e3,g3,f#4]@2 ~@3]/2", // G Em G5 G Em
  I: "[[e3,g3,c4]@3 c5 ~@2 b4 [e3,g3,c4,f#4] ~ a4@2 [d3,f#3,a3,g4]@2 [d3,f#3,a3,f#4]@2 [d3,f#3,a3], ~@3 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [d3,f#3,a3]@3 ~@5, ~@4 e4@3 ~ f#4@5 ~@3, ~@4 c5@2 ~ b4@2 ~@7]/2", // C D C D
  J: "[[g3,b3,d4]@3 b3!2 f#4 g4 [g3,b3,d4] ~ g4@2 b3!2 ~ g4@2, ~@3 [g3,d4]@2 [g3,b3,d4]@2 a4@2 ~@2 f#4@3 ~@2, ~@8 [g3,b3,d4]@3 [g3,d4]@2 [g3,b3,d4]@3]/2", // G G5 G G5 G
  K: "[[e3,g3,c4]@6 c5@2 ~@4 b4@2 [e3,g3,c4]@2 ~@2 a4@4 [f#3,a3,d4,g4]@4 [f#3,a3,d4,f#4]@4 [f#3,a3,d4]@2 [d3,g3,b3]@6 b4 a4 b3@2 [d3,g3,b3]@4 [d3,g3,b3]@2, ~@3 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [f#3,a3,d4]@3 ~@8 [d3,g3]@2 ~@3, ~@4 e4@3 f#4@6 ~@6 b3 ~@4, ~@4 c5@2 ~ b4@2 ~@6 a4@4 ~ g4@4]/3", // C D G C D G5
  L: "[d3,g3,b3]@3 ~@5", // G
  M: "[c4@2 [c4,e4] [e3,a3,c4,e4]@2 e4 ~ [e3,a3,c4] [e3,a3,c4]@3 [e3,a3,c4]@2 f#4 ~ [e3,a3,c4], [e3,a3]@3 ~@2 [e3,a3,c4]@2 ~@6 [e3,a3,c4]@2 ~, ~@3 e4@3 ~ e4]/2", // C Am A5 Am
  N: "[~@2 g4 [g3,b3,d4,g4]@2 g4 ~ [g3,b3,d4] ~@2 g4!2 a4 [g3,b3,d4,b4]@2 [g3,b3,d4] ~@2 e4!2 f#4 [e3,g3,c4,g4]@2 [e3,g3,c4], [g3,b3,d4]@3 ~@2 [g3,b3,d4]@2 ~ [g3,b3,d4]@3 [g3,b3,d4]@2 ~@3 [e3,g3,c4]@3 [e3,g3,c4]@2 ~@3, ~@6 g4@4 ~@5 e4@3 ~@6]/3", // G C G C
  O: "[~@2 a4!2 b4 [e3,a3,c4,c5]@2 [e3,a3,c4] [d3,f#3,a3]@3 [d3,f#3,a3]@2 [d3,f#3,a3]@2 [d3,f#3,a3], [e3,a3,c4]@3 [e3,a3,c4]@2 ~@2 f#4@7 ~@2]/2", // Am D Am
  P: "[f#4!4 g4 [d3,f#3,a3,a4]@2 [d3,f#3,a3,b3] [g3,b3,d4]@3 b3!2 f#4 g4 ~@2 g4@2 b3!2 [g3,b3,d4,g4]@2 [g3,b3,d4,e4], [d3,f#3,a3]@3 [d3,f#3,a3]@2 ~@2 g4@5 ~@3 a4@2 ~@7, ~@11 [g3,d4]@2 [g3,b3,d4]@3 [g3,b3,d4]@3 [g3,d4,f#4]@2 ~@3]/3", // D Bm7 G Em7 D G5 G Gmaj7
  Q: "[[e3,g3,c4]@3 c5 ~@2 b4 [e3,g3,c4] ~ a4@2 ~@2 [d3,f#3,a3,a4]@2 [d3,f#3,a3], ~@3 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [d3,f#3,a3]@3 [d3,f#3,a3,g4]@2 ~@3, ~ e4 f#4!2, ~@4 c5@2 ~ b4@2 ~@7]/2", // C D C D
  R: "[[d3,g3,b3]@3 b3!2 f#4 g4 [d3,g3,b3] ~ g4@2 b3!2 [d3,g3,b3,g4]@2 [d3,g3,b3] [e3,g3,c4]@3 c5 ~@2 b4 [e3,g3,c4] ~ a4@2 ~@2 [f#3,a3,d4]@2 [f#3,a3,d4,c5], g4@4 ~@3 a4@2 ~@6 e4@3 ~@2 e4@4 f#4@4 f#4@4, ~@3 [d3,g3]@2 [d3,g3,b3]@2 ~ [d3,g3,b3]@3 [d3,g3,f#4]@2 ~@6 [e3,g3,c4]@2 [e3,g3,c4]@2 ~ [f#3,a3,d4]@3 [f#3,a3,d4,b4]@2 ~@3, ~@20 c5@2 ~ b4@2 ~@4 c5 ~@2]/4", // G C D D7 G5 G Gmaj7 C …
  S: "e5!3 [e3,g3,c4] ~ d5 ~ [d3,g3,b3,d5], [e3,g3,c4,g4,c5]@3 [g4,b4,d5]@2 ~@3, ~@4 [d3,g3,b3]@3 ~", // C G C G
  T: "c5!3 [e3,g3,c4,d4,b4] [g3,b3,d4]@3 [g3,b3,d4,b4], [e3,g3,c4,e4,g4]@3 g4@3 ~@2, ~@2 b4 ~", // Em7 G C
  U: "b4!3 g4 ~ b4 ~ [d#3,g3,c4], [d#3,g3,c4,d#4,g4]@3 d#4@3 ~@2, ~@3 [d#3,g3,c4,a4]@2 [d#3,g3,c4]@2 ~, ~@2 g4 a4", // Cm Am7b5 Cm
  V: "[[g3,b3,d4]@3 b3!2 f#4 g4 [g3,b3,d4] ~ g4@2 b3!2 g4@2 ~ [e3,g3,c4]@3 c5 ~@3 c5, g4@4 ~@3 a4@2 ~@6 e4@3 ~@2 e4@3 ~, ~@3 [g3,d4]@2 [g3,b3,d4]@2 ~ [e3,g3,b3]@3 [e3,g3,f#4]@2 [e3,g3,b3]@3 ~@3 [e3,g3,c4]@2 [e3,g3,c4]@3]/3", // G C G5 G Em C
  W: "[~@2 a4@4 [d3,f#3,a3,g4]@4 [d3,f#3,a3,f#4]@4 [d3,f#3,a3]@2 [d3,g3,b3]@6 [b3,b4] a4 ~@2 [d3,g3,b3]@4 [d3,g3,b3]@2, [d3,f#3,a3]@3 ~@4 a4@4 [d3,g3]@2 ~@3, ~@23 b3@3 ~@6, ~@3 g4]/2", // D G B G D G5
  X: "[g3,a#3,c#4,d#4]@3 [g3,a#3,c#4]@2 [g3,a#3,c#4]@2 [g3,a#3,c#4], ~@3 d#4@5", // D#7 Gdim
  Y: "[[d#3,g#3,c4]@3 c4!2 g4 g#4 [d#3,g#3,c4] ~ g#4@2 c4!2 [d#3,g#3,c4,g#4]@2 [d#3,g#3,c4] [f3,g#3,c#4]@3 c#5 ~@2 c5 [f3,g#3,c#4] ~ a#4@2 ~@2 [d#3,g3,a#3,a#4]@2 [d#3,g3,a#3], g#4@4 ~@3 a#4@2 ~@6 f4@3 ~@2 f4@4 g4@4 g4@4, ~@3 [d#3,g#3]@2 [d#3,g#3,c4]@2 ~ [d#3,g#3,c4]@3 [d#3,g#3,g4]@2 ~@6 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 ~ [d#3,g3,a#3]@3 [d#3,g3,a#3,g#4]@2 ~@3, ~@20 c#5@2 ~ c5@2 ~@7]/4", // G# C# D# G#5 G# G#maj7 C# D#
  Z: "[[d#3,g#3,c4]@3 c4!2 g4 g#4 [d#3,g#3,c4] ~ g#4@2 c4!2 [d#3,g#3,c4,g#4]@2 [d#3,g#3,c4] [f3,g#3,c#4]@3 c#5 ~@2 c5 [f3,g#3,c#4] ~ a#4@2 ~@2 [d#3,g3,a#3]@2 [d#3,g3,a#3,c#5], g#4@4 ~@3 a#4@2 ~@6 f4@3 ~@2 f4@4 g4@4 g4@4, ~@3 [d#3,g#3]@2 [d#3,g#3,c4]@2 ~ [d#3,g#3,c4]@3 [d#3,g#3,g4]@2 ~@6 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 ~ [d#3,g3,a#3]@3 [d#3,g3,a#3,c5]@2 ~@3, ~@20 c#5@2 ~ c5@2 ~@4 c#5 ~@2]/4", // G# C# D# D#7 G#5 G# G#maj7 C# …
  AA: "f5!3 [f3,g#3,c#4,d#5] d#5!2 ~ d#5, [f3,g#3,c#4,g#4,c#5]@3 [g#4,c5]@3 ~@2, ~ [d#3,g#3,c4]", // C# G#
  AB: "c#5!3 [f3,g#3,c#4] [d#3,g#3,c4]@3 [d#3,g#3,c4,c5], [f3,g#3,c#4,f4,g#4]@3 [d#4,g#4,c5]@3 ~@2", // C# G# C# G#
  AC: "d#5!3 [f3,g#3,c#4,c#5]@2 [f3,g#3,c#4]@2 [f3,g#3,c#4,c#5], [f3,g#3,c#4,f4,g#4]@3 [f4,g#4]@3 ~@2, ~@5 c#5 ~@2", // C# Fm
  AD: "c5!3 [e3,g#3,c#4,a#4]@2 [e3,g#3,c#4]@2 [e3,g#3,c#4,c5], [e3,g#3,c#4,e4,g#4]@3 [e4,g#4] ~@4", // A#m7b5 C#m E
  AE: "[[d#3,g#3,c4]@3 c4!2 g4 g#4 [d#3,g#3,c4] ~ g#4@2 c4!2 [f3,g#3,c4,g#4]@2 [f3,g#3,c4] [f3,g#3,c#4]@3 c#5 ~@2 c5 [f3,g#3,c#4] ~ a#4@2 [d#3,g3,a#3]@2 [d#3,g3,a#3]@2 [d#3,g3,a#3], g#4@4 ~@3 a#4@2 ~@6 f4@3 ~@2 f4@4 g4@4 ~@4, ~@3 [d#3,g#3]@2 [d#3,g#3,c4]@2 ~ [f3,g#3,c4]@3 [f3,g#3,g4]@2 ~@6 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 ~ [d#3,g3,a#3]@3 ~@5, ~@20 c#5@2 ~ c5@2 ~@2 g#4 ~@4]/4", // G# Fm C# D# G#5 G# Fm C# …
  AF: "[d#3,g#3,c4]@6 c5 a#4 c4@2 [d#3,g#3,c4]@4 [d#3,g#3,c4]@2, ~@3 [d#3,g#3]@2 ~@3, ~@3 c4 g#4@4", // G# G#5
  AG: "[d3,g#3,b3,d4,e4]@3 [d3,g#3,b3]@2 [d3,g#3,b3]@2 [d3,g#3,b3], ~@3 [d4,e4] ~@4", // E7 G#dim Dsus2
  AH: "[[e3,a3,c#4]@3 c#4!2 g#4 a4 [e3,a3,c#4] ~ a4@2 c#4!2 [e3,a3,c#4,a4]@2 [e3,a3,c#4] [f#3,a3,d4]@3 d5!2 [f#3,a3,d4,c#5]@2 [f#3,a3,d4] ~ b4@2 [e3,g#3,b3,a4]@2 [e3,g#3,b3]@2 [e3,g#3,b3], a4@4 ~@3 b4@2 ~@6 f#4@3 ~@2 f#4@4 g#4@4 ~ g#4@3, ~@3 [e3,a3]@2 [e3,a3,c#4]@2 ~ [e3,a3,c#4]@3 [e3,a3,g#4]@2 ~@6 [f#3,a3,d4]@2 ~@2 c#5@2 ~@7, ~@24 [e3,g#3,b3]@3 ~@5]/4", // A D Dmaj7 D E A5 A Amaj7 …
  AI: "[e3,a3,c#4]@3 c#4!2 g#4 a4 [e3,a3,c#4,b4], a4 ~, ~@3 [e3,a3]@2 [e3,a3,c#4]@2 ~", // A A5 A
  AJ: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4,a4]@2 [e3,a3,c#4,g#4]", // A Amaj7
  AK: "[[d3,f#3,a3]@3 d5 ~@2 c#5 [d3,f#3,a3] ~ b4@2 ~@2 [e3,g#3,b3,b4]@2 [e3,g#3,b3], d4 f#4 g#4!2, ~@3 [d3,f#3,a3]@2 [d3,f#3,a3]@2 ~ [e3,g#3,b3]@3 [e3,g#3,b3,a4]@2 ~@3, ~@4 d5@2 ~ c#5@2 ~@7]/2", // D E D E
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.1)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note("<~ A@2 B@2 C D E@2 ~@94>".pickRestart({
  A: "[c4,e4]/2", B: "[b3,d4]/2", C: "[c4,e4,c6]", D: "[c4,a5]", E: "[[c4,f#4,d5]@11 ~@5]/2",
})).s("gm_synth_strings_1").gain(0.42)

// chords · acoustic guitar steel · "Guitar2"
const acoustic_guitar_steel_2 = note(`<
  ~@9 A@2 B C A D B C E@2 B@2 D F B G A@2 B C A D B C E@2 B@2 D F B C A H I J A@2 B J C@2 A@2 K G A@2 B C L E B@2 A F B
  C A M N O P M O N P Q R@2 P@2 O S P M O F J@2 C T I J C F J@2 C T I J C F
>`.pickRestart({
  A: "[g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@3 [g2,d3,g3]@2", B: "[c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@3 [c3,g3,c4]@2",
  C: "[d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@3 [d3,a3,d4]@2", D: "[g2,d3,g3] [g2,d3,g3]@3",
  E: "[c3,g3,c4]@2 [c3,g3,c4]!2 [g2,d3,g3]@2 [g2,d3,g3]@2", F: "[e2,b2,e3]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2",
  G: "[d3,a3,d4] [d3,a3,d4]@3", H: "[g2,d3,g3] ~@3", I: "[a2,e3,a3] [a2,e3,a3]@3",
  J: "[a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2", K: "[c3,g3,c4] [c3,g3,c4]@3", L: "[c3,g3,c4]!2 [g2,d3,g3]@2",
  M: "[d#3,a#3,d#4]@2 [d#3,a#3,d#4] [d#3,a#3,d#4]@3 [d#3,a#3,d#4]@2", N: "[g#2,d#3,g#3] [g#2,d#3,g#3]@3",
  O: "[g#2,d#3,g#3]@2 [g#2,d#3,g#3] [g#2,d#3,g#3]@3 [g#2,d#3,g#3]@2", // G#5
  P: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4] [c#3,g#3,c#4]@3 [c#3,g#3,c#4]@2", Q: "[d#3,a#3,d#4] [d#3,a#3,d#4]@3",
  R: "[c#3,g#3,c#4]!2 [g#2,d#3,g#3]@2", S: "[f2,c3,f3]@2 [f2,c3,f3] [f2,c3,f3]@3 [f2,c3,f3]@2",
  T: "[e2,b2,e3] [e2,b2,e3]@3", // E5
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.9)

// chords · electric guitar clean · "Guitar3"
const electric_guitar_clean = note(`<
  ~@14 A ~@6 A ~@2 B ~@5 A ~@6 A ~@5 C ~@9 D B ~@4 B ~@9 E ~@4 E ~ F G H ~@11 I C ~@6 J C ~@3
>`.pickRestart({
  A: "~@3 [g3,d4,g4] ~@2 [g3,d4,g4] ~", B: "~@3 [d4,a4,d5] ~@2 [d4,a4,d5] ~", C: "~@3 [a3,e4,a4] ~@2 [a3,e4,a4] ~",
  D: "~@3 [c4,g4,c5] ~@2 [c4,g4,c5] ~", E: "~@3 [g#3,d#4,g#4] ~@2 [g#3,d#4,g#4] ~",
  F: "~@6 [d#4,a#4,d#5] ~@5 [d#4,a#4,d#5]@2 ~@2", G: "~@3 [c#4,g#4,c#5] ~@2 [c#4,g#4,c#5] ~",
  H: "~@6 [c#4,g#4,c#5] ~@5 [c#4,g#4,c#5]@2 ~@2", I: "~@6 [e3,b3,e4] ~@5 [e3,b3,e4]@2 ~@2",
  J: "~@3 [e3,b3,e4] ~@2 [e3,b3,e4] ~", // E5
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · piano
const piano = note(`<
  ~@9 A B C D B E F G H I C J B K L G A B C D B E F G H I C J B K L D B M N O P A Q N D R A S C T U P V W H@2 C X B Y Q
  T P Z AA@2 AB AC AD@2 AE AF AG AH AB AI AD AJ AK AL AD AM AN AO D AP AQ AR D AS AN AO D AP AQ AR D AS
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[b3,d4,g4]", C: "[c4,e4,g4]", D: "[a3,d4,f#4]", E: "[b3,d4,g4]@3 [g3,b3,d4]@5",
  F: "[g3,c4,e4]@3 [c4,e4,g4]@5", G: "[d4,f#4,a4]@3 [f#3,a3,d4]@5", H: "[c4,e4,g4] [g3,b3,d4]",
  I: "[c4,e4,g4] [b3,d4,g4]", J: "[g3,c4,d#4]@3 [g3,c4,d#4]@5", K: "[b3,e4,g4]@3 [g3,b3,e4]@5",
  L: "[g3,c4,e4]@3 [g3,c4,e4]@5", M: "[g3,b3,d4]@3 ~@5", N: "[c4,e4,a4]", O: "[c4,e4,a4]@3 [c4,e4,a4]@5",
  P: "[g3,b3,d4]@3 [b3,d4,g4]@5", Q: "[g3,c4,e4]", R: "[d4,f#4,a4]", S: "[g3,b3,d4]@3 [g3,b3,d4]@5", T: "[f#3,a3,d4]",
  U: "[b3,d4,g4]@3 [b3,d4,g4]@5", V: "[c4,e4,g4]@3 [c4,e4,g4]@5", W: "[f#3,a3,d4]@3 [d4,f#4,a4]@5", X: "[c4,d#4,g4]",
  Y: "[g3,b3,e4]", Z: "[c#4,g4,a#4]", AA: "[c4,d#4,g#4]@3 [c4,d#4,g#4]@5", AB: "[g#3,c#4,f4]", AC: "[a#3,d#4,g4]",
  AD: "[g#3,c4,d#4]", AE: "[f3,g#3,c#4]", AF: "[g3,a#3,d#4]", AG: "[c#4,f4,g#4] [g#3,c4,d#4]",
  AH: "[f3,g#3,c#4] [g#3,c4,d#4]", AI: "[c#4,e4,g#4]@3 [g#3,c#4,e4]@5", AJ: "[g#3,c4,f4]",
  AK: "[c#4,f4,g#4]@3 [f3,g#3,c#4]@5", AL: "[d#4,g4,a#4]", AM: "[g#3,b3,d4]@3 [b3,d4,g#4]@5", AN: "[c#4,e4,a4]",
  AO: "[a3,c#4,e4]@3 [c#4,e4,a4]@5", AP: "[g#3,b3,e4]@3 [b3,e4,g#4]@5", AQ: "[c#4,e4,a4]@3 [a3,c#4,e4]@5",
  AR: "[a3,c#4,e4]", AS: "[b3,e4,g#4]",
})).s("gm_piano").gain(0.41).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@9 [x ~@2 x!2 ~@3]!33 x [x ~@2 x!2 ~@3]!60>").gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A
  B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@3 x", B: "~@5 x!3", C: "~@3 x!5",
})).gain(0.19)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A
  B A D A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@3 x", B: "~@5 x!3", C: "x ~ x!2", D: "~@3 x!5",
})).gain(0.19)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@42 [~@2 x!2] x ~@59>").gain(0.32)

stack(
  bass, acoustic_guitar_steel, synth_strings_1, acoustic_guitar_steel_2, electric_guitar_clean, piano, kick, snare,
  low_tom, pedal_hat, open_hat
)

More by ABBA