Strudelify
Last Dance cover art

1978

Last Dance

Donna Summer

KeyE♭ majorTempo127 bpm
0:00/0:00
// Last Dance — Donna Summer
// 127 bpm, 4/4, key Eb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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 · "BASS"
const bass = note(`<
  ~ A@2 B@2 A@2 C D B@2 E@2 F@2 G@2 E@2 H@2 I@2 J K L@2 M@2 N@2 O@2 P@2 Q@2 R@2 S T@2 U V W X Y Z AA AB AC AD AE AF AG
  AH AI AJ AK AL AM AN AO AP AQ AR U V W X AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR
  BS AT AU AV AW AX BT BU
>`.pickRestart({
  A: "eb3/2", B: "[eb2@15 ~]/2", C: "eb2", D: "bb1@7 ~", E: "[eb2@31 ~]/2", F: "[eb2@27 ~ eb2@4]/2", G: "[bb1@15 ~]/2",
  H: "[eb2@7 ~]/2", I: "[eb2@7 bb1]/2", J: "eb1@15 ~", K: "f1 g1", L: "[ab1@26 ~@2 ab1@3 ~]/2", M: "[ab1@31 ~]/2",
  N: "[g1@27 ~ g1@4]/2", O: "[c2@15 ~]/2", P: "[ab1@6 ab2 eb2]/2", Q: "[ab1@27 ~ ab1@3 ~]/2", R: "g1/2", S: "c2",
  T: "[f1@29 ~@3]/2", U: "bb1 ~@6 bb1 bb1@2 ~@6", V: "bb1 ~@6 bb1!2 f1 bb1@3 f1 bb1 ~", W: "bb1@2 ~@5 bb1!2 ~@7",
  X: "bb1 ~@5 bb1 ~ bb1@3 ~ bb1 f1 bb1 f1", Y: "bb1@2 ~@5 bb1!2 ~@5 f1 ~", Z: "bb1 f1 bb1 ~@13", AA: "a1@13 ~@3",
  AB: "bb1 f1 ~@4 bb1!2 ~ bb1 ~@2 bb1 eb1 bb1 ~", AC: "eb2@4 ~@2 eb2!2 ~@5 eb2 bb1 eb1",
  AD: "eb2@4 ~@2 eb2 ~@2 eb2 ~@2 eb2@2 eb1 ~", AE: "eb2 ~@5 eb2!2 ~ eb2 ~@2 eb2@2 eb1@2",
  AF: "bb1@4 ~@2 bb1 f1 ~ bb1 ~ bb1 f1@2 bb1 ~", AG: "eb2@4 ~@2 eb2!2 ~@4 eb2 bb1 eb2 [eb1,bb1]",
  AH: "~ eb2@4 ~ eb2!2 ~@6 bb1 ~", AI: "eb2@5 ~ eb2!2 ~@4 eb2 eb1 eb2 eb1", AJ: "eb2@4 ~@2 eb2 eb1@2 eb1 eb2@2 eb1@4",
  AK: "ab1@5 ~ ab1 ab2 ~ ab2@2 ab2 eb2 ab1 ab2@2", AL: "ab1@5 ~ ab1!2 ~ ab1 ~@2 ab1@2 ab2@2",
  AM: "g1@4 g2@2 g1 g2@6 g1@3", AN: "c2@5 ~ c2@2 ~@2 c2@2 ~ c2@2 ~", AO: "ab1@6 ab2 ab1 ~@2 ab1@2 ab2@2 ab1 ~",
  AP: "ab1@8 ab2 ab1 ~ ab1 ab2@2 ab1 ~", AQ: "g1@5 ~ g1@2 g2@2 g1 g2@2 ~ g2 ~, ~@13 g1@2 ~",
  AR: "c2@5 ~ c2@2 f1@3 f2@2 f1 f2 ~", AS: "c2@2 ~@5 c2!2 ~@5 g1 ~", AT: "c2 g1 c2 ~@13", AU: "b1@7 ~", AV: "bb1@15 ~",
  AW: "a1@7 ~", AX: "c2 g1 ~@4 c2!2 ~ c2 ~@2 c2 f1 c2 ~", AY: "f2@4 ~@2 f2!2 ~@5 f2 c2 f1",
  AZ: "f2@4 ~@2 f2 ~@2 f2 ~@2 f2@2 f1 ~", BA: "f2 ~@5 f2!2 ~ f2 ~@2 f2@2 f1@2",
  BB: "c2@4 ~@2 c2 g1 ~ c2 ~ c2 g1@2 c2 ~", BC: "f2@4 ~@2 f2!2 ~@4 f2 c2 f2 [f1,c2]", BD: "~ f2@4 ~ f2!2 ~@6 c2 ~",
  BE: "f2@5 ~ f2!2 ~@4 f2 f1 f2 f1", BF: "f2@4 ~@2 f2 f1@2 f1 f2@2 f1@4",
  BG: "bb1@5 ~ bb1 bb2 ~ bb2@2 bb2 f2 bb1 bb2@2", BH: "bb1@5 ~ bb1!2 ~ bb1 ~@2 bb1@2 bb2@2",
  BI: "a1@4 a2@2 a1 a2@6 a1@3", BJ: "d2@5 ~ d2@2 ~@2 d2@2 ~ d2@2 ~", BK: "bb1@6 bb2 bb1 ~@2 bb1@2 bb2@2 bb1 ~",
  BL: "bb1@8 bb2 bb1 ~ bb1 bb2@2 bb1 ~", BM: "a1@5 ~ a1@2 a2@2 a1 a2@2 ~ a2 ~, ~@13 a1@2 ~",
  BN: "d2@5 ~ d2@2 g1@3 g2@2 g1 g2 ~", BO: "c2 ~@6 c2 c2@2 ~@6", BP: "c2 ~@6 c2!2 g1 c2@3 g1 c2 ~",
  BQ: "c2@2 ~@5 c2!2 ~@7", BR: "c2 ~@5 c2 ~ c2@3 ~ c2 g1 c2 g1", BS: "c2@2 ~@5 c2 c2@2 ~@4 g1 ~",
  BT: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", BU: "f1@3 ~@13",
})).s("gm_acoustic_bass").gain(0.51).pan(0.6)

// chords · epiano2 · "ELEPIANO"
const epiano2 = note(`<
  ~ A@2 B@2 C@2 D E F@4 G@2 H@2 I@2 J@2 K@3 L M@2 N@2 O@2 P@2 Q@2 R@2 S@2 T U@2 V W V X V Y Z AA AB AC AD AE AF AG AH@2
  AI AJ AK AL AM AN AO AP V W V X AQ AR AS AT AU AV AW AX AY AZ BA BB BC@2 BD BE BF BG BH BI BJ BK AQ BL AQ BM AQ AR AS
  AT AU AV BN BO
>`.pickRestart({
  A: "[~@13 g5 ~ g5@17, [eb3,g3,bb3,d4,g4]]/2", B: "[[ab3,eb4]@15 ~]/2", C: "[eb3,d4,g4]/2", D: "[ab3,c4]",
  E: "[bb2,eb4]@7 ~", // Eb5
  F: "[~@16 d6@15 ~@13 c6@7 g5@5 ~@8, [eb3,bb3,d4,g4,bb4]@31 ab3@32 ~, ~ [ab4,c5], ~@32 eb4@25 ~@7]/4", // Ebmaj7 Ab
  G: "[~@12 bb4@3 ~, [eb3,g4]@15 ~, ~@6 bb3@9 ~, ~@8 d4@7 ~, ~@10 f4@5 ~]/2", // Eb
  H: "[bb3@11 ~@15 bb4@4 ~@2, gb5@15 ~, gb4@12 gb4@3 ~, ~@10 bb3@5 ~, ~@11 d4@4 ~]/2",
  I: "[~@7 g4, eb3@31 ~, g4@3 bb4, bb3@5 bb3@3, ~@9 g5@2 g5@5]/2",
  J: "[~@12 eb5@3 ~, ab3@15 ~, ~@7 bb4@8 ~, ~@16 c5@13 ~@3]/2",
  K: "[db4@19 ~@21 f5@8, [f4,bb4,db5]@41 ~@7, ~@5 db4@7]/3", // Bbm
  L: "~@8 [bb4,eb5]@7 ~, [eb3,eb4,g4,g5]@13 ~@3, ~@2 bb3@5 ~", // Eb5 Eb
  M: "[~@20 c4@11 ~, [ab2,g3], c4@3 eb4@5, eb4 g4@3, ~ eb3@7]/2", // Abmaj7
  N: "[ab2@11 ~@5 bb3@15 ~, [d4,f4], bb3 ~, ~@3 ab2@5]/2", O: "[g3@8 ~@5 g4@19, [g2,bb3], d4@5 d4@11, ~ g3@3]/2",
  P: "[c4 ~@5 [c4,g4]@2, g4@5 c3@3, c3@3 c3 c4@2 ~@2, eb4 eb4@3, ~ c4@3 f4@4]/2", // C5
  Q: "[~@5 c4@3, ~ [ab2,g3]@31, ~ eb4@11 eb4@20, ~ c4@9 c4@6 g4@16, ~@8 eb3@5 ~ eb3@18]/2", // Abmaj7
  R: "[ab2@8 ~@2 bb3@2 [bb3,d4,f4]@3 ~, [d4,f4]@3 ~, bb3@5 ~@3, ~@16 ab2@13 ~@3]/2", // Bb Dm
  S: "[g3@9 ~@11 g4@11 ~, [g2,f4]@31 ~, g4@5 ~@3, d4@9 ~@7, b3@7 g3@8 ~]/2", T: "g4@2 ~ eb4, [c3,c4], eb4@3 ~, ~ g4",
  U: "[[f2,c4,f4]@7 ~]/2", V: "[bb2,g3,bb3,d4]@7 ~", W: "[bb2,ab3,c4,eb4]@3 ~", X: "[bb2,ab3,c4,eb4]@15 ~",
  Y: "[bb2,ab3,c4,eb4] ~@2 [ab3,c4,eb4] [bb2,ab3,c4,eb4] ~@11", Z: "[a2,a3,c4,eb4,g4]",
  AA: "[bb2,ab3,c4,eb4]!2 ~@4 [bb2,ab3,c4,eb4]!2 ~@8", AB: "[eb3,g3,d4], [bb3,g4]@11 ~@5", AC: "[eb3,ab3,c4,eb4]",
  AD: "[g3,bb3,d4]@7 ~", AE: "gb4@7 ~ bb4@6 ~@2, [gb3,bb3,d4]@7 ~", AF: "[eb3,g3,bb3,d4,g4]@3 ~", AG: "[ab3,c4,eb4]",
  AH: "[bb3@4 ~@8 bb4@3 ~, [eb3,g3]@9 bb3 ab4 bb3@4 ~, g4@7 f4@8 ~, db4@6 db4@9 ~, ~@5 bb3@3 g4@7 ~]/2", // Eb
  AI: "[ab3,c4,eb4]@3 [ab3,c4,eb4], [ab2,eb3]", AJ: "[ab2,bb3,d4,f4]", AK: "[g2,g3,bb3,d4]",
  AL: "~ f4 eb4@2, c3, [c4,eb4,g4] ~", AM: "[ab2,eb3,g3,c4,eb4]", AN: "[bb2,bb3,d4,f4]", AO: "[g2,g3,b3,d4]",
  AP: "[c3,c4,eb4,g4]@4 [f2,f3,a3,c4]@3 ~", AQ: "[c3,a3,c4,e4]@7 ~",
  AR: "[c3,bb3,d4,f4] ~@2 [bb3,d4,f4] [c3,bb3,d4,f4] ~@11", AS: "[b2,b3,d4,f4,a4]", AT: "[bb2,d4,f4,a4]",
  AU: "[a2,c4,f4,a4]@13 ~@3", AV: "[c3,bb3,d4,f4]!2 ~@4 [c3,bb3,d4,f4]!2 ~@8", AW: "[f3,a3,e4], [c4,a4]@11 ~@5",
  AX: "[f3,bb3,d4,f4]", AY: "[a3,c4,e4]@7 ~", AZ: "ab4@7 ~ c5@6 ~@2, [ab3,c4,e4]@7 ~", BA: "[f3,a3,c4,e4,a4]@3 ~",
  BB: "[bb3,d4,f4]", BC: "[c4@4 ~@8 c5@3 ~, [f3,a3]@9 c4 bb4 c4@4 ~, a4@7 g4@8 ~, eb4@6 eb4@9 ~, ~@5 c4@3 a4@7 ~]/2",
  BD: "[bb3,d4,f4]@3 [bb3,d4,f4], [bb2,f3]", BE: "[bb2,c4,e4,g4]", BF: "[a2,a3,c4,e4]",
  BG: "~ g4 f4@2, d3, [d4,f4,a4] ~", BH: "[bb2,f3,a3,d4,f4]", BI: "[c3,c4,e4,g4]", BJ: "[a2,a3,db4,e4]",
  BK: "[d3,d4,f4,a4]@4 [g2,g3,b3,d4]@3 ~", BL: "[c3,bb3,d4,f4]@3 ~", BM: "[c3,bb3,d4,f4]@15 ~", BN: "[c3,bb3,d4,f4]",
  BO: "[f3,a3,c4] ~@15", // F
})).s("gm_epiano2").gain(0.41).pan(0.9)

// chords · epiano2 · "ELEPIANO" · soft notes
const epiano2_soft = note("<~ A ~ B@2 C@2 ~ D ~@2 E@2 F@2 G@2 H@2 I@2 ~@17 J ~ K@2 ~@62>".pickRestart({
  A: "~ [g5,ab5] g5 ab5 [g5,ab5] g5 ab5 [g5,ab5] g5 ab5 [g5,ab5] g5 ab5!2 ~@2", B: "[~@8 [c5,bb5]@7 ~, c4@15 ~]/2",
  C: "[~@4 g5!2 ab5 [g5,ab5] g5 ab5 g5 [g5,ab5] ab5 g5 [g5,ab5] ab5 g5 [g5,ab5] ab5 g5 g5@12, [g3,bb3], ~@20 ab5 ~@11]/2", // Abmaj7 Gm
  D: "[ab3,c4]@7 ~", E: "[~@24 ab5@7 ~, f4]/2", F: "[bb5@31 ~, bb4@3 ~, d4@13 ~@19]/2",
  G: "[~@6 gb6@9 ~, bb4@13 ~@3, d4@21 ~@11]/2", H: "[~@3 bb5, d4@31 ~, ~@20 c6@11 ~]/2",
  I: "[~@6 eb4@9 ~, ab4@15 ~, c5 ~]/2", J: "~@2 d4@13 ~, ~ b3@14 ~", K: "[[f3,a3]@7 ~]/2",
})).s("gm_epiano2").gain(0.2).pan(0.9)

// chords · trumpet · "BRASS"
const trumpet = note(`<
  ~@24 A B@2 C@2 D@2 E F@3 G@2 H@3 I@2 J K L M N O P Q ~@11 R S T ~ U J K L M V W X Y Z AA ~@3 AB ~@3 AC ~@3 AD T AE ~
  AF AG AH AI AJ V W X Y Z AA AK AL
>`.pickRestart({
  A: "~@4 db4@2 eb4@2 f4@2 g4 ~ ab4@2 bb4@2", B: "[c5@31 ~]/2", C: "[bb4@5 ab4 g4 ab4]/2", D: "[g4@15 ~]/2", E: "~ c5",
  F: "[d5@2 eb5@7 d5 c5@2]/3", G: "[bb4@20 g4@4 f4@4 g4@3 ~]/2", H: "[c5@39 ~ d5@4 eb5@4]/3", I: "[g5@3 ~]/2",
  J: "[f4,bb4] ~@2 [f4,bb4] ~@2 [f4,bb4] ~@3 [f4,bb4]!2 ~@2 [f4,bb4] ~", // Bb5
  K: "~@2 [ab4,c5] ~@3 [ab4,c5] ~ [ab4,c5] ~ [ab4,c5] ~ [ab4,c5]!2 ~@2", // Ab
  L: "~@2 [f4,bb4] ~@2 [f4,bb4] ~@2 [f4,bb4] ~@3 [f4,bb4]!2 ~@2", // Bb5
  M: "~@2 [ab4,c5] ~@2 [ab4,c5] ~@2 [ab4,c5] ~ [ab4,c5] ~ [ab4,c5]!2 ~@2", // Ab
  N: "~@2 [f4,bb4] ~@2 [f4,bb4] ~@2 [f4,bb4] ~@3 [f4,bb4] ~@3", O: "bb4 bb3 bb4 bb3 bb4 ~@11",
  P: "g4@2 c5@2 eb5@2 f5@2 g5@2 f5@2 eb5@2 c5 ~", Q: "[ab4,c5,eb5]!2 ~@4 [ab4,c5,eb5]!2 ~@8",
  R: "[bb4,d5]@4 [c5,eb5]@4 [bb4,d5]@4 [g4,c5]@3 ~", S: "~@2 [c5,eb5] ~ [c5,eb5]!2 ~@2 [c5,eb5] ~@2 [c5,eb5]@3 ~@2",
  T: "~@2 [d5,f5] ~ [d5,f5]!2 ~@2 [d5,f5] ~@2 [d5,f5]@3 ~@2", U: "[bb4,d5]@2 [c5,eb5]@2 [eb5,g5]@3 ~",
  V: "~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@3 [g4,c5] ~@3", W: "c5 c4 c5 c4 c5 ~@11",
  X: "a4@2 d5@2 f5@2 g5@2 a5@2 g5@2 f5@2 d5 ~", Y: "~@4 [d4,d5]@4 [f4,f5]@4 [a4,a5]@3 ~",
  Z: "~@4 [c4,c5]@3 ~ [f4,f5]@3 ~ [a4,a5]@2 ~@2", AA: "[bb4,d5,f5]!2 ~@4 [bb4,d5,f5]!2 ~@8",
  AB: "~@2 [ab4,ab5] ~ [ab4,ab5]!2 ~@2 [ab4,ab5] ~@2 [ab4,ab5]@2 ~ [ab4,ab5] ~", AC: "eb5@4 g5@4 bb5@3 ~ d6@2 ~@2",
  AD: "[c5,e5]@4 [d5,f5]@4 [c5,e5]@4 [a4,d5]@3 ~", AE: "~@2 [e5,g5] ~ [e5,g5]!2 ~@2 [e5,g5] ~@2 [e5,g5]@3 ~@2",
  AF: "[c5,e5]@2 [d5,f5]@2 [f5,a5]@3 ~", AG: "[g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@3 [g4,c5]!2 ~@2 [g4,c5] ~",
  AH: "~@2 [bb4,d5] ~@3 [bb4,d5] ~ [bb4,d5] ~ [bb4,d5] ~ [bb4,d5]!2 ~@2", // Bb
  AI: "~@2 [g4,c5] ~@2 [g4,c5] ~@2 [g4,c5] ~@3 [g4,c5]!2 ~@2", // C5
  AJ: "~@2 [bb4,d5] ~@2 [bb4,d5] ~@2 [bb4,d5] ~ [bb4,d5] ~ [bb4,d5]!2 ~@2", AK: "[c4,c5]", AL: "[f4,f5,f6] ~@7",
})).s("gm_trumpet").gain(0.41).pan(0.2)

// chords · electric guitar jazz · "GUITAR"
const electric_guitar_jazz = note(`<
  ~ A@2 B@2 C@2 D E ~@16 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M N@2 O P Q R S T ~ U V W X Y V W Z AA AB AC AD AE AF AG AH AI O P
  Q R AJ AK ~ AL AM AN AO AP AQ AR AO AP AS AT AU AV AW AX AY AZ BA BB BC BD BE BF AJ AK ~ AL AM AN BG ~
>`.pickRestart({
  A: "[~@4 eb5@3 ~, ~ eb3@5 g4@8 ~@2, ~ bb3@6 ~, ~@5 d4@23 ~@4, ~@4 g4 bb4@9 ~@2]/2",
  B: "[~@5 c5@9 ~@2, ~ ab3@13 ~@2, ~ eb4@6 ~, ~@3 ab4@11 ~@2, ~@2 bb4@5 ~]/2",
  C: "[~@2 bb3 ~@9 g5@4, ~ eb3@9 d5@6, ~@3 d4@13, ~ g4@3, ~@17 eb4@15]/2", D: "~ eb4 ~@2 eb5@4, ab3, ~ ab4@3, ~@3 c5@5",
  E: "[bb3,ab4,c5,eb5]@13 ~@3", F: "[~@20 c4@11 ~, [ab2,g3], c4@3 eb4@5, eb4 g4@3, ~ eb3@7]/2",
  G: "[ab2@11 ~@5 bb3@15 ~, [d4,f4], bb3 ~, ~@3 ab2@5]/2", H: "[g3@8 ~@5 g4@19, [g2,bb3], d4@5 d4@11, ~ g3@3]/2",
  I: "[c4 ~@5 [c4,g4]@2, g4@5 c3@3, c3@3 c3 c4@2 ~@2, eb4 eb4@3, ~ c4@3 f4@4]/2", // C5
  J: "[~@5 c4@3, ~ [ab2,g3]@31, ~ eb4@11 eb4@20, ~ c4@9 c4@6 g4@16, ~@8 eb3@5 ~ eb3@18]/2", // Abmaj7
  K: "[ab2@8 ~@2 bb3@2 [bb3,d4,f4]@3 ~, [d4,f4]@3 ~, bb3@5 ~@3, ~@16 ab2@13 ~@3]/2", // Bb Dm
  L: "[g3@9 ~@11 g4@11 ~, [g2,f4]@31 ~, g4@18 d4@13 ~, d4@17 b3@14 ~, b3@7 g3@8 ~]/2", // G7
  M: "g4@2 ~ eb4, [c3,c4], eb4@3 ~, ~ g4", N: "[[f2,f3,a3,c4,f4]@7 ~]/2",
  O: "[bb3,eb4] ~@2 [bb3,eb4] ~ bb2 [bb3,eb4] ~ [bb3,eb4] bb2 ~ bb2 [bb3,eb4] ~ bb3 bb2", // Eb5
  P: "bb3 ~ bb3 ~ bb3 bb2 bb3 bb2 bb3 ~ [bb3,eb4] ~ [bb3,eb4]!2 ~@2", // Eb5
  Q: "[bb3,eb4] ~ [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~ bb3 bb2 bb3 bb2 bb3 bb2", // Eb5
  R: "bb3 ~ bb3 ~ bb3 bb2 ~ bb2 bb3 ~ bb3 ~ bb3 bb2 bb3 bb2",
  S: "bb3 ~ [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~ [bb3,eb4] ~ bb3 bb2 bb3 bb2", T: "bb3 bb2 bb3 bb2 bb3 ~@11",
  U: "[ab3,c4,eb4]!2 ~@4 [ab3,c4,eb4]!2 ~@8", V: "~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4]@5 ~@3",
  W: "~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]@4 ~@4", // Ab
  X: "~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~", // Gm
  Y: "~@2 [d4,gb4,bb4]@2 ~ [d4,gb4,bb4] ~@2 [d4,gb4,bb4] ~@2 [d4,gb4,bb4] ~@2 [d4,gb4,bb4] ~", // Daug
  Z: "~@2 [db4,g4,bb4] ~@2 [db4,g4,bb4] ~@2 [db4,g4,bb4]@8", // Gdim
  AA: "~@2 [db4,g4,bb4] ~@2 [db4,g4,bb4] ~@2 [db4,g4,bb4]@7 ~", // Gdim
  AB: "~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~", // Ab
  AC: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]@6 ~@2", // Bb
  AD: "~@2 [g3,bb3,d4] ~@2 [g3,bb3,d4] ~@2 [g3,bb3,d4]@4 ~@4", // Gm
  AE: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]@4 ~@4", // Cm
  AF: "~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4]@5 ~@3", // Ab
  AG: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]@4 ~@4", AH: "~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4]@4 ~@4",
  AI: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@4 f4 f3 ~ f3 f4 ~", // Cm
  AJ: "c4 ~ [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4] ~ [c4,f4] ~ c4 c3 c4 c3", AK: "c4 c3 c4 c3 c4 ~@11",
  AL: "[bb3,d4,f4]@11 ~@5", AM: "[a3,c4,f4]@11 ~@5", AN: "[bb3,d4,f4]!2 ~@4 [bb3,d4,f4]!2 ~@8",
  AO: "~@2 [e4,a4,c5] ~@2 [e4,a4,c5] ~@2 [e4,a4,c5]@5 ~@3", AP: "~@2 [d4,f4,bb4] ~@2 [d4,f4,bb4] ~@2 [d4,f4,bb4]@4 ~@4",
  AQ: "~@2 [e4,a4,c5] ~@2 [e4,a4,c5] ~@2 [e4,a4,c5] ~@2 [e4,a4,c5] ~@2 [e4,a4,c5] ~", // Am
  AR: "~@2 [e4,ab4,c5]@2 ~ [e4,ab4,c5] ~@2 [e4,ab4,c5] ~@2 [e4,ab4,c5] ~@2 [e4,ab4,c5] ~", // Eaug
  AS: "~@2 [eb4,a4,c5] ~@2 [eb4,a4,c5] ~@2 [eb4,a4,c5]@8", AT: "~@2 [eb4,a4,c5] ~@2 [eb4,a4,c5] ~@2 [eb4,a4,c5]@7 ~",
  AU: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~", // Bb
  AV: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4]@6 ~@2", AW: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4]@4 ~@4",
  AX: "~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@2 [d4,f4,a4]@4 ~@4", AY: "~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2 [bb3,d4,f4]@5 ~@3",
  AZ: "~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4]@4 ~@4", BA: "~@2 [a3,db4,e4] ~@2 [a3,db4,e4] ~@2 [a3,db4,e4]@4 ~@4",
  BB: "~@2 [d4,f4,a4] ~@2 [d4,f4,a4] ~@4 g4 g3 ~ g3 g4 ~", // Dm
  BC: "[c4,f4] ~@2 [c4,f4] ~ c3 [c4,f4] ~ [c4,f4] c3 ~ c3 [c4,f4] ~ c4 c3", // F5
  BD: "c4 ~ c4 ~ c4 c3 c4 c3 c4 ~ [c4,f4] ~ [c4,f4]!2 ~@2", // F5
  BE: "[c4,f4] ~ [c4,f4] ~@2 [c4,f4] ~@2 [c4,f4] ~ c4 c3 c4 c3 c4 c3", BF: "c4 ~ c4 ~ c4 c3 ~ c3 c4 ~ c4 ~ c4 c3 c4 c3",
  BG: "[c3,bb3,d4,f4]@3 [c3,bb3,d4,f4]!5", // Bb
})).s("gm_electric_guitar_jazz").gain(0.36).pan(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A@4 B@3 ~@6 C@3 ~@4 D@4 E F ~@2 G@2 ~@2 E H I@2 ~@2 J K ~ L M N O P ~ Q R ~@8 S ~ T U V W X Y L M N O Z ~ AA AB AC
  AD AE AF AG@2 AH AI AJ@2 AK ~ AL AM AN AO AP AQ AR N AS AT Z ~ AA AB AC AD AH AU
>`.pickRestart({
  A: "[bb5@15 ~]/4", B: "[bb5@47 ~]/3", C: "[[bb4,bb5]@47 ~]/3", D: "[bb5@31 ~, bb4@57 ~@7]/4",
  E: "~@4 [eb5,g5] [d5,f5] c5 [d5,f5], ~@12 eb5 ~@3", F: "[eb5,g5]@15 ~", G: "[bb3,d4]/2", H: "[eb5,g5]",
  I: "[d4@8 ~@8 bb4@15 ~, bb3@6 ~@2 d4@23 ~]/2", J: "~@2 [f4,d5] [g4,eb5]", K: "eb5 ~@15", L: "[g3,bb3,d4]",
  M: "[ab3,c4,eb4]", N: "[bb3,d4,f4]", O: "[c4,eb4,ab4]@7 ~",
  P: "[bb4,bb5] [c5,c6] [bb4,bb5] [g4,g5] [bb4,bb5] [c5,c6] [bb4,bb5] [g4,g5] [bb4,bb5] [c5,c6] [bb4,bb5] [g4,g5] [bb4,bb5] [c5,c6] [bb4,bb5] [g4,g5]", // Bb C Bb G Bb C Bb G …
  Q: "[a3,g4,c5,eb5]@15 ~", R: "eb6 c6 bb5 g5 f5 eb5 c5 bb4 g4 ~@7", S: "eb5", T: "[bb4,d5]", U: "[eb4,g4]",
  V: "[eb4,ab4,c5]", W: "[d5,f5]", X: "[b4,d5]", Y: "[eb5,g5]@8 [f4,f5]@7 ~",
  Z: "[c5,c6] [d5,d6] [c5,c6] [a4,a5] [c5,c6] [d5,d6] [c5,c6] [a4,a5] [c5,c6] [d5,d6] [c5,c6] [a4,a5] [c5,c6] [d5,d6] [c5,c6] [a4,a5]", // C D C A C D C A …
  AA: "[b3,a4,d5,f5]@15 ~", AB: "[bb4,d5,f5]@15 ~", AC: "[a4,c5,f5]@7 ~", AD: "f6 d6 c6 a5 g5 f5 d5 c5 a4 ~@7",
  AE: "[c5,c6]@6 [a4,a5] [c5,c6]", AF: "[d5,d6]", AG: "[[c5,c6]@24 [e5,e6]@4 [d5,d6]@3 ~]/2", AH: "[c5,c6]",
  AI: "[d5,d6]@3 [c5,c6]", AJ: "[[eb5,eb6]@20 [g5,g6]@4 [bb5,bb6]@7 ~]/2", AK: "f5", AL: "[c5,e5]", AM: "[f4,a4]",
  AN: "[f4,bb4,d5]", AO: "[e5,g5]", AP: "[db5,e5]", AQ: "[f5,a5]@8 [g4,g5]@7 ~", AR: "[a3,c4,e4]", AS: "[c4,e4,g4]",
  AT: "[d4,f4,bb4]@7 ~", AU: "[f5,f6,a6] ~@7",
})).s("gm_string_ensemble_1").gain(0.41).pan(0.7)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~ A@2 B@2 C@2 D@2 ~@16 E@2 F@2 G@2 H@2 I@2 J@2 K@2 ~ L@2 ~@16 M N O P ~ Q O R ~@18 S T U V ~ W U X ~@12
>`.pickRestart({
  A: "[[bb3,d4,g4], eb3@15 ~]/2", B: "[[c4,ab4]@7 ~]/2", C: "[~ [d4,g4]@27 ~@4, [eb3,bb3]@29 ~@3]/2",
  D: "[[c4,eb4,ab4]@13 ~@3 bb3@14 ~@2, ~@15 [eb4,ab4]@14 ~@3]/2", E: "[[ab3,c4,eb4]@31 ~]/2", F: "[bb3,d4,f4]/2",
  G: "g3/2", H: "[[eb4,g4], c4 ~@31]/2", I: "[[c4,eb4]@7 ~, ab3@3 ~@13]/2", J: "[g3@6 ~@2 f4@23 ~]/2",
  K: "[[g4,c5,d5]@31 ~, g5 ~]/2", L: "[[f4,a4,c5]@27 ~@5]/2", M: "[ab4,c5]", N: "[bb4,d5,f5]", O: "g4", P: "c4",
  Q: "bb4", R: "c5 ~", S: "[bb4,d5]", T: "[c5,e5,g5]", U: "a4", V: "d4", W: "c5", X: "d5 ~",
})).s("gm_string_ensemble_1").gain(0.26).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@41 A B@5 C B D B@21 C B@3 D B@21 C B@3 D E@2>".pickRestart({
  A: "~@14 x!2", B: "x!4", C: "~@9 x ~@6", D: "x!2 ~@2 x ~@3 x ~@3 x ~@3", E: "x",
})).gain(0.51)
// … 48 more lines

More by Donna Summer