Strudelify

Can't Take My Eyes Off of You

Frankie Valli

KeyF majorTempo120 bpm
0:00/0:00
// Can't Take My Eyes Off of You — Frankie Valli
// 120 bpm, 4/4, key F 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 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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
const piano = note(`<
  ~@9 A@4 B@2 C D E F G H I J K L M N O P Q R C D E S K T U V K W X Y Z AA AB AC AD AE@2 AF AG AH@2 AI AJ AK AL AI@2 AM
  AK AN@2 ~@2 AO AP AQ AR AS AT AU@2 AV AW AX@2 AW AY AZ BA BB AC AD AE@2 AF AG AH@2 AI AJ AK AL AI@2 AM AK AN@2 ~@2
  BC@2 ~
>`.pickRestart({
  A: "[[a3,c4,f4]@4 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@5 ~@3 [a3,c4,f4]@4 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@5 ~@3 [a3,c4,e4]@4 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@5 ~@3 [a3,c4,e4]@4 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@5 ~@3, f3@61 ~@3]/4", // F Am
  B: "[[a3,c4,eb4]@5 ~ [a3,c4,eb4] ~ [a3,c4,eb4]@5 ~@3 [a3,c4,eb4]@4 ~@2 [a3,c4,eb4] ~ [a3,c4,eb4]@3 ~ [a3,c4,eb4] ~@3, f3@29 ~@3]/2", // Adim
  C: "[d4,f4]@4 ~@2 [d4,f4] ~ [d4,f4]@5 ~@3, bb3@13 ~@3", // Dm
  D: "[d4,f4]@4 ~@2 [d4,f4] ~ [d4,f4]@3 ~ [d4,f4] ~@3, bb3@13 ~@3", // Dm
  E: "[bb3,d4]@4 ~@2 [bb3,d4] ~ [bb3,d4]@5 ~@3, g3@13 ~@3", // Bb
  F: "[bb3,d4]@4 ~@2 [bb3,d4] ~ [bb3,d4]@3 ~ [bb3,d4]@2 ~@2, g3@7 ~", // Bb
  G: "[a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@5 ~@3, f3@7 ~", H: "[a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@3 ~ [a3,c4]@2 ~@2, f3@7 ~",
  I: "[bb3,d4]@4 ~@2 [bb3,d4] ~ [bb3,d4]@6 ~@2, g3@7 ~", J: "[c4,e4]@4 ~@2 [c4,e4] ~ [c4,e4]@5 ~@3, a3@13 ~@3",
  K: "[a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@5 ~@3, f3@13 ~@3", // Am
  L: "[a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@2 ~@2 a3@2 ~@2, f3@12 c4 ~@3", // Am
  M: "[a3,c4,f4]@4 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@6 ~@2, f3@13 ~@3", // F
  N: "[a3,c4,f4]@4 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~@2, f3@7 ~", // F
  O: "[a3,c4,e4]@5 ~ [a3,c4,e4] ~ [a3,c4,e4]@5 ~@3, f3@13 ~@3", // Am
  P: "[a3,c4,e4]@4 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@3 ~ [a3,c4,e4] ~@3, f3@13 ~@3", // Am
  Q: "[a3,c4,eb4]@4 ~@2 [a3,c4,eb4] ~ [a3,c4,eb4]@5 ~@3, f3@13 ~@3", // Adim
  R: "[a3,c4,eb4]@4 ~@2 [a3,c4,eb4] ~ [a3,c4,eb4]@2 ~@2 [a3,c4,eb4] ~@3, f3@13 ~@3", // Adim
  S: "[bb3,d4]@5 ~ [bb3,d4] ~ [bb3,d4]@3 ~ [bb3,d4] ~@3, g3@7 ~", // Bb
  T: "[a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@3 ~ [a3,c4] ~@3, f3@13 ~@3", // Am
  U: "[bb3,d4]@4 ~@2 [bb3,d4] ~ bb3@3 ~ bb3@2 ~@2, g3@7 ~, ~@4 d4@3 ~", // Bb
  V: "[bb3,d4,f4]@4 ~@2 [bb3,d4,f4] ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~@3, g3@7 ~", W: "[f3,a3,c4] ~@3",
  X: "[g3,bb3,d4]@6 ~@2 [g3,bb3,d4]@5 ~@3", Y: "[g3,bb3,d4]@4 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@3 ~@3",
  Z: "[f3,a3,c4]@5 ~@3 [f3,a3,c4]@5 ~@3", AA: "[f3,a3,c4]@4 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4] ~",
  AB: "[g3,bb3,d4]@5 ~@3 [g3,bb3,d4]@6 ~@2", AC: "[g3,bb3,d4]@5 ~ [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4] ~",
  AD: "[f3,a3,c4]@5 ~@3 [f3,a3,c4]@3 ~ [a3,c4] ~@3, ~@6 f3 ~", AE: "[[f3,a3,c4,f4]@25 ~@7, g3 ~@31]/2",
  AF: "[bb4,d5]@5 ~ [bb4,d5]@4 ~@2 [bb4,d5] ~@3, g4@3 ~", // Bb
  AG: "[g4,bb4,d5]@4 ~@2 [bb4,d5]@4 ~@2 [bb4,d5] ~@3, ~@3 g4@3 ~@2", // Gm Bb
  AH: "[a4,c5]@4 ~@2 [a4,c5]@3 ~@3 [a4,c5] ~@3, f4@13 ~@3", AI: "[bb4,d5]@4 ~@2 [bb4,d5]@4 ~@2 [bb4,d5] ~@3, g4@13 ~@3",
  AJ: "[bb4,d5]@4 ~@2 [bb4,d5]@4 ~@2 [bb4,d5] ~@3, g4@3 ~", AK: "[a4,c5]@4 ~@2 [a4,c5]@4 ~@2 [a4,c5] ~@3, f4@13 ~@3",
  AL: "[a4,c5,f5]@5 ~ [a4,c5,f5]@4 ~@2 [a4,c5,f5] ~@3, f4@7 ~", AM: "[a4,c5]@4 ~@2 [a4,c5]@4 ~@2 [a4,c5] ~@3, f4@7 ~",
  AN: "[[g4,bb4,d5]@29 ~@3]/2", AO: "[c4,eb4,ab4]@4 ~@2 [c4,eb4,ab4]@7 ~@3, ab3@3 ~",
  AP: "[c4,eb4,ab4]@4 ~@2 [c4,eb4,ab4]@5 ~ [c4,eb4,ab4] ~@3, ab3@13 ~@3", // Ab
  AQ: "[c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@7 ~@3, ab3@13 ~@3", // Cm
  AR: "[c4,eb4,g4]@5 ~ [c4,eb4,g4]@4 ~@2 [c4,eb4,g4] ~@3, ab3@13 ~@3, ~@3 db4 ~@4", // Cm
  AS: "[c4,eb4,gb4]@4 ~@2 [c4,eb4,gb4]@7 ~@3, ab3@3 ~", // Cdim
  AT: "[c4,eb4,gb4]@4 ~@2 [c4,eb4,gb4]@4 ~@2 [c4,eb4,gb4] ~@3, ab3@13 ~@3", // Cdim
  AU: "[[f4,ab4]@4 ~@2 [f4,ab4]@4 ~@2 [f4,ab4]@2 ~@2 [f4,ab4]@5 ~ [f4,ab4]@4 ~@2 [f4,ab4] ~@3, db4@12 ~@2 db4@15 ~@3]/2", // Fm
  AV: "[db4,f4]@4 ~@2 [db4,f4]@7 ~@3, bb3@13 ~@3", AW: "[db4,f4]@4 ~@2 [db4,f4]@4 ~@2 [db4,f4] ~@3, bb3@13 ~@3",
  AX: "[[c4,eb4]@4 ~@2 [c4,eb4]@4 ~@2 [c4,eb4]@2 ~@2 [c4,eb4]@5 ~ [c4,eb4]@4 ~@2 [c4,eb4] ~@3, ab3@6 ~ ab3@7 ~@2]/2", // Cm
  AY: "[f4,ab4]@5 ~ [f4,ab4]@4 ~@2 [f4,ab4] ~@3, db4@13 ~@3", AZ: "[c4,eb4]@4 ~@2 [c4,eb4]@4 ~@2 [c4,eb4] ~@3, ab3@7 ~",
  BA: "[c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@9 ~, ab3@15 ~", BB: "g3@5 ~@3 [g3,bb3,d4]@6 ~@2", BC: "[[f3,a3,c4]@13 ~@3]/2",
})).s("gm_piano").gain(0.25)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A@2 B C D A E F G H G B@2 I J@2 K L F I D M G F G H G B@2 I J@2 K L F I D M G H N@2 O P Q N R S ~ T U H I T V G C A
  W F X Y Z AA@2 AB@3 AC AB AD AE AF AG AF AB AH AI AJ AK@2 Q N R S ~ T U H I T V G C A W F X Y Z AA@2 AL@2 ~
>`.pickRestart({
  A: "g2@5 ~ g2 ~ g2@5 ~@3", B: "f2@4 ~@2 f2 ~ f2@6 ~@2", C: "f2@5 ~ f2 ~ f2@2 ~@2 f2@2 ~@2", D: "g2@5 ~ g2 ~ g2@6 ~@2",
  E: "f2@4 ~@2 f2 ~ f2@3 ~ f2 ~@3", F: "f2@5 ~ f2 ~ f2@5 ~@3", G: "f2@5 ~ f2 ~ f2@6 ~@2", H: "f2@4 ~@2 f2 ~ f2@5 ~@3",
  I: "f2@4 ~@2 f2 ~ f2@3 ~ f2@2 ~@2", J: "bb2@5 ~ bb2 ~ bb2@6 ~@2", K: "bb2@4 ~@2 bb2 ~ bb2@6 ~@2",
  L: "bb2@4 ~@2 bb2 ~ bb2@3 ~ bb2@3 ~", M: "c2@5 ~ c2 ~ c2@5 ~ c2 ~", N: "g2@4 ~@2 g2 ~ g2@5 ~ g2 ~",
  O: "f2@4 ~@2 f2 ~ f2@5 ~ f2 ~", P: "f2@4 ~@2 f2 ~ f2@4 ~@2 f2 ~", Q: "g2@5 ~ g2 ~ g2@5 ~ g2 ~",
  R: "f2@5 ~ f2 ~ f2@5 ~ f2 ~", S: "f2", T: "g2@4 ~@2 g2 ~ g2@5 ~@3", U: "g2@4 ~@2 g2 ~ g2@3 ~ g2@2 ~@2",
  V: "g2@4 ~@2 g2 ~ g2@2 ~@2 g2 ~@3", W: "g2@4 ~@2 g2 ~ g2@2 ~@2 g2@2 ~@2", X: "f2@5 ~ f2 ~ f2@3 ~ f2@2 ~@2",
  Y: "g2@4 ~@2 g2@5 ~ g2@4", Z: "~ g2@2 ~ g2 ~ g2 ~", AA: "[bb2@3 c2@9 ~@4]/2", AB: "ab2@4 ~@2 ab2 ~ ab2@5 ~@3",
  AC: "ab2@4 ~@2 ab2 ~ ab2@3 ~ ab2@2 ~@2", AD: "ab2@4 ~@2 ab2 ~ ab2@2 ~@2 ab2 ~@3", AE: "db2@4 ~@2 db2 ~ db2@5 ~@3",
  AF: "db2@4 ~@2 db2 ~ db2@3 ~ db2@2 ~@2", AG: "db2@5 ~ db2 ~ db2@5 ~@3", AH: "ab2@4 ~@2 ab2 ~ ab2@2 ~@2 ab2@2 ~@2",
  AI: "bb2@4 ~@2 bb2 ~ bb2@3 ~ bb2@2 ~@2", AJ: "eb2@5 ~ eb2 ~ eb2@3 ~ eb2@2 ~@2", AK: "ab2@4 ~@2 ab2 ~ ab2@6 ~@2",
  AL: "[f2@27 ~@5]/2",
})).s("gm_acoustic_bass").gain(0.55)

// chords · vibraphone
const vibraphone = note(`<
  ~@9 A@2 B@2 C@2 D@2 E@2 F@2 ~@4 A@2 B@2 C@2 D@2 E@2 F@2 ~@4 G@2 H@2 I@2 J K@2 L@2 M@2 N@2 O@2 L@2 M@2 P ~@3 Q@2 R@2
  S@2 T@2 U@2 V@2 W@2 X@2 ~ Y J K@2 L@2 M@2 N@2 O@2 L@2 M@2 P ~@6
>`.pickRestart({
  A: "[[c4,f4]@15 ~]/2", B: "[[c4,e4]@29 ~@3]/2", C: "[[c4,eb4]@29 ~@3]/2", D: "[bb3@15 ~, bb4@17 ~@15]/2",
  E: "[[bb3,d4]@27 ~ [bb3,d4]@2 ~@2]/2", F: "[a3@27 ~@5]/2", G: "[[g3,bb3,d4]@25 ~@3 [g3,bb3,d4]@2 ~@2]/2",
  H: "[[f3,a3,c4]@13 ~ [f3,c4] ~, ~@28 a3 ~@3]/2", I: "[[g3,bb3,d4]@13 ~ [g3,bb3,d4] ~]/2", J: "[f3,a3,c4]@7 ~",
  K: "[[c4,f4]@11 ~@5]/2", L: "[a4@13 ~ a4 ~]/2", M: "[g4@13 ~ g4 ~]/2", N: "[f4@13 ~ f4 ~]/2", O: "[e4@15 ~]/2",
  P: "f4@15 ~", Q: "[[eb4,ab4]@25 ~@3 [eb4,ab4] ~@3]/2", R: "[[eb4,g4]@26 ~@2 [eb4,g4] ~@3]/2",
  S: "[[eb4,gb4]@14 [eb4,gb4] ~]/2", T: "[[db4,f4]@26 ~@2 [db4,f4] ~@3]/2", U: "[[bb3,db4]@13 ~ db4 ~, ~@28 bb3 ~@3]/2",
  V: "[[eb3,ab3]@27 ~ [eb3,ab3] ~@3]/2", W: "[[db4,f4]@13 ~ db4 ~, ~@28 f4 ~@3]/2", X: "[[eb4,ab4]@21 ~@11]/2",
  Y: "~@6 [g3,bb3,d4] ~", // Gm
})).s("gm_vibraphone").gain(0.32)

// chords · acoustic guitar nylon · "Ac. Guitar"
const acoustic_guitar_nylon = note(`<
  A@8 B@6 C@5 D@5 E@6 C@5 F@6 G H I J K L M@3 N O P Q L O R@2 S T U V W@2 X@4 Y Z AA@2 AB@2 AC@4 AD@2 AE ~ K L M@3 N O P
  Q L O R@2 S T U V W@2 AF@2 AG@2 ~
>`.pickRestart({
  A: "[~@16 d4@14 ~@2 d4@13 ~@2 a3 c4@14 ~@2 c4@13 ~@2 b3 d4@14 ~ bb3 d4@13 ~@2 a3 c4@14 ~ [f3,a3], ~@15 g3@15 ~ g3@15 ~ f3@15 ~ f3@14 ~@2 g3@15 ~ g3@14 ~@2 f3@15 ~@2, ~@16 b3 ~@15 bb3 ~@31 a3 ~@63]/8", // F
  B: "[c4@12 ~@3 a3 ~ f4@28 ~@2 a3 e4@28 ~@4 eb4@16, ~@14 f3@31 ~ f3@30 ~@2 f3@5 ~@13, ~@15 c4@29 ~@3 c4@29 ~@3 c4@9 ~@8, ~@17 a3@3 ~@59 a3@4 ~@13]/6",
  C: "[~@16 f4@29 ~@3 [bb3,d4,f4]@29 ~@2 f3, ~@14 bb3@30 ~@3 g3@30 ~@3, ~@15 d4@29 ~@36]/5", // Bb
  D: "[[a3,c4]@29 ~@3 d4@29 ~@3 [a3,c4]@16, ~@30 g3@30 ~@3 f3@17, ~@31 bb3@30 ~@19]/5", // Am
  E: "[~@15 a3 ~ f4@28 ~@2 a3 e4@28 ~@4 eb4@16, ~@14 f3@31 ~ f3@30 ~@2 f3@5 ~@13, ~@15 c4@29 ~@3 c4@29 ~@3 c4@9 ~@8, ~@17 a3@3 ~@59 a3@4 ~@13]/6",
  F: "[[a3,c4]@29 ~@3 d4@29 ~@3 [a3,c4]@23 ~@9, ~@10 g3@10 ~ f3@8 ~@3, ~@31 bb3@30 ~@35]/6", // Am
  G: "[g3,bb3,d4]@5 ~@3 [g3,bb3,d4]@6 ~@2", H: "[g3,bb3,d4]@4 ~@2 [g3,bb3,d4]@7 ~@3",
  I: "[f3,a3,c4]@5 ~@3 [f3,a3,c4]@6 ~@2", J: "[a3,c4]@5 ~ [a3,c4]@5 ~ [a3,c4]@2 ~@2, f3@7 ~",
  K: "[bb3,d4]@5 ~@3 [bb3,d4]@6 ~@2, g3@7 ~", L: "[bb3,d4]@2 ~ [bb3,d4]@2 ~ [bb3,d4] ~, g3@7 ~",
  M: "[[a3,c4]@5 ~ [a3,c4]@4 ~@2 [a3,c4]@2 ~@2 [a3,c4,f4]@26 ~@6, f3@41 ~@7, ~@16 e4 ~@31]/3", // Am F
  N: "[g3,bb3,d4]@5 ~ [bb3,d4]@4 ~@2 [bb3,d4]@2 ~@2, ~@3 g3@3 ~@2", // Gm Bb
  O: "[bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4] ~@3, g3@7 ~", P: "[a3,c4]@2 ~ [a3,c4]@2 ~ [a3,c4] ~, f3@7 ~",
  Q: "[a3,c4,e4]@4 ~@2 [a3,c4,e4]@4 ~@2 [a3,c4,e4] ~@3, f3@7 ~", // Am
  R: "[[a3,c4]@4 ~@2 [a3,c4]@4 ~@2 [a3,c4]@2 ~@2 [a3,c4]@4 ~@2 [a3,c4] ~ [a3,c4]@3 ~ [a3,c4] ~@3, f3@13 ~ f3@15 ~@3]/2", // Am
  S: "[bb3,d4]@5 ~ [bb3,d4]@4 ~@2 [bb3,d4]@2 ~@2, g3@7 ~", // Bb
  T: "[bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@2 ~@2, g3@7 ~", // Bb
  U: "[a3,c4]@5 ~ [a3,c4]@4 ~@2 [a3,c4]@2 ~@2, f3@7 ~", // Am
  V: "[a3,c4,e4]@4 ~@2 [a3,c4,e4]@4 ~@2 [a3,c4,e4] ~@3, f3@13 ~@3", // Am
  W: "[[bb3,d4]@5 ~ [bb3,d4]@4 ~@2 [bb3,d4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@2 ~@2 [bb3,d4] ~ eb4 ~, g3@29 ~@3]/2", // Bb
  X: "[[bb3,d4,f4]@5 ~ [bb3,d4,f4]@16 ~@10 c4 ab4@17 ~@13 ab3, eb4 ~@30 ab3@2 eb4@2 ~@29]/4", // Bb
  Y: "~ g4 ~@14, [c4,eb4] ~@7", Z: "~@15 ab3", AA: "[[c4,eb4] gb4@27 ~@3 db4]/2", AB: "[ab4@20 ~@11 bb3, f4@3 ~@29]/2",
  AC: "[f4@28 ~@4 c4 eb4@22 ~@8 bb3, db4 ~@30 ab3@2 ~@31]/4", AD: "[~ f4@28 ~@2 ab3, db4 ~]/2",
  AE: "[c4,eb4] ~@15, ab4", AF: "[[bb3,d4,f4]@5 ~ [bb3,d4,f4]@16 ~@10, eb4 ~@31]/2", AG: "[[f3,a3,c4]@29 ~@3]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// chords · electric guitar clean · "Elec. Guitar"
const electric_guitar_clean = note(`<
  ~@9 A@2 B@2 C D E@2 F@2 G@2 F H A ~ A@2 B@2 C D E@2 F@2 G@2 F H A ~ I J K L M J K N@2 O P Q R S@2 T U V S W X Y@2 ~@2
  Z AA AB AC AD AE AF@2 AG@2 AH@2 AG@2 AH AI M J K N@2 O P Q R S@2 T U V S W X Y@2 ~@2 AJ@3
>`.pickRestart({
  A: "~@4 [f3,a3,c4,f4] ~@5 [f3,a3,c4,f4] ~@5", B: "~@4 [f3,a3,c4,e4] ~@5 [f3,a3,c4,e4] ~@5",
  C: "~@4 [f3,a3,c4,eb4] ~@5 [f3,a3,c4,eb4] ~@5", D: "~@4 [f3,a3,c4,eb4] ~@7 [f3,a3,c4,eb4] ~@3",
  E: "~@4 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@5", F: "~@4 [g3,bb3,d4] ~@5 [g3,bb3,d4] ~@5",
  G: "~@4 [f3,a3,c4] ~@5 [f3,a3,c4] ~@5", H: "~@4 [a3,c4,e4] ~@5 [a3,c4,e4] ~@5",
  I: "[g3,bb3,d4]@4 [g3,bb3,d4] ~@7 [g3,bb3,d4] ~@3", J: "~@4 [g3,bb3,d4] ~@5 [g3,bb3,d4] ~@3 [g3,bb3,d4] ~",
  K: "~@4 [f3,a3,c4] ~@7 [f3,a3,c4] ~@3", L: "~@4 [f3,a3,c4] ~@5 [f3,a3,c4] ~@3 [f3,a3,c4] ~",
  M: "~@4 [g3,bb3,d4] ~@7 [g3,bb3,d4] ~@3", N: "[[f3,a3,c4,f4]@7 ~, e4 ~@31]/2", O: "[g3,bb3,d4]@2 ~ [g3,bb3,d4]@3 ~@2",
  P: "[g3,bb3,d4]@4 ~@2 [bb3,d4]@4 ~@2 [bb3,d4] ~@3, ~@3 g3@3 ~@2", Q: "[f3,a3,c4]@5 ~ [f3,a3,c4]@7 ~@3",
  R: "[f3,a3,c4]@5 ~ [a3,c4]@4 ~@2 [a3,c4] ~@3, ~@3 f3@3 ~@2", // F Am
  S: "[bb3,d4]@4 ~@2 [bb3,d4]@4 ~@2 [bb3,d4] ~@3, g3@13 ~@3", T: "[a3,c4]@2 ~ [a3,c4]@2 ~ [a3,c4] ~, f3@7 ~",
  U: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4] ~@3, e4 ~@7, g3 ~@5 g3 ~@9", // F
  V: "[bb3,d4]@5 ~ [bb3,d4]@4 ~@2 [bb3,d4] ~@3, g3@13 ~@3", W: "[a3,c4]@4 ~@2 [a3,c4]@4 ~@2 [a3,c4] ~@3, f3@13 ~@3",
  X: "[a3,c4]@4 ~@2 [a3,c4]@4 ~@2 [a3,c4] ~@3, f3@3 ~", Y: "[[bb3,d4]@5 ~ [bb3,d4]@5 ~ [bb3,d4]@4 ~@16, g3@29 ~@3]/2",
  Z: "~@4 [ab3,c4,eb4,ab4] ~@5 [ab3,c4,eb4,ab4] ~@5", AA: "~@4 [ab3,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5",
  AB: "~@4 [c4,eb4,g4] ~@5 [ab3,c4,eb4,g4] ~@5", AC: "~@4 [ab3,c4,eb4,g4] ~@5 [ab3,c4,eb4,g4] ~@3 [c4,eb4,g4] ~",
  AD: "~@4 [ab3,eb4,gb4] ~@5 [c4,eb4,gb4] ~@5", AE: "~@4 [c4,eb4,gb4] ~@5 [ab3,c4,eb4,gb4] ~@3 [ab3,c4,eb4,gb4] ~",
  AF: "~@4 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~", // Db
  AG: "~@4 [bb3,db4,f4] ~@5 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", // Bbm
  AH: "~@4 [ab3,c4,eb4] ~@5 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", AI: "~@4 [ab3,c4,eb4] ~@11",
  AJ: "[~ [f3,a3,c4]@34 ~@13]/3", // F
})).s("gm_electric_guitar_clean").gain(0.24)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@25 A@6 B@4 C@2 D@2 E@2 F ~@8 G@2 H@4 I@2 G@2 J@2 K@2 L@2 M@4 N@2 O@4 P@2 Q R S@2 ~@5 G@2 H@4 I@2 G@2 J@2 K@2 T@2 U@3
>`.pickRestart({
  A: "[f5@31 ~ e5@31 ~ eb5@30 ~@2, c5@47 ~]/6", B: "[bb4,d5]/4", C: "[a4,c5]/2", D: "[bb4, g4@15 ~]/2",
  E: "[[f4,a4]@3 ~]/2", F: "db5 ~@3", G: "a5/2", H: "[g5 f5]/4", I: "e5/2", J: "g5/2",
  K: "[f5@3 g5@3 d5@3 e5@3 f5@2 d5@2]/2", L: "[f5@6 g5@17 ~@9]/2", M: "[eb5@29 db5 c5 db5]/4", N: "eb5/2", O: "db5/4",
  P: "c5/2", Q: "bb4", R: "c5", S: "[bb4 ab4@3]/2", T: "[f5@3 g4@13]/2", U: "[f4@11 ~@5]/3",
})).s("gm_string_ensemble_1").gain(0.21)

// other · brass section · "Trumpet"
const brass_section = note(`<
  ~ A B C D A B E F ~@14 G H I@2 ~@12 J K L M L N O P Q R@2 S T U V W@2 X@2 T@2 U@2 Y@2 Z@2 ~@14 AA AB O P Q R@2 S T U V
  W@2 X@2 T@2 U@2 Y@2 AC@2 AD@2 ~
>`.pickRestart({
  A: "[d4,g4], b3@7 ~", B: "[bb3,d4,g4]@15 ~", C: "g4 f4 ~ e4@2 f4 g4 a4, [a3,c4]@15 ~",
  D: "g4 f4 ~ e4@2 f4 g4 a4, [a3,c4]@7 ~", E: "g4 f4 ~ e4 ~ f4 ~ g4, [a3,c4]@7 ~", F: "~ a4@3 ~@4",
  G: "g4 f4 ~ e4 ~ f4 ~ g4", H: "~@2 a4@3 ~@11", I: "f4/2", J: "g4@2 f4@2 ~@2 e4@3 ~ f4 ~ g4 ~ a4@2",
  K: "g4@2 f4@2 ~@2 e4@4 f4@2 g4@2 a4 ~", L: "db5@4 d5@2 ~@2 db5@4 d5 ~@3", M: "db5@4 d5 ~ f5@2 ~@2 e5@2 ~@2 d5@2",
  N: "db5@4 d5@2 f5@2 ~@2 e5@3 ~ d5 ~", O: "db5@4 d5 ~@3 db5@4 d5@2 ~@2", P: "db5@4 d5 ~ f5@2 ~@2 e5@3 ~ d5 ~",
  Q: "db5@4 d5@2 ~@2 db5@4 d5@3 ~", R: "[f5@5 ~@3]/2", S: "a4 ~ a4@2 ~@2 a4@2 ~@2 a4@3 ~ a4 ~",
  T: "a4 ~ a4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a4 ~", U: "g4 ~ g4@2 ~@2 g4@2 ~@2 g4@2 ~@2 g4 ~",
  V: "g4 ~ g4@3 ~ g4@2 ~@2 g4@2 ~@2 g4 ~", W: "f4 ~ f4@2 ~@2 f4@2 ~@2 f4@2 ~@2 f4 ~", X: "[e4 ~ e4@28 ~@2]/2",
  Y: "[f4@3 g4@3 d4@3 e4@3 f4@2 d4@2]/2", Z: "[f4@3 g4@9 ~@4]/2", AA: "bb4 ab4 ~ g4 ~ ab4 ~ bb4", AB: "~@2 c5@7 ~@7",
  AC: "[f4@6 g4@18 ~@6 [f4,f5]!2]/2", AD: "[[f4,f5]@3 ~]/2",
})).s("gm_brass_section").gain(0.29)

// other · trumpet · "Trumpet 2"
const trumpet = note("<~ A@2 B C A@2 D E ~@97>".pickRestart({
  A: "[g5@31 ~]/2", B: "g5@2 ~ f5@2 ~ e5@4 f5@2 g5@2 a5 ~", C: "g5 f5 ~ e5@2 f5 g5 a5", D: "g5 f5 ~ e5 ~ f5 ~ g5",
  E: "~@2 a5@7 ~@7",
})).s("gm_trumpet").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~ A@47 B C A@7 C A@4 D E F ~ A@19 B C A@7 C A@4 D E F ~ B ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x", C: "x!4", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~ x ~", F: "x ~@2 x ~@4",
})).gain(0.55)

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

// drums · hihat
const hihat = s("hh").struct("<A@62 B C D A@34 B C D ~ E ~@2>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~", C: "~ x ~@2 x ~ x ~", D: "x ~@2 x ~@4", E: "x",
// … 16 more lines

More by Frankie Valli