Strudelify

When I Fall in Love

Lisa Lisa

KeyE♭ majorTempo230 bpm
0:00/0:00
// When I Fall in Love — Lisa Lisa
// 230 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 204 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(230/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.

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C D E F G H A I J D K L J M N O P Q R S T U V W X Y Z AA AB I AC@2 AD AE J AF J U A AG AH AI AJ I AK AL AM AN
  AD AO AP AQ T AI V AR O AS Z I AT AU A B C D E F G H A L AV M AW AX AY AI N AZ BA AO AT BB T AL AM W AN P BC O AB L BD
  BE BA BF AK BG J AI BH AG AY M BI AF AH BJ AM O BK BL AP C AI D A BM O BN BO L AP BA AW I BB M E F BP@2 BH BG AP BJ K
  AX AY AL BI AN AD BQ AY BB AL BR AM BS X BK BT BU BV AG BW@2 BX BF BY AG AP D BH AG AP AL BH AG AK D AM X BK AO AP BZ
  CA AL V W CB CC Z I AP CD AW BG S BJ CE F CF AW CG CH
>`.pickRestart({
  A: "eb2@4 ~@2 eb2@2 bb2@6 eb2 ~", B: "c2@6 ab2 ~ ab2@6 bb1 ~", C: "b1@6 gb2 ~ gb2@6 b1 ~", D: "bb1@6 f2 ~ f2@6 e2 ~",
  E: "eb2@6 bb2 ~ bb2@6 eb2 ~", F: "eb2@6 bb2 ~ bb2@4 bb1@2 ~@2", G: "eb3@5 ~ a2@2 bb2@6 d2@2",
  H: "eb2@6 a1@2 bb1@5 ~ eb2 ~, ~@8 ab1 ~@7", I: "c2@4 ~@2 c2@2 ab2@6 c2 ~", J: "f2@3 c3 c3@3 f2",
  K: "eb2@6 bb2 ~ bb2@6 db2 ~", L: "c2@3 ab2 ab2@3 c2", M: "bb1@5 ~ bb1 ~ bb1@6 bb1 ~", N: "eb2@6 bb2 ~ bb2@6 a2 ~",
  O: "ab2@5 ~ ab2@2 eb3@6 ab2 ~", P: "db2@5 ~ db2 ~ db2@6 db2 ~", Q: "c2@6 g2 ~ g2@6 e2 ~", R: "f2@6 c3 ~ c3@6 bb1 ~",
  S: "b1@5 ~ b1 ~ b1@6 b1 ~", T: "bb1@6 f2 ~ f2@6 b1 ~", U: "bb1@6 f2 ~ f2@6 d2 ~", V: "eb2@6 bb2 ~ bb2@6 ab1 ~",
  W: "a1@6 eb2 ~ eb2@6 g2 ~", X: "ab2@6 eb3 ~ eb3@6 c2 ~", Y: "db2@6 ab2 ~ ab2@6 ab2 ~", Z: "g2@4 ~@2 g2@2 d3@6 g2 ~",
  AA: "ab2@5 ~ ab2 ~ ab2@5 ~ ab2 ~", AB: "g2@5 ~ g2 ~ g2@6 g2 ~", AC: "[f2@6 c3@8 ab3@8 c3@4 f3@2 c3@2 f2 ~]/2",
  AD: "db2@6 ab2 ~ ab2@6 b1 ~", AE: "c2@4 ~@2 c2@2 g2@6 c2 ~", AF: "c2@6 ab2 ~ ab2@6 e2 ~",
  AG: "c2@6 ab2 ~ ab2@6 gb2 ~", AH: "f2@6 c3 ~ c3@6 a1 ~", AI: "bb1@4 ~@2 bb1@2 f2@6 bb1 ~", AJ: "eb2@3 bb2@4 eb2",
  AK: "f2@5 ~ f2 ~ f2@6 f2 ~", AL: "bb1@3 f2 f2@3 bb1", AM: "eb2@5 ~ eb2 ~ eb2@6 eb2 ~",
  AN: "ab2@4 ~@2 ab2@2 eb3@6 ab2 ~", AO: "c2@6 g2 ~ g2@6 gb2 ~", AP: "f2@4 ~@2 f2@2 c3@6 f2 ~",
  AQ: "b1@6 gb2 ~ gb2@6 b1@2", AR: "a1@4 ~@2 a1@2 eb2@6 a1 ~", AS: "d2@3 a2 a2@3 d2", AT: "f2@6 c3 ~ c3@6 c2 ~",
  AU: "db2@6 ab2 ~ ab2@6 d2 ~", AV: "f2@6 c3 ~ c3@6 b1 ~", AW: "eb2@5 ~ eb2@2 bb2@6 eb2 ~",
  AX: "c2@5 ~ c2@2 ab2@6 c2 ~", AY: "f2@5 ~ f2@2 c3@6 f2 ~", AZ: "ab2@6 eb3 ~ eb3@6 d2 ~", BA: "db2@3 ab2 ab2@3 db2",
  BB: "b1@4 ~@2 b1@2 gb2@6 b1 ~", BC: "g2@6 d3 ~ d3@6 a2 ~", BD: "f3@5 ~ b2@2 c3@6 e2@2",
  BE: "f2@5 ~ b1@2 c2@5 ~ f2 ~, ~@8 bb1 ~@7", BF: "c2@5 ~ c2@2 g2@6 c2 ~", BG: "c2@5 ~ c2 ~ c2@6 c2 ~",
  BH: "eb2@6 bb2 ~ bb2@6 b1 ~", BI: "eb2@3 bb2 bb2@3 eb2", BJ: "bb1@5 ~ bb1@2 f2@6 bb1 ~",
  BK: "db2@5 ~ db2@2 ab2@6 db2 ~", BL: "c2@5 ~ c2 ~ c2@5 ~ c2 ~", BM: "a1@5 ~ a1 ~ a1@6 a1 ~",
  BN: "d2@4 ~@2 d2@2 a2@6 d2 ~", BO: "g2@3 d3 d3@3 g2", BP: "[eb2@6 bb2@8 g3@8 bb2@4 eb3@2 bb2@2 eb2 ~]/2",
  BQ: "c2@3 g2 g2@3 c2", BR: "bb1@6 f2 ~ f2@6 bb1@2", BS: "a1@3 eb2 eb2@3 a1", BT: "g2@6 d3 ~ d3@6 g2 ~",
  BU: "ab2@6 eb3 ~ eb3@6 gb2 ~", BV: "g2@5 ~ g2@2 db3@6 g2 ~", BW: "f2@6 c3 ~ c3@6 f2 ~", BX: "db2@6 ab2 ~ ab2@6 db2 ~",
  BY: "f2@6 c3 ~ c3@6 db2 ~", BZ: "b1@5 ~ b1 ~ b1@5 ~ b1 ~", CA: "bb1@6 f2 ~ f2@6 a1 ~", CB: "ab2@6 eb3 ~ eb3@6 eb2 ~",
  CC: "d2@5 ~ d2 ~ d2@6 d2 ~", CD: "db2@6 ab2 ~ ab2@6 e2 ~", CE: "eb2@3 bb2@4 bb1", CF: "eb2@6 bb2 ~ bb2@6 d2 ~",
  CG: "eb2@5 ~ bb2 ~ bb2@4 bb1@4", CH: "eb2",
})).s("gm_acoustic_bass").gain(0.5)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@2 A B C D E@4 A F G H I J K L A M N B C@2 G L O P Q R S Q S F T U V B G J G L A B G W A F G D A X N Y Z C AA L A AB
  Q X AC F G AD A B C D AE@4 AF AG AH AI AJ AK AH AL AM AN AO AP AQ AR AS AL AT AU AV AW AX AV AY AG AS AZ AO AG AH AG
  AH BA AM AK AH AY AT AG AS AL AM BB BC AG BD BE AS BF AT BG AV AN AY AK AH AO BH AG BI BA AE@2 AT BJ BK BL G BM A F K
  L BK BN N B C BO K L O P Q AD S BP S B BQ@2 V B K F G BR A B G H A F G L A X N F C BS K L A P BP X BT@6 BS D AT BJ BK
  A BU BV
>`.pickRestart({
  A: "[g3,c4] ~ [g3,c4] ~@2 [g3,c4] ~@2", B: "~@2 [bb3,e4]@5 ~ [bb3,e4]@2 ~@2 [bb3,e4]@2 ~@2",
  C: "[a3,eb4] ~ [a3,eb4] ~@2 [a3,eb4] ~@2", D: "~@2 [ab3,d4]@5 ~ [ab3,d4]@2 ~@2 [ab3,d4]@2 ~@2",
  E: "[[c4,f4,bb4]@2 ~@2 [c4,f4]@27 ~, ~@2 bb4@7 ~@7]/2", F: "[bb3,e4] ~ [bb3,e4] ~@2 [bb3,e4] ~@2",
  G: "[ab3,eb4] ~ [ab3,eb4] ~@2 [ab3,eb4] ~@2", H: "~@2 d4 f4@2 d4 ~ f3, ~@2 f3@9 ~ bb3@4",
  I: "~ [g3,c4]@2 ~ [g3,c4]@2 ~@4 [g3,c4]@2 ~@4", J: "~@2 e4 ab4@2 e4 ~ bb3, ~@2 bb3@9 ~ eb4@4",
  K: "~@2 [ab3,eb4]@5 ~ [ab3,eb4]@2 ~@2 [ab3,eb4]@2 ~@2", L: "~@2 d4 f4@2 d4 ~ ab3, ~@2 ab3@9 ~ c4@4",
  M: "~ [c4,gb4]@2 ~ [c4,gb4] ~ [c4,gb4] ~", N: "[b3,f4] ~ [b3,f4] ~@2 [b3,f4] ~@2",
  O: "~ g3@2 ~ [g3,c4]@2 ~@4 [g3,c4]@2 ~@4, c4 ~@7", P: "~@2 [g3,db4]@5 ~ [g3,db4]@2 ~@2 [g3,db4]@2 ~@2",
  Q: "[c4,g4] ~ [c4,g4] ~@2 [c4,g4] ~@2", R: "~@2 f4 ab4@2 f4 ~ b3, ~@2 b3@9 ~ eb4@4",
  S: "[bb3,f4] ~ [bb3,f4] ~@2 [bb3,f4] ~@2", T: "[ab3,eb4] ~ [ab3,eb4] ~@2 f2 f3 [ab3,eb4]",
  U: "~@2 f2@2 f3@2 [ab3,eb4]@3 ~ f2@2 [f3,ab3,eb4]@2 ~@2", V: "~ [b3,f4]@2 ~ [b3,f4] ~ [b3,f4] ~",
  W: "~@2 [f3,d4]@5 ~ [f3,d4]@2 ~@2 [f3,d4]@2 ~@2", X: "~@2 [c4,gb4]@5 ~ [c4,gb4]@2 ~@2 [c4,gb4]@2 ~@2",
  Y: "~@2 e4 g4@2 e4 ~ bb3, ~@2 bb3@9 ~ d4@4", Z: "~ [a3,eb4]@2 ~ [a3,eb4]@2 ~@4 [a3,eb4]@2 ~@4",
  AA: "~ [ab3,eb4]@2 ~ [ab3,eb4] ~ [ab3,eb4] ~", AB: "[g3,db4] ~ [g3,db4] ~@2 [g3,db4] ~@2",
  AC: "~@2 [bb3,f4]@5 ~ [bb3,f4]@2 ~@2 [bb3,f4]@2 ~@2", AD: "~@2 [b3,f4]@5 ~ [b3,f4]@2 ~@2 [b3,f4]@2 ~@2",
  AE: "[[c4,f4,bb4]@2 ~@8 d5@4 f5@4 d5@4 bb4@4 g4@2 bb4@2 c5 ~, ~@4 [c4,f4]@27 ~, ~@2 bb4@7 ~@7]/2", // Fsus4 F5
  AF: "[g3,c4]@2 ~@2 [g3,c4]@2 ~@4 [g3,c4]@2 ~@2 [g3,c4] ~", AG: "[bb3,e4] ~ [bb3,e4] ~@2 [bb3,e4] ~ [bb3,e4]",
  AH: "~@14 [ab3,c4,eb4] ~, f3@5 f2@3, ~ ab3@5 f3@2, ~ c4@2 ~, ~@3 eb4@3 ~@2", // Ab
  AI: "~@14 [bb3,d4,f4] ~, f3@5 bb2@3, ~ bb3@5 f3@2, ~ d4@2 ~, ~@3 f4@3 ~@2", // Bb
  AJ: "~@14 [g3,bb3,c4] ~, eb3@5 eb2@3, ~ g3@5 eb3@2, ~ bb3@2 ~, ~@3 c4@3 ~@2", // C7
  AK: "~@14 [bb3,eb4,e4] ~, ab3@5 c3@3, ~ bb3@5 ab3@2, ~ eb4@2 ~, ~@3 e4@3 ~@2", // Eb
  AL: "[ab3,d4] ~ [ab3,d4] ~@2 [ab3,d4] ~ [ab3,d4]", AM: "[c4,f4,bb4] ~@4 d5@2 f5, ~ [c4,f4,bb4]@3",
  AN: "[c4,gb4] ~ [c4,gb4] ~@2 [c4,gb4] ~ [c4,gb4]", // Cdim
  AO: "~@14 [b3,eb4,f4] ~, ab3@5 db3@3, ~ b3@5 ab3@2, ~ eb4@2 ~, ~@3 f4@3 ~@2", // Fm7b5
  AP: "[bb3,e4] ~@3 [bb3,e4]@2 ~@4 [bb3,e4]@2 ~@2 [bb3,e4]@2", AQ: "[a3,eb4] ~ [a3,eb4] ~@2 f2 f3 [a3,eb4]",
  AR: "~@14 [a3,db4,eb4] ~, gb3@5 b2@3, ~ a3@5 gb3@2, ~ db4@2 ~, ~@3 eb4@3 ~@2", // Ebm7b5
  AS: "[ab3,eb4] ~ [ab3,eb4] ~@2 [ab3,eb4] ~ [ab3,eb4]", AT: "[g3,c4] ~ [g3,c4] ~@2 [g3,c4] ~ [g3,c4]",
  AU: "[g3,db4] ~ [g3,db4] ~@2 a2 eb3 [g3,db4]", AV: "[c4,g4] ~ [c4,g4] ~@2 [c4,g4] ~ [c4,g4]",
  AW: "[b3,f4] ~ [b3,f4] ~@2 [b3,f4] ~ [b3,f4]", AX: "[bb3,f4] ~ [bb3,f4] ~@2 g2 g3 [bb3,f4]",
  AY: "[bb3,f4] ~ [bb3,f4] ~@2 [bb3,f4] ~ [bb3,f4]", AZ: "~@8 [ab3,eb4] ~ f2 ~ [ab3,eb4] ~@3",
  BA: "[ab3,d4] ~ [ab3,d4] ~@2 bb2 f3 [ab3,d4]", // Abdim
  BB: "~@14 [c4,eb4,gb4] ~, bb3@5 ab2@3, ~ c4@5 bb3@2, ~ eb4@2 ~, ~@3 gb4@3 ~@2", // Cdim
  BC: "[b3,f4] ~ [b3,f4] ~@2 db3 ab3 [b3,f4]", // Bdim
  BD: "~@14 [a3,c4,eb4] ~, f3@5 f2@3, ~ a3@5 f3@2, ~ c4@2 ~, ~@3 eb4@3 ~@2", // Adim
  BE: "[a3,eb4] ~ [a3,eb4] ~@2 [a3,eb4] ~ [a3,eb4]", // Adim
  BF: "~@14 [ab3,c4,d4] ~, f3@5 bb2@3, ~ ab3@5 f3@2, ~ c4@2 ~, ~@3 d4@3 ~@2", // Dm7b5
  BG: "~@14 [g3,a3,db4] ~, eb3@5 a2@3, ~ g3@5 eb3@2, ~ a3@2 ~, ~@3 db4@3 ~@2", // A7
  BH: "[g3,c4] ~ [g3,c4] ~@2 eb2 eb3 [g3,c4]", BI: "[a3,eb4] ~ [a3,eb4] ~@2 b2 gb3 [a3,eb4]",
  BJ: "~@8 [g3,c4] ~ eb2 ~ [g3,c4] ~@3", BK: "~@2 [g3,c4]@5 ~ [g3,c4]@2 ~@2 [g3,c4]@2 ~@2",
  BL: "~ [bb3,e4]@2 ~ [bb3,e4] ~ [bb3,e4] ~", BM: "[f3,d4] ~ [f3,d4] ~@2 [f3,d4] ~@2",
  BN: "~@2 gb4 bb4@2 gb4 ~ c4, ~@2 c4@9 ~ eb4@4", BO: "~@2 eb4 gb4@2 eb4 ~ a3, ~@2 a3@9 ~ db4@4",
  BP: "~@2 [c4,g4]@5 ~ [c4,g4]@2 ~@2 [c4,g4]@2 ~@2", // C5
  BQ: "[~@14 [ab3,c4,eb4] ~@3 [ab3,c4,eb4]@4 f3@2 [ab3,c4,eb4]@2 f3@2 [ab3,c4,eb4]@2 ~@2, f3@10 f2@9 ~@13, ~@2 ab3@10 f3@7 ~@13, ~ c4@2 ~@5, ~@3 eb4@3 ~@10]/2", // Ab
  BR: "[ab3,d4] ~ [ab3,d4] ~@2 [ab3,d4] ~@2", BS: "~@2 [a3,eb4]@5 ~ [a3,eb4]@2 ~@2 [a3,eb4]@2 ~@2",
  BT: "[~@4 [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4 [bb3,e4]@2 ~@2 [bb3,e4]@2 ~@4 [bb3,e4]@2 ~@6 [ab3,eb4]@5 ~ [ab3,eb4]@2 ~@2 [ab3,eb4]@2 ~@6 f4@2 ~@4 f4@2 ~@2 b3@2 ~ g3@2 ~ [g3,c4]@2 ~@4 [g3,c4]@2 ~@8 e4@2 ~@4 e4@2 ~@2 bb3@2, ab4@27 ab4@18 ~ eb4@2, ~@50 b3@9 ~ eb4@4 c4@2 ~@16 bb3@9 ~@5]/6", // Bb5 Bbdim Ab5 C5
  BU: "[c4,g4] ~@3 [c4,g4] ~@5 [c4,g4] ~@5", BV: "[c4,g4]@3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.44).pan(0.2)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A@2 B@2 C@3 ~@65 D E F G H I F J K L M N O P F Q K R S T U S U V W@2 X Y Z V AA AB AC AD AA AE AF AG AA Q D AH AI
  AJ AK AL AA AE AM AN AO AP AQ AD AR T AS AT AU AB AV@2 AW@2 ~@66
>`.pickRestart({
  A: "[~ bb4@7 eb5@7 ab5@7 ~@2 g5@8]/2", B: "[eb5@11 ~ f5@20]/2", C: "[eb5@37 ~@11]/3", D: "~ c4@15, g3", E: "[e4,bb4]",
  F: "~ [eb4,ab4]@15", G: "~ d4@15, bb4", H: "~ g3@7 bb3@7 ~, c4@15 ~", I: "[e4,ab4]", J: "~ [ab3,d4]@15",
  K: "~ [c4,eb4]@15", L: "~ [gb4,c5]@15", M: "~ b3@7 eb4@7 ~, ~ f4@15", N: "~ e4@15, g4", O: "[eb4,g4]",
  P: "~ [eb4,a4]@15", Q: "[d4,ab4]", R: "~ [g3,db4]@15", S: "~ [g4,c5]@15", T: "~ [f4,ab4]@15", U: "~ [bb3,f4]@15",
  V: "~ [bb3,e4]@15", W: "[ab3@15 ~ c4@16, f4]/2", X: "~ f4@15, ab4", Y: "~ bb3@7 d4@7 ~, ~ e4@15", Z: "~ eb4@15, f4",
  AA: "[eb4,f4]", AB: "~ [d4,ab4]@15", AC: "~ g3@7 bb3@7 ~, ~ c4@15", AD: "bb3@8 eb4@7 ~, e4@15 ~", AE: "[d4,f4]",
  AF: "~ [g3,c4]@15", AG: "~ [e4,bb4]@15", AH: "[gb4,bb4]", AI: "~ [b3,f4]@15", AJ: "~ [e4,g4]@15", AK: "[eb4,a4]",
  AL: "~ eb4@15, a3", AM: "~ [c4,g4]@15", AN: "~ g3@7 a3@7 ~, db4@15 ~", AO: "[g4,c5]", AP: "[gb4,a4]", AQ: "[f4,bb4]",
  AR: "[eb4,ab4]", AS: "[c4,eb4]", AT: "~ [e4,ab4]@15", AU: "~ [f4,gb4]@15", AV: "[[g3,c4]@31 ~]/2",
  AW: "[g3@15 ~ bb3@16, eb4]/2",
})).s("gm_synth_strings_1").gain(0.58).pan(0.7)

// other · flute
const flute = note(`<
  ~@73 A@3 B C D E@2 ~ F G H@4 I@2 J@2 K L@2 M@2 N@3 O P Q R S T U V@2 ~ W@2 X@2 Y Z AA@3 AB AC AD AE AF AG AH AI@5 AJ@2
  AK@4 ~@67
>`.pickRestart({
  A: "[~@9 g5@2 eb5@2 c5@2 bb4@8 ~ eb5@3 g5@3 ~ ab5@2 ~ g5@3 ~ ab5@3 g5@2 ab5@2 ~ g5@2, ~@4 bb5 ~@19]/3",
  B: "eb5@3 d5@2 ~ eb5@2 ~@8", C: "~@12 bb5 ~ eb5@2, ~@11 g5@2 ~ g5 ~", D: "bb4@5 ~ eb5@3 ~ g5@2 ~@2 ab5@2",
  E: "[~@2 g5@2 ~@2 ab5@3 g5@2 f5@2 eb5@2 f5@2 ~ eb5@3 gb5 ~ f5@3 ~@6]/2",
  F: "bb4 c5 db5 d5 ~ eb5@2 ~ g5@2 ~@2 bb5@2 c6@2", G: "~@2 bb5@2 ~@2 c6@2 ~ bb5@2 ~ c6 ~ bb5@2",
  H: "[ab5@21 ~@3 bb5 a5 ab5@2 g5@2 ~ f5@9 ~ eb6 f6@2 ~ eb6@2 c6@2 ab5@2 f5@2 eb5@2 c5@2 eb5@2 ~ f5@2 ab5@2, ~@15 gb5 ~@16]/4",
  I: "[f5 ab5 f5 eb5@2 c5@2 bb4@2 ab4@2 f4@2 ~@2 c4@6 ~ [f4,g4] [a4,b4] [c5,d5] [d5,e5,f5] [f5,g5,a5,b5] [g5,a5,c6,d6] e6 ~@3, ~@7 eb4 ~@8]/2", // Fsus2 Asus2 Csus2 Dm G7 Gsus4
  J: "[~ bb5@20 d5@2 eb5@4 eb5@2 eb5 ~@2]/2", K: "g5 f5 ~ g5 f5 ~ g5 f5",
  L: "[~@2 g5@2 ~ f5@3 g5@3 ~ ab5@2 bb5@5 ~ a5 ab5 ~ g5@3 ab5@2 ~ bb5@3]/2",
  M: "[~ g5@2 ab5@2 ~ bb5 ~@2 c6@2 ~ bb5 ~ ab5 c6@2 bb5@2 g5@2 e5@2 eb5@2 d5@2 db5@2 c5@2 ~, ~@4 d6 ~@11]/2",
  N: "[bb5@2 g5 ~ e5 ~ c5@2 ab5@2 ~ bb5@2 ~ c6@15 f5@2 f5@2 f5 ~ f5@2 f5@2 ~ f5 f5@3 ~@2 ab5@2]/3",
  O: "~ bb5 ~ ab5 g5@2 g5@2 ~@2 g5@2 ~@4", P: "~@8 ab5 ~ bb5@2 b5@2 c6@2", Q: "~@2 f5@3 ~ ab5@2 ~@2 bb5 ~@3 c6@2",
  R: "~@2 f5@2 ~ eb6@2 ~@2 c6@2 ab5@2 f5@2 bb5", S: "~ d6 bb5@2 ab5 ~ f5 ~ c6@2 ab5 f5@2 ~ eb6@2",
  T: "~ f5@2 ~ d6 ~ bb5 ab5@2 ~ f5@2 eb5 d5@2 ~", U: "bb4@6 ~ eb5@2 ~ g5@2 ~@2 ab5@2",
  V: "[~@3 g5@2 ~ ab5@2 ~ g5@2 ab5 ~ g5 ~ eb5@2 ~ eb5@2 ~ eb5@2 eb5@2 eb5 ~@6]/2",
  W: "[~@6 bb4@2 eb5 ~ g5@2 ab5 g5@2 ab5@2 ~ g5@2 ab5 g5@2 ab5@2 ~ g5@2 ~ eb5@2 ~, ~@14 f5 ~]/2",
  X: "[f5@6 ~ f5@2 ~ eb5@2 ~ f5@9 e5 [c5,d5] b4 ~@7, ~@3 eb5 ~@12]/2", Y: "~@9 bb4@2 eb5@2 g5@2 ~",
  Z: "c6@7 ~ bb5 c6 bb5@2 ~@2 ab5 bb5", AA: "[ab5@21 bb5 ab5 g5@6 ~ gb5 f5@9 ~ eb6 f6@2 ~ eb6 ~ c6]/3",
  AB: "~ ab5@2 f5@2 f6@2 eb6@2 c6 ~ ab5@2 f5@2 ~", AC: "eb5@2 c5 ~ eb5@2 f5 ~ ab5 ~ f5 ab5 f5@2 eb5@2",
  AD: "c5@6 ~ g5!3 ~@2 ab5@3 ~", AE: "bb5@11 ~ eb5@2 eb5 ~", AF: "eb5 ~ eb5@2 ~ eb5 ~ eb5 ~ eb5@2 eb5 ~ eb5 ~ db6",
  AG: "d6@2 ~ c6@2 ~ eb5@2 ~@2 d6@2 ~@2 c6@2", AH: "~@2 eb5@2 ~ d5@2 ~ db5@2 c5@3 ~ c6@2",
  AI: "[~ c6@5 bb5@14 b5@2 c6@4 ~ bb5 c6 bb5@2 ab5@19 ~ g5@2 gb5@2 f5@2 eb5@2 d5 ~ b4@2 bb4@7 ~ eb5@2 ~ g5@3 ab5@2 ~]/5",
  AJ: "[~ g5@3 ~ ab5@2 ~ g5@2 f5@2 ~ eb5@16 ~@2 f5]/2", AK: "[g5 ~ f5 ~@2 f5 g5 f5 ~@3 f5 g5@2 ~ eb5@37 ~@12]/4",
})).s("gm_flute").gain(0.64)

// chords · epiano1
const epiano1 = note(`<
  ~@2 A B C D E@2 F@2 G B H I G B H D J K L M N O P Q R S G L T G U B ~ V L W X B X D Y Z AA AB R AC AA AD G K L W AE C
  X Q R S G AF T AC AG L AH@8 AI@8 AJ@8 AK@5 AL@8 B X D AM@4 AN@5 AO@8 AP AQ@6 AR@6 AS@2 AT@4 AU@4 AV@8 AW@2 AX@3 AY@8
  AC H Q AZ@3 BA BB@5 BC@7 BD@2 BE@8 BF Q ~ BG J BH BI@2
>`.pickRestart({
  A: "~@6 bb4@3 ~ [c4,bb4]@2 bb4@2 ~@2, g3@8 ~@2 [g3,eb4] ~@5, ~@2 c4@7 ~@7, ~ eb4 ~@2", B: "[bb3,e4,ab4,eb5]@7 ~",
  C: "~@6 db5@3 ~ [eb4,db5]@2 ~@4, a3@8 ~@2 [a3,gb4] ~@5, ~@2 eb4@7 ~@7, ~ gb4 ~@2", D: "[ab3,d4,f4,c5]@7 ~",
  E: "[[g3,bb3,c4,eb4]@26 c4@2 ~@2 eb5 ~, ~@14 g4 ~, ~@29 bb4@2 ~]/2", // Cm7
  F: "[c4@2 ~@4 eb5@12 [ab3,b3,db4,e4]@2 [g3,bb3,c4,eb4]@9 ~@3, ~@2 g4@15 ~@15, ~@4 bb4@13 ~@15]/2", // Dbm7 Cm7
  G: "[g3,c4,eb4,bb4]@7 ~", H: "[eb3,ab3,c4,f4]@7 ~",
  I: "~@6 bb4@3 ~ [d4,bb4]@2 ~@4, f3@8 ~@2 [f3,f4] ~@5, ~@2 d4@7 ~@7, ~ f4 ~@2", J: "[g3,bb3,c4,eb4]@7 ~",
  K: "~@6 eb5@3 ~ [gb4,eb5]@2 ~@4, c4@8 ~@2 [c4,bb4] ~@5, ~@2 gb4@7 ~@7, ~ bb4 ~@2", // Ebm C7
  L: "~@6 eb5@3 ~ [f4,eb5]@2 ~@4, b3@8 ~@2 [b3,ab4] ~@5, ~@2 f4@7 ~@7, ~ ab4 ~@2", M: "[e3,g3,bb3,eb4]@7 ~",
  N: "~@6 c5@3 ~ [eb4,c5]@2 ~@4, a3@8 ~@2 [a3,g4] ~@5, ~@2 eb4@7 ~@7, ~ g4 ~@2", O: "[a3,eb4,gb4,db5]@7 ~",
  P: "[ab3,eb4,f4,c5]@7 ~", Q: "~@6 c5@3 ~ [d4,c5]@2 ~@4, ab3@8 ~@2 [ab3,f4] ~@5, ~@2 d4@7 ~@7, ~ f4 ~@2",
  R: "~@6 bb4@3 ~ [c4,bb4]@2 ~@4, g3@8 ~@2 [g3,eb4] ~@5, ~@2 c4@7 ~@7, ~ eb4 ~@2", S: "[g3,db4,eb4,a4]@7 ~",
  T: "[f3,bb3,d4,g4]@7 ~", U: "~@6 db5@3 ~ [f4,db5]@2 ~@4, bb3@8 ~@2 [bb3,g4] ~@5, ~@2 f4@7 ~@7, ~ g4 ~@2",
  V: "~@10 f4@5 ~, f6@15 ~, ~@2 c6@13 ~, ~@4 ab5@11 ~, ~@6 eb5@9 ~", W: "[e3,bb3,d4,g4]@7 ~",
  X: "~@6 c5@3 ~ [eb4,c5]@2 ~@4, ab3@8 ~@2 [ab3,f4] ~@5, ~@2 eb4@7 ~@7, ~ f4 ~@2", Y: "[c4,g4,bb4,eb5]@7 ~",
  Z: "[e3,bb3,eb4,ab4]@7 ~", AA: "[eb4,ab4,c5,f5]@7 ~", AB: "[bb3,d4,f4,bb4]@7 ~",
  AC: "~@6 eb5@3 ~ [e4,eb5]@2 ~@4, bb3@8 ~@2 [bb3,ab4] ~@5, ~@2 e4@7 ~@7, ~ ab4 ~@2", AD: "[ab3,d4,g4,c5]@7 ~",
  AE: "[eb4,a4,c5,g5]@7 ~", AF: "[gb3,c4,f4,a4]@7 ~", AG: "[eb3,f3,ab3,c4]@7 ~",
  AH: "[~@6 bb4@3 ~ [c4,bb4]@2 ~@4 [bb3,e4,ab4,eb5]@14 ~@8 db5@3 ~ [eb4,db5]@2 ~@4 [ab3,d4,f4,c5]@14 ~@2 [g3,bb3,c4,eb4]@26 c4@2 ~@2 eb5 ~ c4@2 ~@4 eb5@12 [ab3,b3,db4,e4]@2 [g3,bb3,c4,eb4]@9 ~@3, g3@8 ~@2 [g3,eb4] ~@21 a3@8 ~@2 [a3,gb4] ~@85, ~@2 c4@7 ~@25 eb4@7 ~@87, ~@4 eb4@4 ~@4 bb4@81 bb4@7 bb4@28, ~@36 gb4@4 ~@52 g4@2 ~@4 g4@15 ~@15]/8", // C7 Ebsus4 Eb7 Dm7b5 Cm7 Dbm7 Cm7 Cm …
  AI: "[[g3,c4,eb4]@14 ~@8 eb5@3 ~ [e4,eb5]@2 ~@4 [eb4,ab4,c5,f5]@14 ~@8 bb4@4 [f3,f4] ~@11 bb4@4 [g3,eb4] ~@11 eb5@3 ~ [e4,eb5]@2 ~@10 c5@3 ~ [eb4,c5]@2 ~@4 [ab3,d4,f4,c5]@14 ~@2, bb4@27 ~@2 bb4@6 ~@2 bb4@27, ~@16 bb3@8 ~@2 [bb3,ab4] ~@21 f3@8 ~@8 g3@8 ~@12 ab4@4 ~@12 f4@4 ~@24, ~@18 e4@7 ~@25 d4@7 ~ d4@2 ~@6 c4@7 ~ c4@2 ~@4 bb3@8 ~@2 [bb3,ab4] ~@5 ab3@8 ~@2 [ab3,f4] ~@21, ~@20 ab4@4 ~@28 f4@4 ~@12 eb4@4 ~@10 e4@7 ~@9 eb4@7 ~@23]/8", // Cm Emaj7 Fm7 F Cm Emaj7 Cm Dm7b5 …
  AJ: "[[c4,g4,eb5]@14 ~@2 [gb3,bb3,c4,eb4]@14 ~@2 [b3,f4,ab4,eb5]@14 ~@2 [e3,bb3,eb4,g4]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@4 [a3,eb4,gb4,db5]@14 ~@2 [ab3,c4,eb4,f4]@14 ~@2 [ab3,c4,d4,f4]@14 ~@2, bb4, ~@64 a3@8 ~@2 [a3,g4] ~@53, ~@66 eb4@7 ~@55, ~@17 g4 ~@14]/8", // Cm Cm7b5 Fm7b5 Eb Cm Ebm7b5 Fm7 Dm7b5 …
  AK: "[~@6 bb4@4 [g3,eb4] ~@5 [g3,a3,db4,eb4]@14 ~@8 eb5@3 ~ [g4,eb5]@2 ~@4 [b3,f4,ab4,eb5]@14 ~@8 d5@3 ~ [f4,d5]@2 ~@4, g3@8 ~@26 g4@7 ~@25 f4@7 ~@7, ~@2 c4@7 ~ c4@2 ~@20 c4@8 ~@2 c4 ~@21 bb3@8 ~@2 [bb3,g4] ~@5, ~@2 eb4@2 ~ bb4@13 bb4@3 bb4@19, ~@17 g4 ~@2]/5", // Cm Eb7 Cm Fm7b5 Dm Eb
  AL: "[[g3,c4,eb4]@14 ~@8 db5@3 ~ [f4,db5]@2 ~@4 [e3,bb3,eb4,ab4]@14 ~@28 f4@5 ~ [f3,b3,eb4,ab4]@14 ~@2 [bb3,e4,g4,d5]@14 ~@2 [eb4,ab4,c5,f5]@14 ~@2, bb4, ~@16 bb3@8 ~@2 [bb3,g4] ~@41 ab5@2 eb5@9 ~@49, ~@18 f4@7 ~@41 c6@13 ~@49, ~@20 g4@4 ~@40 f6@15 ~@49]/8", // Cm Db Emaj7 Fm7b5 Em7b5 Fm7 Eb
  AM: "[~@6 bb4@4 [g3,eb4] ~@11 eb5@3 ~ [e4,eb5]@2 ~@10 c5@3 ~ [eb4,c5]@2 ~@10 bb4@4 [f3,f4] ~@5, g3@8 ~@10 e4@7 ~@9 eb4@7 ~@9 d4@7 ~ d4@2 ~@4, ~@2 c4@7 ~ c4@2 ~@4 bb3@8 ~@2 [bb3,ab4] ~@5 ab3@8 ~@2 [ab3,f4] ~@5 f3@8 ~@8, ~@2 eb4@2 ~ bb4@22 ~@2 bb4@3, ~@5 ab4 ~@3 f4 ~@3 f4 ~@2]/4", // Cm Emaj7 Cm F Bb7 Db
  AN: "[[c4,g4,eb5]@14 ~@2 [bb3,e4,ab4,eb5]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@10 c5@3 ~ [d4,c5]@2 ~@10 bb4@4 [g3,eb4] ~@5, bb4@35 ~@2 bb4@3, ~@32 ab3@8 ~@2 [ab3,f4] ~@5 ab3@8 ~@2 [ab3,f4] ~@5 g3@8 ~@8, ~@34 eb4@7 ~@9 d4@7 ~@9 c4@7 ~ c4@2 ~@4, ~@9 f4 ~@3 f4 ~@3 eb4 ~@2]/5", // Cm Ebsus4 Cm D7 Cm Db
  AO: "[~@6 eb5@3 ~ [gb4,eb5]@2 ~@4 [b3,f4,ab4,eb5]@14 ~@2 [e3,bb3,d4,g4]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@4 [a3,eb4,gb4,db5]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@10 c5@3 ~ [d4,c5]@2 ~@4 [g3,bb3,c4,eb4]@14 ~@2, c4@8 ~@2 c4 ~@37 a3@8 ~@2 [a3,g4] ~@21 ab3@8 ~@2 [ab3,f4] ~@5 ab3@8 ~@2 [ab3,f4] ~@21, ~@2 gb4@7 ~@41 eb4@7 ~@25 eb4@7 ~@9 d4@7 ~@23, ~@2 bb4@3 bb4@59, ~@13 g4 ~@7 f4 ~@3 f4 ~@6]/8", // Ebm Fm7b5 Em7b5 Cm Ebm7b5 Cm D7 Cm7 …
  AP: "~@6 a4@3 ~ [db4,a4]@2 ~@4, g3@8 ~@2 [g3,eb4] ~@5, ~@2 db4@7 ~@7, ~ eb4 ~@2", // Gbm Cm
  AQ: "[[g3,c4,eb4]@14 ~@2 [c4,gb4,a4,f5]@14 ~@2 [f3,bb3,d4,g4]@14 ~@8 eb5@3 ~ [e4,eb5]@2 ~@10 c5@3 ~ [eb4,c5]@2 ~@4 [b3,f4,ab4,eb5]@14 ~@2, bb4, ~@48 bb3@8 ~@2 [bb3,ab4] ~@5 ab3@8 ~@2 [ab3,f4] ~@21, ~@50 e4@7 ~@9 eb4@7 ~@23, ~@13 ab4 ~@3 f4 ~@6]/6", // Cm F Gm7 Emaj7 Cm Fm7b5 Bb7 Db
  AR: "[~@6 bb4@4 [g3,eb4] ~@5 [e3,ab3,bb3,eb4]@14 ~@2 [a3,eb4,gb4,db5]@14 ~@2 [ab3,d4,f4,c5]@14 ~@28 eb4@5 ~, g3@8 ~@74 bb5@4 c5@9 ~, ~@2 c4@7 ~ c4@2 ~@68 eb6@15 ~, ~@2 eb4@2 ~ bb4@43, ~@84 g5@11 ~]/6", // Cm Emaj7 Ebm7b5 Dm7b5
  AS: "[[g4,eb5]@23 ~@7 eb5 ~, bb4@7 bb4, c4@21 ~@3 c4@7 ~, ~@26 g4@5 ~]/2", // Cm
  AT: "[[g3,c4,eb4]@14 ~@2 [e3,ab3,bb3,eb4]@14 ~@2 [eb4,ab4,c5,f5]@14 ~@8 bb4@4 [f3,f4] ~@5, bb4@27 ~@2 bb4@3, ~@6 f3 ~, ~@50 d4@7 ~ d4@2 ~@4, ~@13 f4 ~@2]/4", // Cm Emaj7 Fm7 F
  AU: "[[c4,g4,eb5]@14 ~@8 eb5@3 ~ [e4,eb5]@2 ~@4 [eb4,ab4,c5,f5]@14 ~@8 c5@3 ~ [d4,c5]@2 ~@4, bb4, ~@16 bb3@8 ~@2 [bb3,ab4] ~@21 ab3@8 ~@2 [ab3,f4] ~@5, ~@18 e4@7 ~@25 d4@7 ~@7, ~@5 ab4 ~@7 f4 ~@2]/4", // Cm Emaj7 Fm7 D7 Bb7 Db
  AV: "[[g3,c4,eb4]@14 ~@8 eb5@3 ~ [gb4,eb5]@2 ~@4 [f3,b3,eb4,ab4]@14 ~@2 [bb3,e4,g4,eb5]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@4 [a3,eb4,gb4,db5]@14 ~@2 [ab3,eb4,f4,c5]@14 ~@8 c5@3 ~ [d4,c5]@2 ~@4, bb4@10 bb4@3 bb4@51, ~@16 c4@8 ~@2 c4 ~@37 a3@8 ~@2 [a3,g4] ~@37 ab3@8 ~@2 [ab3,f4] ~@5, ~@18 gb4@7 ~@41 eb4@7 ~@41 d4@7 ~@7, ~@17 g4 ~@11 f4 ~@2]/8", // Cm Ebm Fm7b5 Eb Cm Ebm7b5 Fm7 D7 …
  AW: "[[g3,c4,eb4]@7 ~ [g3,db4,eb4,a4]@7 ~, bb4]/2", // Cm Eb7
  AX: "[[g3,c4,eb4]@7 ~ [b3,f4,ab4,eb5]@7 ~ [f3,bb3,d4,g4]@7 ~, bb4]/3", // Cm Fm7b5 Gm7
  AY: "[[g3,c4,eb4]@14 ~@2 [f3,bb3,db4,g4]@14 ~@2 [bb3,e4,ab4,eb5]@14 ~@2 [ab4,c5,f5]@23 ~@5 c5@2 f5 ~@7 eb5@3 ~ [f4,eb5]@2 ~@4 [e3,bb3,d4,g4]@14 ~@2 [eb3,f3,ab3,c4]@14 ~@2, bb4, ~@48 eb4@21 ~@3 eb4@7 ~ b3@8 ~@2 [b3,ab4] ~@37, ~@74 ab4@5 ~@3 f4@7 ~@39, ~@21 ab4 ~@10]/8", // Cm Gm7b5 Ebsus4 Fm F7 Em7b5 Fm7 E
  AZ: "[~@6 bb4@4 [g3,eb4] ~@11 eb5@3 ~ [e4,eb5]@2 ~@10 c5@3 ~ [eb4,c5]@2 ~@4, g3@8 ~@10 e4@7 ~@9 eb4@7 ~@7, ~@2 c4@7 ~ c4@2 ~@4 bb3@8 ~@2 [bb3,ab4] ~@5 ab3@8 ~@2 [ab3,f4] ~@5, ~@2 eb4@2 ~ bb4@19, ~@5 ab4 ~@3 f4 ~@2]/3", // Cm Emaj7 Cm Bb7 Db
  BA: "[bb3,d4,f4]@7 ~, bb4", // Bb
  BB: "[[c4,g4,eb5]@14 ~@2 [bb3,eb4,e4,ab4]@14 ~@2 [eb4,ab4,c5,f5]@14 ~@2 [ab3,d4,f4,c5]@14 ~@8 bb4@4 [g3,eb4] ~@5, bb4@35 ~@2 bb4@3, ~@8 g3 ~, ~@66 c4@7 ~ c4@2 ~@4, ~@17 eb4 ~@2]/5", // Cm Ebsus4 Fm7 Dm7b5 Cm
  BC: "[~@6 eb5@3 ~ [gb4,eb5]@2 ~@4 [f3,b3,eb4,ab4]@14 ~@8 d5@3 ~ [e4,d5]@2 ~@4 [eb3,g3,a3,c4]@14 ~@2 [a3,eb4,gb4,db5]@14 ~@8 c5@3 ~ [eb4,c5]@2 ~@4 [ab3,d4,f4,c5]@14 ~@2, c4@8 ~@2 c4 ~@21 bb3@8 ~@2 [bb3,g4] ~@37 ab3@8 ~@2 [ab3,f4] ~@21, ~@2 gb4@7 ~@25 e4@7 ~@41 eb4@7 ~@23, ~@2 bb4@3 bb4@51, ~@9 g4 ~@11 f4 ~@6]/7", // Ebm Fm7b5 E7 Am7b5 Ebm7b5 Cm Dm7b5 Eb …
  BD: "[[c4,g4,eb5]@7 ~ [g3,db4,eb4,a4]@7 ~, bb4]/2", // Cm Eb7
  BE: "[[g3,c4,eb4]@14 ~@8 f5@3 ~ [gb4,f5]@2 ~@4 [f3,bb3,d4,g4]@14 ~@2 [bb3,e4,ab4,eb5]@14 ~@2 [eb3,ab3,c4,f4]@14 ~@8 eb5@3 ~ [f4,eb5]@2 ~@4 [g3,bb3,c4,eb4]@14 ~@2 [bb3,e4,ab4,eb5]@14 ~@2, bb4, ~@16 c4@8 ~@2 [c4,a4] ~@53 b3@8 ~@2 [b3,ab4] ~@37, ~@18 gb4@7 ~@57 f4@7 ~@39, ~@5 a4 ~@15 ab4 ~@10]/8", // Cm Gbmaj7 Gm7 Ebsus4 Fm7 F7 Cm7 Ebsus4 …
  BF: "[a3,f4,gb4,db5]@7 ~", BG: "~@10 eb4@5 ~, eb6@15 ~, ~@2 bb5@13 ~, ~@4 g5@11 ~, ~@6 c5@9 ~",
  BH: "[c4,g4,eb5]@7 ~, bb4", // Cm
  BI: "[[g3,c4,f4]@2 ~@2 [g3,c4,f4]@2 ~@2 g4@2 ~@2 c5 ~ f5 ~ [g3,c4,f4]@8 ~@8, bb4 bb4@5 ~@2]/2", // Csus4
})).s("gm_epiano1").gain(0.35).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@2 A@23 B A@63 B A@15 B A@63 B A@31 B A B>".pickRestart({
// … 110 more lines