Strudelify

Heartbreaker

Dionne Warwick

KeyG♯ minorTempo101 bpm
0:00/0:00
// Heartbreaker — Warwick, Dionne
// 101 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 3, 2/4 at bar 4, 4/4 at bar 5, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(101/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 · electric bass finger
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R K S T U V W X Y@2 Z AA AB Y@2 AB AC AD AE AF AG AH AB AI Y@2 AJ AK AL AG AH AB AI
  Y@2 AJ AM AN N AO AP AQ AR AS AT AU U AV AW AX Y@2 Z AC AD AE AY AZ AH AK AI Y@2 AJ BA A B BB BC BD BE BF BG BH BI BJ
  BK BL BM BE BF BG BH BI BJ BK BL BM BE BF BG BH BI BJ BK BL BM BE BF BG BH BI BJ BK BN@6
>`.pickRestart({
  A: "g#1@5 ~ g#1 ~ g#1@3 ~ g#1 ~ g#1 ~", B: "c#2@5 ~ g#1@5 ~ f#1@4", C: "~@2 g#1 ~ g#1@5 ~ g#1 ~ g#1@4",
  D: "~@2 g#1 ~ g#1@5 ~ g#1 ~ f#1@4", E: "~@2 f#1 ~ g#1@5 ~ g#1 ~ g#1@3 ~", F: "g#1 ~ g#1 ~ c#2@5 ~ g#1@5 ~",
  G: "f#1@5 ~ e1 ~ e1@3 ~ e1 ~ e2 ~", H: "e2 ~ b1 ~ b1 ~ e2 ~ e1@5 ~ e1 ~", I: "e1@5 ~ e1 ~ e1@3 ~ b1 ~ c#2 ~",
  J: "e1@5 ~ e2 ~ e1@3 ~ e1@3 ~", K: "~@2 b1 ~ e2@3 ~ e1@3 ~ g#1 ~ b1 ~", L: "c#2@5 ~ c#2 ~ c#2@5 ~ g#1 ~",
  M: "~@2 c#2@3 ~ g#1 ~ g#1@3 ~ c#2 ~ e1 ~", N: "f#1@5 ~ f#1 ~ f#1@5 ~ c#2 ~",
  O: "f#2 ~ f#2 ~ f#2 ~ c#2 ~ f#2@3 ~ f#1 ~ f#1 ~", P: "f#1@5 ~ f#1 ~ f#1@5 ~ b1 ~",
  Q: "b1 ~ f#2@3 ~ b2 ~ b1@3 ~ b1 ~ c#2 ~", R: "e1@5 ~ e1 ~ e1@3 ~ e2 ~ e2@2", S: "c#2@5 ~ c#2 ~ c#2@5 ~ c#2@2",
  T: "~@2 g#1@3 ~ c#2 ~ c#2@3 ~ g#1 ~ e1 ~", U: "f#1@5 ~ f#1 ~ f#1@5 ~ f#2@2", V: "~@2 c#2@3 ~ f#2 ~ f#1@5 ~ f#1 ~",
  W: "f#1@5 ~ f#2 ~ f#1 ~ f#2 ~ f#2 ~ f#1 ~", X: "b2 ~ b1 ~ b2 ~ b1 ~ b1 ~@3 b1 ~ f#1 g1",
  Y: "g#1@5 ~ g#1 ~ c#2@5 ~ c#2 ~", Z: "g#1@5 ~ d#2 ~ g#2 ~ g#2@3 ~ g#1 ~", AA: "f#1@5 ~ f#1 ~ b1@5 ~ b1 ~",
  AB: "g#1@5 ~ d#2 ~ g#2 ~ g#2@3 ~ d#2 ~", AC: "a1@5 ~ a1 ~ a1@5 ~ e1 ~", AD: "a1 ~ a1@3 ~ e2 ~ a2 ~ a2@3 ~ e2 ~",
  AE: "a1@5 ~ a1 ~ a1@5 ~ e2 ~", AF: "a1 ~ a1@3 ~ e2 ~ a2@3 ~ e2 ~ e2 ~", AG: "e1@5 ~ e1 ~ e1@5 ~ f1 ~",
  AH: "f#1@5 ~ f#1 ~ b1@3 ~ b1 ~ b1 ~", AI: "a1@5 ~ a1 ~ b1@3 ~ b1 ~ b1 ~", AJ: "a1@5 ~ e2 ~ a2 ~ a2@3 ~ e2 ~",
  AK: "g#1@5 ~ g#1 ~ g#1@5 ~ g#1 ~", AL: "g#1 ~ g#1@3 ~ g#1 ~ b1 ~ b1 ~ g#1 ~ f#1 ~", AM: "g#1@5 ~ g#1 ~ g#1@5 ~ d#2 ~",
  AN: "g#2 ~ g#2@3 ~ d#2 ~ g#1@5 ~ g#1 ~", AO: "f#2 ~ f#2@3 ~ c#2 ~ f#1@5 ~ f#1 ~", AP: "e1@5 ~ e1 ~ e1@5 ~ b1 ~",
  AQ: "e2 ~ e2@3 ~ b1 ~ e1@3 ~ b1 ~ b1 ~", AR: "e1@5 ~ e1 ~ e1@3 ~ e2 ~ e2 ~", AS: "~@2 b1@3 ~ c#2 ~ e1@3 ~ e2 ~ g#1 ~",
  AT: "c#2@5 ~ c#2 ~ c#2@5 ~ c#2 ~", AU: "~@2 g#1@3 ~ c#2 ~ g#1@3 ~ c#2 ~ e1 ~", AV: "~@2 c#2@3 ~ f#2 ~ f#1@5 ~ c#2 ~",
  AW: "f#1@5 ~ f#2 ~ f#1@3 ~ f#2 ~ b1 ~", AX: "b2 ~ b1 ~ b2 ~ b2 ~ b1@3 ~ b2@3 ~",
  AY: "a1 ~ a1@3 ~ e2 ~ a2@3 ~ a1 ~ a1 ~", AZ: "e1@5 ~ e1 ~ e1@3 ~ e1 ~ e1 ~", BA: "g#2@5 ~ d#2 ~ g#1 ~ g#1 ~@3 g#1!2",
  BB: "~@2 e1 ~ e1 ~ e1 ~ e2 ~ e2!2 b1 ~ e2 ~", BC: "c#2@3 ~ c#2 ~ c#3 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  BD: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ g#1 ~ c#2!2 f#2@4", BE: "~@2 c#2 ~ f#2@3 ~ c#2 ~ f#1 ~ g#1@4",
  BF: "~@2 g#1 ~ c#2@3 ~ c#2@3 ~ a#1@4", BG: "~@2 f2 ~ a#2 ~ a#2 ~@3 f2 ~ b1@4",
  BH: "~@2 b1 ~ c#2@3 ~ c#2 ~ c#2 ~ a#1@4", BI: "~@2 f2 ~ d#2@5 ~ a#2 ~ a#1@4",
  BJ: "~@2 d#2 f2 d#2@3 ~ d#2 ~ d#2 ~ b1@3 ~", BK: "b1 ~ b1 ~ b1@5 ~ f#2 ~ a#2@3 ~",
  BL: "a#2 ~ f2 ~ a#2 ~ a#2@3 ~ f2 ~ a#2@4", BM: "~@2 g#1 ~ c#2 ~ c#2 ~ g#1 ~ c#2 ~ f#2@4",
  BN: "[a#2 ~ f2 ~ a#2 ~ a#2@3 ~ f2 ~ a#2@6 g#1@2 c#2@2 c#2@2 ~ g#1@2 c#2@2 ~ f#1@56 ~@10]/6",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · epiano2
const epiano2 = note(`<
  A B C D E F G@3 H@2 I@2 J@2 K L M@2 N@2 O P Q R S T U V U T@2 U W@2 X@2 Y Z AA AB AC@2 AD AE@2 Y Z AA AB AC@2 AD AF@2
  AG@2 AH@2 M@2 N@2 O P Q R T@2 U W@2 X@2 Y Z AA AB AC@2 AD AI AJ AK AL AM@3 AN@7 AO@2 AN@7 AO@2 AN@7 AO@2 AN@7 AP@5
>`.pickRestart({
  A: "[g#3,b3,d#4]@5 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@2 [g#3,b3,d#4] ~", // G#m
  B: "[g#3,c#4,e4]@5 ~ [g#3,b3,d#4]@5 ~ [f#3,a#3,c#4]@4", C: "~@2 [d#3,g#3,b3]@7 ~ [d#3,g#3,b3]@5 ~",
  D: "[d#3,g#3,b3] ~ [d#3,g#3,b3] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [f#3,a#3,c#4]@3 ~", // G#m F#
  E: "[f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [g#3,b3,d#4]@5 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4]@3 ~", // F# G#m
  F: "[g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,c#4,e4]@5 ~ [g#3,b3,d#4]@5 ~", // G#m C#m G#m
  G: "[[f#3,a#3,c#4]@5 ~ [e3,g#3,b3]@7 ~ [e3,g#3,b3]@5 ~ [g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@23 ~]/3", // F# E G#m
  H: "[[g#3,b3,e4]@23 ~@5 e4@3 ~, ~@24 g#3@7 ~, ~@26 b3@5 ~]/2", I: "[[c#4,e4]@18 g#4@6 e4@4 c#4@3 ~, g#3@31 ~]/2",
  J: "[[c#4,e4]@18 f#4@2 e4@2 c#4@4 ~@2 a3@2 c#4 ~, [f#3,a3]@25 ~ f#3@5 ~]/2", // C#m F#m
  K: "[f#3,a3,c#4,e4]@11 ~ [f#3,a3,c#4,e4]@3 ~", L: "[b3,d#4,f#4]@10 f#4 d#4 b3@2 f#3@2, f#3@3 ~",
  M: "[[e4,g#4,b4]@23 ~ [e4,g#4,b4]@7 ~]/2", // E
  N: "[[c#4,e4,g#4]@18 ~@6 g#4@7 ~, ~@18 g#3@13 ~, ~@20 c#4@11 ~, ~@22 e4@9 ~]/2", O: "[c#4,e4,f#4,a4]@15 ~",
  P: "[c#4,e4,f#4,a4]@8 ~@4 f#4@2 a4 ~, ~@8 c#4@7 ~, ~@10 e4@5 ~", Q: "[c#4,e4,f#4,a4]@7 ~",
  R: "[b3,d#4,f#4]@6 ~ d#4, ~@3 b3", S: "[b3,d#4,g#4]@7 ~ [c#4,e4]@7 ~", T: "[b3,d#4]@7 ~ [c#4,e4]@7 ~, g#4@15 ~",
  U: "[b3,d#4,g#4]@15 ~", V: "[a3,c#4,e4]@7 ~ [b3,d#4,f#4]@7 ~",
  W: "[[e4,g#4]@17 ~ a4@2 g#4@2 ~@6 c#4@2 a3@2, a3@7 ~, c#4@13 ~@3, ~@11 e4@5]/2", // E
  X: "[e4@5 a4@4 e4@4 ~@2 e4, [a3,c4]@13 a3@3, ~@7 c4]/2", Y: "[b3,e4,g#4]@15 ~",
  Z: "[a3,c#4,f#4]@7 ~ [b3,d#4,f#4]@7 ~", AA: "d#4@10 g#4@2 d#4@3 ~, b3, g#3@7 ~",
  AB: "[a3,c#4,e4]@7 ~ [b3,d#4,f#4]@4 ~@2 d#4 f#4, ~@13 b3@3", AC: "[g#3,b3,d#4]@7 ~ [g#3,c#4,e4]@7 ~",
  AD: "[c#4,e4]@9 ~ a4@2 e4@2 c#4@2, a3", // C#m
  AE: "[[b3,d#4]@10 ~@4 d#4@9 ~ [b3,d#4,f#4]@8, g#3@9 ~ g#3@13 ~@9, ~@12 b3@11 ~@9]/2", // B
  AF: "[[b3,d#4,f#4]@18 ~@6 f#4@4 [b3,d#4,f#4]@3 ~, ~@18 g#3@4 d#4@5 ~@5, ~@20 b3@7 ~@5]/2", // B
  AG: "[e4@18 a4@2 f#4@2 e4@6 f#4@3 ~, [a3,c#4]@31 ~]/2", AH: "[[b3,e4], g#3@15 ~]/2",
  AI: "[b3,d#4]@5 ~@2 d#4, g#3@9 ~ g#3@6, ~@3 b3", // B
  AJ: "[g#3,b3,d#4]@6 [g#3,b3,d#4]@2 [g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@2 [g#3,b3,d#4] ~", // G#m
  AK: "[g#3,c#4,e4]@2 ~ [g#3,b3,d#4]@2 ~ [f#3,a#3,c#4]@2", AL: "~@2 [d#3,g#3,b3]@7 ~ [g#3,b3,d#4]@5 ~",
  AM: "[[b3,d#4,f#4,a#4]@27 ~ [f#3,a#3,c#4]@11 ~ [f#3,a#3,c#4]@2 ~@2 [g#3,b3,d#4]@4]/3", // Bmaj7 F# G#m
  AN: "[~@4 [g#3,c#4,f4]@6 ~@2 [a#3,c#4,f4]@10 ~@2 f4@3 ~ [b3,d#4,f#4]@7 ~ [g#3,c#4,f4]@7 ~ [f3,a#3,c#4]@7 ~ c#4@4 d#4@2 ~@2 [f3,a#3,c#4]@11 ~ [f#3,a#3,c#4,d#4]@4 ~@2 b3@2 ~@2 d#4@6 f#3@2 [b3,d#4]@2 [f3,a#3,c#4]@9 ~@3 a#3@2 c#4@2 [f3,a#3,c#4]@3 ~, ~@22 a#3@5 ~@25 [f#3,a#3]@6 ~@20 f#3@10 ~@14 f3@5 ~@5, ~@23 c#4@4 ~@53 b3@8 ~@24]/7", // C# A#m B C# A#m D#m7 B A#m …
  AO: "[[f3,g#3,c#4]@3 ~ [f#3,g#3,c#4]@3 ~ [f3,g#3,c#4]@3 ~ [f#3,a#3,c#4]@11 ~ [f#3,a#3,c#4]@2 ~@2 [g#3,b3,d#4]@4]/2", // C# F#sus2 C# F# G#m
  AP: "[[f3,g#3,c#4]@3 ~ [f#3,g#3,c#4]@3 ~@2 [f3,g#3,c#4]@3 ~@2 [c#4,f4,g#4,a#4]@56 ~@10]/5", // C# F#sus2 C# A#m7
})).s("gm_epiano2").gain(0.35).pan(0.3)

// other · piano
const piano = note(`<
  ~@7 A@2 ~@8 B@2 ~@2 C@2 ~@14 D E ~ F G@2 H I@2 D E ~ F G@2 H J@2 K@2 B@4 ~@2 C@2 ~@9 D E ~ F G@2 H I@2 ~@40 L M@2 ~
>`.pickRestart({
  A: "[~@4 e4 d#4@2 b3@9]/2", B: "e2/2", C: "f#2/2", D: "e2", E: "f#2 b2", F: "~@3 b2, ~@12 a2 ~@3", G: "g#2 c#2",
  H: "a2", I: "[g#2@23 ~@9]/2", J: "[g#2@27 ~ g#2@4]/2", K: "[f#2@29 ~@3]/2",
  L: "~@3 [g#4,a#4,c#5] f#5@6 ~ f5@3 f#5@2, ~@4 d#5 ~@11", M: "[~ g#5@3 a#5@6 g#5@17 ~@5]/2",
})).s("gm_piano").gain(0.35).pan(0.8)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@9 A B C@2 D@3 E A B C@2 D@3 E F@2 G H G F@2 G I@2 J@2 K L G M F@2 N G O K L G M F@2 N E@2 N@2 K@2 A B C@2 D@3 E P F
  G I@2 J@2 K L G M F@2 N G ~@4 Q R S T U V W X Y Z R S T U V W X Y Z R S T U V W X Y Z R S T U V W X Y AA@5
>`.pickRestart({
  A: "[e3,b3] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~", // E5 E
  B: "[e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~", // E
  C: "[e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~ [e3,g#3,c#4,e4] ~", // C#m
  D: "[f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~", // F#m7
  E: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // B
  F: "[g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~", // G#m C#m
  G: "[g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~", // G#m
  H: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4] ~", // A B
  I: "[g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~", // C#m
  J: "[a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~", // Am
  K: "[g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~ [g#3,b3,e4] ~", // E
  L: "[f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // F#m B
  M: "[e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // A B
  N: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // A
  O: "[g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [d#3,f#3,b3] ~ [f#3,b3,d#4] ~", // G#m B
  P: "g#3 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~ [g#3,c#4,e4] ~", // G#m C#m
  Q: "~@12 [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~", // F#
  R: "[f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~", // F# G#m
  S: "[g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [e3,f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~", // G#m C# A#m
  T: "[f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // A#m B
  U: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,a#3] ~ [f3,g#3,a#3] ~", // B C# A#7
  V: "[f3,g#3,a#3] ~ [f3,g#3,a#3] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~", // A#7 D#m A#m
  W: "[f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [d#3,f#3,a#3] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // A#m D#m B
  X: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~", // B A#m
  Y: "[f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~ [f3,a#3,c#4] ~", // A#m
  Z: "[f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f#3,g#3,c#4] ~ [f#3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~", // C# F#sus2 C# F#
  AA: "[[f3,g#3,c#4] ~ [f3,g#3,c#4] ~ [f#3,g#3,c#4] ~ [f#3,g#3,c#4]@2 ~ [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 ~ [f#3,a#3,c#4]@56 ~@10]/5", // C# F#sus2 C# F#
})).s("gm_acoustic_guitar_nylon").gain(0.15)

// chords · overdriven guitar
const overdriven_guitar = note("<A B C D E F G@3 ~@73 A B H I@2 ~@40>".pickRestart({
  A: "~@2 [d#4,g#4,b4]@2 [c#4,f#4,a#4]@2 [b3,d#4,g#4]@3 ~ [g#3,b3,d#4]@3 ~ [d#3,g#3,b3]@2", // G#m F# G#m
  B: "[g#3,c#4,e4]@2 [g#3,b3,d#4]@2 [g#3,c#4,e4]@2 [g#3,b3,d#4]@5 ~ [f#3,a#3,c#4]@2 [g#3,b3,d#4]@2", // C#m G#m C#m G#m F# G#m
  C: "[f#3,a#3,c#4]@2 [g#3,b3,d#4]@7 ~ [d#3,g#3,b3]@5 ~", D: "[g#3,b3,d#4]@13 ~ [b3,d#4,g#4]@2",
  E: "[c#4,f#4,a#4]@2 [d#4,g#4,b4]@3 ~ [c#4,f#4,a#4]@3 ~ [b3,d#4,g#4]@3 ~ [g#3,b3,d#4]@2", // F# G#m F# G#m
  F: "~@2 [d#3,g#3,b3]@2 [g#3,c#4,e4]@2 [g#3,b3,d#4]@2 [g#3,c#4,e4]@2 [g#3,b3,d#4]@5 ~", // G#m C#m G#m C#m G#m
  G: "[[f#3,a#3,c#4]@2 [g#3,b3,d#4]@2 [f#3,a#3,c#4]@2 [e3,g#3,b3]@7 ~ [g#3,b3,e4]@5 ~ [g#3,b3,d#4]@27 ~]/3", // F# G#m F# E G#m
  H: "[f#3,a#3,c#4]@2 [e3,g#3,b3,d#4]@7 ~ [e3,g#3,b3,d#4]@5 ~", I: "[[g#3,b3,d#4,f#4]@27 ~@5]/2",
})).s("gm_overdriven_guitar").gain(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@25 A B C ~ D A B C E F G@2 H I J K L@2 M N@2 H I J K L@2 E O@2 P@2 E Q R@2 ~@5 S T U V W X Y@2 Z AA AB AC AD AE AF Z
  ~@4 AG@6 AH@3 AI@6 AH@3 AI@6 AH@3 AI@6 AH@3 AJ@5
>`.pickRestart({
  A: "b3 c#4", B: "d#4 e4", C: "f#4", D: "d#4 e4 d#4 c#4", E: "e4", F: "c#4", G: "c4/2", H: "g#4", I: "a4 f#4", J: "b4",
  K: "c#5@8 b4@7 ~", L: "b4/2", M: "a4", N: "[g#4@3 b4]/2", O: "d#4/2", P: "[e4@31 ~]/2",
  Q: "~@2 b3 c#4 e4 ~@3 b3 c#4 e4 ~ c#4 b3 g#3 f#3", R: "[e3@25 ~@7]/2", S: "~@2 g#4 a4", T: "b4 c#5", U: "d#5 e5",
  V: "f#5", W: "e5", X: "c#5", Y: "c5/2", Z: "g#5", AA: "a5@2 g#5 a5", AB: "b5", AC: "e6@2 d#6 c#6",
  AD: "b5@5 a5 g#5@2", AE: "f#5 g#5", AF: "a5",
  AG: "[~@3 [f#4,f#5]@4 [g#4,g#5]@2 [a#4,a#5] [b4,b5] [c#5,c#6]@4 [f#5,f#6]@2 [f5,f6] [d#5,d#6] [c#5,c#6]@2 [a#4,a#5]@2 [g#4,g#5]]/6", // F# G# A# B C# F# F D# …
  AH: "[~ [a#4,a#5]@2 [b4,b5]@4 [a#4,a#5]@4 [a#4,a#5]]/3", // A# B A#
  AI: "[[g#4,g#5] [f#4,f#5] [f4,f5] [f#4,f#5]@4 [g#4,g#5]@2 [a#4,a#5] [b4,b5] [c#5,c#6]@4 [f#5,f#6]@2 [f5,f6] [d#5,d#6] [c#5,c#6]@2 [a#4,a#5]@2 [g#4,g#5]]/6", // G# F# F F# G# A# B C# …
  AJ: "[[g#4,g#5]@4 [a#4,a#5]@4 ~ [c#5,c#6]@5 [f4,f5]@56 ~@10]/5", // G# A# C# F
})).s("gm_string_ensemble_1").gain(0.35)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D E F G@3 H@2 ~@26 I J K L M@2 N O@2 I J K L M@2 P Q@2 R@2 S T U@2 ~@5 V W X Y Z AA AB@2 AC AD AE AF AG AH AI K
  A AJ AK AL@7 AM@8 AN@8 AO@7 AP@4 AQ@8
>`.pickRestart({
  A: "[g#3,b3,d#4]@4 ~@2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@4 ~@2 [g#3,b3,d#4] ~", // G#m
  B: "[g#3,c#4,e4]@4 ~@2 [g#3,b3,d#4]@4 ~@2 [f#3,a#3,c#4]@3 ~", C: "~ [d#3,g#3,b3]@3 ~ [d#3,g#3,b3]@2 ~",
  D: "[d#3,g#3,b3]@12 ~@2 [f#3,a#3,c#4] ~", E: "[f#3,a#3,c#4] ~ [d#3,g#3,b3]@6 ~@2 [d#3,g#3,b3]@2 ~@2 [d#3,g#3,b3]@2",
  F: "~@2 [d#3,g#3,b3] ~ [e3,g#3,c#4]@4 ~@2 [g#3,b3,d#4]@4 ~@2", // G#m C#m G#m
  G: "[[f#3,a#3,c#4]@4 ~@2 [e3,g#3,b3]@5 ~@3 [e3,g#3,b3]@4 ~@2 [g#3,b3,d#4]@26 ~@2]/3", H: "[[e3,g#3,b3]@31 ~]/2",
  I: "[g#3,b3,e4]@15 ~", J: "[a3,c#4,f#4]@7 ~ [f#3,b3,d#4]@7 ~", K: "[b3,d#4,g#4]@15 ~",
  L: "[c#4,e4,a4]@7 ~ [b3,d#4,f#4]@7 ~", M: "[d#4@7 ~ e4@7 ~ d#4@7 ~ e4@7 ~, [b3,g#4]@31 ~]/2", N: "[a3,c#4,e4]@15 ~",
  O: "[[g#3,b3,d#4]@23 ~ [b3,d#4,f#4]@7 ~]/2", P: "[e3,a3,c#4]@15 ~", Q: "[[d#3,g#3,b3]@31 ~]/2",
  R: "[[f#3,a3,c#4]@31 ~]/2", S: "[e3,g#3,b3]@15 ~", T: "~@2 b3 c#4 e4 ~@3 b3 c#4 e4 ~ c#4 b3 g#3 f#3", U: "[e3@3 ~]/2",
  V: "~@8 g#3@3 ~ a3@3 ~", W: "b3@7 ~ c#4@7 ~", X: "d#4@7 ~ e4@7 ~", Y: "f#4@15 ~", Z: "e4@15 ~", AA: "c#4@15 ~",
  AB: "[c4@31 ~]/2", AC: "[b3,g#4,e5]@15 ~", AD: "[c#4,a4,f#5]@7 ~ [b3,g#4,d#5]@3 ~ [d#4,a4,f#5]@3 ~",
  AE: "[d#4,b4,g#5]@15 ~", AF: "[a3,c#5,e5]@7 ~ [f#3,b4,d#5]@3 ~ [f#3,a4,c#5]@3 ~",
  AG: "b4@8 ~@2 a4 ~ g#4@3 ~, g#4@3 ~, d#4@7 ~ e4@7 ~", AH: "[d#4,f#4]@7 ~ [e4,g#4]@7 ~", AI: "[a3,e4,a4]@15 ~",
  AJ: "[g#3,c#4,e4]@2 ~ [g#3,b3,d#4]@2 ~ [f#3,a#3,c#4]@2", AK: "~ [g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@2 ~",
  AL: "[[b3,d#4,f#4]@26 ~@2 [f#3,a#3,c#4]@15 ~ [g#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@15 ~ [f#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@7 ~ [f#3,a#3,c#4]@7 ~ [f3,a#3,c#4]@4]/7", // B F# G#m C# A#m B C# A#m …
  AM: "[~@4 [f#3,a#3,c#4]@7 ~ [f#3,b3,d#4]@15 ~ [f3,a#3,c#4]@15 ~ [f3,a#3,c#4]@7 ~ f#3@3 ~ f3@3 ~ [f#3,a#3,c#4]@15 ~ [g#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@15 ~ [f#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@4, ~@52 [g#3,c#4]@7 ~@69]/8", // F# B A#m F# G#m C# A#m B …
  AN: "[~@4 [f#3,a#3,c#4]@7 ~ [f3,a#3,c#4]@7 ~ [f#3,a#3,c#4]@7 ~ [f#3,b3,d#4]@15 ~ [f3,a#3,c#4]@15 ~ [f3,a#3,c#4]@7 ~ f#3@3 ~ f3@3 ~ [f#3,a#3,c#4]@15 ~ [g#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@15 ~ [f#3,b3,d#4]@4, ~@68 [g#3,c#4]@7 ~@53]/8", // F# A#m F# B A#m F# G#m C# …
  AO: "[~@4 [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@7 ~ [f#3,a#3,c#4]@7 ~ [f3,a#3,c#4]@7 ~ [f#3,a#3,c#4]@7 ~ [f#3,b3,d#4]@15 ~ [f3,a#3,c#4]@15 ~ [f3,a#3,c#4]@7 ~ f#3@3 ~ f3@3 ~ [f#3,a#3,c#4]@15 ~ [g#3,b3,d#4]@4, ~@12 [g#3,c#4] ~@3]/7", // C# A#m F# A#m F# B A#m F# …
  AP: "[~@4 [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@15 ~ [f#3,b3,d#4]@7 ~ [f3,g#3,c#4]@7 ~ [f3,a#3,c#4]@7 ~ [f#3,a#3,c#4]@7 ~ [f3,a#3,c#4]@4]/4", // C# A#m B C# A#m F# A#m
  AQ: "[~@4 [f#3,a#3,c#4]@7 ~ [f#3,b3,d#4]@15 ~ [f3,a#3,c#4]@15 ~ [f3,a#3,c#4]@8 f#3@4 ~ f3@4 ~ [f#3,a#3,c#4,f4]@56 ~@10, ~@52 [g#3,c#4]@9 ~@67]/8", // F# B A#m F#maj7 C#5
})).s("gm_string_ensemble_2").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  A B C D@2 E F G@2 A@16 F@11 H F@36 I F@7 J A B C K L C@8 M C@8 M C@8 M C@8 N ~@4
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~ x!2 ~", C: "~ x!2 ~@2 x!2 ~", D: "~@2 x ~@2 x!2 ~", E: "~@2 x ~@2 x ~ x",
  F: "x ~@2 x!2 ~@2 x", G: "x ~@3 x ~@2 x", H: "x ~@2 x!2 ~ x!2", I: "x ~@2 x ~@2 x ~", J: "x ~@2 x!2 ~ x ~",
  K: "x ~ x ~@2 x!2 ~", L: "~ x ~ x", M: "~ x!2 ~ x!3 ~", N: "~@2 x ~ x ~@4 x ~ x ~@2 x ~",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  A B C@2 D C A@2 B A@15 E A@11 B A@8 F A@27 G A@7 H A B C@2 ~ C@8 I C@8 I C@8 I C@8 J ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!2", D: "~ x", E: "~@4 x ~@5 x!3 ~@3", F: "~@2 x!3 ~@7 x ~@3", G: "~@2 x ~@2 x!2 ~",
  H: "~@2 x!3 ~@3 x ~@3 x ~@3", I: "x ~@2 x ~ x ~@2", J: "x ~@5 x ~@4 x ~@2 x ~",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B A B A@5 C A D A C A@3 C A D A C A E A C@2 D A C A C@2 D C F A@8 G A@14 C A C A C A C A@6 H A@7 H A@2 B I J A K A
// … 50 more lines

More by Dionne Warwick