Strudelify

Can't Take My Eyes Off You

Gloria Gaynor

KeyB♭ majorTempo133 bpm
0:00/0:00
// Can't Take My Eyes Off You — Gloria Gaynor
// 133 bpm, 4/4, key A# 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 188 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · epiano2 · "E.PIANO 3"
const epiano2 = note(`<
  ~ A B@3 A C D@2 A B@3 A C D@2 A B@3 A C D@2 A B@3 A C D@2 ~@8 A B@3 A C D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 E@2 F@2
  G@2 H@2 I@2 J@2 M@2 L@2 ~@25 N@2 O@2 P@2 Q@2 R@2 S@2 T@2 U@2 ~@25 N@2 O@2 P@2 Q@2 R@2 S@2 T@2 U@2 ~@25
>`.pickRestart({
  A: "[c4,e4,g4,bb4,c5]", B: "[bb4 [bb3,f4,bb4,d5]@2, [c4,eb4,g4,c5]@2 ~]/3", C: "[c4,eb4,g4,bb4,c5]",
  D: "[[bb3,f4,bb4,d5]@15 ~]/2", E: "[[d5,f5,bb5]@24 ~@5 bb5@3, ~@3 [d5,f5], ~@27 g5@5]/2",
  F: "[d5@22 ~@2 f5@3 ~@2 g5@2 ~, [bb4,a5]@31 ~, f5@24 ~@3 f5@4 ~, ~@22 d5@9 ~]/2", // Bbmaj7
  G: "[~@7 ab5, [bb4,d5,f5], ab5@7 ~, ~@3 bb5]/2", H: "[bb4,eb5,g5]/2",
  I: "[[bb4,eb5,gb5]@12 ~@3 eb5, ~@3 gb5, ~@27 f5@5]/2", J: "[bb4,d5,f5]/2", K: "[g4,bb4,c5,eb5]/2",
  L: "[[f4,bb4,d5]@7 ~]/2", M: "[g4,bb4,c5,e5]/2", N: "[[f5,ab5,db6]@24 ~@5 db6@3, ~@3 [f5,ab5], ~@27 bb5@5]/2",
  O: "[f5@22 ~@2 ab5@3 ~@2 bb5@2 ~, [db5,c6]@31 ~, ab5@24 ~@3 ab5@4 ~, ~@22 f5@9 ~]/2", // Dbmaj7
  P: "[~@7 b5, [db5,f5,ab5], b5@7 ~, ~@3 db6]/2", Q: "[db5,gb5,bb5]/2",
  R: "[[db5,gb5,a5]@12 ~@3 gb5, ~@3 a5, ~@27 ab5@5]/2", S: "[db5,f5,ab5]/2", T: "[bb4,db5,eb5,g5]/2",
  U: "[[ab4,db5,f5]@7 ~]/2", // Db
})).s("gm_epiano2").gain(0.56)

// bass · slap bass 1 · "A.BASS 2"
const bass = note(`<
  ~@13 A@20 B C D E F G D H A@8 I J K L K I M N O P Q R S T U V W X Y Z W AA AB AC AB AD AE X AF W@2 AF B C D E F G D H
  AG AH AI AJ AK AL AI AM AN AH AI AO AK AP AQ AR ~ AS AT AU AV AS AW AX AY AX AZ BA AT BB AS@2 BB B C D E F G D H AG AH
  AI AJ AK AL AI AM AN AH AI AO AK AP AQ AR ~ AS AT AU AV AS AW AX AY AX AZ BA AT BB AS@2 BB B C D E F G D H AG AH AI AJ
  AK AL AI AM AN AH AI AO AK BC ~@3
>`.pickRestart({
  A: "bb2 ~ bb2 ~@3 bb2@2 bb2@4 bb1 ~ bb1@2", B: "c2@2 ~@2 c2@3 ~ c2@3 ~ c2@4", C: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~",
  D: "bb1@2 ~@2 bb1@3 ~ bb1@3 ~ bb1@3 ~", E: "bb1@2 ~@2 bb1@2 ~@2 bb1@3 ~ bb1 ~ b1@2", F: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  G: "f1@3 ~ f1@3 ~ f1@3 ~ f1@2 a1@2", H: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~", I: "bb1@4 ~@2 bb1 ~ bb1@5 ~@3",
  J: "bb1@5 ~ bb1 ~ bb1@4 ~@2 bb1 ~", K: "bb1@3 ~ bb1@3 ~", L: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~",
  M: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2", N: "eb2@4 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2 ~", O: "eb2@5 ~ eb2 ~ eb2@6 ~@2",
  P: "eb2@4 ~@2 eb2 ~ eb2@5 ~@3", Q: "bb1@4 ~@2 bb1 ~ bb1@6 ~@2", R: "bb1@5 ~ bb1 ~ bb1@4 ~@2 bb1@2",
  S: "~@2 bb1@2 ~@2 bb1 ~ bb1@5 ~@3", T: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1@2", U: "~@2 bb1@2 ~@2 bb1 ~ bb1@4 ~@4",
  V: "bb1@4 ~@2 bb1 ~ bb1@3 ~@5", W: "bb1@2 bb2 ~ bb1@2 bb2 ~ bb1@2 bb2@2 bb1@2 bb2@2",
  X: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", Y: "bb1@2 bb2@2 bb1@2 bb2 ~ bb1@2 bb2 ~ bb1@2 bb2 ~",
  Z: "bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2 ~", AA: "bb1 bb2 bb1 bb2 c2 c3 d2 d3",
  AB: "eb2 eb3 eb2 eb3 eb2 eb3 eb2 eb3", AC: "eb2 eb3 eb2 eb3 eb2 eb3 db2 d2",
  AD: "eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3 ~", AE: "bb1@2 bb2@2 bb1@2 bb2 ~ bb1@2 bb2@2 bb1@2 bb2@2",
  AF: "bb1@2 bb2 ~ bb1@2 bb2@2 bb1@2 bb2@2 bb1@2 bb2 ~", AG: "g1@3 ~@13", AH: "c2 c3 c2 c3 c2 c3 c2 c3",
  AI: "f2 f3 f2 f3 f2 f3 f2 f3", AJ: "d2 d3 d2 d3 d2 d3 bb1 bb2", AK: "g1 g2 g1 g2 g1 g2 g1 g2",
  AL: "c2 c3 c2 c3 c2 c3 ~ c3, ~@3 c2", AM: "bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3", AN: "g2 g3 g2 g3 g2 g3 ~ g3, ~@3 g2",
  AO: "d2 d3 d2 d3 ~ d3 bb1 bb2, ~@2 d2 ~", AP: "c2@4 ~@2 c2@5 ~ c2@4", AQ: "~@2 c2@5 ~ c2@2 ~@2 c2@2 ~@2",
  AR: "ab1@5 ~ ab1@10", AS: "db2@2 db3 ~ db2@2 db3 ~ db2@2 db3@2 db2@2 db3@2", AT: "db2 db3 db2 db3 db2 db3 db2 db3",
  AU: "db2@2 db3@2 db2@2 db3 ~ db2@2 db3 ~ db2@2 db3 ~", AV: "db2@2 db3@2 db2@2 db3@2 db2@2 db3@2 db2@2 db3 ~",
  AW: "db2 db3 db2 db3 eb2 eb3 f2 f3", AX: "gb2 gb3 gb2 gb3 gb2 gb3 gb2 gb3", AY: "gb2 gb3 gb2 gb3 gb2 gb3 e2 f2",
  AZ: "gb2@2 gb3@2 gb2@2 gb3@2 gb2@2 gb3@2 gb2@2 gb3 ~", BA: "db2@2 db3@2 db2@2 db3 ~ db2@2 db3@2 db2@2 db3@2",
  BB: "db2@2 db3 ~ db2@2 db3@2 db2@2 db3@2 db2@2 db3 ~", BC: "c2@4 ~@2 c2@5 ~@5",
})).s("gm_slap_bass_1").gain(0.44)

// chords · electric guitar clean · "E.GUITAR 2"
const electric_guitar_clean = note(`<
  ~@33 A B C D A B C ~@9 E ~ F ~ G ~ H ~ I ~ E ~ J ~@3 K L M N O P@2 Q R S T U V W X Y A B C D A B C ~@18 Z AA AB AC AD
  AE@2 AF AG AH AI AJ AK AL AM AN A B C D A B C ~@18 Z AA AB AC AD AE@2 AF AG AH AI AJ AK AL AM AN A B C D A B C ~@18
>`.pickRestart({
  A: "~@4 [c4,eb4,g4] ~ [c4,eb4,g4] ~@5 [c4,eb4,g4] ~ [c4,eb4,g4] ~", // Cm
  B: "~@4 [c4,eb4,g4] ~ [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  C: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@5 [bb3,d4,f4] ~ [bb3,d4,f4] ~", // Bb
  D: "~@4 [bb3,d4,f4] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~", E: "~@10 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~",
  F: "~@10 [d4,f4,a4] ~@3 [d4,f4,a4] ~", G: "~@10 [d4,f4,ab4] ~@3 [d4,f4,ab4] ~",
  H: "~@10 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] ~", I: "~@10 [bb3,eb4,gb4] ~@3 [bb3,eb4,gb4] ~",
  J: "~@10 [eb4,g4,bb4] ~@3 [g4,bb4,c5] ~", K: "bb4 ~@3 [f4,bb4] ~@5 [f4,bb4] ~@3 [f4,bb4]@2",
  L: "~@4 [f4,bb4] ~@5 [f4,bb4] ~@3 [f4,a4]@2", M: "~@4 [f4,a4] ~@5 [f4,a4] ~@3 [f4,a4]@2",
  N: "~@4 [f4,a4] ~@5 [f4,a4] ~@3 [f4,ab4]@2", O: "~@4 [f4,ab4] ~@5 [f4,ab4] ~@3 [f4,ab4]@2",
  P: "[~@4 [f4,ab4] ~@5 [f4,ab4] ~@4 eb4@2 ~@3 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@3 [eb4,g4,bb4]@2, ~@7 [g4,bb4] ~@8]/2", // Fm Eb Gm
  Q: "~@4 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@3 [eb4,gb4]@2", R: "~@4 [eb4,gb4] ~@5 [eb4,gb4] ~@3 [eb4,gb4]@2",
  S: "~@4 [eb4,gb4] ~@5 [eb4,gb4] ~@3 [f4,bb4,d5]@2", T: "~@4 [f4,d5] ~@5 [f4,bb4,d5] ~@3 [f4,bb4,d5]@2",
  U: "~@4 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3 [g4,c5,e5]@2", V: "~@4 [g4,c5,e5] ~@5 [g4,c5,e5] ~@3 [g4,c5,eb5]@2",
  W: "~@4 [g4,c5,eb5] ~@5 [g4,c5,eb5] ~@3 [f4,bb4,d5]@2", X: "~@4 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3 [f4,bb4,d5]@2",
  Y: "~@4 [f4,bb4,d5] ~@11", Z: "db5 ~@3 [ab4,db5] ~@5 [ab4,db5] ~@3 [ab4,db5]@2",
  AA: "~@4 [ab4,db5] ~@5 [ab4,db5] ~@3 [ab4,c5]@2", AB: "~@4 [ab4,c5] ~@5 [ab4,c5] ~@3 [ab4,c5]@2",
  AC: "~@4 [ab4,c5] ~@5 [ab4,c5] ~@3 [ab4,b4]@2", AD: "~@4 [ab4,b4] ~@5 [ab4,b4] ~@3 [ab4,b4]@2",
  AE: "[~@4 [ab4,b4] ~@5 [ab4,b4] ~@4 gb4@2 ~@3 [gb4,bb4,db5] ~@5 [gb4,bb4,db5] ~@3 [gb4,bb4,db5]@2, ~@7 [bb4,db5] ~@8]/2", // Abm Gb Bbm
  AF: "~@4 [gb4,bb4,db5] ~@5 [gb4,bb4,db5] ~@3 [gb4,a4]@2", AG: "~@4 [gb4,a4] ~@5 [gb4,a4] ~@3 [gb4,a4]@2",
  AH: "~@4 [gb4,a4] ~@5 [gb4,a4] ~@3 [ab4,db5,f5]@2", AI: "~@4 [ab4,f5] ~@5 [ab4,db5,f5] ~@3 [ab4,db5,f5]@2",
  AJ: "~@4 [ab4,db5,f5] ~@5 [ab4,db5,f5] ~@3 [bb4,eb5,g5]@2", // Db Eb
  AK: "~@4 [bb4,eb5,g5] ~@5 [bb4,eb5,g5] ~@3 [bb4,eb5,gb5]@2", // Eb Ebm
  AL: "~@4 [bb4,eb5,gb5] ~@5 [bb4,eb5,gb5] ~@3 [ab4,db5,f5]@2", // Ebm Db
  AM: "~@4 [ab4,db5,f5] ~@5 [ab4,db5,f5] ~@3 [ab4,db5,f5]@2", AN: "~@4 [ab4,db5,f5] ~@11",
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · synth brass 2 · "SYNBRASS 4"
const synth_brass_2 = note(`<
  ~@33 A B C D E F C G ~@36 H@2 I@2 A B C D E F C J@2 K L M N O P Q R K P S T U@2 V@2 ~@12 W@2 X@2 A B C D E F C J@2 K L
  M N O P Q R K P S T U@2 V@2 ~@12 W@2 X@2 A B C D E F C J@2 K L M N O P Q R K P S T U@2 ~@2
>`.pickRestart({
  A: "[gb3,c4,eb4,c5,eb5,gb5]@3 ~ [c5,eb5,g5] ~@3 [gb3,c4,eb4,c5,eb5,gb5]@3 ~ [c5,eb5,g5] ~@3", // Cdim Cm Cdim Cm
  B: "[gb3,c4,eb4,c5,eb5,gb5]@3 ~ [c5,eb5,g5] ~ [gb3,c4,eb4,c5,eb5,bb5]@2 ~@2 [gb3,c5,eb5,a5] ~@3 [gb3,c4,eb4]@2, ~@10 [c4,eb4]@2 ~@2 [c5,g5] ~", // Cdim Cm Cm7b5 Gbdim Cdim Cm C5
  C: "[f3,bb3,d4,bb4,d5,gb5]@4 [bb4,d5,g5] ~@3 [f3,bb3,d4,bb4,d5,gb5]@4 [bb4,d5,g5] ~@3", // Bb Gm Bb Gm
  D: "[f3,bb3,d4,bb4,d5,gb5]@3 ~ [bb4,d5,g5] ~ [d4,bb4,d5,bb5] ~@3 [f3,d4,bb4,d5,a5] ~@3 [bb3,bb4,d5,g5] ~, ~@3 [f3,bb3] ~ bb3 ~ [f3,d4]", // Bb Gm Bbmaj7 Gm Bb5 Dm
  E: "[gb3,c4,eb4,c5,eb5,gb5]@3 ~ [c5,eb5,g5] ~@3 [gb3,c4,eb4,c5,eb5,gb5]@4 [c5,eb5,g5] ~@3", // Cdim Cm Cdim Cm
  F: "[gb3,c4,eb4,c5,eb5,gb5]@4 [c5,eb5,g5] ~ [c5,eb5,bb5]@2 ~@2 [gb3,c4,eb4,c5,eb5,a5] ~@3 [gb3,c4,eb4]@2, ~@6 [gb3,c4,eb4] ~@7 [c5,eb5,g5] ~", // Cdim Cm Cm7 Gbdim Cdim Cm
  G: "[d5,bb5]@7 ~", H: "[~@8 e4@8 eb4@15 ~, ~ [g4,c5]@3]/2", I: "[[d4,f4,bb4]@13 ~@3]/2", J: "[d5,bb5,d6,bb6]/2",
  K: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~", // Eb
  L: "[g3,bb3,eb4]@2 ~@4 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~", // Eb Dm
  M: "[a3,d4,f4]@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~", // Dm
  N: "[a3,d4,f4]@2 [a3,d4,f4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Dm Eb
  O: "[g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~", // Eb
  P: "[g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~", Q: "[bb3,c4,d4,f4]@7 ~",
  R: "[g3,bb3,d4,f4]@13 ~@3", S: "[a3,d4,f4] ~ [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~",
  T: "[a3,d4,f4] ~ [a3,d4,f4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Dm Eb
  U: "[[g3,bb3,eb4,g4,bb4,d5]@29 ~@3]/2", V: "[[ab3,c4,eb4,f4,ab4]@29 ~@3]/2",
  W: "[~@8 g4@8 gb4@15 ~, ~ [bb4,eb5]@3]/2", X: "[[f4,ab4,db5]@13 ~@3]/2",
})).s("gm_synth_brass_2").gain(0.31)

// other · synth strings 1 · "STR.SECT 3"
const synth_strings_1 = note(`<
  ~ A B C@2 A B D@2 A B C@2 A B D@2 A B C@2 A B D@2 A B C@2 A B D@2 ~@8 A B C@2 A B D@2 ~@16 E@8 F@2 G@2 ~@28 H@2 I J@2
  K@2 L@2 M N@3 ~@3 O ~@10 P Q@2 R S@3 T@2 U@4 ~@3 I J@2 V@4 M N@3 ~@3 O ~@10 P Q@2 R S@3 W@2 U@4 ~@2
>`.pickRestart({
  A: "~ [g4,g5]", B: "[c5,c6]@5 [bb4,bb5] [a4,a5] [bb4,bb5]", C: "[[f4,f5]@15 ~]/2", D: "[[f4,f5]@29 ~@3]/2",
  E: "[~@4 f5@19 g5@4 d5@4 f5@25 g5@4 d5@3 f5@24 ~ g5@3 f5@13 eb5@7 d5@9 c5@8]/8", F: "[f5@7 gb5@8 d6@9 c6@8]/2",
  G: "[f5@3 ~]/2", H: "ab5/2", I: "eb6 db6 c6 ab5", J: "[f5@27 gb5@5]/2", K: "[ab5@7 db5@17 db6@8]/2",
  L: "[bb5@15 ~]/2", M: "~ gb5 db6 a5", N: "[ab5@4 gb5@4 f5@4 gb5@3 ab5@32 ~]/3",
  O: "eb5 f5 gb5 ab5 f5 gb5 ab5 bb5 gb5 ab5 bb5 c6 ab5 bb5 c6 db6", P: "~@2 c5 f5", Q: "[d5@6 a5 bb5]/2", R: "g5",
  S: "[bb5@8 a5@7 bb5@25 ~@8]/3", T: "[~ g5@22 ~ c5@4 f5@4]/2", U: "[d5@24 a5@4 bb5@35 ~]/4",
  V: "[ab5@7 db5@17 ~@7 bb5@30 ~@3, ~@24 db6@9 ~@31]/4", W: "[~ g5@22 c5@4 f5@4 ~]/2",
})).s("gm_synth_strings_1").gain(0.08)

// other · synth strings 1 · "STR.SECT 3" · soft notes
const synth_strings_1_soft = note("<~@116 A@4 ~@37 A@4 ~@27>".pickRestart({
  A: "[~@10 f5@21 [eb5,g5]@16 [db5,gb5]@16 ~, ~@10 db5@16 ~@5 bb4@32 ~]/4", // Eb Gb5
})).s("gm_synth_strings_1").gain(0.03)

// chords · tuba
const tuba = note(`<
  ~@25 A B C D E B D F ~@8 A B C D G@2 H I ~@14 J K ~@12 L M N O ~@9 P@2 Q R S T U@2 V@2 W@2 X Y Z@2 ~@14 AA AB ~@9 P@2
  Q R S T U@2 V@2 W@2 X Y Z@2 ~@14 AA AB ~@9 P@2 Q R S T U@2 V@2 W@2 AC ~@3
>`.pickRestart({
  A: "[c5,e5]", B: "[c5,eb5]@15 ~", C: "[c5,d5] bb4 ~ a4 ~ bb4 c5 d5", D: "c5 bb4 ~ a4 ~ bb4 c5 d5", E: "[c5,e5]@15 ~",
  F: "c5 bb4 ~ a4 ~ bb4 ~@2", G: "[c5@7 ~]/2", H: "c5 bb4 ~ a4 ~ bb4 ~ c5", I: "~@2 d5@11 ~@3",
  J: "c5 ~ bb4 ~@3 a4 ~@3 bb4@2 ~@2 c5@2", K: "~ d5@5 ~@2", L: "~ g4", M: "c5@8 a4@5 ~@3",
  N: "c5@2 bb4@2 ~@2 a4@2 ~@2 bb4 ~ c5@2 d5@2", O: "c5@2 bb4 ~@3 a4 ~@3 bb4@4 ~@2",
  P: "[[g3,bb3,eb4]@20 [b4,c5] ~@7 b4 c5 ~@2, ~@11 [a3,d4,f4]@4 ~]/2", Q: "[a3,d4,f4]@7 ~",
  R: "[a3,d4,f4]@4 c5 d5 [bb3,eb4,g4]@6 c5 d5 ~@2", S: "[g3,bb3,eb4]@7 ~", T: "[g3,bb3,eb4]@5 ~ [a3,d4,f4]@9 ~",
  U: "[~@4 b4 c5 ~@6 b4 c5@2 ~ g3@12 ~@4, [d4,f4]@7 ~, bb3@15 ~@17]/2", // Dm
  V: "[[g3,bb3,eb4]@20 b4 c5 ~@6 b4 c5 ~@2, ~@11 [a3,d4,f4]@4 ~]/2", // Eb Dm
  W: "[~@20 [c5,d5] ~@7 c5 d5 ~@2, [a3,d4,f4]@22 [bb3,eb4,g4]@9 ~]/2", X: "c4@5 ~ c4@5 ~ c4@4",
  Y: "~@2 c4@5 ~ c4@3 ~ c4@3 ~", Z: "[[ab3,f4,ab4]@31 ~]/2", AA: "eb4@2 db4 ~@3 c4 ~@3 db4@2 eb4@2 f4@2, ~@10 db5 ~@5",
  AB: "eb4@2 db4 ~@3 c4 ~@3 db4@2 eb4@2 f4@2", AC: "c4@5 ~ c4@5 ~@5",
})).s("gm_tuba").gain(0.31)

// chords · piano · "E.PIANO 1"
const piano = note(`<
  ~@49 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2 F@2 I@2 H@2 ~@25 J@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 ~@25 J@2 K@2
  L@2 M@2 N@2 O@2 P@2 Q@2 ~@25
>`.pickRestart({
  A: "[[d5,f5,bb5]@24 ~@5 bb5@3, ~@3 [d5,f5], ~@27 g5@5]/2", // Bb Dm
  B: "[d5@22 ~@2 f5@3 ~@2 g5@2 ~, [bb4,a5]@31 ~, f5@24 ~@3 f5@4 ~, ~@22 d5@9 ~]/2", // Bbmaj7
  C: "[~@7 ab5, [bb4,d5,f5], ab5@7 ~, ~@3 bb5]/2", D: "[bb4,eb5,g5]/2",
  E: "[[bb4,eb5,gb5]@12 ~@3 eb5, ~@3 gb5, ~@27 f5@5]/2", F: "[bb4,d5,f5]/2", G: "[g4,bb4,c5,eb5]/2",
  H: "[[f4,bb4,d5]@7 ~]/2", I: "[g4,bb4,c5,e5]/2", J: "[[f5,ab5,db6]@24 ~@5 db6@3, ~@3 [f5,ab5], ~@27 bb5@5]/2",
  K: "[f5@22 ~@2 ab5@3 ~@2 bb5@2 ~, [db5,c6]@31 ~, ab5@24 ~@3 ab5@4 ~, ~@22 f5@9 ~]/2", // Dbmaj7
  L: "[~@7 b5, [db5,f5,ab5], b5@7 ~, ~@3 db6]/2", M: "[db5,gb5,bb5]/2",
  N: "[[db5,gb5,a5]@12 ~@3 gb5, ~@3 a5, ~@27 ab5@5]/2", O: "[db5,f5,ab5]/2", P: "[bb4,db5,eb5,g5]/2",
  Q: "[[ab4,db5,f5]@7 ~]/2", // Db
})).s("gm_piano").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!175 [x!3 ~] ~@3>").gain(0.34)

// drums · rim
const rim = s("rim").struct(`<
  ~@17 A@16 ~@7 A@9 ~@15 A ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@6 A@2 ~@15 A ~@7 A@2 ~@7 A ~@8
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.34)

// drums · snare
const snare = s("sd").struct("<~@17 [~ x ~ x]!167 [~ x ~@2] ~@3>").gain(0.34)

// drums · clap
const clap = s("cp").struct(`<
  ~@17 A@32 ~@15 A ~@15 A@10 B@14 A@2 ~@15 A@10 B@14 A@2 ~@15 A@10 B@12 C ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x!3 ~",
})).gain(0.34)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@31 A B ~@7 A ~@7 B ~@15 B ~@15 B ~@7 A B ~@7 B ~@6 A B ~@15 B ~@7 A B ~@7 B ~@6 A B ~@15 B ~@7 A B ~@7 B ~@8
>`.pickRestart({
  A: "~@4 x!12", B: "x!13 ~ x ~",
})).gain(0.19)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@31 A ~@8 A ~@47 A ~@15 A ~@24 A ~@15 A ~@24 A ~@17>".pickRestart({
  A: "x!4 ~@12",
})).gain(0.08)

// drums · hihat
const hihat = s("hh").struct(`<
// … 86 more lines

More by Gloria Gaynor