Strudelify
Girls Just Wanna Have Fun cover art

Girls Just Wanna Have Fun

Cyndi Lauper

KeyF♯ majorTempo120 bpm
0:00/0:00
// Girls Just Wanna Have Fun — Cyndi Lauper
// 120 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: coarse tuning (RPN 2) transposes the affected channels
// note: Full arrangement: all 113 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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note(`<
  ~ A B C D A B C D E B C F G H I J I A B C D E B C K G L M H N O P Q R E S N T I A B C D U V C W U V C W A V X W G L I
  H I O Y Z AA A S I AB I A B C D AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ AS AT AU AV AW
  AX AY AZ BA BB ~@5
>`.pickRestart({
  A: "f#1@3 ~ f#2 ~ f#1 ~ f#1@3 ~ f#2@3 ~", B: "f#1@3 ~ f#2 ~ f#1 ~ a#1@3 ~ c#2@3 ~",
  C: "d#2@3 ~ d#3 ~ d#2 ~ d#2@3 ~ d#3@3 ~", D: "d#2@3 ~ d#3 ~ d#2@2 b1@3 ~ c#2@3 ~",
  E: "f#1@3 ~ f#2@2 f#1 ~ f#1@3 ~ f#2@3 ~", F: "d#2@3 ~ d#3 ~ d#2 ~ d#2@3 ~ c#2@3 ~", G: "b1@3 ~ b2@3 ~ b1@3 ~ b2@3 ~",
  H: "b1@3 ~ b2 ~ b1 ~ b1@3 ~ c#2@3 ~", I: "d#2@3 ~ d#3 ~ d#2 ~ c#2@3 ~ c#3@3 ~", J: "b1@3 ~ b2 ~ b1@2 b1@3 ~ c#2@3 ~",
  K: "d#2@3 ~ d#3@2 d#2 ~ d#2@3 ~ c#2@3 ~", L: "b1@3 ~ b2@2 b1 ~ b1@3 ~ c#2@3 ~",
  M: "d#2@3 ~ d#3@2 d#2 ~ c#2@3 ~ c#3@3 ~", N: "d#2@3 ~ d#3 ~ d#2@2 c#2@3 ~ c#3@3 ~",
  O: "[f#1,f#2]@3 ~ [c#2,f#2] ~ f#1@2 [f#1,f#2]@3 ~ [c#2,f#2]@3 ~, ~@6 d#2 ~@9", // F# F#5 F# F#5
  P: "[f#1,f#2]@3 ~ [c#2,f#2] ~ [f#1,d#2] ~ [a#1,f#2]@3 ~ c#2@2 d2 ~", // F# F#5 D#m
  Q: "d#2@3 ~ [a#1,d#3] ~ c#2@2 d#2@3 ~ [a#1,d#3]@3 ~, ~@6 d#2 ~@9", // D#5
  R: "d#2@3 ~ [a#1,d#3] ~ d#2@2 d#2@3 ~ [a#1,c#2]@2 c#2 ~, ~@6 c#2 ~@9", // D#5 A#m
  S: "f#1@3 ~ f#2 ~ f#1 ~ [f#1,a#1]@3 ~ [c#2,f#2]@3 ~", T: "b1@3 ~ b2 ~ b1 ~ [b1,g#2]@3 ~ [c#2,f#2]@3 ~",
  U: "f#1@3 ~ f#2 ~ f#1@2 f#1@3 ~ f#2@3 ~", V: "f#1@3 ~ f#2@2 f#1 ~ a#1@3 ~ c#2@3 ~",
  W: "d#2@3 ~ d#3@2 d#2@2 d#2@3 ~ c#2@3 ~", X: "d#2@3 ~ d#3@2 d#2 ~ d#2@3 ~ d#3@3 ~",
  Y: "[f#1,f#2]@3 ~ [c#2,f#2] ~ f#1@2 [a#1,f#2]@3 ~@3 d2 ~, ~@6 d#2 ~@5 c#2@4", // F# F#5 D#m
  Z: "d#2@3 ~ [a#1,d#3] ~ d#2@2 d#2@3 ~ [a#1,d#3]@3 ~, ~@6 c#2 ~@9", // D#5
  AA: "d#2@3 ~ [a#1,d#3] ~ [c#2,d#2] ~ d#2@3 ~ c#2@2 c#2 ~, ~@12 a#1 ~@3", // D#5 C#sus2
  AB: "b1@3 ~ b2@2 b1 ~ [b1,g#2]@3 ~ [c#2,f#2]@3 ~", // E F#5
  AC: "f#1@2 c#4!2 f#2@2 [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, c#4 ~@3 c#4 ~@3 c#4 ~@3 c#4 ~@3", // F#5
  AD: "d#2@2 a#3!2 [d#3,a#3] ~ a#3!2 b1@2 f#3!2 c#2@2 g#3!2, a#3 ~@5 d#2@2 f#3 ~@3 g#3 ~@3", // D#5
  AE: "f#1@2 c#4!2 [f#2,c#4] ~ [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, c#4 ~@7 c#4 ~@3 c#4 ~@3", // F#5
  AF: "d#2@2 a#3!2 [d#3,a#3] ~ [d#2,a#3] a#3 b1@2 f#3!2 c#2@2 g#3!2, a#3 ~@7 f#3 ~@3 g#3 ~@3", // D#5
  AG: "f#1@2 c#4!2 f#2 ~ [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, c#4 ~@7 c#4 ~@3 c#4 ~@3", // F#5
  AH: "d#2@2 a#3 ~ [d#3,a#3] ~ [d#2,a#3] ~ b1@2 f#3!2 c#2@3 g#3, a#3 ~@7 f#3 ~@3 g#3 ~@3", // D#5
  AI: "f#1@2 c#4!2 [f#2,c#4] ~ f#1 ~ f#1@2 c#4!2 f#2@3 c#4, c#4 ~@7 c#4 ~@3 c#4 ~@3", // F#5
  AJ: "d#2@2 a#3!2 [d#3,a#3] ~ [d#2,a#3] ~ b1@2 f#3 ~ c#2@2 g#3 ~, ~@12 g#3 ~@3", // D#5
  AK: "f#1@3 c#4 f#2@2 [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, c#4 ~@11 c#4 ~@3", // F#5
  AL: "d#2@2 a#3!2 [d#3,a#3] ~ d#2 a#3 b1@3 f#3 c#2@3 ~, a#3 ~@15", // D#5
  AM: "f#1@2 c#4!2 f#2@2 [f#1,c#4] c#4 f#1@3 ~ f#2@3 c#4, c#4 ~@3 c#4 ~@11", // F#5
  AN: "d#2@2 a#3!2 [d#3,a#3] ~ [d#2,a#3] a#3 b1@2 f#3 ~ c#2@3 ~, a#3 ~@15", // D#5
  AO: "f#1@2 c#4 ~ c#4 ~ [f#1,c#4] ~ f#1@2 c#4 ~ f#2@3 ~, c#4 ~@7 c#4 ~@7", // F#5
  AP: "d#2@2 a#3!2 d#3 ~ a#3 ~ b1@3 f#3 c#2@3 ~, ~@8 f#3 ~@7", AQ: "f#1@2 c#4 ~ [f#2,c#4] ~ f#1 ~ f#1@3 ~ f#2@2 c#4 ~",
  AR: "a#3 ~ a#3 ~ a#3 ~ [d#2,a#3] a#3 b1@2 f#3!2 c#2@3 g#3, ~@12 g#3 ~@3", // D#5
  AS: "f#1@2 c#4!2 f#2 ~ [f#1,c#4] ~ f#1@3 ~ f#2@3 ~, ~@12 c#4 ~@3", AT: "~@4 a#3 ~ d#2 ~ b1@3 ~ c#2@3 ~, ~@8 f#3 ~@7",
  AU: "f#1@3 ~ f#2 ~ f#1 c#4 f#1@3 ~ f#2@2 c#4!2", AV: "d#2@3 ~@3 d#2 ~ b1@3 ~ c#2@3 ~, ~@12 g#3 ~@3",
  AW: "f#1@3 ~@3 f#1 ~ f#1@3 ~ f#2@3 c#4, c#4 ~@11 c#4 ~@3", AX: "d#2@3 ~ a#3 ~@2 a#3 ~@4 g#3 ~@3",
  AY: "f#1@3 ~ f#2 ~ f#1 ~ f#1@3 c#4 f#2@3 ~", AZ: "~@6 d#2 a#3 b1@3 ~@5",
  BA: "f#1@2 c#4!2 f#2 ~ [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, ~@8 c#4 ~@3 c#4 ~@3", BB: "d#2@3 ~@13, a#3 ~@15",
})).s("gm_acoustic_bass").gain(0.4)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@78 A B C D E F G H I J K L M N O P Q R S T M N O P Q R S T U V W X W Y Z>".pickRestart({
  A: "~@4 c#4 ~@11", B: "~@3 a#3 ~@3 a#3 ~@6 g#3 ~", C: "~@6 c#4!2 ~@6 c#4 ~", D: "a#3 ~@6 a#3 f#3 ~@2 f#3 ~@3 g#3",
  E: "~@2 c#4 ~ c#4 ~@3 c#4 ~@7", F: "~@6 a#3 ~ f#3 ~ f#3 ~ g#3 ~ g#3!2", G: "~@8 c#4 ~ c#4!3 ~ c#4 ~",
  H: "~@8 f#3 ~@2 f#3 g#3 ~ g#3!2", I: "~@3 c#4 f#2@2 ~ c#4 ~@3 c#4!2 ~ c#4!2",
  J: "a#3 ~@3 a#3 ~ d#2 a#3 ~@2 f#3 ~ g#3 ~ g#3!2", K: "c#4 ~@2 c#4 ~@2 c#4!3 ~ c#4!3 ~@2 c#4",
  L: "d#2@3 a#3 d#3 ~@3 f#3 ~@5 g#3 ~", M: "c#4 ~@3 c#4 ~@2 c#4!2 ~ c#4!2 ~@2 c#4!2",
  N: "d#2@2 a#3!2 d#3 ~ a#3!2 ~@2 f#3!2 g#3 ~ g#3!2, a#3 ~@15", O: "c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4!3 ~@3",
  P: "a#3 ~ a#3!2 d#3@2 a#3!2 f#3 ~ f#3!2 ~@2 g#3!2, ~@4 a#3 ~@11", Q: "~@2 c#4!2 [f#2,c#4] ~ c#4!3 ~ c#4!2 ~@2 c#4 ~",
  R: "a#3 ~ a#3!2 d#3 ~ [d#2,a#3] ~ b1@2 f#3!2 c#2@2 g#3!2, ~@8 f#3 ~@7", S: "c#4 ~ c#4!3 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4!2",
  T: "d#2@2 a#3!2 [d#3,a#3] ~ a#3 ~ f#3 ~ f#3!2 c#2@2 g#3!2, a#3 ~@11 g#3 ~@3", U: "c#4 ~@3 c#4 ~@11",
  V: "~@2 a#3!2 [d#3,a#3] ~ [d#2,a#3] a#3 b1@2 f#3!2 c#2@2 g#3!2, ~@8 f#3 ~@3 g#3 ~@3", // D#5
  W: "f#1@2 c#4!2 [f#2,c#4] ~ [f#1,c#4] c#4 f#1@2 c#4!2 f#2@2 c#4!2, c#4 ~@7 c#4 ~@3 c#4 ~@3", // F#5
  X: "d#2@2 a#3!2 d#3@2 [d#2,a#3] a#3 b1@2 f#3!2 c#2@2 g#3!2, a#3 ~@3 a#3 ~@3 f#3 ~@3 g#3 ~@3", // D#5
  Y: "d#2@2 a#3!2 [d#3,a#3] ~ [d#2,a#3] a#3 b1@2 f#3!2 c#2@2 g#3!2, a#3 ~@7 f#3 ~@3 g#3 ~@3", // D#5
  Z: "f#1@2 c#4!2 [f#2,c#4] ~ [f#1,c#4] c#4 f#1@2 c#4!2 f#2@3 ~, c#4 ~@7 c#4 ~@3 c#4 ~@3", // F#5
})).s("gm_acoustic_bass").gain(0.16)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~@9 A B C D E@2 F G H I ~@3 J K L M N O P Q R S T U V W X@2 Y Z AA AB AC AD ~@8 AE AF@2 AG AH AI P AJ R AK@2 AL AM
  AN@2 AO AP AQ@2 AR AC AD AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG@2 BH@2 BI BJ BK BL BM BN BO@2 BP BQ BR BS BT BU
  BV BU BW ~@4
>`.pickRestart({
  A: "~@6 a#4!2 a#4@2 ~@4 a#4!2", B: "a#4@2 g#4@2 ~@2 f#4@3 ~ g#4@2 a#4@2 a#4@2",
  C: "~@2 g#4@2 ~@2 g#4@3 ~ g#4@2 ~@2 a#4@2", D: "~@2 g#4@2 ~@2 f#4@5 ~@5",
  E: "[~ c#5!4 a#4!2 a#4@2 b4 c#5 c#5@2 ~@2 a#4]/2", F: "a#4@2 ~ g#4!2 f#4 f4 f#4", G: "~ b3@3 ~@2 a#4 c#5",
  H: "a#4@5 ~ g#4@2 g#4@2 f#4@2 f4@4", I: "f#4 ~@7", J: "~@6 a#4!2 a#4@4 ~@2 a#4!2",
  K: "a#4@2 a#4@3 ~ d#5@3 ~ a#4@3 ~ a#4@2", L: "~@4 a#4@2 g#4@3 ~@7", M: "a#4 ~ a#4 g#4@2 f#4 ~@2",
  N: "~@2 c#5@2 c#5@2 c#5@2 c#5@2 a#4@3 a#4@2 a#4", O: "a#4@3 b4@2 ~ c#5@2 ~@4 g#4@2 a#4@2",
  P: "a#4@6 g#4@2 g#4@2 f#4@2 f4@3 ~", Q: "f#4 b3@4 ~ a#4 c#5", R: "a#4@5 ~ g#4@2 g#4@2 f#4@2 f4@2 ~@2",
  S: "~@2 c#5@2 c#5@2 c#5@2 c#5@2 a#4@3 ~@3", T: "a#4@4 g#4@2 f#4@3 ~ g#4@2 a#4@2 ~@2",
  U: "~@4 d#5@3 ~ c#5@2 ~@2 a#4@3 ~, ~@11 b4@2 ~@3", V: "a#4@3 ~ f#4@2 ~@2 a#4@4 ~@4",
  W: "[a#4,d#5]@2 ~@2 [a#4,c#5]@2 [a#4,c#5]@3 ~ [g#4,b4]@2 ~@2 [g#4,b4]@2", // D#5 A#m G#m
  X: "[~@2 [f#4,a#4]@3 ~ [f#4,a#4]@3 ~ f4@2 a#4@2 ~@2 a#4@6 g#4@2 g#4@2 f#4@3 ~@3, ~@14 f#4@5 ~@13]/2", Y: "f#4@2 b3 ~",
  Z: "a#4@2 ~ a#4 g#4 f#4 ~ f4", AA: "[f#3,f#4]@3 ~@3 c#4@2 [f#3,f#4]@2 [f#3,f#4]@2 ~@4",
  AB: "~@8 [f#3,f#4]@3 ~ [f3,f4]@3 ~", AC: "[d#3,d#4]@3 ~@5 [d#3,d#4]@3 ~@5", AD: "~@4 [d#3,d#4]!2 [f3,f4] ~",
  AE: "~@2 a#4@2 a#4@2 a#4@2 a#4@5 ~@3", AF: "[a#4 ~@2 f#4@2 ~ a#4 ~ d#5 a#4 g#4 [f#4,a#4]@2 ~@2 f#4, ~@7 a#4@2 ~@7]/2",
  AG: "~@2 a#4 a#4@2 ~ f#4 ~", AH: "~@2 c#5@2 c#5@2 c#5!2 c#5@3 ~@3 g#4@2", AI: "a#4@2 ~@2 a#4@2 ~ a#4@4 b4@2 ~ a#4@2",
  AJ: "f#4@2 b3@5 ~@5 a#4@2 c#5@2",
  AK: "[~@2 c#5@2 c#5@2 c#5@2 c#5@2 a#4@3 ~@2 c#5@2 ~ g#4@3 ~ f#4@4 g#4@2 a#4@2 ~@2, ~@7 a#4 ~@8]/2",
  AL: "~@2 f#4@2 d#5@3 ~ c#5@3 ~ a#4@3 ~", AM: "a#4@3 ~ f#4@3 ~ a#4@3 ~@5, ~@3 g#4@2 ~@11",
  AN: "[[a#4,d#5]@4 [a#4,c#5]@2 [a#4,c#5]@3 ~ [g#4,b4]@3 ~ [g#4,b4]@4 [f#4,a#4]@3 ~ [f#4,a#4]@4 ~@4 a#4@2, ~@13 f4@3]/2", // D#5 A#m G#m F#
  AO: "f#4@5 ~ g#4@2 g#4@2 f#4@2 f4@3 ~, a#4 ~@7", AP: "f#4@2 b3@5 ~@7 a#4@2",
  AQ: "[a#4@5 ~ g#4@2 g#4@2 f#4@2 ~@4 [f#3,f#4]@2 f#4@2 ~@2 c#4@2 [f#3,f#4]@2 [f#3,f#4]@2 ~@4, ~@6 f4@3 ~@7]/2", // F#
  AR: "~@4 [f#3,f#4]!2 [f3,f4]@2", AS: "~@2 f#4@2 [c#4,c#5]@2 c#5!2 [c#4,c#5]@2 f#4@2 ~@4",
  AT: "~ f#4@2 c#5 c#5@2 [f#4,c#5]@2 [f#4,c#5]@2 [f#4,g#4]@2 [a#3,f#4,a#4]@2 g#4@2, [c#4,c#5] ~@7", // F#5 F#sus2 D#m C#
  AU: "a#4@2 f#4@2 [c#4,c#5]@2 c#5!2 [c#4,c#5]@2 f#4@2 ~@2 f#4@2, a#3@2 ~ f#4@2 ~@3", // C#
  AV: "[a#3,c#4,a#4,c#5]@2 ~ c#4 [a#3,c#4,a#4,c#5]@2 ~@2 [g#3,f#4,g#4,c#5]@2 [f#4,g#4]@2 [a#3,f#4,a#4]@2 ~@2, ~ f#4 ~ [f#4,c#5] ~@4, ~@7 [a#3,a#4]@2 ~@7", // A#m C#sus4 F#sus2 D#m F#5 A#
  AW: "[g#3,g#4,a#4,b4]@2 a#4@3 ~ a#4@4 ~@2 f#4@4, ~ f#4@4 ~@3", AX: "a#4@2 g#4@3 ~ f#4@2 f#4@2 g#4@2 f#4@2 ~@2",
  AY: "~@2 f#4@2 [c#4,c#5]@2 ~ c#5 c#5@2 f#4@2 ~@2 f#4@2", // C#
  AZ: "[c#4,c#5]@2 ~ [c#4,c#5] [c#4,c#5]@2 f#4@2 f#4@2 g#4@2 [a#3,a#4]@2 ~@2", // C# A#
  BA: "~@2 f#4@2 [c#4,c#5]@2 ~ [c#4,c#5] c#5@2 f#4@2 ~@2 f#4@2", // C#
  BB: "[c#4,c#5]@2 ~ c#5 [c#4,c#5]@2 f#4@2 f#4@2 g#4@2 [a#3,a#4]@3 ~", // C# A#
  BC: "a#4@3 ~@5 b4@2 a#4@2 g#4@2 f#4@2, ~@2 f#4@3 f#4@2 ~", BD: "~@4 f#4@2 ~@2 f#4 ~ g#4@2 a#4@2 ~@2, ~@9 f#4@2 ~@5",
  BE: "~ b4@2 ~ f#4@2 ~@2", BF: "[a#3,a#4]@3 ~ [f#4,a#4]@3 ~ [f#4,g#4]@2 ~@2 [f3,f4]@4, ~@6 f#4 ~",
  BG: "[g#4@2 ~@2 b4@2 b4@4 a#4@3 ~ a#4@4 g#4@4 f#4@3 ~@5 a#4@2, c#5 ~@7, ~ f#4@5 ~@10]/2",
  BH: "[c#5@3 ~ b4@2 b4@4 a#4@3 ~ a#4@5 ~@3 f#4@2 f#4@2 g#4@2 f#4@3 ~]/2", BI: "a#4 g#4@2 ~, f#4@3 ~@13",
  BJ: "a#4@3 ~ a#4@2 a#4@2 g#4@2 ~@2 f4@4", BK: "f#4@2 c#5 ~ c#5 f#4 ~ f#4",
  BL: "[c#4,c#5]@2 ~ c#4 c#5@2 [f#3,f#4]@2 f#4@2 g#4@2 a#4@2 ~@2", BM: "~@2 f#4@2 [c#4,c#5]@2 ~ c#5 c#5@2 f#4@2 ~@4",
  BN: "c#5 ~ c#5 ~ f#4 ~ a#4 ~", BO: "[a#4@3 ~@3 a#4@4 ~@6 f#4@3 ~ f#4@2 f#4@2 g#4@2 f#4@2 f4@3 ~, ~@7 a#4@2 ~@7]/2",
  BP: "[f#4,g#4,c#5]@3 ~ c#5@2 ~@2 c#5@2 f#4@3 ~@3", BQ: "c#5 ~ c#5 ~ f#4 ~ a#4 f#4",
  BR: "f#4@2 f#4 ~ c#5@2 c#5 ~ c#5@2 f#4@2 ~@4", BS: "c#5@2 ~@6 f#4@2 ~@2 a#4@3 ~", BT: "~ b4@2 ~ a#4@2 ~@2",
  BU: "b4@2 ~@4 f#4@3 ~@7", BV: "a#4@3 ~@3 a#4@4 ~@6", BW: "~ c#5 ~ c#5 ~@4",
})).s("gm_synth_strings_1").gain(0.48).pan(0.3)

// other · synth strings 1 · soft notes
const synth_strings_1_soft = note(`<
  ~@10 A ~@13 B C ~ D ~@3 E ~@2 F ~ G ~@3 H ~@11 I J@3 K L ~@4 M N O ~ P ~@3 H ~@3 Q R S T U ~ V W X Y Z@2 AA AB AC AD ~
  AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY ~
>`.pickRestart({
  A: "~@2 g#4 ~@5", B: "~ g#4 ~@3 g#4 f#4 g#4", C: "~ g#4 ~@6", D: "~@2 a#4 ~", E: "~@7 a#4",
  F: "~@3 g#4@2 ~@2 g#4@2 ~@7", G: "~@5 g#4 ~@2", H: "~@3 c#3 ~@4", I: "~@14 a#4!2", J: "~ g#4 ~@3 g#4 ~@2",
  K: "~@11 a#4@3 ~@2", L: "~@6 c#5 ~", M: "a#4 ~@7", N: "~@11 b4@2 ~@3", O: "~@7 g#4@2 ~@7", P: "~@5 g#4@2 ~",
  Q: "~@2 f#3@2 ~@3 c#4 ~@2 f#3@2 ~@2 [f#3,f#4]@2", R: "~@3 c#4 c#4@2 f#3@2 f#3@2 g#3@2 ~@4",
  S: "~@2 f#3@2 ~@3 c#4 ~@2 f#3@2 ~@2 f#3@2, ~@3 f#3@2 ~@3", T: "~@3 c#5 ~@2 f#3@2 f#3@2 f#3@2 ~@2 g#4@2, ~@10 g#3 ~@5",
  U: "~ f#3@4 g#4 ~@2", V: "~@2 f#3@2 ~@3 c#4 c#4@2 f#3@2 f#3@2 f#3@2", W: "~@3 f#3!2 g#3 ~@2",
  X: "~ f#3 ~@2 c#4 f#3 ~ f#3", Y: "~@3 c#4 ~@2 f#3@2 f#3@2 g#3@2 ~@4",
  Z: "[a#3@2 [g#3,g#4]@2 f#3@6 f#3@9 ~@4 g#4@2 ~ g#3@2 a#3@4, ~@25 f#3@2 ~@5]/2", AA: "~@7 g#4@2 ~@7, ~@3 a#4 ~@4",
  AB: "~@4 a#3@3 ~ g#3@2 g#4@2 ~@4", AC: "g#3@2 f#3@11 ~@3", AD: "~@5 f#4 g#4 ~", AE: "~ g#4@2 ~@5", AF: "~@6 f#4 ~",
  AG: "~@5 f#4 ~@2", AH: "~@4 d#5@2 ~ c#5 ~@8", AI: "~@3 c#5 c#4@2 ~@4 f#3@2 g#3@2 [a#2,a#3]@2",
  AJ: "~@2 f#3@2 ~@4 c#4@2 ~ f#3@2 ~ f#4@2", AK: "c#4@2 ~ c#4 c#4@2 f#4@2 f#3@2 [g#3,g#4]@2 a#3@2 g#4@2",
  AL: "a#3@2 g#4@2 [f#3,f#4]@3 ~@3 g#4@2 f#4@2 a#3@2, f#4 ~@3", AM: "~@2 [g#3,g#4]@2 f#3@3 ~ g#3@2 f#3@2 f3@2 ~@2",
  AN: "g#3@2 f#3@4 ~ c#5 ~@6 f#4@2, ~ f#4 ~@6", AO: "c#4@2 ~ [c#4,c#5] c#4@2 [f#3,f#4]@2 f#3@2 [g#3,g#4]@2 a#3@2 ~@2",
  AP: "~@3 f#4 c#4@2 ~ [c#4,c#5] c#4@2 f#3@2 ~@2 f#4@2", // C#
  AQ: "c#4@2 ~@2 [c#4,c#5]@2 f#4 [f#3,f#4] f#3@2 ~@2 a#3@3 ~, ~@5 g#4 ~@2, ~@11 g#3@2 ~@3", AR: "~@3 a#4 ~@2 g#4 a#4",
  AS: "~@2 a#4@2 g#4@2 ~@3 g#4@2 f#4@3 ~@2", AT: "a#3@4 ~@2 g#4@3 ~@2 g#4@2 f#4@2 ~, ~@2 g#4 ~@5, ~@5 g#3@2 ~@9",
  AU: "~@2 [g#3,g#4,a#4]@2 g#4@2 ~@2 g#4@2 f#4@5 ~", // G#sus2
  AV: "f#4@2 ~@2 c#5!2 ~@2 [c#4,f#4,c#5]@2 f#4@2 f#4@2 c#5@2, ~@2 c#4 ~@5", // F#5
  AW: "c#5!2 c#5@2 [c#4,f#4,c#5]@2 [f#3,f#4]@2 g#4@2 [g#4,a#4]@2 [a#3,a#4]@2 ~@2, c#4 ~@7", // F#5 F# G#sus2 A#
  AX: "f#4@2 c#5@2 ~ c#5 c#5@2 ~ f#4@2 f#4@2 ~ c#5@2, ~@4 c#4@2 ~@7 f#4@2 ~",
  AY: "~ c#5 c#5@2 f#4@2 ~@2 f#4@2 g#4@2 a#4@3 ~",
})).s("gm_synth_strings_1").gain(0.24).pan(0.3)

// chords · piano
const piano = note(`<
  ~ A B A C A B A C D@2 E@2 F@2 G F G A B A C D@2 E@2 F@2 G F G D@2 E@2 D@2 G F G A B A C D@2 E@2 D@2 E@2 D@2 E@2 F@2 G
  F G D@2 E@2 D@2 G F G A B A C D H D H I J K L M N O P Q R S T U V W X Y Z AA ~ U V W X Y Z AA ~ AB ~@6
>`.pickRestart({
  A: "[c#5,f#5] ~ [c#5,f#5] ~@3 [c#5,f#5] ~ [c#5,f#5]@6 ~@2", // F#5
  B: "[c#5,f#5] ~ [c#5,f#5] ~@3 [c#5,f#5] ~ [c#5,f#5]@3 ~ [c#5,f#5]@3 ~", // F#5
  C: "[c#5,f#5] ~ [c#5,f#5] ~@3 [c#5,f#5] ~ [b4,d#5]@3 ~ [c#5,f5]@3 ~", // F#5 B C#
  D: "[f#4,a#4] ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!2", // F#
  E: "[d#4,f#4] ~ [d#4,f#4]!3 ~ [d#4,f#4]!3 ~ [d#4,f#4]!3 ~ [d#4,f#4]!2", // D#m
  F: "[b3,d#4] ~ [b3,d#4]!3 ~ [b3,d#4]!3 ~ [b3,d#4]!3 ~ [b3,d#4]!2", // B
  G: "[d#4,f#4] ~ [d#4,f#4]!3 ~ [d#4,f#4]!2 [c#4,f4] ~ [c#4,f4]!3 ~ [c#4,f4]!2", // D#m C#
  H: "[d#4,f#4] ~ [d#4,f#4]!3 ~ [d#4,f#4]!2 [b3,d#4] ~ [b3,d#4]!2 [c#4,f4] ~ [c#4,f4]!2", // D#m B C#
  I: "a#4 ~ a#4 f#4!2 ~ [f#4,a#4]!2 a#4 ~ [f#4,a#4]!3 ~ [f#4,a#4] ~", // F#
  J: "[d#4,f#4] ~ [d#4,f#4] f#4 ~@4 [b3,d#4] ~ d#4 b3 f4 ~ [c#4,f4] f4", // D#m B C#
  K: "[f#4,a#4] ~ f#4 [f#4,a#4]!2 ~ a#4 f#4 ~@2 f#4 a#4 ~@3 a#4", // F#
  L: "f#4 ~ [d#4,f#4] d#4 [d#4,f#4] ~@2 [d#4,f#4] [b3,d#4] ~ [b3,d#4] ~ f4 ~ f4 [c#4,f4]", // D#m B C#
  M: "f#4 ~ f#4!2 [f#4,a#4] ~ [f#4,a#4]!2 f#4 ~ f#4!2 a#4 ~ a#4!2", // F#
  N: "f#4 ~ f#4!2 ~@2 [d#4,f#4] d#4 [b3,d#4] ~@2 d#4 [c#4,f4] ~@3", // D#m B C#
  O: "[f#4,a#4] ~ [f#4,a#4]!2 f#4 ~@2 [f#4,a#4] a#4 ~ f#4 a#4 ~@2 f#4!2", // F#
  P: "~@2 [d#4,f#4]!3 ~ d#4 ~@4 b3 ~@2 c#4 [c#4,f4]", Q: "~@2 [f#4,a#4]!2 ~@3 f#4 [f#4,a#4] ~ f#4 ~ [f#4,a#4] ~ f#4 ~",
  R: "f#4 ~@2 f#4!2 ~ d#4 ~@3 d#4 ~ c#4 ~ c#4 ~", S: "a#4 ~ a#4 f#4 a#4 ~ f#4 ~ f#4 ~@2 f#4 ~@4",
  T: "~@4 [d#4,f#4] ~ d#4 f#4 b3 ~@6 f4", U: "f#4 ~@3 a#4 ~@2 f#4 ~@2 [f#4,a#4] ~ a#4 ~ f#4 ~",
  V: "~@4 f#4 ~ d#4 ~ b3 ~ b3!2 ~@2 [c#4,f4] f4", W: "~@2 a#4 f#4 ~@2 a#4 ~@3 f#4 a#4 ~@4", X: "~@6 d#4!2 ~@7 f4",
  Y: "~@8 [f#4,a#4] ~ f#4 ~@4 a#4", Z: "f#4 ~@5 d#4 ~@4 b3 ~@4", AA: "~@4 a#4 ~ [f#4,a#4] ~@8 f#4", AB: "f#4 ~@15",
})).s("gm_piano").gain(0.48).pan(0.6)

// chords · piano · soft notes
const piano_soft = note("<~@78 A B C D E F G H I J K L M N O P Q R S T M N O P Q R S T U T V T V T W>".pickRestart({
  A: "f#4 ~ f#4 a#4!2 ~@3 f#4 ~@6 [f#4,a#4]", B: "~@3 d#4 [d#4,f#4] ~ [d#4,f#4]!2 ~@2 b3 d#4 c#4 ~@2 c#4",
  C: "~@2 a#4 ~@3 f#4 a#4 [f#4,a#4] ~ a#4 f#4 [f#4,a#4] ~ [f#4,a#4] f#4", // F#
  D: "d#4 ~@2 f#4 ~@2 [d#4,f#4] ~@4 [b3,d#4] c#4 ~ c#4 ~", E: "a#4 ~ a#4!2 ~@4 a#4 ~ a#4!2 f#4 ~ f#4!2",
  F: "d#4 ~ d#4!2 [d#4,f#4] ~@2 f#4 ~@2 [b3,d#4] b3 ~@2 [c#4,f4]!2", // D#m B C#
  G: "~@4 a#4 ~ [f#4,a#4] ~ f#4 ~ a#4 f#4 [f#4,a#4] ~ a#4!2", // F#
  H: "[d#4,f#4] ~@5 f#4 [d#4,f#4] [b3,d#4] ~ [b3,d#4] d#4 [c#4,f4] ~ f4 ~", // D#m B C#
  I: "[f#4,a#4] ~@3 [f#4,a#4] ~ [f#4,a#4] a#4 ~@2 a#4 [f#4,a#4] ~@2 a#4 [f#4,a#4]", // F#
  J: "d#4 ~ [d#4,f#4] d#4!2 ~ f#4 [d#4,f#4] [b3,d#4] ~ b3 [b3,d#4] f4 ~ f4 [c#4,f4]", // D#m B C#
  K: "f#4 ~ f#4 a#4 f#4 ~ a#4 [f#4,a#4] a#4 ~ [f#4,a#4] a#4 [f#4,a#4] ~ [f#4,a#4]!2", // F#
  L: "[d#4,f#4] ~ [d#4,f#4]!2 ~@2 f#4 d#4!2 ~ [b3,d#4]!2 [c#4,f4] ~ [c#4,f4] c#4", // D#m B C#
  M: "a#4 ~ [f#4,a#4]!2 f#4 ~ [f#4,a#4] a#4 [f#4,a#4] ~@2 [f#4,a#4] f#4 ~ a#4 [f#4,a#4]", // F#
  N: "[d#4,f#4] ~ [d#4,f#4]!2 d#4 ~ f#4 [d#4,f#4] d#4 ~ d#4!2 [c#4,f4] ~@2 c#4", // D#m C#
  O: "[f#4,a#4] ~ f#4 a#4 [f#4,a#4] ~ f#4 [f#4,a#4]!2 ~ a#4 f#4 [f#4,a#4] ~ [f#4,a#4]!2", // F#
  P: "[d#4,f#4] ~ [d#4,f#4]!3 ~ f#4!2 [b3,d#4] ~ [b3,d#4]!2 [c#4,f4] ~ [c#4,f4] c#4", // D#m B C#
  Q: "[f#4,a#4] ~ [f#4,a#4]!3 ~ [f#4,a#4]!2 ~@2 a#4 [f#4,a#4]!2 ~ [f#4,a#4] f#4", // F#
  R: "d#4 ~ [d#4,f#4]!3 ~ f#4 [d#4,f#4] [b3,d#4] ~ [b3,d#4] d#4 [c#4,f4] ~ [c#4,f4]!2", // D#m B C#
  S: "[f#4,a#4] ~ [f#4,a#4]!2 f#4 ~@2 [f#4,a#4]!2 ~ [f#4,a#4]!3 ~ [f#4,a#4] a#4", // F#
  T: "[d#4,f#4] ~ [d#4,f#4]!3 ~ [d#4,f#4]!2 [b3,d#4] ~ [b3,d#4]!2 [c#4,f4] ~ [c#4,f4]!2", // D#m B C#
  U: "a#4 ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!2", // F#
  V: "[f#4,a#4] ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!2", // F#
  W: "[f#4,a#4] ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~ [f#4,a#4]!3 ~@3", // F#
})).s("gm_piano").gain(0.16).pan(0.6)
// … 156 more lines

More by Cyndi Lauper