Strudelify

I'll Never Fall in Love Again

Dionne Warwick

KeyB♭ majorTempo123 bpm
0:00/0:00
// I'll Never Fall in Love Again — Dionne Warwick
// 123 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · fretless bass · "Songs For You"
const bass = note(`<
  ~@7 A B C D E F G H I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC AD AE AF@2 AG AH AI C AJ AK AL AM AN I AO AP AQ
  AR@3 AS AT AU AV AW AX AY AZ BA P BB BC BD BE U BF BG BH BI Z BJ AI BK AI BK BL BM BL BN BO BN BP BQ@2 BR
>`.pickRestart({
  A: "~@5 g1 ab1 a1", B: "bb1@4 ~@2 bb1 ~ bb1@5 ~ bb1 ~", C: "g1@5 ~ g1 ~ g1@5 ~ g1 ~",
  D: "eb2@4 ~@2 eb2 ~ eb2@5 ~ eb2 ~", E: "eb2@4 ~@2 eb2@2 eb2@5 ~ eb2@2", F: "d2@4 ~ d2 ~@2 d2@5 ~ d2 ~",
  G: "g1@5 ~ g1 ~ g1@4 ~@2 g1@2", H: "c2@4 ~@2 c2 ~ c2@5 ~ c2 ~", I: "f1@5 ~ f1 ~ f1@5 ~ f1@2",
  J: "eb1@2 ~@2 eb1@5 ~ eb1@3 ~ eb1@2", K: "bb1@2 ~@2 bb1@4 ~@2 bb1@3 ~ bb1 ~", L: "eb1@4 ~@2 eb1@2 f1@5 ~ f1 ~",
  M: "[f1@4 ~@2 f1 ~ bb1@5 ~ bb1@7 ~ f1@2 bb1@5 ~ bb1@2]/2", N: "~@2 g1 ~ ab1 ~ a1 ~ bb1@5 ~ bb1 ~",
  O: "bb1@5 ~ bb1 ~ g1@5 ~ g1 ~", P: "g1@5 ~ g1 ~ eb1@5 ~ eb1 ~", Q: "eb1@5 ~ eb1 ~ eb1@4 ~@2 eb1 ~",
  R: "eb1@5 ~ eb1@2 d2@4 ~@2 d2 ~", S: "d2@5 ~ d2 ~ g1@5 ~ g1 ~", T: "g1@5 ~ g1 ~ c2@5 ~ c2 ~",
  U: "c2@5 ~ c2 ~ f1@5 ~ f1 ~", V: "f1@5 ~ f1@2 eb1@2 ~ eb1@5", W: "~@2 eb1@3 ~ eb1@2 bb1@5 ~ bb1 ~",
  X: "bb1@5 ~ bb1 ~ eb1@5 ~ eb1@2", Y: "f1@5 ~ f1 ~ f1@6 f1 ~", Z: "bb1@5 ~ bb1@8 f1@2",
  AA: "bb1@5 ~ bb1@4 bb1 ~ bb1 ~ bb1 ~", AB: "f1@2 ~@2 f1@3 ~ f1@3 ~ f1@3 ~", AC: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@2 ~@2",
  AD: "f1@3 ~ f1@2 ~@2 f1@3 ~ f1@3 ~", AE: "bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1 ~ c2@2",
  AF: "[d2@5 ~ d2 ~ d2@5 ~ d2@5 ~ d2 ~ d2@3 ~@3 d2@3 ~]/2", AG: "c2@2 ~@2 c2@5 ~ c2@3 ~ c2 ~",
  AH: "f1@5 ~ f1@3 ~ f1 ~ f1 ~ f1 ~", AI: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1@2", AJ: "eb1@5 ~ eb1 ~ eb1@5 ~ eb1 ~",
  AK: "eb1@4 ~@2 eb1@2 eb1@3 ~ eb1 ~ eb1@2", AL: "d2@5 d2 ~@2 d2@5 ~ d2@2", AM: "g1@5 ~ g1 ~ g1@5 ~ g1@2",
  AN: "c2@5 ~ c2@2 c2@5 ~ c2 ~", AO: "eb1 ~@3 eb1@5 ~ eb1@3 ~ eb1@2", AP: "bb1@2 ~@2 bb1@5 ~ bb1@3 ~ bb1@2",
  AQ: "eb1@5 ~ eb1@2 f1@5 ~ f1 ~", AR: "[f1@4 ~@2 f1 ~ bb1@4 ~@2 bb1@7 ~ f1 ~ bb1 ~@3 bb1@9 ~@3 f1@5 ~ f1 ~]/3",
  AS: "f1@7 ~ bb1@5 ~ bb1 ~", AT: "bb1@5 ~ bb1 ~ f1@5 ~ f1 ~", AU: "f1@5 ~ f1 ~ bb1@5 ~ bb1 ~",
  AV: "bb1@3 ~ bb1@2 c2@2 d2@5 ~ d2 ~", AW: "d2@5 ~ d2 ~ d2@5 ~ d2 ~", AX: "d2@3 ~ d2@4 c2@5 ~ c2 ~",
  AY: "c2@5 ~ c2 ~ f1@5 ~ f1@2", AZ: "~@2 f1 ~ f1 ~ f1 ~ bb1@4 ~@2 bb1 ~", BA: "bb1@5 ~ bb1@2 g1@5 ~ g1 ~",
  BB: "eb1@5 ~ eb1 ~ eb1@5 ~ eb1@2", BC: "eb1@5 ~ eb1@2 d2@5 ~ d2 ~", BD: "d2@5 ~ d2 ~ g1@4 ~@2 g1 ~",
  BE: "g1@3 ~ g1@4 c2@5 ~ c2 ~", BF: "f1@3 ~ f1@3 ~ eb1@2 ~@2 eb1@4", BG: "~@2 eb1@3 ~ eb1@2 bb1@2 ~@2 bb1@4",
  BH: "~@2 bb1@3 ~ bb1@2 eb1@5 ~ eb1@2", BI: "f1@4 ~@2 f1 ~ f1@8", BJ: "bb1@5 ~ bb1@9 ~",
  BK: "eb1@5 ~ eb1 ~ eb1@3 ~ eb1@4", BL: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1 ~", BM: "bb1@4 ~@2 bb1 ~ bb1@2 ~@2 bb1@2 ~@2",
  BN: "eb1@5 ~ eb1 ~ eb1@3 ~ eb1@3 ~", BO: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~",
  BP: "bb1@5 ~ bb1 ~@5 eb1 ~@3, ~@4 bb1@3 ~", BQ: "[bb1@4 bb1 ~ bb1@2 ~@2 bb1 ~@3 bb1@4 ~@14]/2", BR: "bb1 ~@5 bb1 ~@9",
})).s("gm_fretless_bass").gain(0.31)

// other · french horn · "au"
const french_horn = note("<~@2 A@2 B@2 C ~@10 D ~@12 E F ~@20 G ~@20 H I ~@3 A@2 B@2 C ~ J@2 B@2 C ~@3>".pickRestart({
  A: "[~@4 f4 ~ f4@5 ~ f4 ~ f4@4 g4@2 eb4 ~ d4@4 c4@4 ~@2]/2",
  B: "[~@4 f4 ~ f4 bb4@4 f4 ~@2 f4@4 g4@2 eb4@2 d4@4 c4@6]/2", C: "bb3 d4@15, ~ c4 ~@14", D: "~@4 d5@4 c5@2 bb4 ~@5",
  E: "~@3 d5", F: "c5@2 bb4 ~@13", G: "~@4 d5@3 c5@2 bb4 ~@6", H: "~@12 d5@3 ~", I: "c5 ~ bb4@3 ~@11",
  J: "[~@4 f4 ~ f4@5 ~ f4 ~ f4@4 g4@2 eb4@2 d4@4 c4@4 ~@2]/2",
})).s("gm_french_horn").gain(0.22)

// other · clavinet · "clavin"
const clavinet = note("<~@82 A B C D E F G H I J>".pickRestart({
  A: "~@12 f4 ~@3", B: "f3@2 f4 ~@3 f3@2 ~@2 f3@2 f4 ~@3", C: "~@14 g4 ~", D: "bb4 ~@3 g4@4 f4@2 eb4@5 ~",
  E: "d4 f4@4 ~ a3@4 d4@2 f4@2 d4@2, ~ eb4 ~@14", F: "g4 ~@3 d4@4 c4@2 bb3@5 ~", G: "~ bb3 c4@11 ~@3, a3 ~@7",
  H: "f3@2 f4 ~@3 f3 ~@3 f3@2 f4 ~@3", I: "f4@2 f3 ~@3 f4 ~@3 f3@2 f4 ~@3", J: "bb3@2 ~@4 bb3 ~@9",
})).s("gm_clavinet").gain(0.24)

// chords · epiano2 · "main keys"
const epiano2 = note(`<
  ~@2 A B C D E@2 F@2 G@2 H@2 I@2 J@2 K@7 L@8 M N O P Q R S T U V W@2 X@2 Y@2 Z@2 AA@2 AB@3 AC@7 AD@7 AE@6 AF AG@3 AH@2
  AI@2 AJ@2 AK@2 AL AM AN AO
>`.pickRestart({
  A: "[bb2,d4,f4]@15 ~", B: "[eb3,d4,g4]@15 ~", C: "[bb2,bb3,d4,f4]@15 ~", D: "[eb3,d4,g4]@14 eb3 ~",
  E: "[[bb2,a3]@18 ~@4 d4@6 f4 ~ bb2 ~, f4@11 ~@5, d4@20 a3@9 ~@3]/2", // Bbmaj7
  F: "[[d4,f4] ~@5 bb2 ~ bb2@4 bb3@2 bb2 ~@7 f4@4 g2@2 [bb3,d4,f4]@2 g2 ~, ~@4 [d4,f4]@7 ~ f4@8 ~@12, ~@4 bb3@4 ~@4 d4@6 ~@2 d4@7 ~@5, ~@2 g2 ~]/2", // Dm Bb Dm
  G: "[[d4,g4] ~@5 eb3 ~ eb3@4 ~@2 eb3 ~@7 g4@4 eb3@2 g4@2 eb3 ~, eb3 g4@4 ~@3, ~@4 d4@14 ~@2 d4@7 ~ d4 ~@3, ~@4 bb3@7 ~@5 eb3@7 ~@9]/2", // G5
  H: "[[a3,c4,f4] ~@5 d3 ~ d3@4 [a3,c4]@2 d3@2 g2 ~@5 [b3,d4,f4]@4 g2@2 [b3,d4,f4] ~ g2 ~, d3@4 [c4,f4]@7 ~ f4@8 ~@12, ~ a3 ~@6]/2", // F Am Bdim F5
  I: "[[g3,bb3,eb4] ~@5 c3 ~@3 g3@3 ~ g3@2 ~@2 g3@2 bb3 ~ g3@2 ~@2 g3 ~ [g3,bb3,eb4]@2 f2 ~, c3@4 eb4@8 ~@2 eb4@6 ~@2 eb4@5 ~@5, ~@2 bb3@3 ~@11, ~@4 g3@4 c3@6 ~@2 f2@7 ~ f2@5 ~@3]/2", // Eb
  J: "[[g3,bb3,db4] ~@5 eb2 ~@3 g3@2 bb3 ~ f3 ~@3 f3 ~ [d4,f4] ~@3 [c4,eb4] ~ [bb3,d4]@3 ~ bb2 ~, eb2 db4@2 ~@5, ~@2 bb3@3 ~@2 [bb3,d4]@2 ~@7, ~@4 g3@4 eb2@6 ~@2 bb2@5 ~ bb2@6 ~@4]/2", // Gdim Dm Cm Bb
  K: "[[g3,bb3,eb4] ~@3 g3@2 eb2 ~@3 g3@2 ~@2 g3@2 ~@2 g3 ~ [g3,bb3] ~ f2 ~@5 [bb3,d4,f4] ~ [a3,c4,f4]@4 bb2@2 [a3,c4,f4]@2 bb2 ~@3 bb3 ~ [bb3,d4,f4] ~ [a3,c4,f4]@4 bb2@2 [a3,f4]@2 ~@2 [bb3,d4] ~@5 bb2 ~ bb2@4 bb3@2 bb2 ~@7 f4@4 g2@2 [bb3,d4,f4] ~ g2 ~ [bb3,d4,g4] ~@5 eb3 ~ eb3@4 ~@2 eb3 ~@7 g4@2, ~@4 eb4@8 ~@2 eb4@5 ~ eb4@2 ~@38 [d4,f4]@7 ~ f4@8 ~@24 g4@8 ~@4, ~@4 bb3@6 ~@2 bb3@6 ~@34 c4 ~@7 bb3@4 ~@4 d4@5 ~@3 d4@7 ~@9 [bb3,d4,g4]@8 d4@6 ~@2 d4@4, ~@8 f2@7 ~ f2@4 ~@4 bb2@8 ~@8 bb2@8 ~@6 bb2@6 ~@12 g2@8 ~@8 eb3@4 ~@12 eb3@8]/7", // Eb Gm Bb F Bb F Dm Bb …
  L: "[~@2 eb3@2 [bb3,d4,g4] ~ eb3 ~ [a3,c4,f4] ~@5 d3 ~ d3@4 [a3,c4]@2 d3 ~@7 f4@4 g2@2 [b3,d4,f4] ~ g2 ~ [g3,bb3,eb4] ~@5 c3 ~@3 g3@3 ~ g3@2 ~@2 g3 ~@3 f2 ~@3 g3 ~ [g3,bb3]@2 f2@2 [g3,bb3,db4] ~@3 g3@2 eb2 ~@3 g3@2 bb3 ~ f3@2 ~@2 f3 ~ [d4,f4]@2 ~@2 [c4,eb4] ~ [bb3,d4]@3 ~ bb2 ~ [g3,bb3,eb4] ~@5 eb2 ~@3 g3@3 ~ g3@2 ~@2 g3 ~ [g3,bb3,eb4] ~ f2 ~, ~@8 d3@4 [c4,f4]@7 ~ f4@8 d4@7 ~@9 eb4@8 ~@8 g3@4 ~@12 bb3@6 ~@4 [bb3,d4]@5 ~@17 bb3@6 ~@4 [bb3,eb4]@5 ~@5, ~@12 a3@4 ~@8 g2@8 ~@8 c3@4 ~@4 c3@6 ~@2 f2@5 ~@3 f2@4 ~@4 eb2@4 ~@4 eb2@6 ~@2 bb2@5 ~ bb2@7 ~@3 eb2@4 g3@4 f2@7 ~ f2@4 ~@4, ~@26 b3@8 ~@10 [g3,bb3]@6 ~@4 [bb3,eb4]@4 ~@2 [bb3,eb4]@6 ~@2 eb4 ~@7 db4@8 ~@24 eb4@8 ~@12]/8", // Gm F Am Bdim Eb Gm Gdim Dm …
  M: "[bb2,bb3,d4,f4]@4 bb2@2 [a3,c4,f4]@4 bb2@2 [a3,c4,f4] ~ bb2 ~", // Bb F
  N: "[bb3,d4] ~@3 bb3@3 ~@3 bb3 ~ [bb3,d4,f4] ~ bb2 ~, bb2@4 [d4,f4]@7 ~@5, ~@2 bb2 ~", // Bb Dm
  O: "[a3,c4,f4] ~@3 a3@2 f2 ~@3 a3 ~ [a3,c4] ~ f2 ~, f2@2 [c4,f4]@3 ~ f4 ~, ~@2 f2 ~", // F Am F5
  P: "[bb3,d4,f4] ~@5 bb2 ~@3 bb3 ~ [bb3,d4,f4] ~ bb2 ~, bb2@2 [d4,f4]@3 ~@3, ~ bb3 bb2 ~", // Bb Dm
  Q: "[a3,c4,f4] ~@5 f2 ~ f2@4 [a3,c4,f4] ~ f2 ~, f2@2 [c4,f4]@3 ~@3, ~ a3 ~@2", // F F5
  R: "[bb3,d4,f4] ~@3 bb3@2 bb2 ~ bb2@4 [bb3,d4] ~ c3 ~, bb2@2 [d4,f4]@3 ~ f4 ~", // Bb Dm
  S: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4]@2 ~@2 [a3,db4,f4]@2 ~@2 [a3,db4,f4]@2 d3 ~, d3@5 ~ d3@7 ~@3", // Dm Aaug
  T: "[a3,c4,f4] ~@3 a3@2 d3@6 [a3,c4,f4] ~ d3 ~, d3@2 [c4,f4]@3 ~@3", // F F5
  U: "[g3,c4,e4] ~@5 c3 ~ c3@4 [c4,e4]@2 c3 ~, c3@4 [g3,c4,e4]@7 ~ g3 ~@3", // C
  V: "[a3,c4,f4] ~ a3@2 ~@2 a3@4 f2@2 [a3,c4] ~ a2 ~, f2@2 [c4,f4]@9 ~ f4@2 ~@2, ~ f2 ~@2", // F Am F5
  W: "[[bb3,d4,f4] ~@7 bb2@4 bb3@3 ~@7 f4@4 g2@2 [d4,f4] ~ g2 ~, bb2@4 [bb3,d4,f4]@7 ~ f4@8 ~@12, ~@12 d4@6 ~@2 d4@7 ~@5, ~@16 g2@7 ~@9]/2", // Bb Dm Bb
  X: "[eb3@4 ~@2 eb3 ~ eb3@4 ~@2 eb3 ~@5 d4 ~ [bb3,d4,g4]@4 eb3@2 [bb3,d4,g4] ~ eb3 ~, d4 ~@3 [d4,g4]@7 ~ g4@8 ~@12, ~@2 bb3@2 ~@2 d4@3 ~@7, ~@16 eb3@7 ~@9]/2", // Gm G5
  Y: "[[a3,c4,f4] ~@7 d3@3 ~ [a3,c4]@2 d3@2 ~@2 b3@2 d4 ~ [c4,eb4]@2 ~@2 [b3,d4,f4]@4 g2 ~, d3@4 [a3,c4,f4]@7 ~ f4@13 ~@7, ~@16 g2@11 ~@5]/2", // F Am Cm Bdim F
  Z: "[[g3,bb3,eb4] ~@5 c3 ~@3 g3@3 ~ g3@2 ~@2 g3@2 bb3 ~ [g3,bb3]@2 ~@2 g3 ~ [g3,bb3,eb4] ~ f2 ~, c3@4 eb4@8 ~@2 eb4@6 ~@2 eb4@5 ~@5, ~@4 [g3,bb3]@4 c3@7 ~ f2@7 ~ f2@5 ~@3]/2", // Eb Gm Eb Gm
  AA: "[[g3,bb3,db4] ~@3 g3@2 eb2 ~@3 g3@2 ~@2 [bb3,d4]@4 bb2@2 [d4,f4]@2 ~@2 [c4,eb4] ~ [bb3,d4]@3 ~ bb2 ~, eb2@4 db4@9 ~@19, ~@4 bb3@6 ~@4 f3 ~@7 bb2@7 ~@3, ~@4 eb2@3 ~@9]/2", // Gdim Bb Dm Cm Bb
  AB: "[[g3,bb3,eb4] ~@3 g3@4 ~@2 g3@2 bb3 ~ g3@2 f2@4 [g3,bb3] ~ f2 ~@5 [d4,f4] ~ [a3,c4,f4]@4 bb2@2 [a3,c4] ~ bb2 ~@5 [bb3,d4,f4] ~@3, eb2@3 ~ eb4@8 ~@8 eb4@2 ~@14 f4@2 ~@10, ~@4 bb3@6 ~@4 [bb3,eb4]@5 ~@29, ~@8 f2@7 ~@9 bb2@7 ~@9 bb2@6 ~@2]/3", // Eb Gm Dm F Am Bb Eb5
  AC: "[bb2 ~@3 [bb3,d4,f4] ~ bb2 ~ [a3,c4,f4] ~@3 a3@2 f2 ~@3 a3 ~ [a3,c4,f4] ~@3 [bb3,d4,f4] ~@5 bb2 ~ bb2@4 [bb3,d4] ~ bb2 ~ [a3,c4,f4] ~@5 f2 ~@3 a3 ~ [a3,c4,f4] ~ f2 ~ [d4,f4] ~@3 bb3@2 bb2 ~ bb2@4 [bb3,d4,f4] ~ c3 ~ [a3,d4,f4] ~ a3@2 ~@2 a3 ~ [a3,f4]@2 ~@2 [a3,db4,f4]@2 d3 ~ [a3,c4,f4] ~@3 a3@2 d3 ~@2 d3@3 [a3,c4] ~ d3 ~ g2 ~@3 [g3,c4,e4]@4, ~@8 f2@4 [c4,f4]@7 ~@9 [d4,f4]@6 ~@2 f4@2 ~@6 [c4,f4]@7 ~@9 [d4,f4]@6 ~@8 [d4,f4]@5 ~ db4 ~@11 [c4,f4]@7 ~ f4@2 ~@10, ~@16 f2@5 ~@19 f2@4 a3@4 f2@5 ~@3 bb2@4 ~@12 d3@2 ~@2 d3@9 ~@3 d3@4 ~@20]/7", // Bb F Bb F Dm Bb Dm Aaug …
  AD: "[c3@4 [g3,c4,e4] ~@3 [c4,f4] ~ a3@2 f2 ~ f2@4 a3 ~ [c4,f4] ~ f2 ~ bb2@4 ~@4 bb2@4 ~@2 bb2 ~@5 d4 ~ [d4,f4]@4 g2@2 [bb3,d4,f4] ~ g2 ~ [bb3,d4,g4] ~@5 eb3 ~ eb3@4 bb3@2 eb3 ~@7 g4@4 eb3@2 [d4,g4] ~ eb3 ~ [a3,c4,f4] ~@5 d3 ~@3 a3 ~ [a3,c4]@2 d3@2 ~@2 b3@2 d4 ~ [c4,eb4]@2, ~@8 f2@2 [c4,f4]@8 ~@6 d4 ~@3 [d4,f4]@7 ~ [d4,f4]@4 g2@7 ~@21 d4@6 ~@2 d4@7 ~@9 [a3,c4,f4]@6 ~@14, ~@42 bb3@9 ~@5 eb3@4 [d4,g4]@7 ~ g4@8 ~@24 f4@9 ~@3, ~@72 eb3@7 ~@9 d3@4 ~@4 d3@5 ~@3 g2@8]/7", // C F5 Dm Bb Gm G5 F Am …
  AE: "[~@2 [b3,d4,f4]@3 ~ g2 ~ [g3,bb3,eb4] ~@3 g3@2 c3 ~@3 g3@3 ~ g3@2 ~@2 g3@3 ~ g3@2 ~@2 g3 ~ [g3,bb3,eb4]@2 f2 ~ [g3,bb3,db4] ~@3 g3@2 eb2 ~@3 g3@2 bb3 ~ [f3,bb3,d4]@4 bb2@2 [d4,f4]@2 ~@2 [c4,eb4] ~ [bb3,d4]@4 bb2 ~ [g3,bb3,eb4] ~@5 eb2 ~ f2@6 g3@2 ~@2 g3 ~ [g3,bb3] ~ f2 ~, ~@8 c3@4 eb4@8 ~@2 eb4@6 ~@16 db4@9 ~@23 eb4@8 ~@2 eb4@5 ~@5, ~@12 bb3@4 c3@6 bb3@4 ~@4 [bb3,eb4]@5 ~@9 bb3@6 ~@26 bb3@6 ~@14, ~@24 f2@7 ~ f2@4 ~@4 eb2@4 ~@4 eb2@6 ~@8 bb2@7 ~@7 g3@4 ~@8 f2@4 ~@4]/6", // Bdim Eb Gdim Bb Dm Cm Bb Eb …
  AF: "~@4 [bb3,d4,f4] ~ [a3,c4,f4]@4 bb2@2 [a3,c4,f4] ~ bb2 ~, bb2@7 ~@9", // Bb F
  AG: "[[bb3,d4,f4] ~@5 bb2 ~@13 [d4,f4] ~ [bb3,d4,f4]@4 ~@2 [d4,f4] ~ bb3@2 ~@2 bb3@2 ~@2 [bb3,d4,g4]@4 eb3@2 [bb3,d4,g4] ~ eb3 ~, bb2@4 f4@8 ~@2 f4@5 ~@29, ~@4 d4@6 ~@2 d4@5 ~@13 [d4,g4]@5 ~@13, ~@4 bb3@4 bb2@6 ~@2 bb2@7 ~@3 bb2@5 ~ eb3@7 ~@9]/3", // Bb Dm Bb Dm Gm G5
  AH: "[[bb3,d4,f4] ~@3 bb3@2 bb2 ~@5 d4 ~ bb3@2 ~@2 bb3 ~@3 eb3 ~@3 eb3@2 [d4,g4] ~ eb3 ~, bb2@4 [d4,f4]@6 ~@4 [d4,g4]@5 ~ [d4,g4]@7 ~@5, ~@8 bb2@6 ~@2 eb3@5 ~@11]/2", // Bb G5 Dm G5
  AI: "[[d4,f4] ~@5 bb2 ~@3 a3@2 d4 ~ [d4,f4]@4 bb2@2 a3@3 ~@3 a3 ~ [a3,d4,f4]@2 bb2 ~, ~@2 f4@4 ~@4 [d4,f4]@3 ~@3, ~@2 d4@3 ~@2 a3 ~@8, ~@4 a3@4 bb2@7 ~@9 bb2@4 ~@4]/2", // Dm
  AJ: "[bb2@3 ~ [bb3,d4,f4] ~ [d4,f4]@4 ~@2 [d4,f4] ~ bb3@2 ~@2 bb3 ~@3 eb3 ~@3 eb3@2 [bb3,d4] ~ eb3 ~, ~@10 bb2@4 [d4,g4]@5 ~ [d4,g4]@7 ~ g4@2 ~@2, ~@4 eb3 bb3 ~@2]/2", // Bb Dm Bb G5
  AK: "[~@4 d4 ~@7 d4 ~ [bb3,d4]@2 eb3@4 ~@2 eb3 ~@3 eb3@2 [bb3,d4,g4] ~ eb3 ~, bb2@6 [bb3,d4,f4]@5 ~@3 g4@5 ~ [bb3,d4,g4]@7 ~@5, ~@4 bb2@3 ~@9]/2", // Bb Gm Bb Gm
  AL: "[d4,f4] ~@5 bb2 ~@3 [a3,d4,f4]@4 bb2@2, ~ [a3,d4,f4] bb2 ~", // Dm
  AM: "[a3,d4,f4]@2 bb2 ~@3 bb2 ~@3 bb2@2 [a3,d4,f4]@2 bb2 ~, ~@2 [a3,d4,f4]@3 ~@3", // Dm
  AN: "[a3,d4,f4] ~@3 [a3,d4,f4]@4 bb2@2 [a3,d4,f4] ~ bb2 ~@3, bb2 ~@3", AO: "[a3,d4,f4] ~@5 [a3,d4,f4] ~@9",
})).s("gm_epiano2").gain(0.36)

// chords · epiano2 · "main keys" · soft notes
const epiano2_soft = note(`<
  ~@2 A B ~ A ~ C D E F G ~@2 H@2 ~@6 I@2 J@2 ~@2 K ~@3 K ~@10 L G M N ~@2 O ~ P ~ Q ~@3 R ~@2 S ~@2 T U@2 V@3 ~@2 W ~@2
  X Y ~ Z AA ~@2 AB D AC AD ~ W S D ~ AE ~
>`.pickRestart({
  A: "bb3@7 ~", B: "bb3@15 ~", C: "~@2 bb2@11 ~@3", D: "bb2 ~@3", E: "~ bb3@5 ~@2", F: "bb3 ~@11 bb3@3 ~",
  G: "~@2 bb3@9 ~ bb3 ~@3", H: "[~@12 bb3@6 ~@4 bb3@5 ~@5]/2", I: "[~@10 bb3@9 ~@13]/2",
  J: "[~@4 bb3@3 ~@3 bb3@9 ~@13]/2", K: "~@4 bb3 ~@11", L: "~@6 bb2 ~@7 bb2 ~", M: "bb3 ~@11 bb3@2 ~@2",
  N: "~@2 bb3@3 ~@11", O: "~@12 bb3 ~ bb3@2", P: "~@12 bb3 ~@3", Q: "~@6 eb2 ~@9", R: "~@6 f2@2 ~@4 bb3@3 ~",
  S: "~@2 bb3 ~@13", T: "~@6 c3 ~@9", U: "[~@12 bb3@6 ~@2 bb3@3 ~@4 f4 ~@4]/2", V: "[~@12 bb3@6 ~@8 bb3@9 ~@13]/3",
  W: "~@4 bb3 ~@7 bb3 ~@3", X: "~@8 eb2@3 ~@5", Y: "~@2 g3@2 bb3@7 ~ eb4@2 ~@2", Z: "~@5 bb3@3",
  AA: "~@2 bb3 ~ bb3 ~@7 bb3 ~@3", AB: "~@2 bb3 ~@5", AC: "bb2 ~@5 bb2 ~@9", AD: "~@3 bb3@2 ~@3", AE: "~@6 bb2 ~@9",
})).s("gm_epiano2").gain(0.2)

// chords · string ensemble 2 · "strings"
const string_ensemble_2 = note(`<
  ~@21 A@8 B@3 C@3 D@3 E F@4 G@6 H@3 I@4 J@3 K L@4 M@8 N@4 O@4 P Q@3 R@7 ~
>`.pickRestart({
  A: "[~@7 f4@32 ~ bb3@31 ~ f4@32 eb4@24, ~@7 d4@97 bb3@18 ~@6, ~@39 g4@32 ~@57]/8",
  B: "[~@7 g4@16 f4@16 ~ g4@7 ~, ~@7 bb4@31 ~@10]/3", C: "[~@8 d4@3 c4@5 d4@5 ~@3, f4@11 ~, ~@15 bb3@26 ~@7]/3",
  D: "[~@3 f4@5 f5@5 eb5@2 d5@4 c5@2 ~ bb4@14 f4@4 f5@5 g5@3]/3", E: "d5@3 c5 bb4@3 c5",
  F: "[~@32 g4@15 ~ f4@15 ~, d5@8 f5@24 ~@15 a4@16 ~, ~@7 db5@8 ~ c5@33 ~@15]/4",
  G: "[bb4@11 ~ a4@3 ~ g4@11 ~ f4@3 g4@14 ~ g3@17 ~ a3@16 g3@7 b3@9, ~@11 c5@4 bb4@12 a4@4 bb3@32 c4@23 ~@10]/6",
  H: "[[c4,eb4]@3 ~@13 [db4,g4]@8, ~ eb4@7]/3", // Cm Dbdim
  I: "[[d4,f4]@15 g4@8 ~@17 d4@5 ~ a3@9 [bb3,d4]@5 ~@4, ~@23 f4@37 ~@4, ~@39 bb3@6 c4@10 ~@9]/4", // Dm Bb
  J: "[~@12 f4@3 f5@6 eb5@3 d5@3 c5@3 bb4@13 f4@4 f5]/3", K: "~@5 g5@3 d5@3 c5@2 ~ bb4@2",
  L: "[~@5 c5@2 ~@8 db5@8 ~@17 e5@16 [f4,a4]@8, ~@7 d5@9 ~@8 c5@40, ~@9 f5@30 g4@16 ~@9]/4", // F
  M: "[~@24 bb3@15 ~ bb3@31 c4@14 ~@4 b3@14 ~ [bb3,eb4]@24, ~@8 d4@97 ~@23, ~@8 f4@31 g4@32 f4@33 ~@24]/8", // Eb5
  N: "[~@8 db4@16 d4@15 ~ bb3@23 ~, ~ [f4,bb4]@4 ~@3, ~@8 g4@12 ~@19 g4@25]/4", O: "[d4@32 ~@15 f5@16 ~, f4@49 ~@15]/4",
  P: "f4@7 ~", Q: "[bb4, f5@5 ~@11]/3", R: "[~@16 eb5@14 ~@2 d5@15 ~ eb5@15 d5@33 ~@16, f5@97 ~@15]/7",
})).s("gm_string_ensemble_2").gain(0.2)

// chords · string ensemble 2 · "strings" · soft notes
const string_ensemble_2_soft = note("<~@21 A@3 ~ B@3 ~@15 C ~@5 D@2 ~@25 E@3 ~@2 F@3 ~@2 G@2 H@2 ~@2>".pickRestart({
  A: "[~@4 bb3@15 ~@5]/3", B: "[~@8 a3@15 ~ b3@14 ~@10]/3", C: "~ d5@11 ~@4", D: "[bb3@31 ~]/2", E: "[bb3@5 ~]/3",
  F: "[~ d5@45 ~@2]/3", G: "[bb4@31 ~]/2", H: "[~ a4@31]/2",
})).s("gm_string_ensemble_2").gain(0.15)

// other · pizzicato strings · "New Track"
const pizzicato_strings = note("<~@91 [~@6 bb5 ~@9]>").s("gm_pizzicato_strings").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  A@21 B C@3 D C D C@2 B@2 A@3 B E B E B E B E A@13 C@4 D C D C@2 B@2 A@2 B C@2 D C D C@2 F B E B G E A@8 H
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@2 x!2 ~@2 x", C: "~@3 x!2 ~@2 x", D: "~ x ~ x!2 ~@2 x", E: "x ~@2 x ~ x ~ x",
  F: "~ x ~ x!2 ~@3", G: "x!2 ~ x ~ x ~ x", H: "x ~@2 x ~@4",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!35 ~@8 [~ x ~ x]!13 ~@26 [~ x ~ x]!2 ~@4 [~ x ~ x]!3 [~ x ~@2]>").gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@35 [~ x ~ x]!8 ~@13 [~@3 x] [~ x ~ x]!25 ~@2 [~ x ~ x]!4 ~@4>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@42 [~@5 x!3] ~@49>").gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C A B C A@2 D C A@3 B C A@2 B C A@2 E B F G@2 B G B F G@2 B C H D B@3 D B@3 D C A B A B C A B@2 C A@2 I G B F J C
  G B J C B F B F G B G B J B A@2 D B@3 D C K B C A B C A L
>`.pickRestart({
  A: "x!7 ~", B: "x!8", C: "x!5 ~ x!2", D: "~ x!7", E: "x!4 ~ x!3", F: "x ~ x!6", G: "x!3 ~ x!4", H: "x!4 ~@4",
  I: "~@3 x ~ x!3", J: "x!3 ~@2 x!3", K: "~ x!6 ~", L: "x",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@34 A ~@3 A ~@17 B ~@7 B ~@12 C ~@14>".pickRestart({
  A: "~@6 x!2", B: "~@2 x!2 ~@4", C: "~@5 x!3",
})).gain(0.15)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ B A ~ B A@2 ~ B A@3 ~ B A@2 ~ B A@2 ~@2 C D@2 ~ D ~ C D@2 ~ B A ~@9 B A ~ A ~ B A ~@2 B A@2 ~ D ~ C D B D ~ D B ~
  C ~ C D ~ D ~ D ~ A@2 ~@5 B A ~ B A ~ B A ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "~@3 x ~@4",
})).gain(0.15)

// drums · high tom
const high_tom = s("ht").struct("<~@34 [~@5 x ~@2] ~@21 [x!2 ~@6] ~@7 [~ x ~@6] ~@27>").gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@13 B ~@3 B ~@16 A ~@3 A ~@3 A ~@13 B ~@12 C>".pickRestart({
  A: "~ x", B: "x", C: "~@3 x ~@4",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@8 A ~@34 A ~@30 B ~@7 A ~ A ~@7>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct("<~@35 [~ x ~ x]!8 ~@13 [~@3 x] [~ x ~ x]!7 ~@28>").gain(0.26)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@91 [~@3 x ~@4]>").gain(1.8)

// … 28 more lines

More by Dionne Warwick