Strudelify
Thank You for the Music cover art

The Album

Thank You for the Music

ABBA

KeyE majorTempo102 bpm
0:00/0:00
// Thank You for the Music — ABBA
// 102 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 97 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 · fretless bass
const bass = note(`<
  ~@21 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE F AF AG AH F AI AJ AK AL AM AN AO AP AQ ~@7
  AR@2 AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH@7
>`.pickRestart({
  A: "~@6 b1@8 ~ c#2@8 ~ d#2@8", B: "e2@2 ~ e2 f#2@2 ~ f#2", C: "b1@7 ~@5 b1@4 e2@13 ~@3",
  D: "c#2@9 ~@3 c#2@4 b1@9 ~@3 b1@4", E: "a#1@7 ~ c#2@8 b1@5 ~@3 g#2@3 ~ f#2@3 ~", F: "e2@9 ~@3 e2@4 f#2@9 ~@3 f#2@4",
  G: "g#2@9 ~@3 g#2@4 c#2@6 ~@2 c#2@3 ~ b1@4", H: "a1@9 ~@3 a1@2 ~@2 a1@12 ~@4",
  I: "a1@8 ~@4 a1@2 ~@2 a1@9 ~@3 d2 ~ d#2@2", J: "e2@9 ~@3 e2@4 d2@9 ~@3 d2@4", K: "c#2@5 ~@3 c#2@7 ~ d#2@8 f2@6 ~@2",
  L: "f#2@7 ~ g#2@7 ~ a2@4 a1@3 ~@9", M: "b1@7 ~ b2@4 b1@2 ~@2 b1@7 ~ f#2@4 b1@4", N: "e2@9 ~@3 e2@4 g2@9 ~@3 g2@4",
  O: "f#2@7 ~@5 f#2@4 b1@5 ~@3 b1@2 c#2@2 d#2@4", P: "e2@8 ~@4 e2@4 g2@9 ~@3 g2@4", Q: "f#2@7 ~@5 c#3@4 b2@9 ~@3 g#2@4",
  R: "e2@9 ~@3 e2@2 ~@2 b1@8 e2@8", S: "b1@4 ~@2 b1@2 e2@4 ~@2 g1 g#1", T: "a1@9 ~@3 a1@6 ~@2 a1@10 ~@2",
  U: "c#2@9 ~@3 c#2@2 ~@2 c#2@10 ~@2 c#2@4", V: "f#2@9 ~@3 f#2 ~@3 f#2@4 g#2@4 a2@7 ~",
  W: "b2@11 ~@3 f#2 ~ b1@6 ~@2 c#2@4 d#2@4", X: "e2@9 ~@3 e2@2 ~@2 e2@9 ~@3 e2@2 ~@2",
  Y: "f#2@9 ~@3 f#2@3 ~ b1@7 ~ f#2@4 b1@4", Z: "e2@9 ~@3 e2@2 ~@2 e2@6 ~@2 e2@7 ~",
  AA: "a2@9 ~@3 e2@4 a2@5 ~@3 a1@4 b1@4", AB: "c#2@5 ~ c#2 ~ c#2@4 ~@2 c#2 d#2",
  AC: "c#3@7 ~@5 c#3@3 ~ c#3@9 ~@3 c#3@4", AD: "f#2@8 ~@4 f#2@3 ~ e2@8 ~@4 e2@4",
  AE: "b1@2 f#2@2 b1@3 ~ c#2@3 ~ d#2@3 ~", AF: "b1@5 ~@3 f#2@5 ~@3 e2@15 ~", AG: "c#2@8 ~@4 c#2@3 ~ b1@9 ~@3 b1@3 ~",
  AH: "a#1@7 ~ c#2@7 ~ b1@7 ~ g#2@4 f#2@4", AI: "g#2@9 ~@3 g#2@4 c#2@4 ~@2 c#3 ~ c#2@4 b1@4",
  AJ: "a1@9 ~@3 a1@2 ~@2 a1@7 ~ a2@8", AK: "a1@9 ~@3 a1@3 ~ a1@9 ~@3 d2 ~ d#2 ~", AL: "e2@10 ~@2 e2@3 ~ d2@10 ~@2 d2@4",
  AM: "c#2@5 ~@3 c#2@6 ~@2 d#2@5 ~@3 f2@7 ~", AN: "f#2@5 ~@3 g#2@6 ~@2 a2@4 a1@3 ~@9",
  AO: "b1@7 ~ b1@8 b2@3 ~ b2@4 b1@7 ~", AP: "e2@9 ~@3 e2@4 e3@13 ~@3", AQ: "e2@10 ~@2 e2@3 ~@2 e2@15",
  AR: "[f#2@22 e2@22 ~ d#2@10 ~@2 b1@7]/2", AS: "~@4 c#2@6 ~@4 d#2@9 e2@9", AT: "~@4 e2@4 f#2@9 ~@3 f#2@4 b1@8",
  AU: "~@2 b1@2 e2@5 ~ e2 d#2 c#2@4", AV: "~@2 c#2@2 b1@5 ~ b1@2 a#1@3 ~", AW: "c#2@3 ~ b1@3 ~ g#2@2 f#2@2 e2@4",
  AX: "~ e2 f#2@2 ~ f#2 g#2@2", AY: "~@4 g#2@4 c#2@5 ~@3 c#2@4 b1@4 a1@8", AZ: "~@2 a1 ~ a1@6 a2 ~ a1@4",
  BA: "~@2 a1 ~ a1@4 d2 d#2@3 e2@4", BB: "~@4 e2@4 d2@9 ~@3 d2@4 c#2@5 ~@3", BC: "c#2@3 ~ d#2@3 ~ f2@4 f#2@3 ~",
  BD: "g#2@8 a2@4 a1@3 ~@9 b1@8", BE: "b2@5 ~ b1 ~ b1@8 f#2@4 b1@4 e2@8", BF: "~@4 e2@4 d2@8 ~@4 d2@4 c#2@5 ~@3",
  BG: "c#2@7 ~ d#2@8 f2@8 f#2@7 ~", BH: "[g#2@7 ~ a2@4 a1@4 ~@10 b1@46 e2@17 f#1@18 ~@2 g#1@17 a1@21 e2@62 ~@15]/7",
})).s("gm_fretless_bass").gain(0.25)

// chords · piano · "Honky-Tonk"
const piano = note(`<
  ~ A@7 B@5 C@8 D E F G H I J K L M@2 N O P@2 Q@2 R S@2 T U V@4 W X Y Z AA AB@2 AC AD@2 AE AF AG AH AI AJ AK AL AM AN@2
  AO@5 AP@3 AQ AR@2 AS AT AU AV AW@2 AX AY@3 AZ BA@7
>`.pickRestart({
  A: "[~@63 b5@6 ~@12 d#6@4 ~@20 c#5@6 ~@9 g#5@7 ~@48 c#5@11 ~@6 b4@12 ~@16 b4@4, ~@25 [e1,e2]@35 e5 g#5@8 [f#4,a#4,e5]@17 ~@6 c#5@13 ~@22 b4@4 b5@12 b3@14 g3@4 e5@11 f#3@16 [b2,b3]@2 g#4@14 ~@20, ~@35 e3@18 g#4@16 d#6@12 ~@4 b5@44 g#5@16 e5@13 [a#3,c#4]@15 a3@14 a3@17 ~@11 b3@9, ~@39 g#3@5 e4@4 e4 g#4 b4 b3@4 b4 e5@2 e4@12 ~@15 f#4@26 ~ [b3,d#4,a4]@29 [e3,g#3]@18 g4@15 [c#4,e4,a4]@15 d#4@15 ~@20, ~@42 b3@3 g#3@14 b4@11 ~@7 c#6@9 ~@13 e5@13 ~@16 d#5@16 [g#4,b4]@16 [a#4,c#5]@15 ~@11 d#3@18 e2@20]/7", // E F#7 B A#m B7 E A G#m …
  B: "[~@7 c#4@3 ~@11 c5@5 ~@17 [e4,a4,c#5]@34 ~@3 b4@26 ~@29 d4@2 ~@8 [a3,b3]@4 f#4@3 ~@4 c#5@4, g#3@11 ~@15 [g#3,d4,b4]@51 f3@29 ~@8 c#3@14 a3@4 c#4@5 ~@23, ~ b3@9 [b2,a3,d4]@16 e3@14 ~ [a2,e3]@37 ~@32 f#2@27 ~ [b2,d#4]@13 ~@9, ~@5 c4@6 ~@4 c#5@11 e4@16 [a3,c#4]@36 [g#3,b3,c#4]@28 ~@11 a3@8 a4@12 ~@5 b4@10 g4@8, ~@34 c5@43 ~@2 [f4,g#4]@27 ~@15 c#5@16 ~@23]/5", // A Asus2 G#dim Bm7 A5 B A C#7 …
  C: "[~@5 g#4@3 ~@7 b4@23 ~@26 f#4@8 ~@5 b4@11 ~@5 c5@13 ~@6 c#5@10 ~@6 c5@11 ~@7 g#4@7 ~@32 e5@25 ~@24 a4@18 [d#2,d#3,b3,d#4,f#4,b4]@4, a3@8 ~@2 e2@28 d#3@34 e3@16 g#3@4 g#4@14 ~@3 c#4 e4 a4@11 f#3@5 a4@12 ~@4 c#4@14 e5@21 a3@3 e4@2 a4@27 f#2@23 e4@20 ~@3, ~@10 b4@4 [e4,g#4]@25 ~ d#4@33 [g#2,g#3]@3 g#4@14 ~ e4@15 ~@2 a3@15 ~@2 [c4,e4]@14 ~ c#3@13 g#4@58 [c#3,f#3,a3]@19 [e2,c#3,f#3]@23 ~@3, ~@12 [b2,g#3]@27 [f#2,f#3,a3]@35 ~ e4@14 ~ c4@16 e3@17 ~@3 f#4@13 ~@2 g#3@39 c#4@32 c#4@19 a3@22 ~@3, ~@13 b3@26 ~@2 f#4 b4@13 g#4@19 b3@15 g#2@17 ~ a2@16 [a2,a3]@16 g#2@5 e4@27 a4@4 [c#3,d#5]@9 c#5@28 ~ [e4,a4]@19 c#4@21 ~@3]/8", // B E G# C F#m F#7 E F#m …
  D: "~@6 [b1,b2,b3,d#4,b4]@8 ~ [c#2,c#3,b3,e4,b4]@8 ~ [d#2,d#3,b3,f#4,b4]@7 ~", // B C#m7 B
  E: "[g#3,b3,e4]@7 ~@9 [a3,c#4,e4,f#4]@7 ~@5 f#3@3 ~, e3@6 e3@9 ~, ~@8 [g#3,b3,e4]@7 ~@9 [a3,c#4,e4,f#4]@8", // E F#m7 E F#m7
  F: "[b3,f#4]@8 [b3,d#4,f#4]@7 ~@15 e5@2, [b2,a3,e4]@15 ~ e4@8 [e4,b5]@8, ~@20 [e3,g#3,b3]@11 ~, ~@13 g#5@3, ~@7 f#5", // B5 B Esus4 E5 E
  G: "~@2 g#3 ~ [c#4,e4,g#4]@2 [c#4,e4,g#4]@2, [e3,b3,d#5] b2, ~ [d#4,e4,g#4] ~@2, ~@3 g#3@5", // C#m Emaj7
  H: "[a#3,c#4,f#4]@6 ~@2 [f#2,f#3,a#3,c#4,f#4]@7 ~ e4@4 d#4@4 ~@4 b3@3 ~, a#2@15 ~ f#3@14 ~@2, ~@16 [b2,b3]@7 ~ [b2,c#4]@7 ~", // F# B Bsus2
  I: "[g#3,b3,e4]@7 ~ [g#3,b3,e4]@8 [a3,c#4]@6 ~@2 [a3,c#4]@6 ~@2, e3@14 ~@2 e3@15 ~, ~@4 f#2@3 ~", // E A
  J: "[g#2,d#3,g#3,c4,d#4,f#4]@2 c4 g#2 [c#3,g#3,c#4,e4]@2 [g#3,b3,e4]@2, ~ [g#3,f#4] ~@2", // G#7 C#m E G#7
  K: "g#5@3 ~ f#5@3 ~ [a3,e4,g#5]@4 ~@4 [a3,e4]@7 ~ [a3,e4]@6 ~@2, [a3,e4]@7 ~@5 c#5@18 ~@2", // Amaj7 A5
  L: "g#5@4 f#5@3 ~ [a3,c4,e4,g#5]@4 ~@4 a3@5 ~@3 [a3,c4,e4]@5 ~@3, [a3,c4,e4]@7 ~@5 c5@20", // Am
  M: "[[e3,b3,e4,g#4,b4]@8 ~@4 [e3,b3]@2 ~@2 [b3,d4,b4]@8 [d4,f#4]@4 b3@4 [c#4,f4,g#4]@5 ~@3 [c#3,b3,c#4,f4]@7 ~ [d#3,b3,d#4,f#4]@8 [f3,b3,f4,g#4]@8, ~@8 [e4,g#4,b4]@8 a3@12 ~@4 g#3@3 ~@29, ~@8 f#4@3 ~ b4@6 ~@14]/2", // E E5 Bm D C# C#7 B Fdim …
  N: "[f#3,c#4,f#4,a4]@7 ~ [c#4,f4,g#4]@5 ~@3 [a3,e4,f#4,a4,c#5]@5 ~@11, ~ [g#3,b4] ~@2", // F#m C# F#m7 G#m
  O: "[a3,c#4,e4]@8 [b3,d#4]@6 ~@2 [a3,g#4]@3 ~ f#4@4 e4@6 ~@2, b2@11 ~@5, ~@4 b3 ~@3", // A B Amaj7
  P: "[e4@4 g#4@3 ~ b4@4 ~@8 c#5@3 ~ d#5@4 ~@4 a3@2 ~@2 c#4@4 e4@4 ~@12 [a3,b3]@6 ~@2, [e3,g#3,b3]@11 ~ d#5@9 ~@7 b4@10 ~@14 g#4@11 ~, ~@16 [c#4,e4]@14 ~@2 c#4 ~@11 d#4@12 ~@8, ~@16 g3@10 ~@6 f#3@15 ~@17]/2", // Asus2 E C#m
  Q: "[[g#3,b3,e4]@3 ~ [g#3,b3]@3 ~ [g3,a#3,c#4]@2 c#3@2 [g3,a#3,c#4]@4 a3@2 ~@2 [a3,c#4,e4]@4 b3@4 b2 ~ b3@2, [e2,e3]@11 ~@21 e3@2 ~@2 e3@11 ~@17, ~@8 e4@12 ~@4 e4@11 ~@29]/2", // E G#m Gdim A E
  R: "c#4@7 ~ e4@4 b3@4 g#4@4 b4@4 b3@4 c#4@3 ~, e3@27 ~@5",
  S: "[~@8 c#5@3 ~ b4@7 ~ g#4@4 f#4@4 ~@4 c#4@7 ~ c#4@4 ~@4 c#4@4 a3@4 ~@4 a3@3 ~, d4@19 ~@9 e4@12 ~@4 a2@14 ~@6, [b2,a3]@5 ~ e3@22 ~@4, ~@4 f#4@7 ~ b3@16 ~@4 a4@22 ~@2 [e4,a4,c#5]@7 ~, ~@16 a3@9 ~@7]/2", // B7 A
  T: "[c#4,g#4]@7 ~@17 [c#4,f4]@4 c#3@4, b4@29 ~@3, f4@11 ~@5, b3@5 ~@11", // C#5 C#
  U: "[c#4,e4,f#4]@7 ~@9 a3 ~@3 c#4@2 ~@2 e4@4 f#3@4, a4@19 ~@5 [c#4,f#4,a4]@8, [f#3,a3]@13 ~@7 a3@8 ~@4", // F#7 F#m
  V: "[d#4@4 f#4@4 ~@4 f#4@4 g4@4 c#5@4 g#4@4 ~@4 [e4,g#4]@7 ~ [b3,e4,g#4]@6 ~@6 c#5@8 ~@4 [a3,b3,f#4]@6 ~@2 f#4@4 ~@4 b3@4 ~@4 a3@4 ~@4 [b3,e4]@8 [e4,g#4]@4 b3@4 [c4,e4]@6 ~@2 [c4,e4]@6 ~@2, a3@29 ~@19 e4@12 ~@20 f#4@12 ~@20 e3@12 ~@4, ~@8 b3@8 ~@12 b4@22 ~@10 b4@21 ~@3 c#5@8 b4@16 ~@20]/4", // E B7 E5 E C
  W: "[c#4,e4,g#4]@5 ~@7 e3@2 ~@2 [c4,e4,f#4]@7 ~ [c4,e4,f#4]@3 ~ g#3@4, a2@13 ~@19, e3 [c#4,e4,g#4] ~@2", // C#m F#m7b5 C#m
  X: "[g#4,c#5,e5]@5 ~@3 [g#4,c#5,e5]@6 ~@2 [g#4,d#5] ~ [g#4,c#5,e5]@5 ~ [g#4,c#5,e5]@7 ~", // C#m G#5 C#m
  Y: "[a4,c#5,e5]@6 ~@2 [a4,c#5,e5]@6 ~@2 [a4,c#5,d#5] ~ [a4,c#5,e5]@5 ~ [a4,c#5,e5]@4 a3@4", // A D#m7b5 A
  Z: "[f#3,a3,c#4,e4]@7 ~ [a3,c#4,e4]@8 [a3,c#4,e4]@6 ~@2 a3@2 ~@2 a3@3 ~, ~@4 [e2,e3]@3 ~, ~@24 [c#4,e4]@7 ~", // F#m7 A E C#m
  AA: "[b3,d#4]@4 b3@2 ~@2 [b1,b2,b3,d#4,f#4,b4]@7 ~ [c#2,b3,e4]@8 [b3,f#4]@8, [b1,b2,f#4]@7 ~@9 b4@16, ~@12 d#2 ~@3", // B C#m7 B5
  AB: "[[e2,b3,e4,g#4]@6 ~@2 b3@4 e3@4 [a3,c#4,e4]@6 ~@2 [a3,c#4]@7 ~ [a3,c#4]@8 ~@4 a3@2 ~@2 e4@3 ~@5 b5@2 g#5@2 f#5@2 e5@2, ~@8 [e4,g#4]@8 f#3@15 ~ b2@11 ~@5 e3@11 ~@5, ~@12 e4@7 ~ b3@5 ~ [g#3,b3]@4 ~@2, ~@40 d#4@7 ~@17]/2", // E A E G#m
  AC: "d#5@15 ~ [b3,c#4,g#4]@6 ~@2 [b3,c#4,e4,g#4]@8, e4@3 ~@5, c#4@3 ~@13", // C#7 C#m7
  AD: "[[a#3,c#4]@6 ~@2 [a#3,c#4]@6 ~@2 [b2,c#4,e4]@4 ~@12 [e3,b4]@8 [b3,g#4]@6 ~@2 [a3,c#4,e4]@7 ~@5 d#3@3 ~, f#4@14 ~@6 [b3,d#4]@8 b3@11 ~@7 e3@14 ~@4, ~@24 b2@7 ~ [e4,g#4]@7 ~ e4@3 ~@5 f#2@11 ~@5, ~@56 [a3,c#4,e4]@7 ~]/2", // A#m C#m7 E5 E A B E A
  AE: "[g#3,c4,d#4]@7 ~ [g#3,f#4]@8 [c#3,g#3,d#4]@8 [c#4,e4]@3 ~ e3@4, ~@8 [c4,d#4]@5 ~@19", // G# G#7 C#sus2 C#m Cm
  AF: "[a3,c#4,e4]@4 f#5@3 ~ [a3,c#4,e4,g#5]@4 ~@4 [a3,c#4,e4]@6 ~@2 [a3,c#4,e4]@6 ~@2, g#5@3 ~@9 c#5@18 ~@2", // A Amaj7 A
  AG: "g#5@3 ~ f#5@2 ~@2 [a3,c4,e4,g#5]@4 ~@4 [a3,c4,e4]@5 ~@3 e4@5 ~@3, [a3,c4,e4]@7 ~@5 c5@20, ~@12 a3 ~@3", // Am
  AH: "[e4,g#4]@7 ~ [e4,g#4]@7 ~ [b3,d4,f#4]@7 ~ [d4,f#4]@4 b3@4, b4@15 ~ b4@15 ~, [e3,b3]@11 ~@5 [d3,d5]@12 ~@4", // E Bm D E5 D
  AI: "[g#3,c#4,f4,g#4,c#5]@5 ~@3 [c#3,b3,f4]@8 [d#3,d#4,f#4]@8 [f3,b3,f4,g#4]@8, ~@8 c#4@5 ~@19", // C# C#7 D#m Fdim
  AJ: "[f#3,a3,c#4,f#4,a4]@4 [g#3,f4,g#4,b4]@4 [a3,c#4,a4,c#5]@3 ~@5, ~@8 b3@5 ~@19", // F#m Fdim A
  AK: "[a3,c#4,e4]@7 ~ [a3,d#4]@6 ~@2 [a3,d#4] ~@7 b2@5 ~@3, b2@11 ~@5, ~@16 g#4@2 ~@2 [a3,d#4,f#4]@7 ~@5", // A Adim D#dim
  AL: "[b3,e4]@4 [g#3,b3]@4 ~@4 g#3@3 ~@9 e4@4 d#4@4, e3@11 ~@5 a3@12 ~@4, g#3@3 ~@5 e4@9 ~@3 c4@8 ~@4", // E5 G#m
  AM: "~@12 e5@4 ~ [e3,g#4,c5]@15, e4, ~ g#4@3 ~@4, ~ b4 ~@2", // Eaug
  AN: "[~@2 [a3,e4,f#4]@9 [c4,e4,f#4]@9 e4@9 [e4,f#4]@9 [g#3,b3,e4]@9 [b3,e4]@9 [g#3,b3,e4]@8]/2", // F#m7 F#m7b5 Esus2 E E5 E
  AO: "[~ [g#3,b3,e4]@9 ~ [a3,c4,e4,g#4]@9 [a3,c4,f#4]@9 [a3,c4,e4]@9 a3@4 a3@5 ~@9 g#4@4 b3@4 ~ [g#3,b3,e4]@8 ~ g#3@9 [a3,c4,g#4]@8 ~ [a3,c4,f#4]@8 ~ [g#3,c4,d#4,f#4,a4]@9 [g#3,c4,d#4,f#4,g#4]@7 ~@2 [d#4,f#4]@10 e4@9 ~ e4@10 d#4@11, ~@38 [b3,d#4]@8 ~ e4@14 ~@22 e4@17 ~@60, ~@47 b3@10 ~@62 c#3@16 ~@4 [b2,c#4]@21, ~@47 g#3@7 ~@2 g#3@8 ~@55 g#3@40 ~, ~@51 b4@28 ~@81]/5", // E Am F#dim Am E Am F#dim G#7 …
  AP: "[~@17 c#3@5 ~@12 e3@5 e3@5 ~ [d#2,b3,d#4,f#4]@11 ~ [b2,b3,d#4,f#4,b4]@10 ~ [c#2,c#3,b3,e4,b4]@9 ~ [d#2,b3,f#4,b4]@9 [e3,g#4]@9, f#2@22 e2@22 ~@13 b1@6 ~@33, a3@11 e4@23 ~@62, ~@5 f#3@16 ~ [e3,a3,c#4]@11 ~ [a3,c#4,e4,g#4]@11 ~@42 [b3,e4]@6 ~@3, ~@11 [a3,c#4]@10 ~@7 c#3@17 ~@33 d#3@6 ~@12]/3", // B C#m7 B E A Amaj7 E5 A
  AQ: "~@4 e3@4 [a3,c#4,e4]@6 ~@2 [a3,c#4,e4]@7 ~ [b2,a3,c#4,e4]@8, [b3,e4,g#4] f#3@2 ~", // A E
  AR: "[[b3,d#4]@7 ~ e4@3 ~@5 b5@2 g#5@2 f#5@2 e5@2 [g#3,e4]@7 ~ [g#3,e4]@7 ~ [g#3,e4]@6 ~@2 [g#3,c#4,e4]@8 [a#3,c#4,f#4]@7 ~, ~@8 [e3,g#3,b3]@13 ~@43, ~@12 e4@11 ~ [c#4,d#5]@24 ~@16]/2", // B C#m F# E C#sus2
  AS: "[a#2,f#3,a#3,c#4,f#4]@8 e4@4 ~@4 [b2,b3]@7 ~ [e3,g#3,b3,e4]@8, ~@8 [b2,f#3,b3]@7 ~ f#3@2 ~@14, ~@12 d#4@11 ~@9", // F# B E B5
  AT: "[g#3,b3,e4]@7 ~ [a3,c#4,e4]@7 ~ [a3,c#4,e4]@8 [g#3,c4,d#4]@6 ~@2", // E A G#
  AU: "[g#3,c4,d#4,f#4]@8 [c#4,e4]@6 ~@2 [g#3,b3,e4]@7 ~ g#5@3 ~ f#5@2 ~@2, ~@3 [a3,c#4,e4]", // G#7 C#m E A
  AV: "g#5@4 ~@4 [c#4,e4]@8 [a3,c#4,e4]@8 g#5@3 ~ f#5@2 ~@2, ~ c#5@4 ~ [a3,c4,e4]@2", // C#m A Am
  AW: "[g#5@4 ~@4 [a3,c4,e4]@8 [a3,e4]@8 [b3,e4,g#4,b4]@8 [e4,g#4,b4]@7 ~ [d4,f#4,b4,d5]@7 ~ [d4,f#4,b4,d5]@4 ~@4 [c#4,f4,g#4,c#5]@4 ~@4, [a3,c4,e4]@2 ~@4 e3@3 ~ d3@3 ~@3, ~@4 c5@20 ~@16 b3@3 ~@9 b3@8 ~@4]/2", // Am A5 E Bm C# Am
  AX: "[c#3,b3,c#4,f4]@7 ~ [d#3,b3,d#4,f#4]@7 ~ [f3,b3,c#4,f4,g#4]@7 ~ [f#3,f#4,a4]@8, ~@24 [a3,b3,c#4]@5 ~@3", // C#7 B C#7 F#m A
  AY: "[[g#3,b3,f4,g#4,b4]@8 [a3,c#4,e4,a4,c#5]@5 ~@11 [a3,c#4,e4]@7 ~ [a3,b3,d#4]@6 ~@2 [a3,b3,d#4,g#4]@3 ~@5 a3@3 ~@13 g#4@4 a4@4 g#4@3 ~ g#4@4 a4@3 ~@5 [c#4,f4]@7 ~, ~@24 b2@13 ~@3 b2@8 ~@4 e4@10 ~@10 [e4,b4]@7 ~@5 b4@10 ~@2, ~@44 [b3,f#4]@9 ~@3 [e3,b3]@15 ~ [d3,b3]@12 ~@12]/3", // Fdim A B7 G#m C# E5 B5 E5 …
  AZ: "[c#3,c#4,f4,g#4]@8 [d#3,c#4,a4]@7 ~ [f3,c#4,f4,g#4,b4]@7 ~ [f#3,c#4,a4,c#5]@8", // C# D#m7b5 C#7 F#m
  BA: "[[g#3,c#5]@7 ~ [a3,c#4,g#4,b4]@3 ~ [a3,c#4,f#4,a4]@3 ~@11 [c#4,e4]@11 d#4@6 ~@4 [d#4,g#4]@21 ~@17 g#3@3 ~@16 f#4@3 e4 f#4 ~@13 b3@4 ~@16 a4@5 ~@5 g#5@19 ~@2 [e6,g#6]@31 ~@20, ~@26 b2@42 ~@8 b3@12 ~@6 c#4@13 ~@2 e4@17 ~@5 e4@16 ~@2 e4@22 g#5 b5@32 ~@20, ~@26 a3@19 ~@27 g#3@13 ~@4 a3@18 g#2@18 ~ [a2,a3,c4]@20 ~ e3@4 e5@53 ~@20, ~@81 e4@9 ~@9 g#4@8 ~@6 b3@9 ~@26 b3@56 ~@20, ~@118 b4@10 ~@8 b4@11 ~@3 [g#4,b4]@54 ~@20]/7", // C#5 Amaj7 F#m C#m G#5 E Am G#m
})).s("gm_piano").gain(0.25)

// chords · piano · "Honky-Tonk" · soft notes
const piano_soft = note(`<
  ~@2 A ~@2 B@2 C ~@2 D@3 E ~@8 F G H ~ I ~ J K L M ~ N O P Q R S ~ T U V W X Y Z AA AB ~ AC ~ AD ~ AE AF AG AH ~ AI AJ
  AK ~@2 AL@2 AM@2 ~@2 AN ~@8 AO AP ~ AQ AR AS ~@3 AT ~ AU AV@3 ~@3
>`.pickRestart({
  A: "~@14 b3@5 ~@3 e4@4 ~@6", B: "[~@15 e4@16 e4@15 ~@18]/2", C: "~@21 g#3@11", D: "[~@13 c#3@29 ~@11 c#4@14 ~@29]/3",
  E: "b3@13 ~@19", F: "e2@7 ~ f#2@4 ~@4", G: "~@16 e3 ~@15", H: "c#3 ~, g#3 ~@3", I: "~@16 e4@6 ~@2 f4@2 e4@3 ~@3",
  J: "c#4@7 ~ c#4@6 ~@2 c#4@7 ~ c#4@6 ~@2", K: "~@8 [c4,e4]@3 ~@5", L: "~@4 d3@3 ~", M: "c#3@2 g#3 ~@13",
  N: "~@20 a3@7 ~ b3@2 ~@2", O: "~@4 a#3@3 ~", P: "~@16 b2@15 ~, ~@16 a3@5 ~@11", Q: "~@3 e3 g2@3 c#3",
  R: "[f#2,c#4]@3 ~@7 f#3 ~@5, ~@2 [a3,d#4] ~", S: "~@2 b3 ~@13", T: "~@4 e4@7 ~ c#4@3 ~",
  U: "~@12 g#4@3 ~, c#3@25 ~@7, ~@8 [c#4,g#4]@13 ~@11, ~@12 b3@17 ~@3", // C#5
  V: "~@10 f#4@11 ~@11, ~@2 e4@3 ~@3, ~@8 c#4@9 ~@15", W: "b2@20 ~@4 b2@5 ~@3",
  X: "[g#3,b3]@7 ~@5 g#3@2 ~@2 [b3,g#4]@12 ~@4, e3@25 ~@7", // G#m E
  Y: "b2@8 [b3,d#4]@4 ~@4 a3@4 ~@4 b3@5 ~@3, d#4@5 ~@11 d#4@12 ~@4", Z: "[g#3,g#4]@8 ~@8 g#3@9 ~@7",
  AA: "a3@5 ~@3 a3@2 ~@22", AB: "~@16 c#5 ~@15", AC: "~@6 f#2 ~@9", AD: "e3@11 ~@21",
  AE: "~@4 c#4@3 ~ g#3@4 ~@4, g#3@14 ~@2 e4@5 ~@11", AF: "~@6 f#3@5 ~@17 f#3@3 ~", AG: "~@6 c#3 ~@9",
  AH: "g#2@9 ~@3 g#2@4 ~@16, f#4@3 ~@13", AI: "~@24 c4@3 ~@5", AJ: "~@12 b3@3 ~@17", AK: "~@8 b3@3 ~@5",
  AL: "[~@2 b3 ~, ~@3 e3@9 ~@4]/2", AM: "[~@2 c4@9 a3@9 [a3,c4,f#4]@9 [a3,c4]@9 ~@9 g#3@9 ~@8]/2",
  AN: "~@10 [b3,e4]@7 ~@15", AO: "~@20 f#3@3 ~@9", AP: "~ e3 ~ e3 ~@2 g#2@2", AQ: "[a3,c#4,e4] a3 ~@2", AR: "~@2 c4 ~",
  AS: "~@4 b3@3 ~@5 b3@3 ~@9 c#3@4 ~@4", AT: "~@12 [c#3,b3]@2 g#3 ~", AU: "[c#4,g#4]@3 ~@13",
  AV: "[~@15 [a3,b3]@21 ~@4 [e2,e3]@16 ~ [f#2,e3]@18 f#3@18 ~@3]/3", // Asus2 E F#7
})).s("gm_piano").gain(0.15)

// chords · acoustic guitar steel · "Steel Guitar"
const acoustic_guitar_steel = note(`<
  ~@22 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR ~@9 AS
  AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH ~@6
>`.pickRestart({
  A: "[g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~ [a3,e4]@6 ~@2 a3@4 e3@3 ~, ~@24 e4@7 ~", // C#m A5
  B: "[a3,d#4]@6 ~@2 a3@4 f#3@2 ~@2 [g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~, ~@8 d#4@7 ~@17", // Adim C#m
  C: "[c#4,e4]@6 ~@2 [c#4,e4]@4 e3@4 [c#4,e4]@6 ~@2 [c#4,e4]@4 e3@3 ~", // C#m
  D: "[a#3,e4]@6 ~@2 a#3@4 e3@3 ~ [a3,d#4]@6 ~@2 [a3,d#4]@4 f#3@3 ~, ~ e4 ~@2", // A#dim Adim
  E: "[g#3,e4]@7 ~ [g#3,e4]@4 e3@3 ~ [a3,e4]@5 ~@3 [a3,e4]@4 e3@3 ~", // C#m A5
  F: "g#3@6 ~@2 [c#4,d#4]@4 g#3@2 ~@2 [g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~, ~@8 g#3 ~@23", // C#sus2 C#m
  G: "[e3,a3,c#4]@5 ~@3 [a3,c#4]@4 e3@4 [a3,c#4]@6 ~@2 [a3,c#4]@4 e3@4", // A
  H: "[a3,c4]@3 ~ [a3,c4]@2 e3@2 [a3,c4]@3 ~ [a3,c4]@2 e3@2", // Am
  I: "[g#3,b3]@6 ~@2 [g#3,b3]@4 e3@3 ~ [f#3,b3,d4]@6 ~@2 [f#3,b3]@4 d3@2 ~@2, ~@3 d4", // G#m Bm B5
  J: "[f3,g#3,c#4]@6 ~@2 f3@7 ~ f#3@6 ~@2 g#3@8", K: "a3@7 ~ b3@7 ~ c#4@4 ~@12",
  L: "[a3,c#4,e4]@6 ~@2 d#4@4 a3@3 ~ [a3,d#4]@6 ~@2 d#4@4 a3@2 ~@2, ~@8 a3@3 ~@13 a3@2 ~@6", // A Adim
  M: "[g#3,e4]@6 ~@2 [g#3,e4]@4 g#3@2 ~@2 [a#3,e4]@6 ~@2 [a#3,e4]@4 g3@3 ~", // C#m A#dim
  N: "[a3,c#4]@5 ~@3 [a3,c#4]@4 e3@4 [d#3,b3]@6 ~@2 b3@4 f#3@2 ~@2, ~@12 d#3 ~@3", // A G#m
  O: "[g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~ [a#3,e4]@6 ~@2 [a#3,e4]@4 g3@3 ~", // C#m A#dim
  P: "[a3,c#4]@6 ~@2 [a3,c#4]@4 e3@3 ~ [d#3,b3]@6 ~@2 b3@4 d#3@4, ~@12 d#3 ~@3", // A G#m
  Q: "[g#3,b3]@5 ~@3 [g#3,b3]@4 e3@4 [g#3,b3]@6 ~@2 [g#3,b3]@4 e3@3 ~", // G#m
  R: "[f#3,d4]@3 ~ d4@2 f#3 ~ [g#3,e4]@3 ~ [g#3,e4] ~ e3@2, b3 ~@7 f#3@2 ~@22", // D C#m
  S: "[a3,c#4]@5 ~@3 [a3,c#4]@4 e3@3 ~ [a3,c#4]@6 ~@2 [a3,c#4]@4 e3@4", // A
  T: "[g#3,c#4]@5 ~@3 [g#3,c#4]@4 f3@4 [g#3,c#4]@5 ~@3 [g#3,c#4]@4 f3@3 ~", // C#5
  U: "[a3,c#4]@5 ~@3 [a3,c#4]@4 e3@4 [a3,c#4]@6 ~@2 [a3,c#4]@4 e3@2 ~@2", // A
  V: "[a3,d#4]@7 ~ [a3,d#4]@4 f#3@3 ~ [b3,d#4]@6 ~@2 [b3,d#4]@4 g3@4", // Adim B
  W: "[g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~ [g#3,e4]@5 ~@3 [g#3,e4]@4 e3@2 ~@2", // C#m
  X: "[a3,d#4]@6 ~@2 [a3,d#4]@4 f#3@4 [a3,d#4]@5 ~@3 [a3,d#4]@4 f#3@3 ~", // Adim
  Y: "[g#3,e4]@3 ~ [g#3,e4]@2 e3@2 [c4,e4]@3 ~ [c4,e4]@2 e3@2", // C#m C
  Z: "[a3,c#4]@5 ~@3 [a3,c#4]@4 e3@4 [a3,c4]@5 ~@3 [a3,c4]@4 e3@3 ~", // A Am
  AA: "[g#3,e4]@5 ~@3 [g#3,e4]@5 ~@3 [g#3,e4]@4 ~@4 [g#3,e4]@5 ~@3", // C#m
  AB: "[a3,e4]@5 ~@3 [a3,e4]@5 ~@3 [a3,e4]@5 ~@3 [a3,e4]@5 ~@3", // A5
  AC: "[a3,e4]@6 ~@2 [a3,e4]@5 ~@3 [e3,a3,c#4]@5 ~@3 [a3,c#4]@4 e3@3 ~", // A5 A
  AD: "[f#3,b3]@4 ~@4 [d#3,b3]@5 ~@3 [e3,b3]@6 ~@2 [f#3,b3]@5 ~@3", // B5 G#m E5 B5
  AE: "[g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~ [a3,e4]@5 ~@3 [a3,e4]@4 e3@3 ~", // C#m A5
  AF: "[a3,d#4]@5 ~@3 [a3,d#4]@4 f#3@2 ~@2 [g#3,e4]@5 ~@3 [g#3,e4]@4 e3@3 ~", // Adim C#m
  AG: "[g#3,e4]@5 ~@3 [g#3,e4]@4 e3@3 ~ [g#3,e4]@5 ~@3 [g#3,e4]@4 e3@2 ~@2", // C#m
  AH: "[a#3,c#4]@5 ~@3 [a#3,c#4]@4 e3@3 ~ [a3,d#4]@5 ~@3 [a3,d#4]@4 f#3@2 ~@2, e3 ~@31", // A#m Adim
  AI: "[g#3,e4]@5 ~@3 [g#3,e4]@4 e3@3 ~ [a3,e4]@5 ~@3 [a3,e4]@4 e3@2 ~@2", // C#m A5
  AJ: "g#3@5 ~@3 [c4,d#4]@4 g#3@2 ~@2 [g#3,e4]@5 ~@3 [g#3,e4]@4 e3@3 ~", // Cm C#m
  AK: "[c#4,e4]@5 ~@3 [c#4,e4]@4 e3@4 [c#4,e4]@5 ~@3 [c#4,e4]@4 e3@4", // C#m
  AL: "[c4,e4]@6 ~@2 [c4,e4]@4 e3@4 [c4,e4]@5 ~@3 [c4,e4]@4 e3@3 ~", // C
  AM: "[g#3,e4]@5 ~@3 [g#3,e4]@4 e3@3 ~ [f#3,d4]@6 ~@2 [f#3,d4]@4 d3@2 ~@2", // C#m D
  AN: "[g#3,c#4]@5 ~@3 f3@8 f#3@6 ~@2 g#3@7 ~", AO: "a3@6 ~@2 b3@7 ~ c#4@4 ~@12",
  AP: "[e3,a3,c#4]@6 ~@2 [a3,b3]@6 ~@2 [a3,b3]@5 ~@3 [a3,b3]@5 ~@3", // A Asus2
  AQ: "[g#3,e4]@6 ~@2 [g#3,e4]@6 ~@2 [c4,e4]@6 ~@2 [c4,e4]@4 e3@3 ~", // C#m C
  AR: "[g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~@2 [c4,e4]@6 ~@2 [c4,e4]@6 ~", AS: "~@23 [g#3,e4]@5 ~@4",
  AT: "[g#3,e4]@2 e3@2 [a3,e4]@3 ~ [a3,e4]@2 e3@2 [a3,d#4]@3 ~", // C#m A5 Adim
  AU: "[a3,d#4]@4 f#3@3 ~ [g#3,e4]@6 ~@2 [g#3,e4]@4 e3@3 ~ [g#3,e4]@6 ~@2", // Adim C#m
  AV: "[g#3,e4]@4 e3@4 [g#3,e4]@5 ~@3 [g#3,e4]@4 e3@4 [c#4,e4]@6 ~@2", // C#m
  AW: "c#4@4 e3@4 [b3,d#4]@5 ~@3 [b3,d#4]@4 f#3@3 ~ [g#3,e4]@5 ~@3, e4@7 ~@25", // B C#m
  AX: "[g#3,e4]@4 e3@4 [a3,e4]@6 ~@2 a3@4 e3@3 ~ [c4,d#4]@5 ~@3, ~@16 e4@7 ~@9", // C#m A5 Cm
  AY: "[c4,d#4]@4 f#3@3 ~ [g#3,e4]@6 ~@2 [g#3,e4]@4 e3@4 [c#4,e4]@5 ~@3", // Cm C#m
  AZ: "[c#4,e4]@2 e3@2 [c#4,e4]@3 ~ [c#4,e4]@2 e3@2 [c4,e4]@3 ~", // C#m C
  BA: "[c4,e4]@4 e3@3 ~ [c4,e4]@6 ~@2 [c4,e4]@4 e3@4 [g#3,e4]@6 ~@2", // C C#m
  BB: "[g#3,e4]@2 e3@2 [f#3,d4]@3 ~ [f#3,d4]@2 [d3,b3] ~ [f3,c#4]@3 ~, ~@12 g#3 ~@3", BC: "f3@7 ~ f#3@7 ~ g#3@8 a3@8",
  BD: "b3@4 c#4@2 ~@6 [e3,a3,c#4]@3 ~", BE: "[f#3,a3,b3]@5 ~@3 [f#3,b3]@5 ~@3 [f#3,a3,b3]@4 ~@4 [g#3,e4]@6 ~@2",
  BF: "[g#3,e4]@6 ~@2 [f#3,d4]@5 ~@3 [f#3,d4]@6 ~@2 [f3,c#4]@7 ~", BG: "f3@4 f#3@3 ~ g#3@4 a3@4", BH: "b3@8 c#4@3 ~@21",
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.7)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@22 A@2 B C D E F G H I J ~ K L M N O P Q R S T@3 U@2 V W X Y Z@2 AA AB AC@2 AD AE AF AG AH ~ AI@2 AJ@7 ~@2 AK@7 AL
  AM@2 AN AO AP AQ AR@3 AS@4 ~
>`.pickRestart({
  A: "[b5@53 ~@3 b5@2 g#5@2 f#5 ~ e5@2]/2", B: "d#5@9 ~@7 e4@16", C: "c#4@16 d#4@13 ~@3, f#4@7 ~",
  D: "[e4,g#4]@15 ~ [e4,a4]@14 ~@2", E: "c#4@8 c4@7 ~ e4@11 ~@5, g#4@7 ~", F: "g#5@2 f#5 ~ g#5@2 c#5@10",
  G: "g#5@4 f#5@3 ~ g#5@4 c5@20", H: "b4 d5, ~@16 d4@13 ~@3", I: "c#5 f4 f#4 g#4, c#4@5 ~@27",
  J: "[f#4,a4]@4 [g#4,b4]@4 [a4,c#5]@3 ~@5", K: "g#4 d#5, b4", L: "c#5 b4, a4", M: "g#4 g4, e4", N: "f#4",
  O: "b3@27 ~@5", P: "d4@3 ~ f#4@4 c#5@4 b4@7 ~ g#4@4 f#4@4 e4@4", Q: "a4@16 a3@7 ~ e4@8, c#4", R: "[b3,f4]",
  S: "f#4@24 e4@7 ~, a3", T: "[d#4@2 b3 f#4 g4 c#5 g#4 ~ g#4@8 f#4@4 g4@4, ~@7 b4@17]/3",
  U: "[b3@13 ~@3 c4@16 c#4@16 [c4,f#4]@12 ~@4, g#4@23 ~@9]/2", V: "e5@5 ~@3 e5@4 ~@4 d#5@2 e5@3 ~@3 e5@5 ~@3",
  W: "e5@5 ~@3 e5@5 ~@3 d#5 ~ e5@4 ~@2 e5@6 ~@2", X: "a4", Y: "b4@31 ~", Z: "[b5@55 ~ b5@2 g#5@2 f#5@2 e5@2]/2",
  AA: "d#5@7 ~@9 [b3,e4]@16", AB: "c#4 d#4, f#4",
  AC: "[[e4,g#4]@16 a4@15 ~@17 e4@12 ~@4, ~ f#4@2 ~, ~@32 g#4@29 ~@3]/2", AD: "g#5@3 ~ f#5@3 ~ g#5@4 c#5@16 ~@4",
  AE: "g#5@3 ~ f#5@3 ~ g#5@4 c5@18 ~@2", AF: "b4@15 ~ d5@16", AG: "c#5@3 ~ f4@4 f#4@4 g#4@4", AH: "a4@4 b4@4 c#5@3 ~@5",
// … 178 more lines

More by ABBA