Strudelify
I Have Nothing cover art

I Wish You Love: More From The Bodyguard

I Have Nothing

Whitney Houston

KeyG majorTempo51 bpm
0:00/0:00
// I Have Nothing — Whitney Houston
// 51 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 120 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(51/2)

// 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 · "bass"
const bass = note(`<
  ~@7 A ~@17 B C B D E F G H@2 I@4 J@4 K@2 L M@3 ~@2 N O@2 P Q R S T@4 U@2 V@2 W@4 X Y Z Y AA AB AC AD AE AF AG@2 AH AI
  AJ AK AL AM AN AO AP AQ AR AS@2 ~ AT AU AV AW AX AY AZ BA BB BC BD BE@2 BF BG BH@2 ~@8
>`.pickRestart({
  A: "a1@3 ~ a1@3 ~@5 d1@3 ~ d1@4 ~@4", B: "a1@23 ~", C: "b1@12 e1@11 ~", D: "b1@6 ~@2 b1@2 d2@2 e2@4 d2@3 ~@5",
  E: "a1@4 ~ a1", F: "b1@3 ~ a1 b1", G: "c2@19 ~@5", H: "[a1 b1 c2 d2@6 d1@3]/2",
  I: "[~@6 d#2@10 d2@2 c2@10 c2@2 d2@12 g1@3 ~@3]/4",
  J: "[f1@3 ~ f1@3 ~@5 d#1@20 d2@4 c2@18 ~@2 c2@4 d2@20 d1@2 f1@2 g1@12]/4",
  K: "[f1@3 ~ f1@4 ~@4 c1@19 ~ c1@4 d1@12]/2", L: "g1@4 f1@4 d1@4 d#1@3 ~ d#1@4 ~@4",
  M: "[d1@3 ~ d1@4 ~@4 f1@3 ~ f1@44 ~@12]/3", N: "~@10 d1 g1", O: "[f1 d#1@2 d1]/2", P: "d2@3 ~ a1@2 ~@2 b1@3 ~ g1@12",
  Q: "~@8 g1@2 ~@2 g1@9 ~@3", R: "g2 f#2 d2 e2@3", S: "~@8 e1@3 ~ e1@7 ~ d2@3 ~",
  T: "[d2@12 c1@16 c2@4 c1@3 ~ c1@20 c2@4 b1@18 ~@2 b1@4 a1@12]/4", U: "[d2@11 ~ g1@18 ~@2 f#1@4 g1@8 g2@4]/2",
  V: "[f#2@4 d2@4 b1@4 e2@18 ~@2 b1@4 e1@4 e2@3 ~ e2@4]/2",
  W: "[d2@4 ~@8 c1@19 ~ c1@3 ~ c1@16 c2@4 a1@4 b1@23 ~ a1@11 ~]/4", X: "d2@5 ~ a1@6", Y: "~@4 a1@2 b1@5 ~",
  Z: "e2 d2 b1 a1@3", AA: "e1 ~ e1@2 d2@3 ~@5 a1@11 ~", AB: "~@2 a1 b1@3", AC: "~ a1 b1 c2 g1 e1",
  AD: "c1@7 ~@5 a1@4 b1@4 c2@4", AE: "d2@7 ~@5 d1@3 ~ d1@3 ~@5", AF: "d1@2 ~@2 d1@3 ~@5 d1@3 ~ d1@3 ~@5",
  AG: "[d1@3 ~ d1@34 ~@10]/2", AH: "d#2@3 ~ d#2 d2", AI: "c2@5 c2", AJ: "d2@13 ~@7 d1@2 f1@2",
  AK: "g1@8 ~@4 f1 ~ f1 ~ f1@3 ~@5", AL: "d#1@12 ~@2 d#1 ~ d#1@4 d1@4", AM: "c1@3 ~@2 c1", AN: "d1@6 ~@4 d1 f1",
  AO: "g1@3 ~ g1@3 ~ g1@3 ~ f1@3 ~ f1@4 ~@4", AP: "c1@19 ~ c1@4", AQ: "d1@6 g1@2 f1 d1 c1 d1",
  AR: "d#1@3 ~ d#1@4 ~@4 d1@3 ~ d1@3 ~@5", AS: "[f1@3 ~ f1@44]/2", AT: "e2@3 ~ e2 d#2", AU: "c#2@5 c#2",
  AV: "d#2@13 ~@7 d#1@2 f#1@2", AW: "g#1@3 ~ g#1@3 ~ g#1@3 ~ f#1@3 ~@5 f#1@3 ~", AX: "e1@12 ~@2 e2 ~ e2@4 d#2@4",
  AY: "c#2 c#1", AZ: "d#1@6 ~@2 d#1 f#1 g#1 f#1", BA: "g#1@6 ~@2 g#1@3 ~ f#1@3 ~ f#1@4 ~@4", BB: "c#1@19 ~ c#1@4",
  BC: "d#1@7 ~ g#1@3 ~ g#1@2 f#1 ~ f#1@2 ~@6", BD: "c#1@3 c#2 b1 g#1",
  BE: "[d#1@11 ~ g#1@2 a#1@2 b1@2 ~@2 c#1@16 ~@4 c#1@3 ~ c#1@3 ~]/2", BF: "d#1@3 ~ c#1 d#1",
  BG: "e1@4 e1@4 ~@4 d#1@3 ~ d#1@3 ~@5", BH: "[f#1@3 ~ f#1@44]/2",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · piano
const piano = note(`<
  A@2 B@2 C@2 D ~@2 E@2 F@2 G H I J E@2 K@2 L@2 M N O P Q R S T U@3 ~@13 V@2 W@2 X Y@5 Z@4 AA@4 AB ~@3 AC@2 AD@2 AE@4
  AF@2 ~@33 AG@2 AH@2 AI@2 AJ@2
>`.pickRestart({
  A: "[d5@8 ~@4 d5@8 g4@4 d4@12 d5@5 ~@3 g4@4, g3, ~@6 d5@2 ~ b3@3]/2",
  B: "[d5@5 ~@3 g4@4 d5@8 ~@4 d5@8 ~@4 d5@8 g4@4, [e2,e3], ~@4 g4 ~]/2", // E
  C: "[d5@5 ~@7 d5@9 ~@7 f#4@4 ~@12 g4@4, [c2,c3], ~ g4 ~ d5 g4 f#4, ~@9 d5@2 ~]/2", // C
  D: "d5@7 ~ g4@4 ~@4 f#4@4 g4@3 ~, [a1,a2], ~@12 d5@7 ~@5", E: "[d5@8 g4@4 d5@7 ~@5 d5@8 ~@4 d5@8 ~@4, g3]/2",
  F: "[~@4 d4@5 ~@3 d5@4 d4@5 ~@3 d5@9 ~@3 g4@4 d4@4 ~@4, [e2,e3]@15 ~, d5@8 ~@16 g4@5 ~@19]/2", // E
  G: "e4@4 d4@4 e4@3 ~ e4@4 d4@4 e4@4, [c2,c3]@23 ~", H: "f#4 d4 e4 ~ e4 d4, [c2,c3]@23 ~, ~@12 f#4@7 ~@5",
  I: "[f#4,g4] ~ d4 ~ a3 d4, [b1,b2]@23 ~, ~@4 a3@8 [f#4,g4]@7 ~@5", // Gmaj7 B Gmaj7
  J: "e4@4 ~@4 e4@4 [f#4,g4]@4 a3@4 d4@3 ~, [a1,a2]@11 ~ [d2,d3]@10 ~@2, g4@7 ~@17, ~@4 c4@7 ~@13", // Gmaj7 A D
  K: "[d5@8 ~@4 d5@8 g4@4 d5@8 g4@5 ~@7 g4@4, [e2,e3]@15 ~]/2", // E
  L: "[~@2 f#4@2 g4@2 e5@11 ~ e5@2 d5@2 c5@2, [c2,c3]@23 ~@25, d5@3 ~@13]/2", // C
  M: "~@2 g4 d5 e4 f#4, d5@3 ~@5, ~ f#4@2 ~@3", N: "[c4,e4,g4]@12 [d4,f#4,a4]@11 ~",
  O: "c4@4 b3@4 c4@3 ~ c4@4 b3@4 c4@2 ~@2, [a2,e4,a4]", P: "[b2,b3,d4,f#4] [e2,b3,d4,g4]",
  Q: "c4@3 ~ b3@4 c4@3 ~ c4@4 b3@6 ~@2, [a2,e4,a4]", R: "[b2,b3,d4,f#4]@11 ~ [b3,d4,g4]@3 ~ [a3,d4,f#4]@3 ~@5",
  S: "c4@2 b3@2 c4 ~ c4@2 b3@2 c4 ~, [a2,e4], a4@5 ~", T: "[b2,b3,d4,f#4]",
  U: "[c3@21 ~@3 a2@4 b2@4 c3@4 [c4,e4,g4]@24 [d4,a4]@11 ~, [b3,e4,g4]@35 ~ d3@36]/3", // C D5 Em
  V: "[~@12 d4@3 ~ d4@4 f4@2 ~@2 [d4,a#4]@8 f4@3 ~ [d4,a#4]@8 [a#3,f4]@4, ~@2 a#3@5 ~, ~@12 a#4@11 ~@25]/2", // Gm A#5
  W: "[~@8 f4@3 ~ a#3@3 ~ d4@3 ~ g4@3 ~@5 d4@4 g4@3 ~ [d4,a#4]@8 g4@3 ~, [a3,d4,a#4]@12 g4@7 ~@5 a#4@10 ~@14, ~ c4@2 g3@9, ~ a#3 ~]/2", // Gm A#maj7
  X: "[a#3,d4,f4]@2 f4 [a#3,d4]@2 g4, ~@2 g4 ~", // A#
  Y: "[~@8 f4@4 ~@12 f#4@11 ~ [g3,b3,d4]@10 ~@2 [g3,b3,d4]@10 g1 ~ [g3,b3,d4]@11 ~ [g3,b3,d4]@11 ~ [g3,b3,d4]@10 ~@2 [g3,b3,d4]@10 e2 ~ [e2,g3,b3,d4]@11 ~, a#4@2 ~ g4@3 ~@24, ~@4 d4@9 ~@3 a3@19 ~ [g1,g2]@22 ~@2 g1@20 ~@4 e2@20 ~@16, ~@20 c4@15 ~ a1 ~@23 g2@25 ~@35]/5", // G Em7 G
  Z: "[[d2,a3,d4]@12 [g3,c4,e4]@10 ~@2 [g3,c4,e4]@8 c2@3 ~ [g3,c4,e4]@11 ~ [g3,c4,e4]@11 ~ [g3,b3,d4]@10 ~@2 [g3,b3,d4]@8 b1@4 [a1,g3,c4,d4]@12, f#3@9 ~@3 c2@19 ~@5 c2@24 b1@20 ~@16]/4", // D5 C G Am7
  AA: "[[d2,f#3,a3,d4]@11 ~@2 [g3,b3,d4]@10 ~ [g3,b3,d4]@10 g1 ~ [g3,b3,d4]@11 ~@9 g1@4 [g3,b3,d4]@10 ~@2 [g3,b3,d4]@8 e2@3 ~ [e2,b3,e4,g4]@3 ~ [e2,b3,e4,g4]@3 ~ [e2,b3,e4,g4]@4, ~@6 g1@10 ~@2 g1@8 g2@4 e2@9 ~@9, ~@13 g2@35 [g3,b3,d4]@11 ~@37]/4", // D G Em G
  AB: "[d2,a3,d4,f#4] ~@5", // D
  AC: "[~@12 c4@4 b3@4 c4@3 ~ c4@4 b3@4 c4@2 ~@2 [b2,b3,d4,f#4]@12, ~@12 [a2,e4,a4]@25 ~@11]/2", // Bm A5
  AD: "[[e2,b3,d4,g4]@12 c4@3 ~ b3@4 c4@3 ~ c4@4 b3@6 ~@2 [b2,b3,d4,f#4]@11 ~, ~ [a2,e4,a4]@2 ~]/2", // Em7 Bm A5
  AE: "[[b3,d4,g4]@3 ~ [a3,d4,f#4]@3 ~@5 c4@4 b3@4 c4@2 ~@2 c4@4 b3@4 c4@2 ~@2 [b2,b3,d4,f#4]@24 c3@21 ~@3 a2@4 b2@4 c3@4, ~ [a2,e4]@2 ~@5, ~@12 a4@20 ~@28 [b3,e4,g4]@35 ~]/4", // G D Bm A5 Em
  AF: "[[c4,e4,g4]@24 [d4,a4]@11 ~@13, d3@3 ~]/2", // C D5
  AG: "[~ d#4 f#4 d#4@2 f#4 d#4@2 f#4 b3 ~ f#4, b3@35 ~ a#3@12, ~ b4@3, ~@40 d#4@7 ~]/2",
  AH: "[~@2 g#4 b4@2 ~ b4 ~ d#4 g#4@2 f#4, g#3@3 f#3, b3@26 ~@2 b3@9 ~@11, ~@4 d#4@25 ~@19, ~@20 g#4@9 ~@19]/2",
  AI: "[f#4 ~@7 d#4@4 ~@9 d#4@4 ~@10 c#4@5 e4@8, e3@25 e4@10 ~@13, g#4@9 ~@3 g#4@9 ~@4 f#3@23, ~@4 b3@10 ~@3 b3@10 ~@3 b3@18]/2",
  AJ: "[~ c#4@5 ~ [b2,d#3,f#3,b3]@37 ~@4]/2", // B
})).s("gm_piano").gain(0.4).pan(0.4)

// chords · piano · soft notes
const piano_soft = note("<A B C@2 D@2 E ~@2 F G H I ~@4 F G J K ~@6 L ~@5 M ~@38 N ~@5 O ~@36 P ~@4>".pickRestart({
  A: "~@4 g4@4 f#4@3 ~, ~@4 f#4@7 ~@13", B: "~@8 g4@5 ~@3 f#4@8, ~@4 f#4@7 ~@13",
  C: "[~@4 f#4@5 ~@7 f#4@4 g4@7 ~ f#4@8 ~@4 f#4@8]/2", D: "[~@2 f#4@3 ~@3 f#4@2 g4@4 ~@10]/2", E: "~@4 f#4@5 ~@15",
  F: "~@4 f#4@5 ~@7 f#4@4 g4@4", G: "~@4 f#4@4 g4@7 ~ f#4@4 g4@4", H: "~@2 f#4 g4 ~ f#4",
  I: "~@4 d4@4 f#4@4 d5@5 ~@3 f#4@3 ~", J: "~ f#4 g4 ~ f#4 ~", K: "~ f#4 ~ d5 f#4 ~", L: "~@10 c4 ~",
  M: "~@12 f#4@11 ~", N: "~@4 c4 ~@7", O: "f#4@11 ~@13", P: "~@2 [b3,c#4]",
})).s("gm_piano").gain(0.16).pan(0.4)

// chords · epiano2 · "e.piano"
const epiano2 = note(`<
  A@2 B C D E F ~@2 G H I@2 J@2 K L M@2 N@2 O P@2 Q ~@9 R@2 ~@7 S@2 ~ T@3 U@2 V W@2 ~@7 X Y Z AA ~@15 AB AC AD ~@6 AE AF
  ~@2 AG AH ~@25
>`.pickRestart({
  A: "[d5@4 ~@4 g4@4 d5@5 ~@3 g4@4 d5@5 ~@3 g4@4 [b3,d5]@9 ~@3, g3@7 ~, ~@24 d4@13 ~@11]/2", // Bm
  B: "d5@5 ~@7 d5@2 ~@2 [a3,f#4]@4 [b3,g4]@4, [e2,e3]@7 ~@5, ~@8 g4@9 ~@7", C: "[e3,e4]@23 ~",
  D: "~ [g3,b3,c4], [c2,c3]@11 ~", E: "~@12 [e3,g3,a3]@11 ~, [c2,c3]", F: "[a1,a2,e3,g3,b3,c4]@23 ~",
  G: "d5@2 g4 d5@2 g4", H: "d5@8 ~@4 d5@8 g4@3 ~", I: "[e3@12 ~@16 d4@5 ~@7 d4@4 ~@4, e2@47 ~]/2",
  J: "[~@36 [g3,c4]@11 ~, [c2,c3]@11 ~ [c2,c3]@12, ~@4 [g3,c4]@7 ~@5]/2", K: "[b1,b2]", L: "[a1,a2,c4] [d2,d3,a3]",
  M: "[d5@2 g4 ~ f#4 g4 d5@2 g4 ~@2 g4, g3@40 f#4@7 ~, g2@23 ~ g2@24, ~@12 a3@12 b3@19 ~@5, ~@3 d5@2 ~@4 d5@2 ~]/2",
  N: "[~@4 f#4@4 g4@4 ~@4 f#4@4 g4@4 d5@9 ~@3 [d4,e4,d5]@8 g4@3 ~, [e2,e3], g3@23 ~ [g3,b3]@22 ~@2, d5@8 ~@4 [a3,d5]@11 ~@25]/2", // Dsus2 E G D5
  O: "~@4 f#4@4 ~@8 e4@4 g4@3 ~, [c2,c3]@23 ~, d5@7 ~ g4@8 ~@8, ~@6 e5@5 ~", // C
  P: "[[e4,g4,a4] e4 f#4 ~@3 g4 f#4 g4 d4 e4 f#4, [c2,c3]@24 [b1,b2]@23 ~, ~@6 c4@17 ~, ~@4 e4@9 ~@3, ~@12 f#4 ~@11]/2", // A7 C B
  Q: "[a1,a2,c4,e4,g4]@12 [d2,d3,d4,f#4,a4]@11 ~", // Am7 D
  R: "[a4@4 a#4@4 c5@3 ~ [a#4,d5]@16 c5@4 a#4@3 ~ a#4@11 ~, ~@4 g4@7 ~@5]/2", // A#
  S: "[~@4 [d5,d6]@4 [d#5,d#6]@4 [f5,f6]@3 ~ [f5,f6]@2 [g5,g6]@2 [f5,f6]@9 ~@19]/2", // D D# F G F
  T: "[~@12 [d#5,f5,g5,a#5]@22 ~@2 d4@3 ~ d4@4 f4@2 ~@2 [d4,a#4]@8 f4@3 ~ [d4,a#4]@8 [a#3,f4]@4, ~@6 a#3@5 ~, ~@36 a#4@11 ~@25]/3", // D# Gm A#5
  U: "[~@8 f4@3 ~ a#3@3 ~ d4@3 ~ g4@3 ~@5 d4@4 g4@3 ~ [d4,a#4]@8 g4@3 ~, [a3,d4,a#4]@12 g4@7 ~@5 a#4@10 ~@14, ~ c4@2 g3@9, ~ a#3 ~]/2", // Gm A#maj7
  V: "[a#3,d4,f4]@2 f4 [a#3,d4]@2 g4, ~@2 g4 ~", // A#
  W: "[~@4 d6@2 c6@2 a#5@2 c6@2 d6@4 ~@8 f#4@11 ~@13, a#4@2 f4 g4@3 ~@6, ~@4 d4@9 ~@3 a3@19 ~@13, ~@20 c4@15 ~@13]/2",
  X: "~@13 g5@11", Y: "f#5 e5", Z: "d5@2 e5 f#5@3", AA: "d5 g4", AB: "~@12 a4@4 a#4@4 c5@3 ~",
  AC: "[a#4,d5]@16 c5@4 a#4@3 ~, g4@7 ~", AD: "a#4@11 ~@13", AE: "~@4 [d5,d6] [d#5,d#6]",
  AF: "[f5,f6]@3 ~ [f5,f6]@2 [g5,g6]@2 [f5,f6]@10 ~@6", AG: "~ a3", AH: "a#3@12 c4@11 ~",
})).s("gm_epiano2").gain(0.4).pan(0.6)

// chords · epiano2 · "e.piano" · soft notes
const epiano2_soft = note("<A B C ~@6 D E F G ~@4 C@2 ~ H ~@99>".pickRestart({
  A: "~@4 f#4@4 ~@8 f#4@5 ~@3", B: "~ f#4 ~@2 f#4 g4", C: "~@4 f#4@5 ~@15", D: "~@4 f#4@5 ~@7 f#4@8",
  E: "~@8 g4@5 ~@3 f#4@7 ~, ~ f#4@2 ~@3", F: "~@2 f#4 [e3,g3,a3,g4] d4 f#4, d5@10 ~@2 d5@11 ~, ~ d4@2 ~@3",
  G: "[e3,g3,a3,g4]@5 ~@3 f#4@4 [e3,g3,a3]@4 ~@4 f#4@3 ~, d5@8 ~@4 [g4,d5]@7 ~@5", H: "~@4 f#4@4 g4@5 ~@3 f#4@4 ~@4",
})).s("gm_epiano2").gain(0.24).pan(0.6)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  A@2 B@4 C D ~@16 E F G H I J K L M@2 N@4 O@4 P@3 Q@6 R@3 ~@6 S T U V W X@8 Y@8 Z@2 AA@2 AB@2 AC@2 AD AE AF AG@2 AH
  AI@2 AJ@2 AK@2 AL@2 AM AN AO AP@2 AQ AR AS@2 AT@2 AU@6
>`.pickRestart({
  A: "[~@24 a3@12 b3@11 ~, g3@47 ~]/2", B: "[~@48 c3@47 ~, [g3,b3,d4]]/4", C: "[a2,b3,c4,e4,g4]@3 ~",
  D: "[a2,e3,c4]@7 ~@5 [d2,d3,a3]@6 ~@6", E: "[a2,e3,g3,c4] [d3,f#3,a3,d4]",
  F: "c4@4 b3@4 c4@3 ~ c4@4 b3@3 ~ c4@3 ~, [a2,a3,e4]@23 ~", G: "[b2,f#3,a3] [e2,g3,b3], d4@23 ~",
  H: "c4@4 b3@4 c4@2 ~@2 c4@4 b3@3 ~ c4@4, [a2,a3,e4]", // A5
  I: "[b2,f#3,d4]@12 [e2,g3,b3,e4]@3 ~ [e2,f#3,a3,d4]@3 ~@5, a3 ~@2", J: "c4@4 b3@4 c4@3 ~ c4@4 b3@4 c4@4, [a2,a3,e4]",
  K: "[b2,f#3,a3,d4]@23 ~", L: "[c3,g3,b3,e4]", M: "[e4 ~@11 g4@22 ~@2 [a3,d4,f#4,a4]@12, [g3,c4]@35 ~@13, ~ d3@3]/2",
  N: "[~@6 d#3@12 c3@12 [d3,a4,c5]@12 [g2,a#4,d5]@5 ~, ~@12 [a#4,d5,g5]@47 ~ f5@33 ~@3]/4", // D7 Gm
  O: "[f2@3 ~ f2@5 ~@3 d#2@24 c3@24 [d3,a4,c5]@24 [g2,a#4,d5]@12, [a4,c5,f5]@10 ~@2 [a#4,d5,g5]@48 f5@35 ~]/4", // D7 Gm F Gm
  P: "[[f3,f4,a4,d5]@3 ~ [f3,a4,d5,f5]@3 ~@21 d6@4 d#6@4 f6@4 f6@2 g6@2 f6@16 [d#3,d#5,g5,a#5]@3 ~ [d#3,d#5,g5,a#5]@3 ~@5, ~@12 [c3,a#4,d#5,g5]@23 ~ [d3,a4,c5,f5]@22 ~@14]/3", // Dm D# Cm7 Dm7
  Q: "[[d3,d5,f5,a#5]@4 [d3,d5,f5,a#5]@3 ~@5 [f3,d#4,f4,g4,a#4]@48 a#4@36 a4@12 g4@35 ~]/6", // A# D#
  R: "[[f3,a4,c5,f5]@6 ~@8 d6 c6 a#5 c6 ~@6 f#4@6 ~@6, ~@12 d5@47 ~@13, ~ g4@3 ~@2, ~ [d#3,a#4]@2 [d3,a4]@2 ~, ~@36 d6@17 ~@19]/3", // F D#5 D5
  S: "~ [a2,g3,c4,e4]", T: "[d2,d3,a3,d4,f#4] [g5,g6]", U: "[f#5,f#6] [e5,e6]", V: "[d5,d6]@2 [e5,e6] [f#5,f#6]@3",
  W: "[d5,d6] [g4,g5]", // D G
  X: "[~@12 [e5,e6]@24 [f#5,f#6]@8 [g5,g6]@8 [a5,a6]@8 [b1,b3,d4]@24 [a1,c4,e4]@12 [d2,a3,d4,f#4]@11 ~ c4@4 b3@4 c4@3 ~ c4@4 b3@3 ~ [c4,b4]@2 c5@2 [b2,f#3,a3]@12 [e2,g3,b3]@12 c4@4 b3@4 c4@2 ~@2 c4@4 b3@3 ~ b4@2 c5@2 [b2,f#3,d4,d5]@12, ~@12 g3@83 ~@13 [a2,a3,e4]@23 ~@25 [a2,a3,e4]@24 ~@12, ~@12 [c2,c4,e4]@48 [d5,d6]@48 ~@24 [d4,d5]@25 ~@19 c4@4 a3@8 ~@4]/8", // E F# G A Bm Am D Cmaj7 …
  Y: "[[e2,g3,b3,e4,g5]@4 [e2,f#3,a3,d4,f#5]@4 ~@4 c4@4 b3@4 c4@3 ~ c4@4 b3@4 b4@2 c5@2 [b2,f#3,a3,d4,d5]@20 b4@4 ~@12 f#4@12 e4 ~@3 f#4@4 g4@4 a4@24 a4 ~@12 a4@20 ~@39, ~@12 [a2,a3,e4]@24 ~@24 [c3,g3,b3,e4]@25 ~@11 d3@36 ~@60, ~@32 c4@4 ~@48 [g3,c4]@35 ~ [g3,c4,e4]@58 ~@14, ~@96 g4 ~@23 [d5,d6]@33 ~@39]/8", // Em D Bm7 A5 Cmaj7 C5 C D
  Z: "[[d#3,d6] [c3,g6], [a#4,d5,g5]@47 ~]/2", // D#maj7 C5 Gm
  AA: "[[d3,a4,c5]@12 [g2,a#4,d5]@5 ~ [f2,a#6]@2 [f2,a6]@2 f6@2, [f5,f6]@18 [a4,c5,f5]@5 ~]/2", // D7 Gm A#5 F
  AB: "[[d#2,g6]@2 ~ d#6, [a#4,d5,g5], ~ c3]/2", // D# Gm
  AC: "[[d3,a4,c5,f6]@24 [g2,a#4,d5,d6]@12 [f3,f4,a4,d5]@3 ~ [f3,a4,d5,f5]@3 ~@5, f5@35 ~@13]/2", // Dm7 Gm Dm
  AD: "~@4 d6 d#6, [c3,a#4,d#5,g5]@23 ~", AE: "f6@2 f6 g6 f6@4 d6@2 f6@2, [d3,a4,c5,f5]@11 ~",
  AF: "[d#3,d#5,g5,a#5]@3 ~ [d#3,d#5,g5,a#5]@3 ~@5 [d3,d5,f5,a#5]@4 [d3,d5,f5,a#5]@3 ~@5, a#6@7 ~@5 a#6@7 ~@5", // D# A#
  AG: "[a#6@7 ~@29 [a3,a5]@12, [f2,f3]]/2", AH: "[a#3,a#5] [c4,c6]",
  AI: "[d#4@4 c#4 d#4 g#6 [a#5,a#6]@2 ~ d#4 e4, [b4,d#5], g#5@29 ~@7 [b5,b6]@12, [e3,d#6] c#3, ~@3 e4@2 ~]/2", // A# B Emaj7
  AJ: "[[c#6,c#7]@8 [a#5,a#6]@4 [g#2,b4,d#5]@5 ~ [f#2,d#6]@2 [f#2,f#6]@2 f#6@2, [f#4,f#5,f#6]@3 [d#4,a#4,f#5], [d#3,a#4,c#5]@6 ~@3 c#5@2 ~]/2", // C# A# G#m D#m F# D#m D#7
  AK: "[[e2,g#6]@6 b6@3 a#6 [d#4,b6] [e4,c#7], [b4,d#5,g#5], g#4@5 ~, ~ c#3, ~@3 e6]/2", // E G#m C#m G#m
  AL: "[[d#3,f#4,a#4,c#5,f#6]@24 [g#2,d#4,b4,d#5,d#6]@12 [f#3,f#4,a#4,d#5]@3 ~ [f#3,a#4,d#5,f#5]@3 ~@5, f#5@35 ~@13]/2", // D#m7 G#m D#m
  AM: "~@4 d#6 e6, [c#3,b4,e5,g#5]@23 ~", AN: "f#6@2 f#6 g#6 f#6@4 d#6@4, f#5, [d#3,a#4,c#5] [g#3,b4,d#5]@2",
  AO: "b5@6 ~@2 b6 a#6 g#6 b6, [c#3,b4,e5,g#5]@23 ~", // C#m7
  AP: "[[a#4,c#5]@4 ~@2 g#3@3 ~ e6@9 ~ d#6@3 e6, [f#5,a#6]@3 ~@5, d#3@3 ~@2 [c#3,b4,e5,g#5,b5]@7, ~@4 [b4,d#5]@5 ~@15]/2", // A#m F# C#m7 B
  AQ: "[a#4,c#5,f#6]@3 g#6 [a#4,c#5,f#6]@4 d#6@2 f#6@2, [d#3,f#5]@3 ~", // F# D#m
  AR: "[e3,e4,g#4,b4,f#6]@4 b5@2 c#6@2 b5@3 ~ [d#3,d#4,f#4,b4,f#6]@4 b5@2 c#6@2 b5@3 ~, ~ [e3,e4,g#4,b4,f#6] ~@2 [d#3,d#4,f#4,b4,f#6] ~", // E B E B
  AS: "[f#6!2 ~@7 a#5@3, [e3,f#3,g#3,b3], b5@3 ~]/2", AT: "[b5@2 a#5 [a#3,c#4,f#5], b3@37 ~@11]/2",
  AU: "[g#5@24 f#5@12 [f#3,a#3,c#4]@12 ~@40 f#5@15 [b1,b2,d#3,f#3,b3,b5]@37 ~@4, [g#3,b3,d#4]@12 d#5@8 b4@9 ~@19, ~@24 b3@25 ~@23, ~@48 [e2,g#3,d#4]@25 f#2@31 ~@40, ~@73 [f#3,c#4]@27 ~@44]/6", // F# B G#m Emaj7 F#5
})).s("gm_string_ensemble_1").gain(0.15)

// other · french horn · "fr.horn"
const french_horn = note(`<
  ~@4 A B C ~@19 D ~@6 E ~@5 F@3 ~ G@2 H ~@12 I@3 J K L M N@4 O ~ P Q R ~ S@2 T@2 U ~@5 V W X@2 Y Z AA AB ~@27
>`.pickRestart({
  A: "e4", B: "f#4 g4 a4", C: "e4@5 ~", D: "~@3 g4 f#4 d4", E: "~@2 e3 f#3@3", F: "[~@8 d4@4 d#4@24 f4@35 ~]/3",
  G: "[~@4 d4@4 d#4@4 f4@3 ~ f4@2 g4@2 f4@14 ~@2 d4@2 ~@2 d4@4 ~@4]/2", H: "f4@3 ~ f4@4 ~@4 f4@3 ~ f4@4 ~@4",
  I: "[~@4 c4@2 b3@2 a3@2 g3@2 f#3@20 e3@2 f#3@2 g3@21 ~@15]/3", J: "~ g4", K: "f#4 e4", L: "d4@2 e4 f#4@3", M: "d4 g3",
  N: "[~@3 e4@6 f#4@2 g4@2 a4@2 d4@4 e4 f#4 g4@3]/4", O: "a4 b4", P: "g4 f#4 d4 ~@3", Q: "~@6 a4@5 ~", R: "g4 f#4 ~@4",
  S: "[~@8 d4@4 e4@35 ~]/2", T: "e4@3 ~ e4@3 ~@5 e4@3 ~ e4@3 ~@5", U: "e4@3 ~ e4@3 ~@17", V: "~@5 d4", W: "d#4",
  X: "[f4@35 ~@13]/2", Y: "~@4 d4 d#4", Z: "f4@3 ~ f4@2 g4@2 f4@14 ~@2", AA: "d4@2 ~@2 d4@4 ~@4 f4@3 ~ f4@4 ~@4",
  AB: "f4@3 ~ f4@4 ~@16",
})).s("gm_french_horn").gain(0.27)

// chords · brass section · "brass"
const brass_section = note(`<
  ~@7 A ~@20 B C ~@7 D E ~@3 F ~ G H ~@7 I ~@10 J K ~@6 L M ~@3 N O P ~ Q ~ R S T ~ C ~@2 U V W ~@2 X Y Z AA AB AC AD AE
  ~ AF ~ AG ~@2 AH AI ~@9
>`.pickRestart({
  A: "[c5,c6]@3 ~ [c5,c6]@2 ~@6 [d5,d6]@3 ~ [d5,d6]@3 ~@5", B: "~@8 e5 ~ f#5 ~ [d5,g5]@4 [d5,f#5]@3 ~@5", C: "a5 ~@7",
  D: "~@20 c5 ~ d5 ~", E: "[a4,c5,f5]@3 ~ [a4,c5,f5] ~@3 [f5,f6]@3 ~ [d5,d6]@2 ~@10", F: "f4@3 ~ f4@3 ~@17",
  G: "~@12 [d#5,g5,a#5]@3 ~ [d#5,g5,a#5]@2 ~@6", // D#
  H: "[d5,f5,a#5]@4 [d5,f5,a#5]@2 ~@6 [d#5,g5,a#5]@3 ~ [d#5,g5,a#5]@2 ~@6", I: "d5@2 ~@2 e5@2 ~@2 d5@2 a5@2 g5@5 ~@7",
  J: "~@16 [b4,d5,g5]@3 ~ [b4,d5,g5]@3 ~", K: "[a4,d5,f#5] ~@7", L: "~@20 e5 ~ f#5 ~",
  M: "[d5,g5]@4 [d5,f#5]@3 ~@5 a5@3 ~@9", N: "[g4,c5,d5]@3 ~ [g4,c5,d5]@3 ~@5 [g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~@5",
  O: "[c5,e5,g5]@4 [c5,e5,g5]@3 ~@5 [e5,g5,b5]@3 ~ [e5,g5,b5]@3 ~@5", P: "[g5,b5,d6]@2 [g5,b5,d6] ~@9",
  Q: "[d5,d6] ~@7", R: "[a4,a5] ~@7", S: "~@20 [f5,f6]@3 ~", T: "[d5,d6] ~@11", U: "~@20 g5 ~ a5 ~",
  V: "[d#5,g5,a#5]@3 ~ [d#5,g5,a#5]@2 ~@6 [d5,f5,a#5]@4 [d5,f5,a#5]@2 ~@6", W: "[d#5,g5,a#5]@2 [d#5,g5,a#5] ~@9",
  X: "~@3 [d#5,f#5,b5] ~@2", Y: "~@16 c#6@2 b5 ~ b5@2 c#6@2", Z: "a#5@5 ~@7 [a#4,c#5,f#5]@5 ~@7",
  AA: "[f#4,b4,d#5]@4 ~@8 [d#4,f#4,b4]@3 ~@5 f#6@4", AB: "d#6@5 ~@7 [d#5,f#5,b5]@4 ~@8", AC: "~@8 b5 c#6 b5 c#6",
  AD: "a#5 ~@2 [a#4,c#5,f#5] ~@2", AE: "~@10 d#5 ~ [f#4,a#4,d#5]@3 ~ [f#4,a#4,d#5]@3 ~@5",
  AF: "~@8 [d#5,g#5,b5]@2 ~@2 [d#5,g#5,b5]@2 [c#5,f#5,a#5] ~ [c#5,f#5,a#5]@3 ~ [f#5,g#5,d#6]@3 ~", // G#m F# G#7
  AG: "~@12 [d#5,b5]@2 [f#5,a#5,c#6] ~ [f#5,b5,d#6]@2 ~@2 [g#5,b5,e6]@4, ~@12 f#5 ~@11", // G#m F# B E
  AH: "[e5,g#5,b5]@3 ~ [e5,g#5,b5]@2 ~@6 [d#5,f#5,b5]@4 [d#5,f#5,b5]@2 ~@6", AI: "[e5,g#5,b5]@4 [e5,g#5,b5]@3 ~@17",
})).s("gm_brass_section").gain(0.57)

// other · timpani
const timpani = note("<~@80 [d3!24] [d3 ~@23] ~@12 [~@8 d3 ~ d3!14] [d3 ~@23] ~@24>").s("gm_timpani").gain(0.13)

// other · timpani · soft notes
const timpani_soft = note(`<
  ~@77
  [~@6 d3!4 ~@7 d3!5 ~@2]
  [~@5 d3!4 ~@8 d3!4 ~@3]
// … 168 more lines

More by Whitney Houston