Strudelify

Just the Lonely Talking Again

Whitney Houston

KeyC majorTempo135 bpm
0:00/0:00
// Just the Lonely Talking Again — Whitney Houston
// 135 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 183 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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 · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 E@2 D@2 F@2 G@2 H@2 I@2 J@2 K@4 L@2 M@2 K@2 N O P Q@3 R@2 S T U@2 V W R@2 X T Y@2 Z@2 D@2 E@2
  D@2 F@2 G@2 H@2 I@2 J@2 K@4 L@2 M@2 K@2 N O P AA@3 R@2 S AB U@2 V W R@2 X T Y@2 AC@4 AD AE AF@2 AG@2 AH@2 AI AE AJ@2
  AK AL R@2 S AB U@2 V W R@2 X T Y@2 Z@2 R@2 S AB U@2 V W R@2 X T Y@2 Z@2 R@2 S AB U@2 V W R@2 X T Y@2 Z@2 R@2 S AB U@2
  V W R@2 X T Y@2
>`.pickRestart({
  A: "[[g3,a3,c4,e4,g4]@23 ~]/2", B: "[~@4 c5@7 ~ [c4,d4,f4,a4,c5]@4, [a3,a#3,d4,f4,a4]@17 ~@7]/2",
  C: "[~@4 c5@7 ~ [c#4,f4,g4,c5]@4, [a3,a#3,d4,f4,a4]@17 ~@7]/2", D: "[[g3,a3,c4,e4,g4]@9 ~ [g3,a3,c4,e4,g4]@2]/2",
  E: "[[f3,a3,a#3,d4]@8 ~ [c4,d4,f4,a4,c5]@3]/2", F: "[[f3,a3,a#3,d4]@31 ~@5 [c#4,f4,g4,c5]@12]/2",
  G: "[[g3,a3,c4,e4,g4]@35 ~@5 [g3,a3,c4,e4,g4]@7 ~]/2", H: "[[f3,a3,a#3,d4]@11 ~ [c4,d4,f4,a4,c5]@4]/2",
  I: "[[g3,a3,c4,e4,g4]@36 ~@4 [g3,a3,c4,e4,g4]@7 ~]/2", // Am7
  J: "[[f3,a3]@12 [f4,a4,c5]@19 ~@5 [c#4,f4,g4,c5]@12, [a#3,d4]@31 ~@17]/2", K: "[g#3,c4,c#4,f4,g#4]/2",
  L: "[~ [g5,a#5,c6,d#6], [g#3,c4,d#4,g4]]/2", M: "[[a3,d4,f#4] [a3,c#4,f4] [a3,c4,d#4] [a3,c#4,f4], [f2,d#3]]/2",
  N: "[c#4,f4,g#4,c#5]", O: "c5 a#4, [c#4,g4]", P: "[f3,a3,c4,e4,g4]@23 ~",
  Q: "[~@24 [a5,c6,g6]@41 ~@7, [a4,c5,e5,g5]@2 ~]/3", R: "[[g3,a#3,d4,f4,a4]@47 ~]/2", S: "[g3,a#3,d4,f4]",
  T: "[g3,a#3,c#4,e4]@23 ~", U: "[[f3,a3,c4,e4]@47 ~]/2", V: "[g3,c4,e4,g4]",
  W: "[f#3,a3,c4,d#4]@11 ~ [f#3,d#4,f#4,a#4]@12", X: "[g3,a#3,d4,f4]@23 ~", Y: "[[f3,a3,c4,e4,g4]@47 ~]/2",
  Z: "[[f3,a3,c4,e4,g4]@41 ~@7]/2", AA: "[~@24 [a5,c6,e6,g6]@41 ~@7, [a4,c5,e5,g5]@2 ~]/3", AB: "[g3,a#3,c#4,f4]@23 ~",
  AC: "[[f3,a3,c4,e4,g4]@41 ~@7 [f3,a3,c4,e4]@48, ~@15 c5@16 ~, ~@23 a4@24 ~, ~@47 g4@48 ~]/4", AD: "[a#3,f4,a#4,d5]",
  AE: "c5 a#4, [d#3,g3,c#4,g4,f5]", AF: "[e4@36 [e4,g5]@11 ~, [f3,a3,c4,g4,a4,c5,e5]@47 ~]/2", AG: "[d3,g4,a4,c5,e5]/2",
  AH: "[c5@11 ~ a5@12, [f3,a3,c4,e4,g4,a4,e5], ~@11 c5@13]/2", AI: "f4!2, [f3,a#4,d5,f5]",
  AJ: "[c5 [c5,a5]@3, [f3,a3,c4,e4,g4,a4]]/2", AK: "[d3,d4,g4,a4,c5,e5]", AL: "[d3,f#3,c4,d#4,f#4]@23 ~",
})).s("gm_epiano1").gain(0.28)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B C D ~ B E D F B C G H B C D I B C J ~ B C K L M@2 N O P Q R S M T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL
  AM AN@2 AO AP AQ AR H AP AQ D I AP AS D AT B AS AU AV AW M@2 AX AY AZ BA BB M BC BD BE BF@2 W BG AA AJ AK BH BI BJ AG
  AH BK AB BL BH BM BN@2 BO BP BQ BR BS BT BU BV BW BF BX BY BZ CA CB CC CD AI CE BL CF BI AF AG CG BK CH CI CJ CK AF CL
  CG BK CM AK CN CO CP CQ CR CS CT AK AL CK CU AG CG BK CH AK AL CK AF CV CW BK CX CY CZ DA DB DC DD BK CH AK AL DE DF
  DG DH BK CX DI CZ DJ@2
>`.pickRestart({
  A: "~ a2", B: "d2@3 ~@19 a1@2", C: "d2@3 ~ a1@2 d2@3 ~@7 f1@6 f#1@2", D: "g1@3 ~@13 g1 ~ g1@3 ~ g1@2",
  E: "d2@3 ~ a1@2 d2@2 ~@8 f1@6 f#1@2", F: "~@10 g1 ~ a1@12", G: "g1@4 ~@12 g1 ~ g1@4 g1@2", H: "~@11 a1",
  I: "~@5 g1 a1@6", J: "g1@4 ~@12 g1 ~ g1@3 ~ g1@2", K: "g1@3 ~@13 g1 ~ g1@4 g1@2", L: "~@10 g1 ~ a1@10 a1 ~",
  M: "a#1@4 ~@18 a#1 ~", N: "a#1@5 ~@17 a#1 ~", O: "a#1@4 ~@6 a#1 ~ f2@6 a#1@6", P: "g#1@4 ~@18 g#1 ~",
  Q: "g#1@2 ~@9 d#1", R: "f1@4 ~@18 f1 ~", S: "f1@4 ~@4 f1 ~ g#1 ~ a1@8 ~@2 f1@2", T: "a#1@2 ~@7 f2@2 a#1",
  U: "d#2@4 ~@18 d#2 ~", V: "d#2@4 ~@18 f1 ~", W: "f1@22 f1 ~", X: "f1@8 c2 f2@2 c2", Y: "f1@20 ~@2 f1 ~",
  Z: "f1@8 f1 ~ f1 ~ f1@12", AA: "g1@5 ~@17 f1@2", AB: "g1@4 f1@2 g1@3 ~@7 d2@6 a#1@2", AC: "c2@4 ~@18 c2 ~",
  AD: "c2@2 ~@3 c2 g1@4 ~ g1", AE: "f1@4 ~@18 e1 ~", AF: "f1@2 e1 f1@2 ~@5 c2 c#2", AG: "d2@21 ~ c2@2",
  AH: "d2@8 e1@2 f1@2 f#1@9 ~ f#1@2", AI: "g1@3 ~@19 f1@2", AJ: "g1@2 f1 g1@2 ~@3 d2@3 a#1", AK: "c2@2 ~@9 g1",
  AL: "c2@4 g1@2 c2@3 ~@7 g1@6 e1@2", AM: "f1 ~@5", AN: "[f1@9 ~ f1 ~@5 f1 ~ f1@20 ~@2 f1 ~ f1@4 f1 ~]/2", AO: "~ e1",
  AP: "d2@2 ~@9 a1", AQ: "d2@4 a1@2 d2@3 ~@7 f1@6 f#1@2", AR: "g1@3 ~@15 g1@3 ~ g1@2", AS: "d2@2 a1 d2 ~@4 f1@3 f#1",
  AT: "~@10 g1 ~ a2@10 ~@2", AU: "g1@3 ~@7 g2 ~@7 g1@3 ~ g1@2", AV: "~@10 g1 ~ a1@10 a1@2", AW: "a#1@3 ~@19 a#1 ~",
  AX: "a#1@3 ~@7 a#1 ~ f2@6 a#1@6", AY: "g#1@5 ~@17 g#1 ~", AZ: "g#1@4 ~@18 f1 ~", BA: "f1@13 ~@7 a1 ~ c2@2",
  BB: "f2@8 g1 ~ g#1@2 a1@8 ~@2 a1@2", BC: "a#1@6 ~@5 a#1", BD: "d#2@4 ~@18 a#1 ~",
  BE: "d#2@3 ~ a#1@2 d#2@4 a#1 ~@5 a#1@6 d#1@2", BF: "f1@21 ~ f1 ~", BG: "f1@8 f1 ~ f1 ~ f1@4 f#1@6 f1@2",
  BH: "c2@4 g1@2 c2@3 ~ c2 ~@5 g1@6 e1@2", BI: "f1@3 ~@19 e1@2", BJ: "f1@3 ~ f1 ~ f1@2 ~@12 c2@2 c#2@2",
  BK: "g1@2 ~@9 f1", BL: "c2@3 ~@19 g1@2", BM: "f1@3 ~@19 f1 ~",
  BN: "[f1@7 ~@3 f1 ~@5 f1 ~ f1@12 ~@4 f1 ~@5 f1 ~ f1@3 ~ f1 ~]/2", BO: "~@10 f1 ~ f2@12", BP: "f1@21 ~ c2@2",
  BQ: "f2@2 c2 f2@7 ~ c2", BR: "f1@13 ~@7 c2 ~ d2 ~", BS: "d#2@10 c2 ~ d#2@4 c2@2 d2@4 ~@2", BT: "f1@10 ~ c2",
  BU: "f2@4 c2@2 f2@9 ~@5 c2@2 c#2@2", BV: "d2@21 ~ a1@2", BW: "d2@4 ~@2 d2@4 a1@2 c2@4 d2@2 ~@4 f1 ~",
  BX: "f1@3 ~@3 f1@4 ~@6 c2 ~@5 c2@2", BY: "f2@13 ~@7 c2@2 d2@2", BZ: "d#2@10 a#2@2 d#2@2 a#2@2 d#2@2 f1@5 ~",
  CA: "f1@17 ~@5 f1 ~", CB: "f1@4 f1 ~ f1@3 ~@7 f2@3 ~ d#2@3 ~", CC: "d2@9 ~@3 d3@6 g3@4 d3@2",
  CD: "f#3@3 d2@2 a1 d2@5 ~", CE: "g1@2 f1 g1@2 ~@3 d2@3 g1", CF: "c2@2 g1 c2@2 c2 ~@2 g1@3 e1",
  CG: "d2@4 e1 f1 f#1@4 ~ f#1", CH: "g1@4 f1@2 g1@3 ~@7 d2@6 g1@2", CI: "c2@2 ~@9 g2",
  CJ: "c3@4 g2@2 c2@4 f1@2 g1@9 ~ e1@2", CK: "f1@2 ~@9 e1", CL: "d2@19 ~ c2@2 c#2@2", CM: "g1@3 a1@3 a#1@3 d2@2 g1",
  CN: "c2@4 g1@2 c2@4 c2 ~@5 g1@6 e1@2", CO: "f1@4 ~@16 a1 ~ c2 ~", CP: "f2@8 c2@2 ~@2 f2@3 ~ e2@3 ~ d#2 ~ c2@2",
  CQ: "d2@11 ~ d3@5 ~ g3@3 ~ d3@2", CR: "f#3@6 e1@6 f1@6 f#1@5 ~", CS: "g1@9 ~@13 d2@2", CT: "g2@2 d2 g1@2 ~@6 d2",
  CU: "f1@4 e1@2 f1@4 ~@10 c2 ~ c#2 ~", CV: "d2@6 ~@4 a1@2 c2@6 c#2@5 ~",
  CW: "d2@2 c2@2 a1 ~ e1@6 f1@5 ~ f#1@3 ~ f#1@2", CX: "g1@4 f1@2 g1@3 ~@9 d2@4 g1@2", CY: "c2@3 ~@13 d3 ~@5 d2@2",
  CZ: "c2@4 ~@6 c2 ~ g1@6 f#1@6", DA: "f1@5 ~@17 f1 ~", DB: "f1@18 ~@2 c2 ~ c#2 ~", DC: "d2@9 ~@2 c2",
  DD: "d2@8 e1 ~ f1 ~ f#1@9 ~ f#1@2", DE: "f1@4 ~@18 c2 ~", DF: "f2@10 c2 ~ f1@11 ~", DG: "d2@21 ~ c2 ~",
  DH: "d2@8 e1 ~ f1@2 f#1@9 ~ f#1@2", DI: "c2@3 ~@13 d2 ~@5 d2@2", DJ: "[f1@7 ~]/2",
})).s("gm_fretless_bass").gain(0.44)

// other · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A@2 B@2 ~ C D@3 ~@8 E F@2 G H I@2 ~ J@3 K@2 L M@4 N O@3 P Q@2 R S T@2 S U Q@2 R ~@4 V W@2 ~@7 X Y@2 ~ X Z@2 ~ J@3
  K@2 L M@4 N AA@3 P Q@2 R AB AC@2 AD AE Q@2 R ~@7 AF@4 ~@4 AG@4 ~@2 Q@2 R ~ AC@2 AD AH Q@2 R ~ AC@2 AD AI AJ@2 AK ~
  AL@2 AD AM AJ AN AO ~ AP@2 AD AM AQ AJ AK ~ AP@2 AD AH AJ AN AR ~ AP@2 AD AS AQ AN AT ~ AC@2 AD AI AU AN AT ~ AV@2
>`.pickRestart({
  A: "[~@23 c5@2 d5@2 e5@2 f5@6 e5@5 d5@4 c5@4]/2", B: "[d5@6 a5@17 ~]/2",
  C: "c5@2 ~ e5@3 f5@6 e5@4 d5@4 c5@4, ~@2 d5@3 ~@19", D: "[d5 a5@2 c6@2 ~]/3",
  E: "c4@2 d4@2 e4@2 f4@5 ~ e4@4 d4@4 c4@4", F: "[d4@4 a4@7 ~ c5@4]/2", G: "e4",
  H: "c4@2 d4@2 e4 ~ f4@5 ~ e4@4 d4@4 c4@4", I: "[d4@12 a4@19 ~@5 [c#4,f4,g4,c5]@11 ~]/2",
  J: "[~ g#4@4 ~, ~ c4@16 ~@7, ~ c#4@8 ~@3, ~@3 f4@16 ~@5]/3", K: "[c5@47 ~]/2", L: "[d5,f#5] [c#5,f5]",
  M: "[[c5,d#5]@12 [c#5,f5]@48 ~@12 c#5@23 ~, ~@5 f4@3, ~@66 g#4@29 ~]/4", N: "c5 a#4, g4",
  O: "[[f4,a4,e5]@4 ~@3 e5@6 [c5,e5,g5]@48 ~@11, ~@7 [a5,c6]@48 ~@17]/3", P: "~@2 g4", Q: "[a4,a5] [a#4,a#5]",
  R: "[f4,f5]", S: "[e4,e5]", T: "[[c5,c6]@3 [f4,f5]]/2", U: "[f#4,f#5] [c5,f#5,a#5]", V: "~@3 a4 g4 f4",
  W: "[[g3,c4,e4]@15 ~]/2", X: "c4 d4 e4 f4@3 e4@2 d4@2 c4@2", Y: "[d4@6 a4@17 ~]/2", Z: "[d4@2 a4@5 ~]/2",
  AA: "[e5@6 ~ e5@6 [c5,e5,g5]@48 ~@11, [f4,a4]@2 ~, ~@7 [a5,c6]@48 ~@17]/3", AB: "[e4,e5]@7 ~",
  AC: "[[g4,g5]@2 [c5,c6] [g4,g5]@3 [f4,f5]@2]/2", AD: "[g4,g5]", AE: "[f#4,f#5] [a#4,c5,f#5,a#5]",
  AF: "[c6@6 a#5@4 a5@8 a5@4 f5@8 g5@3 ~ a#4@8 g5@4 c5@8 c6@37 ~@5]/4",
  AG: "[c6@6 a#5@4 a5@8 a5@4 f5@8 g5@3 ~ a#4@8 g5@4 c5@8 c6@11 ~ c6@26 ~@4]/4", AH: "[f#4,f#5]@3 ~",
  AI: "[f#4,f#5]@7 ~", AJ: "[a4,a5]@13 ~@11", AK: "[f4,f5]@13 ~@11",
  AL: "[[g4,g5]@6 [c5,c6]@3 [g4,g5]@9 [f4,f5]@5 ~]/2", AM: "[f#4,f#5]@19 ~@5", AN: "[a4,a5]@7 ~@5", AO: "[f4,f5]@5 ~@3",
  AP: "[[g4,g5]@12 [c5,c6]@6 [g4,g5]@18 [f4,f5]@11 ~]/2", AQ: "[a4,a5] ~", AR: "[f4,f5] ~", AS: "[f#4,f#5]@5 ~",
  AT: "f5@5 ~@3, f4@13 ~@11", AU: "a5 ~", AV: "[[g4,g5]@12 ~@6 e6@29 ~, ~@12 e5@35 ~, ~@16 a5@31 ~, ~@17 c6@30 ~]/2",
})).s("gm_epiano2").gain(0.27).pan(0.8)

// other · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 ~@18 F@2 G H I@2 ~@2 J@3 K L@2 M N O@4 P@3 N Q@6 ~@6 R@2 S@2 T@2 U@2 V@4 F@2 G H W@2 ~@5 K L@2 M
  N X@4 P@3 N Y@4 Z@2 AA AB AC@4 AD@3 AB AE@2 AF AG L@2 AH N X@4 P@3 N AI@2 AJ AG L@2 M N X@4 P@3 N AI@2 AJ AG L@2 M N
  X@4 P@3 N AI@2 AJ AG L@2 M N X@4 P@3 N AI@2
>`.pickRestart({
  A: "[a3,c4,e4,g4]/2", B: "[d4@2 ~ c5, f4, a#3@35 ~@13, g3@29 ~@19, ~ [d4,a4]]/2", C: "[[a3,c4,e4]@47 ~]/2",
  D: "[[g3,d4]@2 [d4,f4,a4] [c#4,f4,a4,c5], a#3@3 ~]/2", E: "[[a3,c4,e4,g4]@43 ~@5]/2", F: "[d#4,g4]/2", G: "f#4 f4",
  H: "d#4 f4", I: "g#3/2", J: "[e4,g4]/3", K: "f4 g4", L: "f4/2", M: "f4@23 ~", N: "e4", O: "[c5@95 ~]/4", P: "f4/3",
  Q: "[e4@41 [e4,g4]@97 ~@6]/6", R: "[c4,e4]/2", S: "[d4,f4]/2", T: "[e4,g4]/2", U: "[[f4,a4]@3 g4]/2", V: "[f4,g#4]/4",
  W: "[g#3@3 ~]/2", X: "[c5@47 ~]/4", Y: "[e4@42 ~@24 a4@6 c5@17 ~ d5@6, ~@42 [e4,g4]@53 ~]/4", Z: "e5/2",
  AA: "c5@3 d5", AB: "c5 a#4", AC: "[a4@6 ~@30 d5@12 c5@47 ~, ~@3 e5@44 ~]/4", AD: "[a4@2 d5@4 c5@5 d5]/3", AE: "a4/2",
  AF: "g4", AG: "f#4", AH: "f4", AI: "e4/2", AJ: "[e4,g4]",
})).s("gm_pad_poly").gain(0.22)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@25 A B C D E@2 F G H@2 ~ I@3 J ~ K@2 ~ L M@4 K@2 ~ N O@4 ~@15 P@7 Q@2 R@2 ~@2 S@4 K@2 ~ L M@4 K@2 ~ N O@4 ~@16 K@2 ~
  L M@4 K@2 ~ N T@4 K@2 ~ L M@4 K@2 ~ N T@4 K@2 ~ L M@4 K@2 ~ N T@4 K@2 ~ L M@4 K@2 ~ N U@2
>`.pickRestart({
  A: "c4", B: "c#4", C: "d#4", D: "f4@23 ~", E: "[[g#3,c4,d#4,g4]@47 ~]/2", F: "[d#4,f#4] [c#4,f4]",
  G: "[c4,d#4] [c#4,f4]", H: "[g#3@11 ~]/2", I: "[~@23 g4@18 a4@6 g4@11 ~@2 g4@6 e4@6, ~@23 a3@49, ~@23 c4@40 ~@9]/3",
  J: "c4 a3@3", K: "[c4,a4] [d4,a#4]", L: "~@3 e4",
  M: "[c5@36 ~ d4 ~ c4 d4 ~ c4 d4 c4 ~@3 c5@42 ~@6, ~@18 c4 ~@4 d4 ~@24, ~@47 c4@43 ~@6]/4", N: "~@3 c#4",
  O: "[c4@15 ~]/4", P: "[~@23 c4@24 c#4@24 d#4@24 f4@24 g4@47 ~@2, ~@119 d#4@44 ~@5]/7",
  Q: "[[d#4,f#4]@11 [c#4,f4]@12 [c4,d#4]@12 [c#4,f4]@13]/2", R: "[g#3@41 ~@7]/2", S: "[[e4,g4]@83 ~@13]/4",
  T: "[~@48 [e4,g4]@24 ~@11 a#4@12 ~, c4@15 ~, ~@72 f#4@23 ~]/4", U: "c4/2",
})).s("gm_string_ensemble_2").gain(0.24)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@85 A@2 B@2 ~@6 C@2 D@2 ~@28 C@2 D@2 ~@12 C@2 D@2 ~@12 C@2 D@2 ~@12 C@2 D@2 ~@4
>`.pickRestart({
  A: "[~@12 c6@6 a5@5 g5@18 ~ e5@6]/2", B: "[a4@12 e4@31 ~@5]/2", C: "[c5@47 ~]/2", D: "c5 d5",
})).s("gm_string_ensemble_1").gain(0.12).pan(0.3)

// chords · epiano2 · "E.PIANO 2"
const epiano2_2 = note(`<
  ~@28 A@3 ~@2 B C@2 D@3 ~@24 E F@2 ~@10 G@3 ~@3 H I@4 ~@18 J@2 K L M@2 N@2 O@4 P@2 ~ Q ~@60 R@2
>`.pickRestart({
  A: "[~@6 g5@2 d#5 a#4@2 c5@19 ~@6, ~@5 g#5@2 ~@29]/3", B: "~@4 [c4,c5] [c#4,c#5]", C: "[[g#4,g#5]@43 ~@5]/2",
  D: "[~@6 g5@2 d#5 a#4@2 c5@14 ~@11, ~@5 g#5@2 ~@29]/3", E: "~@8 c5 ~@2 a4", F: "[g4@13 ~@11]/2",
  G: "[~@10 g#5@2 g5@4 d#5@2 a#4@4 c5@41 ~@9]/3", H: "~@2 d#5@4 c5@2 c#5 c5@3",
  I: "[g#4@17 g#5 g5@2 d#5 a#4@2 c5@25]/4", J: "[[c4,e4,g4]@35 ~ [c4,e4,g4]@11 ~]/2", K: "[c4,d4,f4]@19 ~@5",
  L: "c5@11 ~ a#4@11 ~, [d#4,f4,g4]@23 ~", M: "[~@17 [a4,c5,e5,g5]@29 ~@2]/2", N: "[[g4,a4,c5,e5]@41 ~@7]/2",
  O: "[[c4,e4,g4]@38 ~@2 f5@2 g5@5 f5@23 ~@2 c6@6 ~@6 f5@6 g5@5 ~, ~@71 f5@10 ~@15, ~@6 g5 ~, ~@26 a#5@5 ~]/4", // C
  P: "[~@8 c5@7 ~, ~@15 f5@8 ~@25, ~@10 d5@3 ~@11]/2", Q: "~ [d4,f#4,a#4]", R: "[~@18 g5@29 ~, ~@12 e6@35 ~]/2",
})).s("gm_epiano2").gain(0.33).pan(0.2)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@16 A@3 ~@22 B ~ C ~ D ~@3 E ~ F ~@37 B ~ C ~ D ~@3 E ~ F ~@21 G ~ H ~ I ~@3 J ~ K ~ E ~@3 I ~ L ~ I ~@3 M ~ H ~ E
  ~@3 E ~ N ~ E ~@3 E ~ F ~ E ~@3 I ~ F ~ I ~@3 I ~ F ~@3
>`.pickRestart({
  A: "[~@6 g4@13 ~@5]/3", B: "~@4 c3@2 ~@2 d3@2 ~@2 f3@3 ~ d3 ~ g3@3 ~ g3@2",
  C: "~@4 c3@2 ~@2 d3@2 ~@2 f3@2 ~@2 d3 ~ g3@3 ~ f3@2", D: "~@4 c3@2 ~@2 d3@2 ~@2 f3@2 ~@2 d3@2 g3@3 ~ g3@2",
  E: "~@4 c3@2 ~@2 d3@2 ~@2 f3@3 ~ d3@2 g3@3 ~ g3@2", F: "~@4 c3@2 ~@2 d3@2 ~@2 f3@3 ~ d3@2 g3@3 ~ f3@2",
  G: "~@4 c3@2 ~@2 d3 ~@3 f3@4 d3@2 g3@3 ~ g3@2", H: "~@4 c3@2 ~@2 d3@2 ~@2 f3@4 d3@2 g3@3 ~ f3@2",
  I: "~@4 c3@2 ~@2 d3@2 ~@2 f3@4 d3@2 g3@3 ~ g3@2", J: "~@2 c3@2 ~@4 d3@2 ~@2 f3@4 d3@2 g3@3 ~ g3@2",
  K: "~@4 c3@2 ~@2 d3@2 ~@2 f3@4 d3@2 g3@4 f3 ~", L: "~@4 c3@3 ~ d3@2 ~@2 f3@4 d3@2 g3@4 f3@2",
  M: "~@2 c3 ~ d3 ~ f3@2 d3 g3 ~ g3", N: "~@2 c3 ~ d3 ~ f3@2 d3 g3@2 f3",
})).s("gm_electric_guitar_muted").gain(0.31).pan(0.8)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~ A@2 ~ B C@2 D E F@2 ~@5 G@2 ~@42 H@3 ~ I@2 ~@117>".pickRestart({
  A: "[e5@7 ~]/2", B: "~@12 a5@11 ~", C: "[e5@41 ~@7]/2", D: "~@5 [d4,g4]@18 ~", E: "~@12 g4@9 f4@2 ~",
  F: "[e4@29 ~@19]/2", G: "[~@3 g4@37 ~@8, ~@3 c5@34 ~@11]/2", H: "[~@12 a5@37 ~@23]/3", I: "[~@4 [g4,c5]@35 ~@9]/2",
})).s("gm_electric_guitar_jazz").gain(0.08).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~@106 A B C D E@2 F G@4 H I ~ J@2 ~@6 K L ~@4 M ~ N O ~@6 P Q ~@4 R S T U ~@6 V W ~ X Y ~@3 Z AA ~@13
>`.pickRestart({
  A: "~@7 f4@2 ~ g4@3 a4@5 a#4@4 ~ d5", B: "c5@17 g#4 a4@5 [g4,g#4]", C: "f4@12 ~@4 d4@3 ~ d4@3 ~",
  D: "c4@2 d4 c4 d4 c4 d4 [c4,d4] ~ [c4,d4] c4 d4 c4@9 ~@3", // Csus2
  E: "[~@4 d4 ~ e4 ~@2 c4 ~@2 [f3,g3]@3 f3 ~ g3 f3@3 f3@10 ~@17, ~@4 d4 ~@19]/2", F: "~@12 g4@3 ~ a4@3 c5@3 d5@2",
  G: "[~@12 d5@23 d#5 d5@5 ~ d5@11 ~ d5@6 c5@6 a#4@4 a4@8 a#4@6 f4@11 ~, ~ a4@15 ~@25 c5@2 ~@11 d#5 ~@41]/4",
  H: "~@18 c4 ~ d4 ~ f4 ~", I: "a#4@3 a4@2 ~@2 f4 d4 ~ f4@3 ~ d4@2 ~@2 d4@2 ~ c4@3", J: "[e5 f5@17 d5@3 ~ c5@4 ~@22]/2",
  K: "~@4 c5 d5@3 ~@2 c5@11 a#4@3", L: "a4@3 ~@5", M: "~@7 d4@2 f4 ~@3 f4@5 d4@2 ~@4",
  N: "~@6 c5@2 ~ d5 ~ d#5 ~ d5@4 ~ c5@3 a#4@3", O: "~ a4@10 ~@13", P: "~@6 c5 d5@3 ~@2 c5@6 a4@2 ~@4, ~@18 g4 ~@5",
  Q: "a4 g4 f4@5 ~@5", R: "~@18 c4@2 d4@2 ~ g4, ~@11 f4", S: "a4@2 ~ a4@3 f4@3 ~@15", T: "~@7 g5@5 g5@5 ~ f5@3 d5@3",
  U: "~ c5@5 a4@3 ~@15", V: "~@2 f5", W: "c5 ~@5", X: "~@6 d5@2 ~ d5@2 ~", Y: "c5@3 d5 ~@8",
  Z: "~@7 a#4@6 a4@3 a#4@3 a4@3 ~ g4, ~@11 g#4", AA: "f#4 f4@8 ~@15",
})).s("gm_alto_sax").gain(0.38).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C ~ A B C ~ A B C ~ A B C ~ B@2 C ~ B@2 C ~ A@3 ~ B@4 A B@5 A B@19 C ~ B@2 C ~ B@2 C ~ B@2 C ~ B@7 A@2 B@5 A
  B@21 A B@34 D B@37 ~
>`.pickRestart({
  A: "x ~@10 x", B: "x", C: "x ~@8 x ~ x", D: "x!4",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<A B@55 C B@31 C B@7 C B@6 D E B@15 C B@16 F B@14 E B@7 G B@17 C B@2 ~@2>".pickRestart({
  A: "~ x ~@4", B: "~ x", C: "~ x ~ x ~@2", D: "~@6 x ~@4 x", E: "~@2 x ~@3 x ~@2 x ~@2", F: "~@5 x!2 ~@5",
  G: "~ x ~@4 x ~@5",
// … 77 more lines

More by Whitney Houston