Strudelify

Endless Love

Luther Vandross

KeyB♭ majorTempo96 bpm
0:00/0:00
// Endless Love — Luther Vandross
// 96 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 9 "#SYNMALLET" Syn Mallet -> marimba
// note: Full arrangement: all 103 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// chords · piano · "A.PIANO 1"
const piano = note("<~ A@2 B@2 C D E@2 F G H I J@2 K L M N O P Q R S T U V W X Y@4 Z AA@8 ~@53 AB@8>".pickRestart({
  A: "[~@3 c5@2 bb4 ~ f4 ~@7 f3, bb3@7 c5, d5@18 f4@4 d5@9 ~, ~@2 f4@11 ~@3 f5@15 ~, ~@8 bb4@11 ~@5 c5@16 bb4@9 ~@3 bb4@12]/2",
  B: "[~@48 d4@6 eb4@6 f4@3 ~, d4@43 ~@21, bb2@31 ~ bb2@31 ~, ~@8 bb3@28 f3@27 ~, ~@6 c4@15 ~ bb3@10]/2",
  C: "~@6 eb4 d4 ~@6 g3@2, eb2@7 ~, g3@24 eb3@7 ~, f4 eb3 eb4@2, ~@4 bb2@25 ~@3",
  D: "~@12 [bb3,c4]@4 c4@7 ~ c4@8, f2@31 ~, bb3@3 ~ a3@4, ~@2 f3@7 ~@7", // Bbsus2
  E: "[c4@4 d4@7 ~@41 bb3@8 [f2,f3]@4, bb3@49 ~@15, bb2@28 f3@7 ~@29, ~@12 d4@31 ~ c4@18 ~@2, ~@8 bb2@7 ~]/2", // F
  F: "~@7 f2, bb1@7 ~, d4@12 d4@19 ~, ~@2 bb2@13 ~, ~ bb3@3",
  G: "~@12 bb3@4 [bb3,d4]@6 ~@6 f4@3 ~, bb1, ~@2 bb2@13 ~, ~@22 eb4@7 ~@3, ~@3 f3", // Bb
  H: "~@6 eb4 d4 eb4@8, [eb2,bb2,g3], f4@13 ~@19, ~@4 eb3@27 ~", // Eb
  I: "bb3@12 c4@3 ~@5 f3@4 ~@4 f3@3 ~, f2@31 ~, f3 a3, ~@3 bb3@5, ~@16 c4@7 ~ [c3,c4]@8", // C
  J: "[c4@4 d4@7 ~ bb3@19 ~ bb3@4 f3@4 ~@20 f3@4, bb1@13 f3 f2@2, f3@2 bb2 f4, ~@12 d4@31 ~ c4@20, ~@40 bb3@23 ~]/2",
  K: "~@12 d4@6 f4 ~ eb4@11 ~, [eb2,g3,bb3]@31 ~, d4@11 ~@21, ~ bb2@7, ~@8 eb3@19 ~@5", // Eb
  L: "~@7 f3, f2@31 ~, [f3,bb3,c4]@13 ~@3 [a3,c4]@16, ~ c3@7, ~@3 f4", // Fsus4 Am
  M: "bb3@4 ~@8 c4@7 ~ [a2,a3,c4,d4,f4]@12, [bb2,d4]@19 ~@13, ~@4 f3@15 ~@13, ~@8 bb3@11 ~@13", // Dm7 Bb
  N: "d4@7 ~@5 bb4@4 bb3@3 ~ [f2,a3,c4,d4,f4]@12, [g2,f4]@19 ~@13, bb4@11 ~@21, ~@8 d4@11 ~@13", // Dm7 G7
  O: "bb3 ~ bb3 ~@4 d4, [eb2,g4]@31 ~, d4@9 ~@3 d4@12 eb3@7 ~, ~@4 g3@7 ~ bb3@17 ~@3, ~@10 f3@5 ~", // Eb
  P: "~@5 f3 ~ f3, f2, c4 a3, bb3@8 f3@4 bb3@12 c4@7 ~, ~ c3@7",
  Q: "bb3@4 ~@8 c4@13 ~@3 c4@4, [bb2,d4,f4], ~ f3@7, ~ bb3@3", // Bb
  R: "ab3@4 ~@8 eb4@4 ~@4 bb3@3 ~ bb3@3 ~ bb3@4, bb2@15 ~ [bb2,ab3,d4,f4]@16, [c4,eb4] c4 ~@2, ~@4 ab3@11 ~@17", // Bb7 Cm
  S: "~@5 eb4 d4 c4, [eb2,g3,bb3], d4@5 ~@3, ~@3 eb3@5", // Eb
  T: "~@12 [bb3,c4,f4]@4 [a3,c4,f4]@15 ~, f2@31 ~, [bb3,c4,f4]@11 ~@21, ~@8 f3@23 ~", // Bbsus2 F Bbsus2
  U: "[bb2,bb3,c4,d4,f4]@9 ~ [a2,c4,d4,f4]@6", // Bb Dm7
  V: "~@16 bb3@3 ~ [f2,a3,c4,d4,f4]@12, [g2,d4]@5 ~@3, bb3@15 ~@17, f4@11 ~ f4@7 ~@13, ~ g3@4 ~@3", // Dm7 G5
  W: "~@28 eb4 ~ d4@2, eb2, [g3,bb3,d4]@7 ~, ~@5 eb3@3", // Gm
  X: "~@5 [d3,f3]@3, [d2,f4], c4@11 ~ c4@20, ~@4 a3@11 ~ bb3@15 ~", // Dm
  Y: "[[bb3,eb4]@12 ~@4 bb4@6 ~@2 bb4@4 c3@4 [f2,f3,bb5]@31 ~@13 c5@8 bb4@4 ~@4 f4@4 ~@28 bb4@4, [c2,g3]@32 ~@31 bb4@5 f4@22 ~@10 f4@8 d5@18 ~@2, c3@8 ~@20 eb5@36 bb3@63 ~, ~@64 d5@12 ~@12 c5@16 bb4@9 ~@3 bb4@4 c5@8, ~@72 bb4@11 ~@13 f5@30 ~@2]/4", // Eb5 Bb5 C5
  Z: "~@3 c5@2 bb4 ~ f4, bb3, d5@3 ~@3 c5@2, ~@2 f4@11 ~@3, ~@8 bb4@11 ~@13",
  AA: "[~@2 bb4 ~@4 f3@57, f5@21 ~@3 f5@232, ~@4 f4@9 ~@7 bb4@11 ~@225]/8",
  AB: "[~@12 bb3@4 ~@33 c4@4 d4@4 ~@2 eb4@6 ~ f4@4 ~@12 eb4@2 d4@2 ~@13 c4@4 ~@12 c4@4 ~ c4@16 ~ [bb2,f3,a3,c4]@4 ~ bb2@8 ~@60 d6@33 ~@13, ~@4 bb2@30 ~@3 bb2@32 ~ eb2@20 g3@4 bb3@8 ~ f2@34 ~@14 [bb2,bb3,d4,f4]@93 ~@12, ~@8 f3@25 f3@8 f3@16 f3@9 f3@62 ~@13 f3@104 ~@11, ~@16 d4@29 bb3@25 f4@67 f4@14 ~@31 bb4@9 d5@9 bb5@5 c6@39 ~@12, ~@74 g3@4 bb3@8 eb4@17 ~@8 bb3@25 ~@5 [bb3,d4]@8 ~@37 c5@57 ~@13]/8", // F Bb
})).s("gm_piano").gain(0.4)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@2 A B ~@2 C D E ~@3 F ~ G H I ~ J ~@4 K L ~@2 M N O P@2 A ~ Q@8 ~@53 R@2 ~ S@2 ~@3
>`.pickRestart({
  A: "~ f4", B: "~@2 f3@13 ~", C: "~@7 f3, c3@23 ~ c3@8, ~@20 f3@7 ~@5", D: "f3@7 ~ f3@11 ~ f3@6 ~@6",
  E: "~@2 f3@11 ~@3", F: "c3@5 ~@3", G: "~@15 d3", H: "~@7 eb3", I: "~@3 f3 ~ f3 ~@2", J: "~@4 bb3@11 ~@17",
  K: "~ bb2@3", L: "~@4 c3@27 ~", M: "~@3 eb3 ~@4", N: "~@12 d3@5 ~@15", O: "~@12 bb3@5 ~@3 eb4@9 ~@3, ~@4 c3@9 ~@3",
  P: "[~@31 f4@4 ~@29]/2", Q: "[~ f4@15, ~@12 bb4@7 ~@237]/8", R: "[~@24 bb3@17 ~@23]/2",
  S: "[~@32 f3@9 ~@23, ~@11 g3@29 ~@24]/2",
})).s("gm_piano").gain(0.24)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  ~@35 A@2 B C D E F G H I J K@2 L M N O P Q@2 R S M N T U V W X Y Z AA AB AC X AD AE I J AF@2 AG AH AI O P AJ@2 AK AL
  AM@2 T U AN AO AP AQ@2 AR ~@8
>`.pickRestart({
  A: "[c4 ~@2 d4@5 ~@4 d4 ~ f3 [bb3,f4], bb2@7 ~ bb2@7 ~, ~@4 f3@29 ~@3 f3@16 ~@2 eb4@5 ~@5, ~@4 d4@7 ~@33 c4@19 ~, ~@2 bb3@7 ~ bb3@2 ~ bb3 ~@2]/2", // Bb5
  B: "~@6 eb4 d4 ~@6 bb3@2, eb2, f4@12 bb3@12 g3@7 ~, ~@4 eb3@11 ~ g3@4 eb3@12, ~@8 g3@7 ~ eb4@16",
  C: "bb3@11 ~ bb3@4 a3@4 f3@4 a3@4 f3@3 ~, f2, f3@16 c4@7 ~ c4@8",
  D: "c4 ~@4 f3 bb3 f3, bb2@31 ~, ~@4 d3@27 ~, ~@4 d4@7 ~ d4@19 ~, ~@8 f3@4 bb3@11 ~@9",
  E: "~@4 bb3@3 ~ [f3,bb3]@4 bb3@4 f3@3 ~ [f3,c4]@4 [f3,c4]@4 f3@4, bb2@31 ~, c4@10 ~@2 c4@7 ~@13", // Bb5 F5
  F: "~@7 [f4,bb4], bb2@3 bb3, c4@2 bb3@3 d4@3, ~ f3@7, ~@12 c4@19 ~", // Bb5
  G: "a3@2 f3@2 a3@2 ~@2 d4@2 f3 ~@3 f4@2, g2@7 ~, [c4,f4] bb3, ~@12 f3@8 ~@2 eb4@5 ~@5, ~@3 f3", // F5
  H: "~@4 a3@2 eb4 d4 ~@6 g3@2, eb2, f4@3 bb3@2 eb3@3, ~@4 g3@11 ~ eb4@16, ~@16 g3@7 ~ bb3@7 ~",
  I: "[bb3,c4]@12 bb3@4 a3@4 f3@4 a3@4 f3@3 ~, f2, f3@16 c4@7 ~ c4@8", // Bbsus2
  J: "c4@4 ~@8 bb3@7 ~ bb3@4 f3@4 bb3@4, bb2@31 ~, ~@4 d3@27 ~, ~@4 d4@7 ~ d4@19 ~, ~@8 f3@15 ~@9",
  K: "[c4@4 ~@8 d4@4 c4@7 ~ c4@7 ~@17 g4 ~@2 eb4@9 d4@2 c4@2, bb2 [a2,f3,a3] eb2@2, ~@4 bb3@12 ~@15 bb3@5 eb3@14 f4@2 ~@12, ~@4 d4@7 ~@21 d4@12 bb3@19 ~, ~@8 f3@7 ~@17 g4@8 g3@23 ~]/2", // Dm
  L: "bb3@3 bb3 [f3,a3,c4,f4]@4, f2, [c4,f4,g4] ~", // F Csus4
  M: "bb3@4 ~@8 c4@8 [a2,a3,c4,f4]@11 ~, [bb2,f4]@5 ~@3, c4@2 bb3@3 ~@3, ~@4 f3@15 ~@13", // F Bb5
  N: "~@12 bb3@7 ~ [f2,a3,c4,d4,f4]@12, [g2,d4,f4]@17 ~@15, bb3@3 ~@5, ~@8 f3@11 ~@13", // Dm7 G7
  O: "bb3@9 ~ bb3@2 eb3@2 bb3@2, [eb2,d4,g4]", // Ebmaj7
  P: "~@8 bb3@3 ~ [bb3,eb4]@4 ~@8 c3@8, [f2,f4,g4]@17 ~@15, eb4@11 ~@21, bb3@7 ~@9 [a3,c4,f4]@16, ~@4 f3@11 ~@5 f3@12", // Eb5 Fsus2 F
  Q: "[[bb3,c4]@4 ~@12 f4@15 ~ eb4@9 ~@3 eb4@4 d4@7 ~ bb3@7 ~, bb2@31 ~ bb2@31 ~, f4@12 c4@19 ~ c4@16 ~@16, ~@2 f3@13 ~@17, ~@8 bb3@23 ab3@16 ~ [ab3,f4]@15 ~]/2", // Bbsus2 Db
  R: "~@5 eb3 ~ eb3, eb2, d4 g4, g4@8 g3@23 ~, bb3@4 eb3@8 bb3@11 ~ bb3@7 ~",
  S: "bb3@11 ~ bb3@4 ~@8 f3@8, [f2,eb4], f3@23 ~@9, ~ a3", T: "bb3@9 ~ eb3@2 bb3@2 eb3@2, [eb2,d4,g4]",
  U: "~@2 d3@2 ~@4 bb3@7 ~, [d2,d4,f4]@31 ~, c4 ~, ~@4 f3@11 ~, ~@6 d3@9 ~", // Dm
  V: "eb4@3 bb3 ~@2 bb4 g3, c3, g4@3 ~, bb3@11 ~@5 eb4@15 ~, ~@20 c4@11 ~",
  W: "c4@3 ~@21 bb5@8, [f2,f3,g4], bb4@3 eb5@5, eb4@7 ~ eb4@12 bb4@12, ~@4 c4@27 ~", // Fsus2
  X: "bb3@4 ~@4 bb3@4 ~@16 f3@3 ~, f4, bb2@7 ~, c4@11 ~ c4@20, ~ f3@4 bb3@3",
  Y: "~ d4, bb2@7 ~, ~@4 f3@27 ~, ~ bb3@3, ~@3 c4@5",
  Z: "~@5 g3 ~ g3, eb2, f4@12 bb3@19 ~, bb3@8 g3@8 eb4@15 ~, g3 eb3@4 ~ eb3@2",
  AA: "bb3@11 ~ bb3@4 ~@8 c3@7 ~, f2, f3@16 [a3,c4]@15 ~, ~@5 f3@3", // Am
  AB: "c4 ~@4 f3 ~ f3, bb2@31 ~, ~@4 d3@27 ~, ~@4 d4@7 ~ d4@19 ~, ~@8 f3@4 bb3@11 ~ bb3@8",
  AC: "~@7 f3, bb2@31 ~, ~@4 f3@15 ~ f3@7 ~@5, ~@8 bb3@23 ~, ~@12 c4@12 c4@7 ~",
  AD: "~@16 [d4,f4]@6 [eb4,g4]@5 ~ [f4,bb4]@4, bb2@7 ~, ~@4 f3@27 ~, ~ bb3@3, ~@3 c4@5", // Dm Eb Bb5
  AE: "~@2 g3 ~@2 g3 ~ g3, eb2, [f4,bb4] [eb4,g4], ~ eb3@7, ~@12 bb3@8 ~@4 bb3@7 ~", // Bb5 Eb
  AF: "[c4@4 bb3@4 ~@4 d4@4 ~@12 bb3@3 ~@21 eb4@4 d4@4 c4@3 ~, bb2 [bb2,ab3,d4,f4] eb2@2, ~@4 d4@7 ~@21 [d4,g4]@12 bb3@19 ~, ~@8 a3@8 ~@15 bb3@9 g3@23 ~, ~@36 eb3@27 ~]/2", // Bb7 G5
  AG: "bb3@3 bb3 [f3,a3,c4,f4]@4, f2, [c4,eb4,f4] ~", // F F7
  AH: "bb3@4 ~@8 c4@7 ~ [a2,a3,c4,f4]@11 ~, [bb2,f4]@9 ~@7, c4@8 bb3@11 ~@13, ~@4 f3@15 ~@13", // F Bb5
  AI: "~@12 bb3@7 ~ [f2,a3,c4,d4,f4]@12, [g2,d4,f4]@17 ~@15, bb3@11 ~@21, ~@8 f3@11 ~@13", // Dm7 G7
  AJ: "[[bb3,c4]@4 ~@24 c4@3 ~ eb4@9 ~@3 eb4@4 ~@12 f4@4, bb2@31 ~ bb2@31 ~, f4@12 d4@12 f4@7 ~@17 f4@8 bb3@7 ~, ~@4 f3@26 ~ ab3@16 ~ ab3@15 ~, ~@8 bb3@11 ~ bb3@12 c4@16 d4@4 f3@12]/2", // Bbsus2
  AK: "~@18 f4 ~ eb3@4 d4@4 [eb3,c4]@4, eb2, [d4,g4]@19 eb4@5 ~@8, bb3@8 g3@23 ~, ~@4 eb3@8 bb3@11 ~@9", // Cm G5
  AL: "eb4@11 ~ eb4@3 ~@9 f3@8, f2, f3@23 ~@9, [bb3,c4,g4]@15 ~ [a3,c4,f4]@16", // C7 F
  AM: "[bb3@4 ~@8 c4@8 [a2,a3,c4,f4]@10 ~@14 bb3@7 ~ [f2,a3,c4,d4,f4]@12, [bb2,f4]@5 ~@3 bb4@5 ~@3, c4@8 bb3@12 ~@10 d4@21 ~@13, ~@4 f3@15 ~@12 f4@20 ~@13, ~@32 g2@8 f3@11 ~@13]/2", // F Dm7 Bb5
  AN: "g4@11 ~ g4@4 ~@4 eb3@4 bb3@4 eb3@4, [eb2,d4], bb3@2 a4 bb4", // Ebmaj7
  AO: "~@4 d3@4 ~@12 f4@11 ~, [d2,d4]@31 ~, [c4,f4]@12 [d3,bb4]@19 ~, ~@4 c5@27 ~, ~@4 f3@4 bb3@7 ~", // D F5 Gm
  AP: "~@5 eb3 bb3 [eb3,eb4], [eb2,d4], bb3@9 ~@7, g4@15 ~ g4@13 ~@3, ~@12 eb4@15 ~@5", // Eb Ebmaj7
  AQ: "[~@4 d3@4 ~@8 [bb3,c5]@14 ~@3 bb4@11 ~@4 bb4@16, [d2,d4]@31 ~@33, c4@16 ~@15 c4@32 ~, f4@8 f3@22 ~@2 eb4@11 ~ eb4@20, ~@6 [d3,f4]@9 ~ [c3,g4]@16]/2", // Bbsus2 D Dm C5
  AR: "~ bb4@15, ~ [f2,f3,c4,eb4,g4]@31", // Cm
})).s("gm_piano").gain(0.48)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@14 A B C D E B F G H I C D E B J K L ~@3 M N O P Q O R S T U Q O V B W D E B X Y Z I AA D E B AB AC AD N O AE AF N
  AG@2 G U AH N AI B AJ D E AK AL Y Z AM AN D E B AO B AO AP AQ AR AS AT@2 AU@5 ~
>`.pickRestart({
  A: "~@20 bb1@3 ~ f2@3 ~ bb1@4", B: "eb2@26 ~@2 eb2@3 ~", C: "f2@15 ~", D: "bb1@19 ~ a2@11 ~", E: "g2@19 ~ f2@11 ~",
  F: "f2@26 ~@2 f1@3 ~", G: "bb1@26 ~@2 bb1@3 ~", H: "bb1@15 ~ bb1@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", I: "eb2@25 ~@3 eb2@3 ~",
  J: "d2@31 ~", K: "c2@26 ~@2 c2@3 ~", L: "f2@31 ~", M: "~@28 f1@3 ~", N: "bb1@27 ~ f1@3 ~", O: "bb1@27 ~ bb1@3 ~",
  P: "eb1@27 ~ eb2@2 g2 ~", Q: "f2@23 ~ f2@3 ~ c2@3 ~", R: "bb1@18 ~@2 f2@3 ~ c2@3 ~ f1@4",
  S: "bb1@23 ~ bb1@3 ~ bb2@3 ~", T: "g2@18 ~@2 g2@3 ~ d2@7 ~", U: "eb2@27 ~ eb2@3 ~", V: "bb1@18 ~@2 bb2@3 ~ a2@7 ~",
  W: "f2@22 ~@2 f2@3 ~ bb1 ~ c2@2", X: "f2@23 ~ f2@4 f1@3 ~", Y: "bb1@13 ~ f2 bb1",
  Z: "bb2@15 [b2,c3] d3@8 f2@4 bb1@4, ~@16 db3 ~@15", AA: "f2@23 ~ f2@4 f1@4", AB: "d2@27 ~ f2 ~ f2@2",
  AC: "c2@19 ~ g1@3 ~ c2@4 g1@3 ~", AD: "f1@31 ~", AE: "eb2@19 ~ eb2@8 eb2@2 c2@2", AF: "f2@19 ~ f2@3 ~ f1@3 ~ f2@3 ~",
  AG: "bb1@13 ~ f1@2", AH: "f2@23 ~ f1@3 ~ f2@3 ~", AI: "bb1@25 ~@3 bb1@3 ~", AJ: "f2@19 ~ f1@3 ~ f2@3 ~ f1@3 ~",
  AK: "eb2@13 ~ eb2 c2", AL: "f2@19 ~ f2@3 ~ f1@4 f2@3 ~", AM: "eb2@23 ~ eb2@2 bb1@2 g1@4",
  AN: "f2@23 ~ f2@4 f1@2 f2@2", AO: "d2@19 ~ d2@11 ~", AP: "eb2@26 ~@2 f2@3 ~", AQ: "d2@19 ~ d2@7 ~ d2@3 ~",
  AR: "c2@19 ~@2 eb2@8 f2@3", AS: "~ f1@31", AT: "[~ bb1@15]/2",
  AU: "[~@2 bb1@3 ~ eb2@32 ~ f2@33 ~ a1@4 bb1@8 ~@2 bb1@59 ~@14]/5",
})).s("gm_synth_bass_1").gain(0.35)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@14 A@6 B@6 C@5 ~@3 D@3 E F@8 G@8 H@4 I@7 J@7 K@5 L@8 M N@4 O@8 P@5>".pickRestart({
  A: "[~@15 [bb1,bb2,f3,a3,c4,f4]@16 ~@20 g4@5 ~@3 g4@4 eb4@16 a3@16 ~ c4@18 ~@13 [f3,bb3]@19 ~@2 bb4@11 [eb2,eb3,g4]@32 [f2,f3,f4], ~@31 [eb2,eb3,g3,d4]@32 c4@32 d4@18 ~ a2@13 [d4,bb4]@18 ~@3 d4@44, ~@31 f4@20 ~@5 bb4@5 ~@2 f3@52 [d3,a3,c4,f4]@14 ~@17 f2@13 g3@10 ~@23, ~@32 bb3@48 ~@15 [bb2,bb3,f4]@21 ~@9 g2@22 [d3,a3,c4,a4]@14 ~@31]/6", // F Bb5 Eb F Ebmaj7 Gm Dm7 Bb5 …
  B: "[~@15 f4@15 ~ bb4@16 bb5@15 ~ [c4,eb4]@16 [d4,f4,bb4]@16 g3@16 bb3@16 [g4,bb4]@16 [a3,a4]@16 [bb3,d4,bb4]@19 ~ [a3,c4,f4,a4]@12 [g3,bb3,d4,f4], bb4@14 c3@17 [bb2,f4,d5]@31 ab5@14 ~@116, ~@13 f3@17 [bb3,d4]@33 bb2@33 ~@31 [f2,f3,c4]@33 ~@32, ~@15 [c4,a4,f5]@18 ~@29 ab3@34 ~@47 f4@35 ~@14, ~@63 ab4@10 ~@22 [eb3,d4,g4]@34 ~@63]/6", // Cm Bb Gm A Bb F Gm7 Bb …
  C: "[~@19 [f3,a3,c4,d4,f4]@12 ~@32 [a3,f4]@31 ~ [c3,eb4]@32 ~ c4@32, ~@31 [eb3,g3,bb3,d4,g4]@32 c4@64 ~@33, ~@62 d3@32 [bb3,bb4]@65 ~, ~@95 g3@31 ~ [f2,g3,f4,eb5,bb5]@33]/5", // Dm7 Dm Cm Ebmaj7 Bb Eb
  D: "[~@16 d4@15 ~ bb2@20 ~@27 d4@6 eb4@6 f4@4 [eb2,f4], ~@7 [bb3,f4]@24 ~@65, ~@8 c4@23 d4@47 ~@18, ~@9 f3@22 [f3,bb3]@65, ~@11 bb2@21 ~@64]/3", // Ebsus2 Bb5
  E: "~@15 eb4@15 ~ [bb3,c4], g3@15 f2", // Bbsus2
  F: "[~@15 a3@16 ~@25 bb5@7 f5@28 c6@4 ~@24 f5@8 ~@22 c6@5 ~@17 eb6@4 g3@15 ~@17 c7@8 ~@7 [bb2,bb3,d4]@34, ~@31 [bb2,f3,bb3]@64 [bb2,f4]@32 [a3,c4,a5]@15 bb5 d4 bb3@10 d6@5 a3@16 [eb4,bb6]@31 f4@50, ~@48 d4@80 g2@31 [bb3,g4]@47 a3@9 c6@10 ~@31, ~@63 f4@31 ~ d6@25 ~@7 f3@32 [eb2,eb3]@33 f3@64, ~@96 c4@30 ~ f4@49 ~@14 f2@17 c4@49]/8", // Bb Bb5 Am Eb5 Eb
  G: "[~@15 [a2,f4]@16 ~@20 g4@5 ~@23 a3@16 ~ c4@18 ~@13 [f3,bb3]@19 ~@2 bb4@10 ~ [eb2,eb3,g3,g4]@32 ~@23 a3@8 ~ [bb2,f4,bb4,d5]@32 [bb2,eb4,ab4,c5], ~@14 [f3,a3,c4]@17 [eb2,eb3,g3,d4,g5]@32 f3@53 ~@11 [d4,bb4]@18 ~@3 d4@43 f3 bb4@13 f3@2 f4@15 [bb3,d4]@34, ~@31 f4@20 ~@5 bb4@5 ~ eb5 eb4@8 c5@22 ~@22 [d3,a3,c4,f4]@14 ~@18 [d3,a3,c4,a4]@14 ~@30 [bb3,f4]@15 c3@18 ~@32, ~@32 bb3@48 ~@15 [bb2,bb3,f4]@21 ~@9 g2@22 ~@11 bb3@32 ~ c4@15 a3 [a4,f5]@18 ~@31, ~@59 g4@4 c4@32 d4@18 ~ a2@14 ~@18 f2@14 ~@31 f2@33 ~@32]/8", // Dm Bb5 Eb Bb Ab F Ebmaj7 Gm …
  H: "[~@15 [f4,bb4,d5]@16 g3@16 bb3@16 [g4,bb4]@16 [eb4,a4]@16 [bb3,d4,bb4]@19 ~ [a3,d4,a4,c5]@12 [g3,g4,bb4,d5], ~@31 [eb3,d4,g4]@32 [f2,f3,c4]@33 ~@32, ~@79 f4@35 ~@14]/4", // Bb Gm Ebdim Bb D7 Gm Ebmaj7 F5
  I: "[~@19 [f3,c4,f4,a4,d5]@12 ~@33 c4@30 ~ [c3,eb4]@32 ~@9 bb5@23 ~@48 d4@6 eb4@6 f4@4 [eb2,f4], ~@31 [eb3,bb3,d4,g4,eb5]@32 f4@63 ~ g5@10 ~@87, ~@62 [d3,f6]@33 g3@31 ~ [f2,g3,f4,eb5]@33 bb2@64, ~@63 [a3,d5]@31 [bb3,bb4]@65 [f3,bb3]@65, ~@94 eb6@34 c4@31 d4@47 ~@18]/7", // Dm7 Cm Ebsus2 Ebmaj7 Dm Cm D5 Bb …
  J: "[~@15 eb4@15 ~ bb3@16 a3@16 ~@44 f5@4 [f2,bb3,c4,bb5]@8 a3@4 ~@4 [d4,d6]@47 ~@7 [eb4,g4]@5 ~ f4@4 ~ f4@15 eb4@15 f2@2, g3@30 f2@33 f3@56 [a2,d4,d6]@7 f4@48 ~@6 eb6@8 ~@36, ~@31 c4@49 d4@33 ~@10 g3@4 [bb2,f3]@65 ~@32, ~@63 [bb2,bb3]@47 ~ eb4@17 ~@47 [d4,f4,d6]@8 ~@3 [a4,f6]@6 ~@32, ~@95 f4@31 bb3@64 ~ [eb2,eb3,g3,bb3,g4]@33]/7", // Fsus4 D Eb D5 Bb5 Bb Dm Eb
  K: "[~@63 bb3@8 [bb2,a3,a4]@8 d3@8 bb2@8 ~@8 g3@4 a3@4 ~@4 g4@5 ~@3 g4@4 eb4@16 a3@16 [bb2,bb3,d4], ~@14 f4@66 ~@15 [eb2,eb3]@33 ~@32, ~@14 a3@16 f3@65 f4@20 ~@45, ~@15 c4@15 bb3@13 d4@35 ~ [ab3,d4,ab4]@16 bb3@14 ~@2 bb3@16 [f3,c4]@33, ~@30 bb2@26 bb4@39 g3 g4@18 ~@6 bb4@5 ~@35]/5", // Bbmaj7 Bb Eb Abdim F5
  L: "[~@7 f4@10 ~@14 [f3,bb3]@19 ~@2 bb4@10 ~ [eb2,eb3,g4]@32 ~@16 f4@15 ~@9 d6@9 bb5@15 [eb4,ab4,c5]@16 [f4,bb4,d5]@16 g3@16 bb3@16 [g4,bb4]@16 eb4@16 [bb3,d4,bb4], c4@16 ~@2 a2@13 [d4,bb4]@18 ~@3 d4@43 c4@15 [c3,a3]@16 [bb3,d4]@34 ~@96, ~@19 [d3,a3,c4,f4]@14 ~@17 f2@12 bb4@32 ~ f2@32 [bb2,f4,bb4,d5]@33 ~@31 [eb3,d4,g4]@34 ~@31, ~@29 g2@22 [d3,c4,a4,c5]@12 g6@46 f3@2 [a4,f5]@18 ~@30 [bb2,ab3]@33 ~@31 [f2,f3,c4]@33, ~@95 [f3,bb3,f4] bb4@13 f6@28 ~@119]/8", // Bb5 Eb Ab Bb Gm Bb Gm F …
  M: "~@19 [a3,d4,f4,a4,c5]@12 [g3,d4,f4,g4,bb4,d5]", // Dm7 Gm7
  N: "[~@19 [f3,c4,f4,a4,d5]@12 [eb3,bb3,d4,g4,bb4,d5]@31 ~ [c4,c5]@15 ~@5 d6@4 ~ bb6@4 ~@11 g4@8 a4@8 bb4@7 ~ [c4,d4,c5], ~@62 [d3,f6]@33 [eb3,g3,d4,d5,g6]@33, ~@63 [d4,f4]@32 ~@33, ~@78 bb4@14 a6@5 ~@31, ~@79 bb3@15 ~@32 [d3,f6]@2]/4", // Dm7 Ebmaj7 C Csus2 Dm Ebmaj7 Dm
  O: "[~@15 bb3@15 ~@2 g6@30 ~@2 c4@24 d4@6 ~ [c3,eb4]@33 ~ [g3,c4,eb5]@35 ~@92, ~@14 bb4@16 ~ [eb3,bb3,d4,g4,bb4,eb5]@32 f4@64 ~@129, ~@31 d3@16 bb6@81, ~@63 [a3,d5,a6]@31 [bb3,bb4]@69 ~@93, ~@64 c5@31 g3@32 ~ [f2,f4]@35 ~@93]/8", // Cm Ebmaj7 D5 Bb F
  P: "[~@21 f6@18 ~@2 c4@109 ~@10, ~@39 f3@110 ~@11]/5",
})).s("gm_string_ensemble_2").gain(0.4)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note(`<
  A B@4 C@8 D@2 E@2 ~ F ~ G@2 ~ H@2 ~@4 I@8 ~ J K L@2 ~@5 E@2 ~ F ~ G@2 ~ H@2 ~@4 M@3 ~@2 J ~@8 E@2 ~ F ~@4 H@2 ~@9 N
  O@8
>`.pickRestart({
  A: "~@15 bb3", B: "[[f4,bb4,c5,d5]@62 ~ [f3,c4]@63 ~ f4, ~@31 [bb2,bb3,d4]@32 g3]/4",
  C: "[~@15 eb4@16 ~@17 a3@15 ~@13 d4@115 ~@16 eb4@16 ~ f3@32, eb2@31 f3@160 [g3,bb3]@33 ~@32, ~@31 c4@45 ~@115 f4@18 ~@14 [f2,c4]@33, ~@31 f2@32 [bb2,bb3]@128 ~ eb2@32 ~@32]/8", // Gm F5 Bb
  D: "[~@11 d4@37 ~@16, [bb2,bb3]@3 ~]/2", E: "[~@31 f2@32 ~]/2", F: "f4@31 ~", G: "[~@31 f3@33]/2",
  H: "[~@31 bb3@17 ~@16]/2",
  I: "[~@31 eb4@32 ~@32 f5@28 ~@36 f5@17 ~@15 c4@65, ~@63 [c5,d5]@113 ~@80, ~@63 bb3@104 ~@89, ~@4 bb4@7 ~@5, ~@64 f4@103 ~@89]/8", // Csus2
  J: "f3@31 ~", K: "~@16 bb4@9 ~@7", L: "[~@31 bb3@33]/2", M: "[~@31 eb4@32 c4@32 ~]/3", N: "eb4",
  O: "[~@4 [bb2,f3,d4]@65 ~ [g3,bb3]@31 ~ bb3@17 c4@16 ~@67 [bb5,c6,d6]@43 ~@11, ~@69 eb2@32 f2@35 [d4,bb4,c5,f5]@110 ~@10, ~@102 f3@32 ~ bb2@111 ~@10]/8", // Bb Gm Bb
})).s("gm_string_ensemble_2").gain(0.16)

// other · string ensemble 1 · "+ORCHESTRA"
const string_ensemble_1 = note(`<
  ~@19 A@2 ~ B C@2 D@4 E@6 ~@10 F@2 ~ G H@2 I@2 J K@5 L ~@11 M@4 L N O@2 P@4 Q@4 L ~ R S ~@12
>`.pickRestart({
  A: "[~@8 g3@4 a3@4 bb3@12 c4@2 ~ c4@17 ~@16, ~@30 d4@3 ~@31]/2",
  B: "~@4 ab3@3 ~@2 bb4@3 [eb4,c5]@4 [d4,d5]@8 [bb3,f4,f5]@8, ~@7 ab4@3 ~@22, ~@8 c4@5 ~@19", // Cm D Bb5
  C: "[g5@8 a5@4 bb5@4 g6@24 eb6@8 c6@7 a5@8 ~]/2",
  D: "[f6@52 [a5,bb5]@11 g5@13 f5@4 g5@4 bb5@4 f6@7 f6@5 a5@3 c6@5 f6@4 a6@11 f6@5]/4", // Bbmaj7
  E: "[bb6@23 f6, ~@184 a6 ~@7]/6", F: "[eb6@4 f6@43 a6@4 d6@4 a5@4 f5@5]/2", G: "~@14 bb4 c5",
  H: "[d5@19 f5@12 ~@20 a5@13, ~@31 bb5@33]/2", I: "[g5@27 a5@2 bb5@2 c6@24 f5@9]/2", J: "d6@3 bb5",
  K: "[ab3@4 g3@4 ab3@4 bb3@2 c4@2 [d4,f6]@8 ~@4 f6@2 ~@42 a6@8 g6@12 f6@20 ~@4 [f4,f6]@11 ~@4 a4@5 ~@3 d4@4 c4@5 [d4,d6]@12, eb6@16 ~@8 bb3@8 ~@95 bb4@5 ~@4 f4@5 ~@19, ~@24 bb5@2 d6@2 ~@3 a6@2 ~@127, ~@25 c6@2 eb6@2 ~ g6@2 bb6@45 ~@51 bb6@19 ~@13]/5", // Dm F D
  L: "g6",
  M: "[f6@12 eb6@2 d6@2 ~@20 c3@3 f3@5 bb3@3 ~ a3@8 [f3,c6]@7 c6@5 d6@7 ~ d6@35 ~ f4@4 ~@3 f4@4 ~ bb3@4, ~@16 eb6@31 c6@8 ~@56 f6@8 bb5@9, ~@116 bb3@5 ~@2 f6@5]/4", // F5
  N: "c6@11 g5@5 a5@7 bb5@4 c6@5", O: "[f6@31 ~@21 a3@8 f3@4, ~@31 bb6@33, ~@51 a6@13]/2",
  P: "[g3@19 a3@4 bb3@5 ~@3 c4@16 a3@8 f3@7 ~ f3@20 bb3@5 d4@3 f4@4 ~ ab3@4 ~@8 bb3@2 ~@5 bb5@4 ~@4 bb6@4 ~, ~@28 d4@5 ~@62 eb4@16 ~ d4@8 ~@8, ~@100 [g3,f5]@4 ab3@5 ~ c4@3 ~@7 bb3@8, ~@103 bb5@4 f6@3 ~ f6@5 ~@3 f6@5 ~@4]/4", // G7
  Q: "[~@32 g4@12 f4@2 ~@2 a6@5 ~ g4@5 c7@4 ~@12 eb4@4 d4@4 ~ c7@11 ~ bb6@19 ~ [a3,a6]@12, bb6@45 ~ g4@2 ~@5 bb6@6 ~@5 f6@18 ~@46, ~@47 a4@7 ~@5 f4@17 ~@7 c4@12 bb3@18 ~@15]/4", // A
  R: "~@8 bb3@8 c4@11 ~ d4@2 eb4@2", S: "f4",
})).s("gm_string_ensemble_1").gain(0.48)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@8 A@3 B@2 C D ~@88>".pickRestart({
  A: "[~@10 bb4 ~@7 bb4 ~@3 f3@2, ~@7 bb2@8 f3@5 bb4@4, ~@30 f3@14 f4@4 bb4@15 ~@13 f4@19 ~, ~@31 bb3@33 bb2@31 ~, ~@8 d4@8 ~ d4@7]/3",
  B: "[~@8 bb4@4 f4@4 bb4@12 ~@8 bb3@4 bb4@4 f4@3 ~@5 bb3@11 ~, [eb3,g3]@29 ~ f2@33 ~, ~ bb3@28 ~@2 c3@17 f4@13 ~@3, ~@3 f4@8 ~@17 eb4@4 bb3 c4@30 ~, ~@32 f3@31 ~]/2", // Eb
  C: "~@7 c4, [bb2,bb3]@31 ~, ~ c4@2 d4@4 ~, ~@8 bb4@7 ~ bb4@16", // Bb
  D: "~@12 f4@4 bb4@4 ~@4 bb4@7 ~, bb3@31 ~, ~@4 f3@27 ~, ~@8 d4@23 ~, ~@20 f4@11 ~",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.8)

// other · french horn · "FR.HORN"
const french_horn = note("<~@14 A B C@2 D E F G@2 H I J K L M N@2 O P Q R ~@38 S T ~@24 U ~@3>".pickRestart({
  A: "d4@2 f3 bb3 c4@2 f4@2", B: "~@19 g4@5 bb4@4 g4@4", C: "[c5@24 f4@25 ~@3 f4@11 ~]/2", D: "bb4@18 ~@2 a4@11 ~",
  E: "g4@25 ~@3 a4 ~ bb4 ~", F: "c5", G: "[f4@31 eb4@17 f4@16]/2", H: "g4@20 f4 eb4@5 d4 c4@4 ~", I: "c4",
  J: "f4@18 ~@2 f4@9 ~@3", K: "bb4@17 ~@3 a4@11 ~", L: "g4@7 ~ g4@6 a4 bb4", M: "f4@14 a4 bb4", N: "eb4/2",
  O: "~@2 g3 a3", P: "bb3 c4 d4 eb4", Q: "f4 g4 a4 bb4", R: "c5 d5 eb5 f5", S: "~@3 f3", T: "bb3 a3 ab3@2",
  U: "~@9 a3@5 ~@18",
})).s("gm_french_horn").gain(0.4).pan(0.6)

// other · french horn · "FR.HORN" · soft notes
const french_horn_soft = note("<~@15 A ~@83 B@4>".pickRestart({
  A: "d4@5 ~@3", B: "[~@9 [c4,f4]@4 ~ d4@8 ~ [d4,f4]@88 ~@17, ~@13 [bb3,f4]@8 ~ bb3@88 ~@18]/4",
})).s("gm_french_horn").gain(0.16).pan(0.6)

// other · orchestral harp · "HARP"
// … 158 more lines

More by Luther Vandross