Strudelify

Fire Emblem Thee Houses: Tearing Through Heaven (Rain) (WIP)

FE_Scores

KeyC♭ majorTempo172 bpm
0:00/0:00
// Fire Emblem Thee Houses: Tearing Through Heaven (Rain) (WIP) — FE_Scores
// 172 bpm, 4/4, key Cb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "Flute" named as a pipe, played on flute (its acoustic bass patch is not one); ch 11 "B♭ Clarinet" named as a reed, played on clarinet (its violin patch is not one); ch 1 "B♭ Trumpet" named as a brass, played on trumpet (its cello patch is not one); ch 3 "Horn in F" named as a brass, played on brass section (its tremolo strings patch is not one); ch 4 "Trombone" named as a brass, played on trombone (its contrabass patch is not one); ch 6 "Piano" named as a piano, played on piano (its tremolo strings patch is not one); ch 7 "Violin" named as a string part, played on violin (its electric bass finger patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5870262; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172/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.

// other · flute
const flute = note(`<
  ~@37 A B C D E F G H A B C D E F G H ~@9 I J@2 K L M N K L M O P Q R S T U V W ~ X Y@2 ~@3 Z ~ X Y@2 ~@13 AA@2 AB AC@4
  AD@4
>`.pickRestart({
  A: "~ eb5 bb5 eb5 ab5 bb5 eb5 eb6", B: "eb5 ab5 bb5 eb5 db6 eb5 ab5 bb5", C: "~ eb5 bb5 eb5 ab5 bb5 eb5 db6",
  D: "eb5 f5 ab5 f5 db6 f5 gb5 ab5", E: "~ b4 ab5 b4 gb5 ab5 b4 b5", F: "b4 eb5 gb5 ab5 b5 b4 eb5 gb5",
  G: "~ b4 ab5 b4 gb5 ab5 b5 bb5", H: "bb4 eb5 ab5 eb5 db6 eb5 g5 bb5", I: "~@7 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5",
  J: "ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5", K: "~@2 e5@3 ab5 db6 ab5",
  L: "eb5 gb5 b5 gb5 eb5 gb5 b5 gb5", M: "f4 ab4 db5 f4 ab4 db5 f4 ab4", N: "db5 f4 ab4 db5 f4 db5 ~@2",
  O: "db5 f4 ab4 db5 f4 db5 b4 db5", P: "~@2 db6 gb5 b5 db6 gb5 ab5", Q: "gb5 ab5 db6 gb5 ab5 db6 gb5 ab5",
  R: "gb5 ab5 gb5 b5 db6 gb5 b5 db6", S: "gb5 a5 db6 a5 gb5 a5 db6 a5", T: "d5 a5 d6 d5 a5 d6 d5 a5",
  U: "c5 g5 c6 c5 g5 c5 g5 c6", V: "db6 e5 gb5 e5 gb5 e5 db6 e5", W: "gb5 db6 b5 db5 gb5 db6 bb5 gb5",
  X: "~@8 db5 d5 e5 ~ a4 b4 db5 ~", Y: "[~@8 d5@2 e5@2 d5@2 b4@17 ~]/2",
  Z: "bb4 b4 db5 ~ gb4 ab4 bb4 ~ bb4 b4 db5 ~ gb4 ab4 bb4 ~", AA: "[~@8 gb5@2 d5@2 e5@2 f5@11 ~ e5@2 d5@2 c5@2]/2",
  AB: "d5@9 ~ c5@2 bb4@2 a4@2", AC: "[g4@4 a4@2 f4@4 d4@4 g4@4 c5@4 a4@4 bb4@2 d5@2 f5@4 d5@4 g5@23 ~ f5@2]/4",
  AD: "[e5@4 f5@2 c6@55 ~@3]/4",
})).s("gm_flute").gain(0.3)

// other · flute · soft notes
const flute_soft = note(`<
  ~@61
  [ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5]
  [ab5 gb5 db5 eb5 ab5 gb5 db5 ~@9]
  ~@54
>`).s("gm_flute").gain(0.2)

// chords · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B A C A B A C D@2 E@3 F G H I H I J K F G H I H I J L M N O@2 A B A C P Q R S T U V W X Y Z AA AB AC AD AE M N O@2 A
  B A C M AF AG@2 AH@4 AI@4 AJ@4 AK@2 AL AM ~ AN AO@2 AP AQ AP AR ~ AN AS@2 AT AU AT@2 AV AW AX AY AX AZ AX AY AX BA@2
  BB BC@3 BD BE@4
>`.pickRestart({
  A: "~ eb4 gb4 eb4 gb4 eb4 ~ eb4", B: "f4 eb4 f4 eb4 ~ eb4 f4 ~", C: "f4 eb4 f4 eb4 ~ db5 ab4 eb4", D: "eb4/2",
  E: "[gb4@17 ~@7]/3", F: "b3 ~ b3 ~@2 b3 ~ bb3", G: "~@2 bb3 ~@2 bb3 ~@2", H: "db4 ~ db4 ~@2 db4 ~ b3",
  I: "~@2 b3 ~@2 b3 ~@2", J: "b3 ~ b3 ~@2 b3 ~ db4", K: "~@4 db4@2 ~@4 g3 ~ bb3 ~ db4 ~", L: "~@2 db4 ~@5", M: "bb4 b4",
  N: "bb4", O: "bb4/2", P: "[ab4,b4] ~ [ab4,b4] ~@2 [ab4,b4] ~ [ab4,bb4]", Q: "~@2 [ab4,bb4] ~@2 [ab4,bb4] ~@2",
  R: "[b4,db5] ~ [b4,db5] eb4 e4 [gb4,ab4] ~ [f4,ab4]", // Bsus2 Gbsus2 Fm
  S: "~@2 [db4,f4]@2 ab4@2 [db4,f4] ~ [ab4,db5]@2 [db4,f4] ~ ab4 ~ [db4,f4] ~", // Db Db5 Db
  T: "[b4,db5] ~ [b4,db5] ~@2 [b4,db5] ~ [ab4,b4]", U: "~@2 [ab4,b4] ~@2 [ab4,b4] ~@2",
  V: "[ab4,b4] ~ [ab4,b4] ~@2 [ab4,b4] ~ [bb4,db5]", W: "~ [bb3,eb4] [eb4,ab4] ~ bb4 eb4 g4 bb4, ~@10 bb3 ~ db4 ~ g4 ~",
  X: "[ab4,b4,eb5] eb4 [ab4,bb4,b4] eb4 ab4 [ab4,bb4,b4] eb4 [ab4,bb4,eb5]", // Abm Absus2
  Y: "eb4 ab4 [ab4,bb4] eb4 db5 [eb4,ab4,bb4] ab4 bb4", // Absus2 Ebsus4
  Z: "[b4,db5] eb4 [bb4,b4,db5] eb4 ab4 [ab4,bb4,b4] eb4 [ab4,b4,db5]", // Bsus2 Bbm Abm Db7
  AA: "eb4@2 [db4,f4,db5]@2 [f4,ab4,b4]@2 [f4,ab4]@2 db5@2 f4@2 [eb4,f4] ~ ab4@2, ~@10 db4 ~ gb4@2 db4 ~", // Db Fdim Fm Ebsus2
  AB: "[b4,db5] b3 [ab4,b4,db5] b3 gb4 [ab4,b4,db5] b3 [ab4,b4]", AC: "b3 eb4 [gb4,ab4,b4] ab4 b4 [b3,ab4,b4] eb4 gb4",
  AD: "[ab4,b4] b3 [ab4,b4] b3 gb4 [ab4,b4] b4 [bb4,db5]", // Abm Bbm
  AE: "bb3 [eb4,ab4] [ab4,bb4] eb4 [bb4,db5] eb4 g4 bb4, ~@10 g4 ~ bb4 ~ eb5 ~", AF: "~@14 db4 eb4, bb4",
  AG: "[ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4 ab4 gb4 db4 eb4, bb4]/2",
  AH: "[~@2 [e5,ab5]@3 [b4,gb5] [a4,e5] eb4 eb4 gb4 b4 gb4 [eb4,b4] [gb4,db5] [b4,eb5] gb4 f4 ab4 db5 f4 ab4 db5 f4 ab4 db5 f4 ab4 db5 [f4,ab4] [bb4,db5] b4 db5, ~@7 eb5@5 ~@3 ab4@2 ~@2 gb4@4 f4@2 ~@7]/4", // E B5 A5 Abm Gb5 B Fm Bbm
  AI: "[~@2 [e5,ab5]@3 [b4,gb5] [a4,e5] eb4 eb4 gb4 b4 gb4 [eb4,b4] [gb4,db5] [b4,eb5] gb4 f4 ab4 db5 f4 ab4 db5 f4 ab4 db5 f4 ab4 db5 f4 db5 [b4,gb5] [db5,ab5], ~@7 eb5@5 ~@3 ab4@2 ~@2 gb4@4 f4@2 ~@7]/4", // E B5 A5 Abm Gb5 B B5 Db5
  AJ: "[~@2 [db5,db6]@3 [b4,b5] [a4,a5] b4 gb4 ab4 db5 gb4 [ab4,e5] [db5,gb5] [gb4,ab5] ab4 gb4 ab4 gb4 b4 db5 [gb4,db5] [b4,gb5] db5 gb4 a4 [db5,a5] a4 gb4 a4 db5 a4, ~@7 e5@5 ~@3 db5@5 ~@3 gb5@3 ~ ab5@3 gb5@2]/4", // Db B A Dbm Gb5 Gbsus2 Gb5 B5 …
  AK: "[d4 a4 [d5,gb5] d4 a4 d5 d4 a4 c4 g4 c5 c4 g4 c4 g4 [c5,e5], d5@2 ~ d5@2 ~ c5@4 ~@2 b4@3 ~]/2", // D C
  AL: "~ e4 gb4 e4 gb4 e4 db5 e4, db5@3 ~", AM: "gb4 db5 b4 db4 gb4 db5 bb4 gb4", AN: "~@8 db5 d5 e5 ~ a4 b4 db5 ~",
  AO: "[~@4 gb5 e5 d5 e5@9]/2", AP: "b4 e4 gb4 g4 b4 e4 gb4 g4", AQ: "a4 d4 e4 gb4 a4 d4 e4 gb4",
  AR: "bb4 b4 db5 ~ gb4 ab4 bb4 ~ bb4 b4 db5 ~ gb4 ab4 bb4 ~",
  AS: "[~@4 gb5 e5 d5 b4@2 d5 e5 a5 b5 gb5 e5 d5, ~@7 e5@3 ~@6]/2", AT: "b4 g4 gb4 e4 b4 g4 gb4 e4",
  AU: "a4 gb4 e4 d4 a4 gb4 e4 d4", AV: "e4 g4 d5 g4 e4 g4 d5 g4", AW: "e4 g4 db5 g4 e4 g4 db5 g4", AX: "~@2 gb4 ~@4 e4",
  AY: "~@3 d4 ~@2 c4 ~", AZ: "~@3 d4 ~@2 b3 ~", BA: "[~@3 d4 gb4 d4 [b3,e4] ~@3 a4 ~@2 e4 d4 [c4,g4], ~@7 f4@6 ~@3]/2",
  BB: "~@3 f4 ~ c4 [bb3,eb4] a3, d4@5 ~@3", // Eb5
  BC: "[g3@2 [a3,f4] f3@2 d3@2 g3@2 c4@2 a3@2 bb3 [d4,eb4] f4@2 ~ a4 g4@4 g4, ~@7 f4 ~@3 d4 ~@5 d4@2 ~@5]/3", // Dm Ebmaj7
  BD: "~@3 f4 ~@2 eb4 f4", BE: "[e4@2 [f4,a4] ~@4 g4 ~@3 f4 ~@2 [f4,c5]@18, ~@3 c5@11 ~@18]/4",
})).s("gm_clarinet").gain(0.3)

// chords · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B@2 C A B@2 C D@2 E@3 F@2 G@2 H@4 F@2 G@2 I@4 J@2 K@2 A B@2 C ~@16 J@2 K@2 A B@2 C J@2 K@2 L M N O L M N P L Q R S T
  U V W X Y@2 Z@3 AA AB X Y@2 AC@4 AD AE@5 AF@5 ~@10
>`.pickRestart({
  A: "ab2 ~@2 ab2", B: "[~@4 ab2@2 ~ ab2@3 ~@4 ab2@2]/2", C: "~@2 ab2 ~", D: "b3/2", E: "[db4@17 ~@7]/3",
  F: "[gb3 ~ b4@3 [gb3,db5] eb5 gb3 ~@2 gb3 ~@2 gb3 eb5@2, ~@2 gb3 ~@4 bb5@4 ab5@3 ~@2]/2", // Gb5
  G: "[db5@2 [ab3,eb5] ~@2 ab3 ~ f3 ~@2 f3 ~ ab4 [f3,bb4] b4@2, ab3 ~@2 ab4@9 ~@4]/2", // Ab5 Bb5
  H: "[db5@4 [a3,eb5]@2 ~@4 a3@2 ab5@2 gb5@6 [ab3,eb5]@2 ~@4 ab3@2 b4@2 ~@2 f3@2 ~@2 f3@2 ab4@2 ~@2 f3@2 b4@2 g3@2 ~@4 g3@2 ~@4 eb3 ~ g3 ~ bb3 ~, a3 ~@2 ab4@3 ~ ab3 ~@3 db5@3 ~ db5@4 ~ ab4@2 ~ bb4@9]/4", // Adim Ab5
  I: "[db5@4 [a3,eb5]@2 ~@4 a3@2 ab5@2 gb5@6 [ab3,eb5]@2 ~@4 ab3@2 b4@2 ~@2 f3@2 ~@2 f3@2 ab4@2 ab4@2 [f3,bb4]@2 b4@2 g3@2 ~@4 g3@2 ~@4 eb3 ~ g3 ~ bb3 ~, a3 ~@2 ab4@3 ~ ab3 ~@3 db5@3 ~ db5@4 ~@4 eb5@9]/4", // Adim Ab5 Bb5
  J: "e2/2", K: "gb2/2", L: "~@2 db4@3 b3 a3 b3", M: "eb3 gb3 b3 gb3 eb3 gb3 b3 gb3", N: "f3 ab3 db4 f3 ab3 db4 f3 ab3",
  O: "db4 f3 ab3 db4 f3 db4 ~@2", P: "db4 f3 ab3 db4 f3 db4 b3 db4", Q: "gb3 ab3 db4 gb3 ab3 db4 gb3 ab3",
  R: "gb3 ab3 gb3 b3 db4 gb3 b3 db4", S: "gb3 a3 db4 a3 gb3 a3 db4 a3", T: "d3 a3 d4 d3 a3 d4 d3 a3",
  U: "c3 g3 c4 c3 g3 c3 g3 c4", V: "db4 e3 gb3 e3 gb3 e3 db4 e3", W: "gb3 db4 b3 db3 gb3 db4 [bb3,gb5] [gb3,db6]",
  X: "gb3 a3 d4 a3 gb3 a3 d4 a3, d6@3 a5@3 gb5@2",
  Y: "[e3 a3 db4 a3 e3 a3 [db4,g5] a3 gb3 a3 d4 a3 gb3 a3 d4 a3, e5@2 a4@2 a5@2 ~ gb5@9]/2", // Dbdim
  Z: "[e3 ab3 d4 ab3 e3 [ab3,b4] [d4,db5] ab3 g3 b3 [d4,db5] b3 g3 [b3,a4] [d4,db5] b3 gb3 a3 [d4,e5] a3 gb3 [a3,d5] [d4,e5] [a3,gb5], ~@7 d5@3 ~ d5@2 ~@2 d5@3 ~ d5@2 ~@3]/3", // Abm Dmaj7 B7 Dmaj7 Dsus2 D5 Dsus2 D
  AA: "e3 g3 d4 g3 e3 [g3,gb5] [d4,e5] [g3,d5], g5 ~", // Gmaj7 Dsus2 G5
  AB: "gb3 bb3 db4 bb3 gb3 bb3 [db4,gb5] [bb3,db6], gb5@3 e5@3 ~@2", // Gb5 Bbm
  AC: "[e3 ab3 d4 ab3 e3 [ab3,b4] [d4,db5] ab3 g3 b3 [d4,db5] b3 g3 [b3,a4] [d4,db5] b3 gb3 a3 [d4,e5] a3 gb3 [a3,a4] [d4,db5] a3 [e3,d4] g3 d4 g3 [e3,d4] g3 d4 g3, ~@7 d5@3 ~ d5@2 ~@2 d5@3 ~ d5@2 ~@2 d5@3 d5@2 e5@2 gb5@2]/4", // Abm Dmaj7 B7 Dmaj7 Dsus2 A Dmaj7 E7
  AD: "[e3,d4] g3 d4 g3 [e3,d4] g3 d4 g3, g5 d5 a5 b5", // E7
  AE: "[[e3,db4] a3 db4 a3 [e3,db4] a3 db4 a3 [e3,db4] a3 db4 a3 [e3,db4] [a3,d5] [db4,e5] gb5@25, a5@12 ~@3 a3 ~@24]/5", // Dbm D5 Dbm
  AF: "[~@4 a4 d5 e5 gb5@29 ~@4]/5",
})).s("gm_trumpet").gain(0.3)

// other · brass section · "Horn in F"
const brass_section = note(`<
  ~@37 A@2 B@2 C@4 A@2 B@2 D@4 ~@12 E@4 F@4 ~@2 G@2 H@4 I J@2 K@3 L M I J@2 N@4 O P@5 Q@5 ~@10
>`.pickRestart({
  A: "[~@2 b3@3 db4 eb4 bb4@4 ab4@3 eb4@2]/2", B: "[db4@2 eb4 ab3@9 ab3 bb3 b3@2]/2",
  C: "[db4@2 eb4 ab3@3 ab4 gb4@3 eb4 db4@3 b3 db4@4 ab3 ab3@2 b3 bb3@9]/4",
  D: "[db4@2 eb4 ab3@3 ab4 gb4@3 eb4 db4@3 b3 db4@4 ab3!2 bb3 b3 eb4@9]/4", E: "[~@2 e4@3 eb4 db4 eb4@8 db4@15 ~@2]/4",
  F: "[~@2 e4@3 eb4 db4 eb4@8 [ab3,db4]@4 [gb3,db4]@4 [f3,db4]@5 ~ [db3,db4] [gb3,gb4] [ab3,ab4]]/4", // Db5 Gb5 Db Gb Ab
  G: "[~@5 db4 gb4 ab4@3 a4 ab4@3 gb4@2]/2", H: "[e4@2 gb4 d4@9 b3@3 e4@15 gb4 db5]/4", I: "d5@3 a4@3 gb4@2",
  J: "[e4@2 a3@2 a4@2 g4 gb4@9]/2", K: "[~@5 b3 db4 d4@3 db4 d4@2 a3 db4 d4@3 e4 d4@2 d4 e4 gb4]/3",
  L: "g4@4 ~ gb4 e4 d4", M: "gb4@3 e4@3 gb4 db5",
  N: "[~@5 b3 db4 d4@3 db4 d4@2 a3 db4 d4@3 e4 d4@2 a3 db4 d4@3 d4@2 e4@2 gb4@2]/4", O: "g4 d4 a4 b4",
  P: "[a4@12 ~ d4 e4 gb4@25]/5", Q: "[~@4 a3 d4 e4 gb4@29 ~@4]/5",
})).s("gm_brass_section").gain(0.45)

// bass · trombone
const bass = note(`<
  A B@2 C A B@2 C D@2 E@3 F G H I J K L M F G H I J K L M D@2 N@2 A B@2 C O G H I J K L M F G H I J K L M D@2 N@2 A B@2
  C D@2 N@2 P@2 Q@2 P@2 R@2 S@2 T@2 U@2 V@2 W X Y Z AA AB Z AB W X Y Z AA AB Z@2 AC@2 AD AE AD AE AD AE AD AE AF AG AF
  AG AF AG AF AH@3
>`.pickRestart({
  A: "ab1 ~@2 ab1", B: "[~@4 ab1@2 ~ ab1@3 ~@4 ab1@2]/2", C: "~@2 ab1 ~", D: "e1/2", E: "[gb1@17 ~@7]/3",
  F: "ab1@3 ~@3 eb2@3 ~@3 ab1@2 gb1@2", G: "~@6 eb2@3 ~ gb1@3 ~@3", H: "e1@3 ~@3 db2@3 ~@3 e1@2 db1@2",
  I: "~@6 db2@3 ~ db1@3 ~@3", J: "a1@3 ~@3 e2@3 ~@3 a1@2 ab1@2", K: "~@6 eb2@3 ~ ab1@3 ~@3",
  L: "f1@3 ~@3 db2@3 ~@3 f1@2 eb1@2", M: "~@6 bb1@3 ~ eb1@3 ~@3", N: "gb1/2", O: "ab1@3 ~@3 eb2@2 ~@6 gb1@2",
  P: "[~@2 [a1,a2]@3 [ab1,ab2] [gb1,gb2] [ab1,ab2]@9]/2", Q: "[db1,db3]/2",
  R: "[[bb1,bb2]@12 ~ [db2,db3] [gb2,gb3] [ab2,ab3]]/2", S: "[~@2 d2@3 db2 b1 db2@9]/2", T: "[eb2@7 d2@9]/2",
  U: "[g1@3 c2@5]/2", V: "[db2@3 gb1@5]/2", W: "b1 ~ b1 ~ b1 ~ b1 ~", X: "db2 ~ db2 ~ db2 ~ db2 ~",
  Y: "d2 ~ d2 ~ d2 ~ d2 ~", Z: "e1 ~ e1 ~ e1 ~ e1 ~", AA: "g1 ~ g1 ~ g1 ~ g1 ~", AB: "gb1 ~ gb1 ~ gb1 ~ gb1 ~",
  AC: "a1 ~ a1 ~ a1 ~ a1 ~", AD: "~ gb2 ~@4 e2 ~", AE: "~@2 d2 ~ c1 ~ c2 ~", AF: "~ a2 ~@4 g2 ~",
  AG: "~@2 f2 ~ eb1 ~ eb2 ~", AH: "[~@2 f2 ~ eb1 ~ eb2@18]/3",
})).s("gm_trombone").gain(0.3)

// chords · piano
const piano = note(`<
  A B@2 C A B@2 C ~@5 D E F G H I J K D E F G H I J L M@4 A B@2 C N O P Q R S T U N O P Q R S T U V W@2 X A B@2 C Y@2
  Z@2 ~@41 AA@2 AB AC@4 AD@4
>`.pickRestart({
  A: "~ eb3 [ab3,b3] eb3 [ab3,b3] [eb2,eb3] ~ eb3, [ab1,ab2] ~@2 [ab1,ab2]", // Abm Eb Ab
  B: "[[ab3,db4] eb3 [ab3,db4] [eb2,eb3] ~ eb3 [ab3,db4] ~@2 eb3 [ab3,b3] eb3 [ab3,b3] [eb2,eb3] ~ eb3, ~@4 [ab1,ab2]@2 ~ [ab1,ab2]@3 ~@4 [ab1,ab2]@2]/2", // Db5 Eb Db5 Abm Eb Ab
  C: "[ab3,db4] eb3 [ab3,db4] [eb2,eb3] ~ db4 ab3 [eb2,eb3], ~@2 [ab1,ab2] ~", // Db5 Eb Ab
  D: "[ab1,ab2,gb3,ab3,b3,eb4]@3 ~ [gb3,ab3,b3,eb4]@2 [eb2,eb3]@3 ~ [gb3,ab3,b3,eb4]@2 [ab1,ab2]@2 [gb1,gb2,gb3,ab3,bb3,eb4]@2", // Abm7 Eb Abm7 Ab Ebm
  E: "~@4 [gb3,ab3,bb3,eb4]@2 [eb2,eb3]@3 ~ [gb1,gb2,gb3,ab3,bb3,eb4]@3 ~@3", // Ebm Eb Ebm
  F: "[e1,e2,ab3,b3,db4,eb4]@3 ~ [ab3,b3,db4,eb4]@2 [db2,db3]@3 ~ [ab3,b3,db4,eb4]@2 [e1,e2]@2 [db1,db2,f3,ab3,b3,db4]@2", // Emaj7 Abm Db Abm E Db7
  G: "~@4 [f3,ab3,b3,db4]@2 [db2,db3]@3 ~ [db1,db2,f3,ab3,b3,db4]@3 ~@3", // Db7 Db Db7
  H: "[a1,a2,a3,b3,db4,e4]@3 ~ [a3,b3,db4,e4]@2 [e2,e3]@3 ~ [a3,b3,db4,e4]@2 [a1,a2]@2 [ab1,ab2,ab3,bb3,b3,eb4]@2", // A E A Abm
  I: "~@4 [ab3,bb3,b3,eb4]@2 [eb2,eb3]@3 ~ [ab1,ab2,ab3,bb3,b3,eb4]@3 ~@3", // Abm Eb Abm
  J: "[f1,f2,f3,ab3,b3,db4]@3 ~ [f3,ab3,b3,db4]@2 [db2,db3]@3 ~ [f3,ab3,b3,db4]@2 [f1,f2]@2 [eb1,eb2,g3,bb3,db4,eb4]@2", // Db7 Db Db7 F Eb7
  K: "~@4 [g3,bb3,db4,eb4]@2 [bb1,bb2]@3 ~ [eb1,eb2]@2 [g3,bb3] ~ [bb3,db4] ~, ~@10 [eb3,g3] ~@5", // Eb7 Bb Eb Gm Bbm Eb
  L: "~@4 [g3,bb3,db4,eb4]@2 [bb1,bb2]@3 ~ [eb1,eb2]@2 g3 ~ bb3 ~, ~@10 eb3 ~@5", // Eb7 Bb Eb
  M: "[bb4@4 ~ gb5 ab5 ~@6 ab6@2 ~@6 gb6@2 ~@2 bb5@2 gb5 gb5@4, ~ b4 db5 b4 bb4 b4 db5 ~, ~@7 db6@2 ~@2 gb6@2 ~@2 db7@2 ~@2 bb6@2 ~@2 db6@2 ~@7]/4",
  N: "~ eb5 bb5 eb5 ab5 bb5 eb5 eb6", O: "eb5 ab5 bb5 eb5 db6 eb5 ab5 bb5", P: "~ eb5 bb5 eb5 ab5 bb5 eb5 db6",
  Q: "eb5 f5 ab5 f5 db6 f5 gb5 ab5", R: "~ b4 ab5 b4 gb5 ab5 b4 b5", S: "b4 eb5 gb5 ab5 b5 b4 eb5 gb5",
  T: "~ b4 ab5 b4 gb5 ab5 b5 bb5", U: "bb4 eb5 ab5 eb5 db6 eb5 g5 bb5", V: "bb4 b4",
  W: "[~@5 gb5@2 ~@6 ab5@2 ~, db5 b4 bb4 b4, ~@3 db6@2 ~@2 ab5@2 ~@2 gb5@2 ~@3]/2", X: "db5 gb5",
  Y: "[ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5, [e1,b1,e2]@15 ~]/2", // E5
  Z: "[ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5 ab5 gb5 db5 eb5, [gb1,db2,gb2]@15 ~]/2", // Gb5
  AA: "[~@8 [gb4,gb5]@2 [d4,d5]@2 [e4,e5]@2 [f4,f5]@11 ~ [e4,e5]@2 [d4,d5]@2 [c4,c5]@2]/2", // Gb D E F E D C
  AB: "[d4,d5]@9 ~ [c4,c5]@2 [bb3,bb4]@2 [a3,a4]@2", // D C Bb A
  AC: "[[g3,g4]@4 [a3,a4]@2 [f3,f4]@4 [d3,d4]@4 [g3,g4]@4 [c4,c5]@4 [a3,a4]@4 [bb3,bb4]@2 [d4,d5]@2 [f4,f5]@4 [d4,d5]@4 [g4,g5]@23 ~ [f4,f5]@2]/4", // G A F D G C A Bb …
  AD: "[[e4,e5]@4 [f4,f5]@2 c5@21 ~ c5@34 ~@2, ~@6 c6@55 ~@3]/4", // E F
})).s("gm_piano").gain(0.25)

// chords · violin
const violin = note(`<
  A B@2 C A B@2 D E@2 F@3 G H I J K L M N G H I J K L M O E@2 P@2 A B@2 C Q R S T U V W X Y Z AA AB U V W AC E@2 P@2 A
  B@2 D E@2 P@2 AD@4 AE@4 AF@4 AG@4 AH AI AJ AK AL AM AN AO AH AI AP@2 AQ AR AS@2 AT AU AV AW AV AX AY AZ AY BA BB BC BD
  BE BD BC BD BF@3
>`.pickRestart({
  A: "~ eb4 b4 eb4 b4 ~@2 eb4, ab1 ~@2 ab1",
  B: "[db5 eb4 db5 ~@2 eb4 db5 ~@2 eb4 b4 eb4 b4 ~@2 eb4, ~@4 ab1@2 ~ ab1@3 ~@4 ab1@2]/2",
  C: "db5 eb4 db5 ~@2 db5 ab4 ~, ~@2 ab1 ~", D: "db5 eb4 db5 ~@2 db5 ab4 eb4, ~@2 ab1 ~", E: "[bb4 b4 db5 b4, e1]/2",
  F: "[bb4@4 b4@4 db5@4 [db5,gb5]@5 ~@7, gb1@17 ~@7]/3", G: "[ab1,eb4]@3 ~ eb4@2 eb2@3 ~ eb4@2 ab1@2 [gb1,eb4]@2",
  H: "~@4 eb4@2 eb2@3 ~ [gb1,eb4]@3 ~@3", I: "[e1,eb4]@3 ~ eb4@2 db2@3 ~ eb4@2 e2@2 [db2,db4]@2",
  J: "~@4 db4@2 db2@3 ~ [db2,db4]@3 ~@3", K: "[a1,e4]@3 ~ e4@2 e2@3 ~ e4@2 a1@2 [ab1,eb4]@2",
  L: "~@4 eb4@2 eb2@3 ~ [ab1,eb4]@3 ~@3", M: "[f1,db4]@3 ~ db4@2 db2@3 ~ db4@2 f2@2 [eb2,eb4]@2",
  N: "~@4 eb4@2 bb1@3 ~ eb2@2 bb3 ~ db4 ~, ~@10 g3 ~@5", O: "~@4 eb4@2 bb1@3 ~ eb2@3 ~@3",
  P: "[bb4 b4 db5 [db5,gb5], gb1]/2", Q: "[ab1,eb5]@3 ~ eb5@2 eb2@2 ~@2 eb5@2 ~@2 [gb1,eb5]@2",
  R: "~@4 eb5@2 eb2@2 ~@2 [gb1,eb5]@3 ~@3", S: "[e1,eb5]@3 ~ eb5@2 [db2,eb4]@2 e4@2 b4@2 e2@2 [db2,db5]@2",
  T: "~@2 f4@2 ab4@2 db2@2 db5@2 db2@2 ab4 ~ f4 ~, ~@6 f4 ~@3 f4 ~@5",
  U: "[a1,e5]@3 ~ e5@2 e2@3 ~ e5@2 a1@2 [ab1,eb5]@2", V: "~@4 eb5@2 eb2@3 ~ [ab1,eb5]@3 ~@3",
  W: "[f1,db5]@3 ~ db5@2 db2@3 ~ db5@2 f2@2 [eb2,eb5]@2", // Db Eb
  X: "~@2 eb4@2 ab4@2 bb1@2 bb4@2 eb2@2 g4 ~ bb4 ~, ~@10 eb4 ~@5",
  Y: "[ab1,eb5]@3 ~ eb5@2 eb2@3 ~ eb5@2 ab1@2 [gb1,eb5]@2", Z: "~@4 eb5@2 eb2@3 ~ [gb1,eb5]@3 ~@3",
  AA: "[e1,eb5]@3 ~ eb5@2 db2@3 ~ db5@2 e1@2 [db2,db5]@2", // Emaj7 Db
  AB: "~@2 db5@2 b4@2 [db2,ab4]@3 ~ db2@2 f4 ~ db4 ~, ~@10 f4 ~@5", // Db5
  AC: "~@2 ab4@2 bb4@2 bb1@2 bb4@2 eb2@2 bb4 ~ eb5 ~, ~@10 g4 ~@5",
  AD: "[~@2 [a1,ab5]@3 [ab1,gb5] [gb1,e5] eb5@5 b4 db5 eb5 ~@13 ab4 bb4 b4 db5, ~@7 ab1@9 db2@16, ~@15 db5@13 ~@4]/4", // Amaj7 Ab7 Gb7
  AE: "[~@2 [a1,ab5]@3 [ab1,gb5] [gb1,e5] eb5@5 b4 db5 eb5 ~ bb1@12 ~ [db2,db5] [gb2,gb5] [ab2,ab5], ~@7 ab1@9 ~@16, ~@15 db5@13 ~@4]/4", // Amaj7 Ab7 Gb7 Db Gb Ab
  AF: "[~@2 [d2,db6]@3 [db2,b5] [b1,a5] ab5@5 e5 gb5 ab5 ~@6 db5 gb5 ab5@3 a5 ab5@3 gb5@2, ~@7 db2@9 eb2@7 d2@9, ~@15 gb5@5 ~@12]/4", // Dmaj7 Db7 B7
  AG: "[e5@2 gb5 ~@9 b4@3 ~ db2@6 gb1@10, g1@3 c2@5 ~@8, ~@3 d5@9 ~@3 e5@15 ~@2]/4", AH: "b1 ~ b1 ~ b1 ~ b1 ~",
  AI: "db2@2 ~@2 db2@2 ~@2 db5 d5 e5 ~ a4 b4 db5 ~, ~@4 db2 ~ db2 ~", AJ: "d2 ~ d2 ~ d2 ~ d2 ~",
  AK: "e2 ~ e2 ~ e2 ~ e2 ~", AL: "[g2,b4] e4 [g2,gb4] g4 [g2,b4] e4 [g2,gb4] g4",
  AM: "[gb2,a4] d4 [gb2,e4] gb4 [gb2,a4] d4 [gb2,e4] gb4", AN: "[e2,b4] e4 [e2,gb4] g4 [e2,b4] e4 [e2,gb4] g4",
  AO: "bb4 b4 db5 ~ gb4 ab4 bb4 ~ bb4 b4 db5 ~ gb4 ab4 bb4 ~, gb2 ~ gb2 ~ gb2 ~ gb2 ~",
  AP: "[d2 ~ d2 ~ d2 ~ d2 ~ e2 gb5 [e2,b5] d6 [e2,e6] a5 [e2,g5] gb5, ~@7 e5@2 ~@7]/2", // E5 E Em
  AQ: "[g2,b4] g4 [g2,gb4] e4 [g2,b4] g4 [g2,gb4] e4", AR: "[gb2,a4] gb4 [gb2,e4] d4 [gb2,a4] gb4 [gb2,e4] d4",
  AS: "[e2,b4] g4 [e2,gb4] e4 [e2,b4] g4 [e2,gb4] e4", AT: "[a2,e4] g4 [a2,d5] g4 [a2,e4] g4 [a2,d5] g4",
  AU: "[a2,e4] g4 [a2,db5] g4 [a2,e4] g4 [a2,db5] g4", AV: "~ gb2 a4 ~@3 e2 g4", AW: "~@2 d2 gb4 c2 ~ [c2,e4] ~",
  AX: "~@2 d2 gb4 c2 ~ [c2,c4] ~", AY: "~ gb1 a4 ~@3 e1 g4", AZ: "~@2 d1 gb4 c2 ~ [c1,e4] ~",
// … 58 more lines