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: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note(`<
  ~ A B C D A E F D G E C H I J K L K A M F N G E C O I P Q J R S T U V G W R X K A E C N Y B C Z Y B C Z A B AA Z I P K
  J K AB AC AD AE A W K AF K G E C AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE AX AY AZ
  BA BB BC BD BE BF BG ~@5
>`.pickRestart({
  A: "f#1@3 ~ f#2 ~ f#1 ~ f#1@3 ~ f#2@3 ~", B: "f#1@3 ~ f#2@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 ~ f#1 ~ a#1@3 ~ c#2@3 ~", F: "d#2@3 ~ d#3 ~ d#2@2 d#2@3 ~ d#3@3 ~",
  G: "f#1@3 ~ f#2@2 f#1 ~ f#1@3 ~ f#2@3 ~", H: "d#2@3 ~ d#3 ~ d#2 ~ d#2@3 ~ c#2@3 ~", I: "b1@3 ~ b2@3 ~ b1@3 ~ b2@3 ~",
  J: "b1@3 ~ b2 ~ b1 ~ b1@3 ~ c#2@3 ~", K: "d#2@3 ~ d#3 ~ d#2 ~ c#2@3 ~ c#3@3 ~", L: "b1@3 ~ b2 ~ b1@2 b1@3 ~ c#2@3 ~",
  M: "f#1@3 ~ f#2 ~ f#1@2 a#1@3 ~ c#2@3 ~", N: "d#2@3 ~ d#3@2 d#2 ~ b1@3 ~ c#2@3 ~",
  O: "d#2@3 ~ d#3@2 d#2 ~ d#2@3 ~ c#2@3 ~", P: "b1@3 ~ b2@2 b1 ~ b1@3 ~ c#2@3 ~",
  Q: "d#2@3 ~ d#3@2 d#2 ~ c#2@3 ~ c#3@3 ~", R: "d#2@3 ~ d#3 ~ d#2@2 c#2@3 ~ c#3@3 ~",
  S: "[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
  T: "[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
  U: "d#2@3 ~ [a#1,d#3] ~ c#2@2 d#2@3 ~ [a#1,d#3]@3 ~, ~@6 d#2 ~@9", // D#5
  V: "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
  W: "f#1@3 ~ f#2 ~ f#1 ~ [f#1,a#1]@3 ~ [c#2,f#2]@3 ~", X: "b1@3 ~ b2 ~ b1 ~ [b1,g#2]@3 ~ [c#2,f#2]@3 ~",
  Y: "f#1@3 ~ f#2 ~ f#1@2 f#1@3 ~ f#2@3 ~", Z: "d#2@3 ~ d#3@2 d#2@2 d#2@3 ~ c#2@3 ~",
  AA: "d#2@3 ~ d#3@2 d#2 ~ d#2@3 ~ d#3@3 ~", AB: "[f#1,f#2]@3 ~ [c#2,f#2]@2 [f#1,d#2] ~ [f#1,f#2]@3 ~ [c#2,f#2]@3 ~",
  AC: "[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
  AD: "d#2@3 ~ [a#1,d#3] ~ d#2@2 d#2@3 ~ [a#1,d#3]@3 ~, ~@6 c#2 ~@9", // D#5
  AE: "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
  AF: "b1@3 ~ b2@2 b1 ~ [b1,g#2]@3 ~ [c#2,f#2]@3 ~", AG: "d#2@3 ~ d#3 ~ d#2 ~ b1@3 ~ c#2@3 ~",
  AH: "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
  AI: "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
  AJ: "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
  AK: "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
  AL: "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
  AM: "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
  AN: "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
  AO: "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
  AP: "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
  AQ: "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
  AR: "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
  AS: "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
  AT: "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
  AU: "d#2@2 a#3!2 d#3 ~ a#3 ~ b1@3 f#3 c#2@3 ~, ~@8 f#3 ~@7", AV: "f#1@2 c#4 ~ [f#2,c#4] ~ f#1 ~ f#1@3 ~ f#2@2 c#4 ~",
  AW: "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
  AX: "f#1@2 c#4!2 f#2 ~ [f#1,c#4] ~ f#1@3 ~ f#2@3 ~, ~@12 c#4 ~@3", AY: "~@4 a#3 ~ d#2 ~ b1@3 ~ c#2@3 ~, ~@8 f#3 ~@7",
  AZ: "f#1@3 ~ f#2 ~ f#1 c#4 f#1@3 ~ f#2@2 c#4!2", BA: "d#2@3 ~@3 d#2 ~ b1@3 ~ c#2@3 ~, ~@12 g#3 ~@3",
  BB: "f#1@3 ~@3 f#1 ~ f#1@3 ~ f#2@3 c#4, c#4 ~@11 c#4 ~@3", BC: "d#2@3 ~ a#3 ~@2 a#3 ~@4 g#3 ~@3",
  BD: "f#1@3 ~ f#2 ~ f#1 ~ f#1@3 c#4 f#2@3 ~", BE: "~@6 d#2 a#3 b1@3 ~@5",
  BF: "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", BG: "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 AK AL@2 AM AN
  AO@2 AP AQ AR@2 AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ@2 BK@2 BL BM BN BO BP BQ BR@2 BS BT BU BV BW BX
  BY BZ CA ~@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: "a#4@3 g#4!2 f#4 f4 ~",
  AL: "[~@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",
  AM: "~@2 f#4@2 d#5@3 ~ c#5@3 ~ a#4@3 ~", AN: "a#4@3 ~ f#4@3 ~ a#4@3 ~@5, ~@3 g#4@2 ~@11",
  AO: "[[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#
  AP: "f#4@5 ~ g#4@2 g#4@2 f#4@2 f4@3 ~, a#4 ~@7", AQ: "f#4@2 b3@5 ~@7 a#4@2",
  AR: "[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#
  AS: "~@4 [f#3,f#4]!2 [f3,f4]@2", AT: "[d#3,d#4]@4 ~@4 [d#3,d#4]@3 ~@5", AU: "~@8 [d#3,d#4]@2 [d#3,d#4]@2 [f3,f4]@3 ~",
  AV: "~@2 f#4@2 [c#4,c#5]@2 c#5!2 [c#4,c#5]@2 f#4@2 ~@4", // C#
  AW: "~ 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#
  AX: "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#
  AY: "[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#
  AZ: "[g#3,g#4,a#4,b4]@2 a#4@3 ~ a#4@4 ~@2 f#4@4, ~ f#4@4 ~@3", BA: "a#4@2 g#4@3 ~ f#4@2 f#4@2 g#4@2 f#4@2 ~@2",
  BB: "~@2 f#4@2 [c#4,c#5]@2 ~ c#5 c#5@2 f#4@2 ~@2 f#4@2", // C#
  BC: "[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#
  BD: "~@2 f#4@2 [c#4,c#5]@2 ~ [c#4,c#5] c#5@2 f#4@2 ~@2 f#4@2", // C#
  BE: "[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#
  BF: "a#4@3 ~@5 b4@2 a#4@2 g#4@2 f#4@2, ~@2 f#4@3 f#4@2 ~", BG: "~@4 f#4@2 ~@2 f#4 ~ g#4@2 a#4@2 ~@2, ~@9 f#4@2 ~@5",
  BH: "~ b4@2 ~ f#4@2 ~@2", BI: "[a#3,a#4]@3 ~ [f#4,a#4]@3 ~ [f#4,g#4]@2 ~@2 [f3,f4]@4, ~@6 f#4 ~",
  BJ: "[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",
  BK: "[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", BL: "a#4 g#4@2 ~, f#4@3 ~@13",
  BM: "a#4@3 ~ a#4@2 a#4@2 g#4@2 ~@2 f4@4", BN: "f#4@2 c#5 ~ c#5 f#4 ~ f#4",
  BO: "[c#4,c#5]@2 ~ c#4 c#5@2 ~@2 f#4@2 g#4@2 a#4@2 ~@2, ~@3 f#4 ~@4, ~@7 f#3@3 ~@6", // C#
  BP: "~@2 f#4@2 [c#4,c#5]@2 ~ c#5 c#5@2 f#4@2 ~@4", BQ: "c#5 ~ c#5 ~ f#4 ~ a#4 ~",
  BR: "[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 ~, ~@15 a#4@4 ~@13]/2",
  BS: "[f#4,g#4,c#5]@3 ~ c#5@2 ~@2 c#5@2 f#4@3 ~@3", BT: "c#5 ~ c#5 ~ f#4 ~ a#4 f#4",
  BU: "f#4@2 f#4 ~ c#5@2 c#5 ~ c#5@2 f#4@2 ~@4", BV: "c#5@2 ~@6 f#4@2 ~@2 a#4@3 ~", BW: "~ b4@2 ~ a#4@2 ~@2",
  BX: "b4@2 ~@4 f#4@3 ~@7", BY: "a#4@3 ~@3 a#4@4 ~@6", BZ: "b4 ~@2 f#4 ~@4", CA: "~ 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 K@2 L M ~@4 N O P ~ Q ~@3 H ~@3 R S T U V ~ W X Y Z AA@2 AB AC AD
  AE ~ AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ ~
>`.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: "~@2 g#4@3 ~@5 g#4@2 ~@4",
  K: "~ g#4 ~@3 g#4 ~@2", L: "~@11 a#4@3 ~@2", M: "~@6 c#5 ~", N: "a#4 ~@7", O: "~@11 b4@2 ~@3", P: "~@7 g#4@2 ~@7",
  Q: "~@5 g#4@2 ~", R: "~@2 f#3@2 ~@3 c#4 ~@2 f#3@2 ~@2 [f#3,f#4]@2", S: "~@3 c#4 c#4@2 f#3@2 f#3@2 g#3@2 ~@4",
  T: "~@2 f#3@2 ~@3 c#4 ~@2 f#3@2 ~@2 f#3@2, ~@3 f#3@2 ~@3", U: "~@3 c#5 ~@2 f#3@2 f#3@2 f#3@2 ~@2 g#4@2, ~@10 g#3 ~@5",
  V: "~ f#3@4 g#4 ~@2", W: "~@2 f#3@2 ~@4 c#4@2 f#3@2 ~ f#3 f#3@2", X: "~@3 f#3!2 g#3 ~@2",
  Y: "~@2 f#3@2 ~@4 c#4@2 ~ f#3@2 ~ f#3@2", Z: "~@3 c#4 ~@2 f#3@2 f#3@2 g#3@2 ~@4",
  AA: "[a#3@2 [g#3,g#4]@2 f#3@6 ~ f#3@9 ~@3 g#4@2 ~ g#3@2 a#3@4, ~@25 f#3@2 ~@5]/2", AB: "~@7 g#4@2 ~@7, ~@3 a#4 ~@4",
  AC: "~@4 a#3@3 ~ g#3@2 g#4@2 ~@4", AD: "g#3@2 f#3@11 ~@3", AE: "~@5 f#4 g#4 ~", AF: "~ g#4@2 ~@5", AG: "~@6 f#4 ~",
  AH: "~@5 f#4 ~@2", AI: "~@4 d#5@2 ~ c#5 ~@8", AJ: "~@3 c#5 c#4@2 ~@4 f#3@2 g#3@2 [a#2,a#3]@2",
  AK: "~@2 f#3@2 ~@4 c#4@2 ~ f#3@2 ~ f#4@2", AL: "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",
  AM: "a#3@2 g#4@2 [f#3,f#4]@3 ~@3 g#4@2 f#4@2 a#3@2, f#4 ~@3", AN: "~@2 [g#3,g#4]@2 f#3@3 ~ g#3@2 f#3@2 f3@2 ~@2",
  AO: "g#3@2 f#3@4 ~ c#5 ~@6 f#4@2, ~ f#4 ~@6", AP: "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",
  AQ: "~@3 f#4 c#4@2 ~ [c#4,c#5] c#4@2 ~ f#3@2 ~ f#4@2", // C#
  AR: "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", AS: "~@3 a#4 ~@2 g#4 a#4",
  AT: "~@2 a#4@2 g#4@2 ~@3 g#4@2 f#4@3 ~@2", AU: "a#3@4 ~@2 g#4@3 ~@2 g#4@2 f#4@2 ~, ~@2 g#4 ~@5, ~@5 g#3@2 ~@9",
  AV: "~@4 g#4@2 ~@2 g#4@2 f#4@5 ~, ~ [g#4,a#4] ~@6, ~@3 g#3@3 ~@10", // G#sus2
  AW: "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
  AX: "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#
  AY: "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 ~",
  AZ: "~ 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#
// … 165 more lines

More by Cyndi Lauper