Strudelify
D I S C O cover art

1980 · D.I.S.C.O.

D I S C O

Ottawan

KeyB♭ majorTempo124 bpm
0:00/0:00
// D I S C O — Ottawan
// 124 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · synth bass 1 · "SYNTH BASS"
const bass = note(`<
  ~@9 A B C D A E C F G H C I A J K L A E K M A E K N O P O C Q O@2 R S R Q O@2 T A E C D U V F W A E C X A E C Y O Z O
  AA AB O@2 AC O AA AD O@2 AE A E C D G AF AG AC O AC O AA AB O@2 AA AH AA AI O AJ AE A E C D A AF C W A AF C M A AK C
  AL A AM C AL A AM C AN AO ~@7
>`.pickRestart({
  A: "c2@2 ~ c2 g1@2 bb1@2 c2@2 ~@2 g1@2 bb1@2", B: "c2@2 ~ c2 g1@2 bb1@2 c2@2 ~ c2 bb1@2 g1@2",
  C: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 f1@2 g1@2", D: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 f1@2 g1@2 bb1@2",
  E: "c2@2 ~ c2 g1@2 bb1@2 c2@2 ~@2 g1@2 c2@2", F: "bb1@2 ~ bb1 f1@2 g1@2 bb1 ~@3 f1@2 g1@2",
  G: "c2 ~@2 c2 g1@2 bb1@2 c2@2 ~@2 g1@2 bb1@2", H: "c2@2 ~ c2 bb1@2 g1@2 c2@2 ~@2 g1@2 c2@2",
  I: "bb1@2 ~ bb1 f1@2 g1@2 bb1@3 ~ g1@2 f1@2", J: "c2 ~@2 c2 g1@2 bb1@2 c2@2 ~@2 g1@2 c2@2",
  K: "bb1 ~@2 bb1 f1@2 g1@2 bb1@2 ~@2 f1@2 g1@2", L: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 g1@2 bb1@2",
  M: "bb1@2 ~ bb1 f1@2 g1@2 bb1 ~ f1@2 g1@2 bb1@2", N: "bb1@2 ~ bb1 f1@2 g1@2 bb1 ~@3 bb1@2 c2@2",
  O: "f2@2 ~ f2 c2@2 d2@2 f2@2 ~@2 c2@2 d2@2", P: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 f1@2 g1 ~",
  Q: "eb2@2 ~ eb2 bb1@2 c2@2 eb2@2 ~@2 bb1@2 c2@2", R: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~ bb1 f1 g1 bb1 ~",
  S: "f2@2 ~@2 c2@2 d2@2 f2@2 ~@2 c2@2 d2 ~, ~@3 f2@2 ~@11", T: "f1@2 ~ f1 c2@2 d2@2 f2@2 f1@2 a1@2 bb1@2",
  U: "c2@2 ~ c2 g1@2 bb1@2 c2@2 ~@2 g1@2 bb1 ~", V: "c2@2 ~ c2 g1@2 bb1@2 c2@2 g1@2 bb1@2 c2@2",
  W: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 f1 g1 bb1@2", X: "bb1 ~@2 bb1 f1@2 g1@2 bb1@2 f1@2 g1@2 bb1@2",
  Y: "bb1@2 ~ bb1 f1@2 g1@2 bb1@3 ~ c2@2 d2@2", Z: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 c2@2 d2@2",
  AA: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 f1 g1 bb1 ~", AB: "eb2@2 ~ eb2 bb1@2 c2@2 eb2@2 ~@2 bb1 c2 eb2@2",
  AC: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 bb1 c2 d2@2", AD: "eb2@2 ~ eb2 bb1@2 c2@2 eb2@3 ~ bb1 c2 eb2@2",
  AE: "f2 ~@2 f2 c2@2 d2@2 f2 ~ f1@2 a1@2 bb1@2", AF: "c2@2 ~ c2 g1@2 bb1@2 c2@2 ~@2 g1 bb1 c2@2",
  AG: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 ~@2 f1@2 g1@2, ~@12 bb1 ~@3", AH: "f2@2 ~ f2 c2@2 d2@2 f2@3 ~ c2@2 d2@2",
  AI: "eb2@2 ~ eb2 bb1@2 c2@2 eb2@2 bb1@2 c2@2 eb2@2", AJ: "f2 ~@2 f2 c2@2 d2@2 f2@2 ~@2 c2@2 d2@2",
  AK: "c2@2 ~ c2 g1@2 bb1@2 c2@2 eb2@2 d2@2 c2@2", AL: "bb1@2 ~ bb1 f1@2 g1@2 bb1@2 d2@2 c2 bb1 g1@2",
  AM: "c2@2 ~ c2 g1@2 bb1@2 c2 ~ eb2@2 d2@2 c2@2", AN: "bb1@2 ~ bb1 f1@2 g1@2 eb1@3 ~ f1@3 ~", AO: "bb1@13 ~@3",
})).s("gm_synth_bass_1").gain(0.46)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A B C D E F G H I J K L M N H O P Q K R S T U V W X K V W Y Z AA ~@14 AB AC K V S AD U V AB AE U AF J AE U V AG ~@11
  AH AI W AJ U AK W AL O AM ~@11 AN AO AP AQ AR AS@2 AR@2 AS@2 AR@2 AS@2 AR@2 AS AT AR@2 AS@2 AR@2 AS AU AV ~@7
>`.pickRestart({
  A: "eb5 ~ d5 ~ eb5 ~ d5 eb5 ~ eb5 d5 ~@4 d5", B: "eb5 ~ d5 ~ eb5 ~ d5 eb5 ~ eb5 ~@5 c5",
  C: "d5 ~ c5 ~ d5 ~ c5 d5 ~ d5 ~@6", D: "~ d5 c5 ~ d5 ~ c5 d5 ~ d5 c5 ~@5", E: "~@2 d5 ~ eb5!2 d5 eb5 ~ eb5 d5 ~@5",
  F: "~@2 d5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~@5", G: "~@2 c5 ~ d5!2 c5 d5 ~ d5 c5 ~@5",
  H: "~@2 c5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5!2 c5 ~", I: "~@2 d5 ~ eb5 ~ d5 eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  J: "~@2 d5 ~ eb5!2 d5 eb5 ~ eb5 d5 ~ eb5 ~ d5 ~", K: "~@2 c5 ~ d5 ~ c5 d5 ~ d5 c5 ~ d5 ~ c5 ~",
  L: "~@2 c5!2 d5 c5 ~ d5 ~ d5 c5 ~ d5 ~ c5 ~", M: "~@4 eb5!2 d5 eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  N: "eb5 ~ d5 ~ eb5 d5 ~ d5 ~ eb5 ~@2 eb5 ~ d5 ~", O: "~@2 d5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 ~ c5 ~",
  P: "eb5!2 d5 ~ eb5 ~ d5 ~ eb5 ~ d5 eb5 ~ eb5 d5 ~", Q: "~@4 eb5 ~ d5 ~ eb5!2 d5 eb5 ~ eb5 d5 ~",
  R: "~@2 c5 ~ d5!2 c5 d5 ~ d5 c5 ~@3 c5 ~", S: "~@4 eb5 ~ d5 eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  T: "eb5 ~ d5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 d5 eb5 d5", U: "~@2 c5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 ~ c5 ~",
  V: "~@2 c5 ~ d5!2 c5 d5 ~ d5 c5 ~ d5 ~ c5 ~", W: "~@2 eb5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  X: "eb5 ~ d5 ~ eb5 d5 ~ eb5 ~ eb5 [c5,d5] ~ eb5 ~ d5 ~", Y: "eb5 ~@2 [d5,eb5] eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  Z: "~@2 c5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 ~ c5!2", AA: "~@2 d5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 c5 d5 c5",
  AB: "~@2 d5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~", AC: "~@4 eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~@3",
  AD: "eb5 ~@2 d5 eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~", AE: "eb5 ~ d5 ~ eb5!2 d5 eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  AF: "d5 ~ c5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 ~ c5 ~", AG: "~@4 eb5 ~@11", AH: "f3 ~ f4 ~ f4 f3 ~ f3 ~ f3 f4 ~ f4 ~ f4!2",
  AI: "f3 ~ f4 ~ f4 f3 ~ f3 ~ f3 f4 f3 f4 f3 f4 f3", AJ: "eb5 ~ d5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  AK: "d5 ~ d5 ~ d5 c5 ~ d5 ~ d5 c5 ~ d5 c5 d5 c5", AL: "eb5 ~ eb5 ~ eb5 d5 ~ eb5 ~ eb5 d5 ~ eb5 ~ d5 ~",
  AM: "d5!2 c5 ~ d5 ~ c5 d5 ~ d5 c5 ~ d5 c5 d5 c5", AN: "~@4 f4 f3 ~ f3 ~ f3 f4 ~ f4 ~ [d4,f4] c4",
  AO: "f3@2 f4 ~ f4 f3 ~ f3 ~ f3 f4 ~ f4@2 d4 c4", AP: "f3@2 f4 ~ f4 f3 ~ f3 ~ f3 f4 f3 f4 f3 f4 d4",
  AQ: "~@2 eb6!3 ~ d6!3 ~ c6!3 ~ bb5!2", AR: "~@2 eb6!3 ~ d6!3 ~ c6!3 ~ g5!2", AS: "~@2 d6!3 ~ c6!3 ~ bb5!3 ~ f5!2",
  AT: "~@2 d6!3 ~ c6!3 ~ bb5!2 ~@2 f5!2", AU: "~@2 d6!3 ~ c6!3 ~ bb5!3 ~ c6 ~", AV: "f5 ~@15",
})).s("gm_electric_guitar_muted").gain(0.41).pan(0.6)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted_2 = note(`<
  ~ A B C@2 D E C@2 A@2 C@2 A@2 C@2 A F C@2 A@2 C@2 A@2 C@2 A@2 C@2 G C G C H G I C G C H G J G K A C@2 A F C L A@2 C M
  N A O P G Q G C H G@2 C G C H G R S A@2 C M T U C@2 G V G C H G@2 C G C H W X Y A Z C@2 U AA C M A@2 C@2 A AB Q AC U
  AD Q AE A@2 C AF AG ~@7
>`.pickRestart({
  A: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]!2", // Cm
  B: "~@2 [c4,eb4,g4] ~ eb4 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~", // Cm
  C: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", // Bb
  D: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~", // Cm
  E: "[c4,d4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4] ~", // Csus2 Cm
  F: "~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]!2", // Cm
  G: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]!2", // F
  H: "~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4]!2", // Eb
  I: "~@2 [c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]!2", // F5 F
  J: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]!2 ~ [a3,c4,f4] ~@2 [a3,c4,f4]!2", // F
  K: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]!2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]!2", // Cm
  L: "~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", // Bb
  M: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4] ~ [bb3,d4,f4]!2 ~", // Bb
  N: "[bb3,d4,f4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]!2", // Bb Cm
  O: "~ eb4 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~@2", // Bb
  P: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", // Bb
  Q: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~ [bb3,d4,f4]!2 ~", // Bb
  R: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!2 ~", // F
  S: "~@2 [a3,c4,f4] ~ [a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!2 ~ [a3,c4,f4]!3 ~", // F
  T: "[bb3,d4,f4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4]!2", // Bb Cm
  U: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4]!2 ~", // Cm
  V: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] [bb3,d4] ~ [bb3,d4,f4] ~ [bb3,d4,f4]!2 ~", // Bb
  W: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~ [a3,c4,f4]!2 ~", // F
  X: "[a3,c4,f4] ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!2 ~", // F
  Y: "[a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!2 ~ [a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!3", // F
  Z: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4]!2 ~@2 [c4,eb4,g4] ~ [c4,eb4,g4]!2 ~", // Cm
  AA: "[c4,eb4,g4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ eb4 [c4,eb4,g4] ~ eb4 [c4,eb4,g4] ~ [c4,eb4,g4]!2 ~", // Cm
  AB: "~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [c4,eb4,g4] ~", // Cm
  AC: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~ [bb3,d4,f4]!3", // Bb
  AD: "[c4,eb4,g4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]!2", // Cm
  AE: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~ [bb3,d4,f4]!2 ~", // Bb
  AF: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]!2 ~ [bb3,d4,f4] ~@2 [bb3,d4,f4]!2", AG: "[bb3,d4,f4] ~@15",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.3)

// other · shakuhachi
const shakuhachi = note(`<
  ~@8 A B C D A E C F A G C H A I C J A I C J A I C J ~@22 A G C J A I C J ~@14 A B C F A B C D ~@14 A G C H A G C J A G
  C H A I C J A B C D A B C D K L ~@7
>`.pickRestart({
  A: "~@6 d5 f5", B: "g5@2 ~ g5@2 ~@11", C: "~@6 g4 bb4", D: "d5@2 ~ d5@2 ~@11", E: "g5@2 ~ g5@3 ~@10",
  F: "d5@2 ~ d5@3 ~@10", G: "g5 ~@7", H: "d5 ~@7", I: "g5@3 ~@13", J: "d5@3 ~@13", K: "~@8 eb5 bb4 g4 eb4 f4 a4 c5 d5",
  L: "bb4 ~@7",
})).s("gm_shakuhachi").gain(0.51)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@8 A B C D A B C E ~@16 F G H I J K L M N O P Q R@3 S ~@14 T U N V W X Y M Z AA P AB R@3 B C AC A B C E F AD AE AF AG
  AH Y AI N I AJ Q AK@3 AL ~@14 A B C AC A AM C AN AO AP ~@7
>`.pickRestart({
  A: "~@6 [d4,d5] [f4,f5]", B: "[g4,g5]@2 ~ [g4,g5]@2 ~@11", C: "~@6 [g3,g4] [bb3,bb4]", D: "[d4,d5]@3 [d4,d5]@3 ~@10",
  E: "[d4,d5]@3 [d4,d5]@2 ~@11", F: "~@6 [eb4,eb5] [d4,d5]", G: "[c4,c5] ~ [f3,f4] [g3,g4]@2 [f3,f4] [d4,d5] [c4,c5]",
  H: "[bb3,bb4]@3 ~ [f3,f4]@2 [g3,g4]@4 f4@2 [eb4,eb5]@2 [d4,d5]@2, ~@10 f3 ~@5", // Bb F G Eb D
  I: "[c4,c5]@3 ~ [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [d4,d5]@2 [c4,c5]@2", // C F G F D C
  J: "[bb3,bb4]@3 ~ [f3,f4]@2 [g3,g4]@4 [f3,f4]@2 [bb3,bb4]@2 a4@2, ~@14 a3 ~", // Bb F G F Bb
  K: "~@4 bb3@3 ~ [g4,bb4,eb5,g5]@8, eb4 ~, g4@3 ~@5", L: "[f4,a4,f5]@11 ~ [eb4,eb5]@2 [d4,d5]@2",
  M: "[c4,c5] ~ [f3,f4] [g3,g4]@2 f3 [d4,d5] [c4,c5], ~@10 f4 ~@5", // C F G D C
  N: "[bb3,bb4]@2 ~@2 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [eb4,eb5]@2 [d4,d5]@2", // Bb F G F Eb D
  O: "[c4,c5]@3 ~ [f3,f4]@2 [g3,g4]@4 [f3,f4]@2 d4@2 [c4,c5]@2, ~@12 d5 ~@3", // C F G F C
  P: "[bb3,bb4]@2 [f3,f4] [g3,g4]@2 [f3,f4] [bb3,bb4] a4, ~@14 a3 ~", Q: "[bb3,eb4] [bb4,eb5,g5], g4@15 ~",
  R: "[[f4,a4,c5,f5]@21 ~ [d4,d5] [f4,f5]]/3", S: "[g4,g5] ~@7", T: "~@6 eb5 [d4,d5], ~@12 eb4 ~@3",
  U: "c4 ~ [f3,f4] [g3,g4]@2 f4 [d4,d5] [c4,c5], c5 ~@9 f3 ~@5", // F G D C
  V: "[c4,c5]@2 ~@2 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ d4@2 [c4,c5]@2, ~@12 d5 ~@3", // C F G F C
  W: "[bb3,bb4] ~ [f3,f4] [g3,g4]@2 [f3,f4] bb4 a4", X: "[bb3,eb4]@8 [bb4,eb5,g5]@7 ~, g4",
  Y: "[f4,a4,f5]@5 ~ [eb4,eb5] [d4,d5]", Z: "[bb3,bb4]@2 [f3,f4] [g3,g4]@2 f4 [eb4,eb5] [d4,d5], ~@10 f3 ~@5",
  AA: "[c4,c5]@2 [f3,f4] [g3,g4]@2 [f3,f4] [d4,d5] [c4,c5]", AB: "~ bb3 [bb4,eb5,g5]@2, g4@15 ~, eb4 ~",
  AC: "[d4,d5]@2 ~ [d4,d5]@2 ~@11", AD: "[c4,c5]@2 ~@2 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [d4,d5]@2 [c4,c5]@2",
  AE: "bb4@2 ~@2 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [eb4,eb5]@2 [d4,d5]@2, bb3 ~@15", // F G F Eb D
  AF: "[c4,c5]@2 ~@2 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [d4,d5]@2 c4@2, ~@14 c5 ~", // C F G F D
  AG: "[bb3,bb4] ~@3 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [bb3,bb4]@2 a4@2", AH: "eb4@8 [g4,bb4,g5]@7 ~, g4@3 ~ eb5@2 ~@2",
  AI: "[c4,c5] ~@3 [f3,f4]@2 [g3,g4]@4 [f3,f4] ~ [d4,d5]@2 [c4,c5]@2", // C F G F D C
  AJ: "[bb3,bb4]@3 ~ [f3,f4]@2 [g3,g4]@4 [f3,f4]@2 bb4@2 a4@2", AK: "[[f4,a4,c5,f5]@43 ~ [d4,d5]@2 [f4,f5]@2]/3",
  AL: "[g4,g5] ~@3", AM: "[g4,g5]@3 [g4,g5]@2 ~@11", AN: "[d4,d5]@2 ~ [d4,d5]@3 ~@10",
  AO: "~@8 eb6 bb5 g5 eb5 f5 a5 c6 d6", AP: "bb5@3 ~@13",
})).s("gm_string_ensemble_1").gain(0.36)

// chords · piano · "A.PIANO"
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R S T U@3 V@2 W X@3 Y@2 Z@2 AA@2 AB@2 AC@2 AD@2
  AE@2 AF@2 AG AH AI@2 W AJ AK@2 AL@2 AM AN@3 AO@2 AP@2 AQ@2 AR@2 AS AT AU AV AW AX@2 AY@2 AZ BA BB@2 BC BD@2 BE@2 BF@4
  BG@2 BH@2 BI@2 BJ@2 BK@4 BL@4 BM ~@7
>`.pickRestart({
  A: "[[c4,eb4]@13 ~ g3 c4, g3@25 ~ c3@6, ~@28 eb4 ~@3]/2", // Cm
  B: "[[bb3,d4]@24 ~@2 c4@2 ~@2 f3 ~, [bb2,f3]@7 bb3, ~@3 d4]/2", C: "[[g3,c4]@13 ~ g3 c4, eb4@15 ~, c3@12 ~ c3@3]/2",
  D: "[[f3,bb3,d4]@23 ~ [f3,bb3,c4]@4 [f3,bb3,d4]@3 ~, bb2@3 ~]/2", // Bb Fsus4 Bb
  E: "[[g3,c4]@24 ~@6 eb4 ~, eb4@7 c4, c3@23 ~ c3@8, ~@26 g3@5 ~]/2", // C5
  F: "[[f3,bb3,d4]@25 ~ [f3,bb3,c4]@4 bb2@2, bb2@13 ~@3]/2", // Bb Fsus4
  G: "[g3@24 ~@6 eb4 ~, [c4,eb4]@26 g3@5 ~, c3@21 ~@3 c3@8, ~@7 c4]/2", H: "[[f3,bb3,d4]@29 ~@3, bb2@21 ~@11]/2",
  I: "[[c3,g3,c4,eb4]@15 ~]/2", J: "[[f3,bb3,d4]@25 ~@3 bb3@2 d4@2, bb2, ~@13 f3@2 ~]/2",
  K: "[[g3,c4,eb4]@15 ~, c3@5 ~@11]/2", L: "[[f3,bb3,d4]@27 ~ [f3,bb3,d4]@4, bb2@7 ~]/2",
  M: "[[g3,c4,eb4]@29 ~@3, c3@3 ~@5]/2", N: "[[f3,bb3]@20 ~@6 d4@3 ~@3, bb2@27 ~@5, d4@11 bb3@4 ~, ~@20 f3@9 ~@3]/2",
  O: "[c4@11 ~@2 c4@2 eb4, c3, eb4@27 ~@5, g3@18 ~@4 g3@9 ~]/2",
  P: "[[bb3,d4]@20 ~@4 bb3@2 c4@2 d4@2 bb3 ~, f3@18 ~@4 f3@9 ~, bb2@13 ~@7 bb2@10 ~@2, ~@13 f4@2 ~]/2", // Bb
  Q: "[[a3,c4,f4]@15 ~ [bb3,d4,f4]@15 ~, f3@15 ~, ~@16 bb2@13 ~@3]/2", R: "[a3,c4,f4]@15 ~, f3@13 ~@3",
  S: "[bb3,d4,f4]@7 ~, bb2 ~@15", T: "[g3,bb3,eb4]@5 ~@3 [bb3,eb4,g4]@6 ~@2, eb3@15 ~",
  U: "[[f3,a3]@5 ~@3 f4@7 ~ [bb2,bb3,f4]@7 ~, [c4,f4]@3 a3@4 ~@5, ~@5 f3@2 c4@8 ~ d4@8, ~@16 f3@31 ~]/3", // F Bb5 F5
  V: "[[c4,f4]@15 ~ [bb3,d4,f4]@8 c4 ~ c4@2 bb3@2 f3@2, f3@29 ~@3, a3@13 ~@3 bb2@13 ~@3, ~@24 f4@7 ~, ~@25 d4@2 ~@5]/2", // F5 Bb
  W: "[g3,bb3,eb4]@3 ~ [bb3,eb4,g4]@3 ~, eb3@7 ~", // Eb
  X: "[[c4,f4]@10 ~@12 a3@3 ~@9 g5 a5 g5@2 f5 ~ g4 ~ g4 a4 g4@2 f4@2, a3@9 ~@5 c4@29 ~@5, f3@3 ~@2 f3@17 ~@2, ~@17 c6@2 ~@2 c5@2 ~]/3", // F5
  Y: "[~@10 g3@12 ~@3 d4 ~ bb4@4 ~, ~@2 [eb4,g4]@9 ~@2 eb4 ~@2, ~@4 c3@16 ~@2 c3@7 ~@3, ~@6 c4@16 ~@2 g3@5 ~@3]/2", // Eb
  Z: "[~@18 c4 ~@7 bb3@6, bb2@29 ~@3, [d4,f4,bb4]@15 ~@3 f4@11 ~@3, ~ f3@7, ~@19 d4@10 ~@3]/2", // Bb
  AA: "[~@3 d4 ~@8 g4@13 ~@7, c3@29 ~@3, ~ g3@13 ~@2, ~@4 eb4@4 c4@19 ~@5, ~@3 bb4@10 ~@3]/2",
  AB: "[bb2@7 ~@15 d4@7 ~@3, d4@15 ~@5 bb3@11 ~, [f3,bb3]@6 ~@3 f3@7, ~@10 bb2@19 ~@3]/2", // Bb5
  AC: "[~@6 eb4@12 db3 ~@3 d4 eb4 d4@2 c4@3 ~ bb3@2, c3@7 ~@2 c3@6 ~, eb4@2 c4@7 ~@2 g4@3 ~@2, ~@3 g3@16 ~ g3@9 ~@3]/2",
  AD: "[f3@18 ~@8 d4@3 ~@3, [bb3,d4]@20 f3@9 ~@3, bb2@16 ~@2 bb2@9 ~@5, ~@22 bb3@7 ~@3]/2", // Bb
  AE: "[[c3,g3]@10 ~@3 eb4@2 c3, eb4@24 c4@7 ~, c4@22 g3@7 ~@3, ~@5 c3@2 ~]/2", // C5
  AF: "[[f3,bb3,d4]@22 ~@4 c4@2 bb3@2 f3 ~, bb2@27 ~@5, ~@22 f3@7 ~@3, ~@24 d4@5 ~@3]/2", AG: "[a3,c4,f4]@7 ~, f3",
  AH: "[bb2,bb3,d4,f4]@7 ~", // Bb
  AI: "[[c4,f4]@15 ~ [bb3,d4,f4]@8 c4 d4 c4@2 bb3@2 f3@2, f3@7 ~, a3@6 ~@2 bb2@7 ~, ~@12 f4@3 ~]/2", // F5 Bb
  AJ: "[f3,a3,c4,f4]@15 ~", // F
  AK: "[[a3,c4,f4]@15 ~ [bb3,d4,f4]@10 ~@2 [bb3,d4,f4]@3 ~, f3@31 ~, ~@16 bb2@9 ~ bb2@4 ~@2]/2", // F Bb
  AL: "[[c4,f4]@15 ~ [bb3,d4,f4]@6 ~@2 c4 d4 c4@2 bb3@2 f3@2, f3@11 ~ f4@3 ~, a3@13 ~@3 bb2@5 ~ bb2@8 ~@2]/2", // F5 Bb
  AM: "[g3,bb3,eb4]@5 ~@3 [bb3,eb4,g4]@6 ~@2, eb3@7 ~", // Eb
  AN: "[[a3,c4,f4]@9 ~@3 g4 a4 g4@2 ~@12 g5 a5 g5@2 f5 ~@3 [g4,b4] a4 g4 f4@3 c4@2 ~@2 a4@2, f3@9 ~@2 f3@12 ~, ~@12 c5@13 ~@3 c6@4 ~@4 c5@12, ~@16 f4@8 c4@15 ~@5 f4@4]/3", // F G
  AO: "[~@3 d4 ~@2 bb4@13 ~@9 d5 eb5 d5 c5, c3@29 ~@3, ~@2 g3@27 ~@3, ~@4 eb4@14 ~@10 g5@3 ~]/2",
  AP: "[~@2 d5@2 bb4@2 ~@2 c4 d4 c4@2 ~@2 d4@12 c4 d4 c4@2 bb3 ~, bb2@29 ~@3, f5@5 ~ f3@25 ~, ~@4 f4@8 ~ f4@2 ~, ~@6 bb3@7 ~@3]/2",
  AQ: "[~@4 c4@14 ~@8 d4 eb4 d4@2 c4@2, c3@27 ~@5, [eb4,g4]@19 ~@7 g4@5 ~, ~@2 g3@25 ~@5]/2", // Eb
  AR: "[~@6 d4@12 ~@6 [f4,d5]@3 ~ [d4,bb4]@2 ~@2, bb2@7 ~, f4@19 ~@13, d4@4 bb3@13 ~@15, ~ f3@14 ~]/2", // Dm Gm
  AS: "~@3 f4@5, ~ f3@7, ~@4 c4@11 ~", AT: "~@6 f4@9 ~, ~@2 bb3@13 ~, ~@4 d4@11 ~, ~@4 d3@9 ~@3",
  AU: "~@3 [c4,f4]@5, ~ f3@7, ~@4 a3@11 ~", AV: "~@6 [d4,f4]@9 ~, bb2@13 ~@3, ~ f3@7, ~ bb3@3",
  AW: "~@10 [eb4,g4]@5 ~, ~ eb3@7, ~@4 g3@11 ~, ~@6 bb3@9 ~", // Eb
  AX: "[~@4 [f4,a4]@10 ~@4 g4 a4 g4@2 ~@4 c4@3 ~@3, f3@9 ~@5 f3@12 ~@6, ~@4 c4@7 ~@5 c4@9 ~@7, ~@9 c5@7, ~@11 f4@5]/2", // F
  AY: "[~@8 g4@2 ~@4 d4@3 ~ e3 ~ g4 a4 g4@2 ~@4 c4 ~@3, bb2@7 ~@5 f4@4, ~@2 f3@13 ~@3 f3@11 ~@3, ~@2 bb4@7 ~ c5@6, ~@4 d4@6 f4@7 ~@3 c4@7 ~@5]/2",
  AZ: "~@4 bb4 ~ f4@2 ~@2 d4@3 ~ f3@2, ~ bb2@14 ~, ~ f3@5 ~@2, ~ d4 g4 ~, ~@6 bb4@7 ~@3",
  BA: "[bb3,eb4,g4]@7 ~ bb3@3 ~ [bb3,eb4]@2 eb3@2, eb3@13 ~@3, ~@4 g4@3 ~", // Eb Eb5
  BB: "[a3@6 ~@16 g5 a5 g5@2 f5 ~ g4 a4 g4 f4, [c4,f4]@8 a3@23 ~, f3@4 ~@2 f3@25 ~, ~@5 c4@10 ~, ~@22 c6@4 ~@2 c5@3 ~]/2", // F5
  BC: "~@4 g6 a6 g6 f6 g5 a5 g5 f5 g4 a4 g4 f4, c4@7 ~, ~@2 c7 ~ c6 ~ c5 ~",
  BD: "[~@5 d4 ~ bb4@25, ~ c3@12 ~@3, ~ g3@6 ~, ~@6 eb4@25 ~]/2",
// … 84 more lines

More by Ottawan