Strudelify
When I Fall in Love cover art

LL 77

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, A@4 for four bars: 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 O
  AD AN AO C T AI V AP O AQ Z I AR AS A B C D E F G H A L AT M A I AO AI N AU AV AN AR AW T AL AM W O P AX O AB L AY AZ
  AV AE AK BA J AI BB AG AO M E AF AH AI AM O BC BA AO C AI D A BD O BE BF L AO AV A I AW M E F BG@2 BB BA AO AI K I AO
  AL E O AD BH AO AW AL@2 AM BI X BC BJ BK BL AG BM@2 BN AE BO AG AO D BB AG AO AL BB AG AK D AM X BC AN AO S BP AL V W
  BQ BR Z I AO BS A BA S AI BT F BU A BV BW
>`.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@5 ~ 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: "c2@6 g2 ~ g2@6 gb2 ~", AO: "f2@4 ~@2 f2@2 c3@6 f2 ~",
  AP: "a1@4 ~@2 a1@2 eb2@6 a1 ~", AQ: "d2@3 a2 a2@3 d2", AR: "f2@6 c3 ~ c3@6 c2 ~", AS: "db2@6 ab2 ~ ab2@6 d2 ~",
  AT: "f2@6 c3 ~ c3@6 b1 ~", AU: "ab2@6 eb3 ~ eb3@6 d2 ~", AV: "db2@3 ab2 ab2@3 db2", AW: "b1@4 ~@2 b1@2 gb2@6 b1 ~",
  AX: "g2@6 d3 ~ d3@6 a2 ~", AY: "f3@5 ~ b2@2 c3@6 e2@2", AZ: "f2@5 ~ b1@2 c2@5 ~ f2 ~, ~@8 bb1 ~@7",
  BA: "c2@5 ~ c2 ~ c2@6 c2 ~", BB: "eb2@6 bb2 ~ bb2@6 b1 ~", BC: "db2@5 ~ db2@2 ab2@6 db2 ~",
  BD: "a1@5 ~ a1 ~ a1@6 a1 ~", BE: "d2@4 ~@2 d2@2 a2@6 d2 ~", BF: "g2@3 d3 d3@3 g2",
  BG: "[eb2@6 bb2@8 g3@8 bb2@4 eb3@2 bb2@2 eb2 ~]/2", BH: "c2@3 g2 g2@3 c2", BI: "a1@3 eb2 eb2@3 a1",
  BJ: "g2@6 d3 ~ d3@6 g2 ~", BK: "ab2@6 eb3 ~ eb3@6 gb2 ~", BL: "g2@5 ~ g2@2 db3@6 g2 ~", BM: "f2@6 c3 ~ c3@6 f2 ~",
  BN: "db2@6 ab2 ~ ab2@6 db2 ~", BO: "f2@6 c3 ~ c3@6 db2 ~", BP: "bb1@6 f2 ~ f2@6 a1 ~", BQ: "ab2@6 eb3 ~ eb3@6 eb2 ~",
  BR: "d2@5 ~ d2 ~ d2@6 d2 ~", BS: "db2@6 ab2 ~ ab2@6 e2 ~", BT: "eb2@3 bb2@4 bb1", BU: "eb2@6 bb2 ~ bb2@6 d2 ~",
  BV: "eb2@5 ~ bb2 ~ bb2@4 bb1@4", BW: "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 A I J K A L M B C@2 G K A N O P Q O Q F R S T B G I G K A B G U A F G D A L M V C@2 J K A W O
  L X F G T A B C D Y@4 Z AA AB AC AD AE AB AF AG AH AI AA AJ AK AL AF Z AM AN AO AP AN AQ AA AL AR AI AA AB AA AB AS AG
  AE AB AQ Z AA AL AF AG AT AU AA AV AW AL AX Z AY AN AH AQ AE AB AI AZ AA BA AS Y@2 Z BB BC B G BD A F J K BC BE M B C
  BF J K A N O T Q BG Q B BH@2 T B J F G BI A B G H A F G K A L M F C BJ J K A N BG L BK@6 BJ D Z BB BC A BL BM
>`.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: "~@2 e4 ab4@2 e4 ~ bb3, ~@2 bb3@9 ~ eb4@4", J: "~@2 [ab3,eb4]@5 ~ [ab3,eb4]@2 ~@2 [ab3,eb4]@2 ~@2",
  K: "~@2 d4 f4@2 d4 ~ ab3, ~@2 ab3@9 ~ c4@4", L: "~@2 [c4,gb4]@5 ~ [c4,gb4]@2 ~@2 [c4,gb4]@2 ~@2",
  M: "[b3,f4] ~ [b3,f4] ~@2 [b3,f4] ~@2", N: "~@2 [g3,db4]@5 ~ [g3,db4]@2 ~@2 [g3,db4]@2 ~@2",
  O: "[c4,g4] ~ [c4,g4] ~@2 [c4,g4] ~@2", P: "~@2 f4 ab4@2 f4 ~ b3, ~@2 b3@9 ~ eb4@4",
  Q: "[bb3,f4] ~ [bb3,f4] ~@2 [bb3,f4] ~@2", R: "[ab3,eb4] ~ [ab3,eb4] ~@2 f2 f3 [ab3,eb4]",
  S: "~@2 f2@2 f3@2 [ab3,eb4]@3 ~ f2@2 [f3,ab3,eb4]@2 ~@2", T: "~ [b3,f4]@2 ~ [b3,f4] ~ [b3,f4] ~",
  U: "~@2 [f3,d4]@5 ~ [f3,d4]@2 ~@2 [f3,d4]@2 ~@2", V: "~@2 e4 g4@2 e4 ~ bb3, ~@2 bb3@9 ~ d4@4",
  W: "[g3,db4] ~ [g3,db4] ~@2 [g3,db4] ~@2", X: "~@2 [bb3,f4]@5 ~ [bb3,f4]@2 ~@2 [bb3,f4]@2 ~@2",
  Y: "[[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
  Z: "[g3,c4] ~ [g3,c4] ~@2 [g3,c4] ~ [g3,c4]", AA: "[bb3,e4] ~ [bb3,e4] ~@2 [bb3,e4] ~ [bb3,e4]",
  AB: "~@14 [ab3,c4,eb4] ~, f3@5 f2@3, ~ ab3@5 f3@2, ~ c4@2 ~, ~@3 eb4@3 ~@2", // Ab
  AC: "~@14 [bb3,d4,f4] ~, f3@5 bb2@3, ~ bb3@5 f3@2, ~ d4@2 ~, ~@3 f4@3 ~@2", // Bb
  AD: "~@14 [g3,bb3,c4] ~, eb3@5 eb2@3, ~ g3@5 eb3@2, ~ bb3@2 ~, ~@3 c4@3 ~@2", // C7
  AE: "~@14 [bb3,eb4,e4] ~, ab3@5 c3@3, ~ bb3@5 ab3@2, ~ eb4@2 ~, ~@3 e4@3 ~@2", // Eb
  AF: "[ab3,d4] ~ [ab3,d4] ~@2 [ab3,d4] ~ [ab3,d4]", AG: "[c4,f4,bb4] ~@4 d5@2 f5, ~ [c4,f4,bb4]@3",
  AH: "[c4,gb4] ~ [c4,gb4] ~@2 [c4,gb4] ~ [c4,gb4]", // Cdim
  AI: "~@14 [b3,eb4,f4] ~, ab3@5 db3@3, ~ b3@5 ab3@2, ~ eb4@2 ~, ~@3 f4@3 ~@2", // Fm7b5
  AJ: "[a3,eb4] ~ [a3,eb4] ~@2 f2 f3 [a3,eb4]", // Adim
  AK: "~@14 [a3,db4,eb4] ~, gb3@5 b2@3, ~ a3@5 gb3@2, ~ db4@2 ~, ~@3 eb4@3 ~@2", // Ebm7b5
  AL: "[ab3,eb4] ~ [ab3,eb4] ~@2 [ab3,eb4] ~ [ab3,eb4]", AM: "[g3,db4] ~ [g3,db4] ~@2 a2 eb3 [g3,db4]",
  AN: "[c4,g4] ~ [c4,g4] ~@2 [c4,g4] ~ [c4,g4]", AO: "[b3,f4] ~ [b3,f4] ~@2 [b3,f4] ~ [b3,f4]",
  AP: "[bb3,f4] ~ [bb3,f4] ~@2 g2 g3 [bb3,f4]", AQ: "[bb3,f4] ~ [bb3,f4] ~@2 [bb3,f4] ~ [bb3,f4]",
  AR: "~@8 [ab3,eb4] ~ f2 ~ [ab3,eb4] ~@3", AS: "[ab3,d4] ~ [ab3,d4] ~@2 bb2 f3 [ab3,d4]",
  AT: "~@14 [c4,eb4,gb4] ~, bb3@5 ab2@3, ~ c4@5 bb3@2, ~ eb4@2 ~, ~@3 gb4@3 ~@2", // Cdim
  AU: "[b3,f4] ~ [b3,f4] ~@2 db3 ab3 [b3,f4]", // Bdim
  AV: "~@14 [a3,c4,eb4] ~, f3@5 f2@3, ~ a3@5 f3@2, ~ c4@2 ~, ~@3 eb4@3 ~@2", // Adim
  AW: "[a3,eb4] ~ [a3,eb4] ~@2 [a3,eb4] ~ [a3,eb4]", // Adim
  AX: "~@14 [ab3,c4,d4] ~, f3@5 bb2@3, ~ ab3@5 f3@2, ~ c4@2 ~, ~@3 d4@3 ~@2", // Dm7b5
  AY: "~@14 [g3,a3,db4] ~, eb3@5 a2@3, ~ g3@5 eb3@2, ~ a3@2 ~, ~@3 db4@3 ~@2", // A7
  AZ: "[g3,c4] ~ [g3,c4] ~@2 eb2 eb3 [g3,c4]", BA: "[a3,eb4] ~ [a3,eb4] ~@2 b2 gb3 [a3,eb4]",
  BB: "~@8 [g3,c4] ~ eb2 ~ [g3,c4] ~@3", BC: "~@2 [g3,c4]@5 ~ [g3,c4]@2 ~@2 [g3,c4]@2 ~@2",
  BD: "[f3,d4] ~ [f3,d4] ~@2 [f3,d4] ~@2", BE: "~@2 gb4 bb4@2 gb4 ~ c4, ~@2 c4@9 ~ eb4@4",
  BF: "~@2 eb4 gb4@2 eb4 ~ a3, ~@2 a3@9 ~ db4@4", BG: "~@2 [c4,g4]@5 ~ [c4,g4]@2 ~@2 [c4,g4]@2 ~@2",
  BH: "[~@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
  BI: "[ab3,d4] ~ [ab3,d4] ~@2 [ab3,d4] ~@2", BJ: "~@2 [a3,eb4]@5 ~ [a3,eb4]@2 ~@2 [a3,eb4]@2 ~@2",
  BK: "[~@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,c4]@2 ~@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 ~@18 bb3@9 ~@5]/6", // Bb5 Bbdim Ab5 C5
  BL: "[c4,g4] ~@3 [c4,g4] ~@5 [c4,g4] ~@5", BM: "[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 T X Y V Y Q H Z Y AA D E Y Q D AB AC N P AD Y
  AA AE AF S AG AH Z AI T K I AJ Q AK@2 AL@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: "~ bb3@7 d4@7 ~, ~ e4@15", Y: "[eb4,f4]",
  Z: "bb3@8 eb4@7 ~, e4@15 ~", AA: "[d4,f4]", AB: "[gb4,bb4]", AC: "~ [b3,f4]@15", AD: "~ eb4@15, a3",
  AE: "~ [c4,g4]@15", AF: "~ g3@7 a3@7 ~, db4@15 ~", AG: "[gb4,a4]", AH: "[f4,bb4]", AI: "[eb4,ab4]",
  AJ: "~ [f4,gb4]@15", AK: "[[g3,c4]@31 ~]/2", AL: "[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@4 AB AC AD AE AF AG AH@5 AI@2
  AJ@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@2 c6@2 ab5@2 f5@2 f6@2 eb6@2 c6 ~ ab5@2 f5@2 ~]/4",
  AB: "eb5@2 c5 ~ eb5@2 f5 ~ ab5 ~ f5 ab5 f5@2 eb5@2", AC: "c5@6 ~ g5!3 ~@2 ab5@3 ~", AD: "bb5@11 ~ eb5@2 eb5 ~",
  AE: "eb5 ~ eb5@2 ~ eb5 ~ eb5 ~ eb5@2 eb5 ~ eb5 ~ db6", AF: "d6@2 ~ c6@2 ~ eb5@2 ~@2 d6@2 ~@2 c6@2",
  AG: "~@2 eb5@2 ~ d5@2 ~ db5@2 c5@3 ~ c6@2",
  AH: "[~ 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",
  AI: "[~ g5@3 ~ ab5@2 ~ g5@2 f5@2 ~ eb5@16 ~@2 f5]/2", AJ: "[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@8 L W AG
  AC H Q AY@3 AZ BA@5 BB@7 BC@8 J B BD Q ~ BE J BF BG@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]@14 ~@2 [b3,f4,ab4,eb5]@14 ~@2 [f3,bb3,d4,g4]@14 ~@2 [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 ~, bb4, ~@3 bb4@5, ~@96 eb4@21 ~@3 eb4@7 ~, ~@122 ab4@5 ~]/8", // Cm Fm7b5 Gm7 Cm Gm7b5 Ebsus4 Fm
  AY: "[~@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
  AZ: "[bb3,d4,f4]@7 ~, bb4", // Bb
  BA: "[[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
  BB: "[~@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 …
  BC: "[[c4,g4,eb5]@14 ~@2 [g3,db4,eb4,a4]@14 ~@2 [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, bb4, ~ bb4@3, ~@48 c4@4 a4@4 ~@58 f4@7 ~ [b3,ab4] ~@5, ~@50 gb4@7 ~ [c4,a4] ~@53 b3@4 ab4@4 ~@8]/8", // Cm Eb7 Cm Gbmaj7 Gm7 Ebsus4 Fm7 F7 …
  BD: "[a3,f4,gb4,db5]@7 ~", BE: "~@10 eb4@5 ~, eb6@15 ~, ~@2 bb5@13 ~, ~@4 g5@11 ~, ~@6 c5@9 ~",
  BF: "[c4,g4,eb5]@7 ~, bb4", // Cm
  BG: "[[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({
  A: "x ~@2 x!2 ~@2 x", B: "x",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct(`<
  A B C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D
  C D C D C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C D C D C D C D C ~ C D C D C D C
  D C D C D C D C D C D C D C D C D C D C D C D C ~ C ~
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x ~@2 x ~@2 x ~", D: "~@2 x ~@2 x ~@2",
})).gain(0.4)

// … 97 more lines