Strudelify

Canzone libera

Morandi

KeyE♭ majorTempo95 bpm
0:00/0:00
// Canzone libera — Morandi
// 95 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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 · electric bass finger
const bass = note(`<
  A B A B C@2 D E@2 A F G F H I C D J@2 K L A M B N B I C O P@2 K Q R S C T U V W X Y Z AA AB AC B C N G N AD M G N H I
  AE AF AG@2 K Q R S C T U V W X Y Z AA AB AC B C AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB C AR BC
  BD BC BE BF@3
>`.pickRestart({
  A: "eb1", B: "ab1", C: "bb1", D: "c2@11 ~ c2@2 bb1@2", E: "[ab1@3 bb1@4 eb2@8 bb1]/2", F: "eb2", G: "ab1@6 ab1 bb1",
  H: "ab1@6 c2 ab1", I: "bb1@7 f1", J: "[ab1@3 bb1@4 eb1@7 f1 g1]/2", K: "ab1@3 bb1@5", L: "eb1@6 eb1 bb1",
  M: "eb1@6 f1 g1", N: "eb1@6 f1 eb1", O: "c2@7 g1", P: "[ab1@3 bb1@4 eb2@7 eb2 eb1]/2", Q: "eb1 eb1@2 eb2@4 bb1",
  R: "eb1 eb2", S: "ab1@9 ~ ab1@2 c2@2 ab1@2", T: "eb1@11 ~ eb1@2 f1@2", U: "g1@2 g1!2", V: "ab1@11 ~ ab1@2 c2@2",
  W: "bb1@7 bb1", X: "c2@5 eb2 g2!2", Y: "eb3 d3 c3 g2 eb2 d2 c2 bb1", Z: "ab1@9 ~ ab1@2 bb1@2 ab1@2", AA: "g1",
  AB: "c1@5 g1 c2 g1", AC: "bb1 bb1@3", AD: "ab1 bb1 c2 ab1@5", AE: "bb1@6 bb1 g1", AF: "c2@6 bb1 g1",
  AG: "[ab1@3 bb1@4 eb1@7 eb2 eb1]/2", AH: "ab1@9 ~ ab2@2 ab2@2 ab2@2", AI: "ab2@3 ~ ab2@6 eb2@2 bb2@2 eb2@2",
  AJ: "ab1@6 ab2@2 ab2@2 ab2@2 ab2 ~ ab2@2", AK: "ab2!2 ab2@3 ab2!2 g2", AL: "f2@10 f2@2 f2 ~ f2@2",
  AM: "g2@3 ~ g2@7 ~ f2@2 g2@2", AN: "ab2@4 ab1!4", AO: "bb1@2 bb1 bb1@2 bb1!3",
  AP: "c3@2 c3@2 bb2@2 g2@2 c2@2 g2@2 c2 ~ g1@2", AQ: "bb1@9 ~ bb1@2 d2@2 bb1@2", AR: "c2", AS: "f1@11 ~ f1@2 g1@2",
  AT: "a1@2 a1!2", AU: "bb1@11 ~ bb1@2 d2@2", AV: "c2@7 c2", AW: "d2@5 f2 a2!2", AX: "f3 e3 d3 a2 f2 e2 d2 c2",
  AY: "bb1@9 ~ bb1@2 c2@2 bb1@2", AZ: "a1", BA: "d1@5 a1 d2 a1", BB: "c2 c2@3", BC: "f1@6 g1 f1", BD: "bb1@6 bb1 c2",
  BE: "bb1@3 bb1@5", BF: "f1/3",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@22 A B C D E@3 F@2 G@2 H I J K@2 L J M@2 N O P Q R S ~@2 T@3 U V@5 W@2 G@2 H I J K@2 L J M@2 N O P Q R S X Y Z AA AB
  AC AD AE@2 AF AG AH@2 AI AG AJ@2 AK AL AM AN AO AP AQ AR@2 AS AT@3
>`.pickRestart({
  A: "~@3 bb3@5, ~@4 eb4@11 ~", B: "c4@7 ~", C: "~@7 bb3, ~ eb4@2 eb4, ~@3 bb3@4 ~", D: "[c4,ab4]@7 ~",
  E: "[~@7 bb3@4 bb3@4 ~ [eb4,g4]@4 eb4 ~@2 g3, ~@6 c4@8 ~@17 bb3@8 ~@5 bb3@4, ~@10 d4@17 ~@15 d4@4 ~@2]/3", // Eb
  F: "[c4 ab3 [c4,eb4] [bb3,d4]@4 [bb3,eb4]@5 eb4 ~ bb3 g3, ~@6 bb3 ~, ~@26 d4@5 ~]/2", // Cm Bb Eb5
  G: "[[ab3,c4]@3 bb3@6 ~@5 ab3 f3, ~@6 d4@9 ~@3 bb3@4 ab3@6 ~@4, ~@20 eb4@5 ~ eb4@6]/2", // Ab
  H: "~@2 eb4@4 eb4@4 eb4@5 ~, g3@3 ~", I: "[ab3,eb4]", J: "[bb3,d4]@15 ~",
  K: "[~@26 bb3@5 ~, eb4@6 eb4@10 f4@5 ~ eb4@9 ~, ~ bb3@2 ~@2 bb3@3 ~ bb3@4 ~@3, ~@4 g3@9 ~ g3@5 ~ g3@4 ~@8]/2",
  L: "bb3 ab3 bb3 c4@5", M: "[eb4@10 d4@4 ~@4 bb4@13 ~, ~@14 eb4@17 ~]/2", N: "[bb3,eb4]@15 ~",
  O: "~@3 f3, ~@2 g3@9 ~@5, ~@2 b3@3 b3@3, ~@3 d4@5", P: "[g3,c4,eb4]", Q: "[bb3,f4]@15 ~, g3@3 ~",
  R: "c4@3 ~ c4@11 ~, ab3", S: "[f3,bb3]",
  T: "[~@6 eb4@2 f4@2 ~@6 [c4,eb4]@2 [c4,eb4]@2 [c4,eb4] ~ [bb3,eb4]@8 ~@2 [bb3,eb4]@15 ~, ~@10 g4@8 ~@13 g3@14 ~@3]/3", // Cm Eb5
  U: "[c4,eb4]@9 ~ [c4,eb4]@6, ab3", // Cm
  V: "[~@6 bb3@15 ~ c4@4 ab3@4 bb3@7 ~@9 bb3@8 bb3@8 ~@2 [eb4,g4]@8 eb4@2 ~@4 g3@2, ~@4 eb4@16 ~@18 c4@8 ~@17 bb3@8 ~@5 bb3@4, ~@42 d4@17 ~@15 d4@4 ~@2]/5", // Eb
  W: "[c4 ab3 [c4,eb4] [bb3,d4]@4 [bb3,eb4]@2 ~@2 f3@2 g3@3, ~@9 eb4@6 ~, ~@20 bb3@11 ~]/2", // Cm Bb Eb5
  X: "~@2 ab3@3 ab3@2 eb4, eb4 ~@3, ~ c4@7", Y: "~@2 bb3 [f4,bb4]@2 [d4,f4]@3, f4 ~@3, ~ d4@2 ~@5",
  Z: "~@4 ab3@2 eb4@4 eb4@5 ~, eb4@2 ~ ab4@4 ~, ~ c4@2 ~@5", AA: "d4 ~@6 d4, ~ bb3@2 bb4@4 ~, ~@2 d4@3 f4@3",
  AB: "~@10 ab3@5 ~, f3@9 ~@7, ~@2 eb4@3 ~@3, ~@6 c4@9 ~", AC: "~@6 bb3@4 [d4,bb4]@5 ~, g3@3 ~@5, ~@4 d4@5 ~@7",
  AD: "~@10 eb4@5 ~, c4@2 eb4@3 ~@3, ~@2 ab3@4 c4@9 ~",
  AE: "[[ab3,eb4]@6 [ab3,eb4]@9 ~ [d4,f4]@6 [d4,f4]@9 ~, ~@15 bb3@16 ~]/2", AF: "[bb3,f4]", AG: "[c4,e4]@15 ~",
  AH: "[~@26 c4@5 ~, f4@6 f4@10 g4@5 ~ f4@9 ~, ~ c4@2 ~@2 c4@3 ~ c4@4 ~@3, ~@4 a3@9 ~ a3@5 ~ a3@4 ~@8]/2",
  AI: "c4 bb3 c4 d4@5", AJ: "[f4@10 e4@4 ~@4 c5@13 ~, ~@14 f4@17 ~]/2", AK: "[c4,f4]@15 ~",
  AL: "~@3 g3, ~@2 a3@9 ~@5, ~@2 db4@3 db4@3, ~@3 e4@5", AM: "[a3,d4,f4]", AN: "[c4,g4]@15 ~, a3@3 ~",
  AO: "d4@3 ~ d4@11 ~, bb3", AP: "[g3,c4]", AQ: "~ a3 ~@3 c4@3, ~@4 c4@5 ~@7, ~@6 f4@9 ~",
  AR: "[~@6 f4@9 ~ c4@4 f3 ~ f3 ~ f3 ~ f3 ~ f4@2 f3@2, ~@2 bb3@13 a3@4 ~@9 f3 ~@3, ~@4 c4@11 ~ f4@6 ~@10]/2",
  AS: "c4@5 ~ c4@4 ~@2 c4@3 ~, f4@9 ~ f4@6", AT: "[[f3,c4]@47 ~, f4@15 ~]/3",
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A@4 B@3 ~@9 C@8 D@3 E@3 ~@6 F@2 G H I@3 J@3 ~@2 K@6 D@3 E@3 ~@6 L@8 M N O P Q R S@2 T@3 U V W X Y@2 H Z AA@3 AB@3
  ~@5
>`.pickRestart({
  A: "[d4@35 ~ f4@4 eb4@6 d4@2 c4@8 [d4,f4]@8, ~@5 g4@2 ~]/4", B: "[~@4 eb5@13 ~@7, [eb4,bb4]@11 ~@5]/3",
  C: "[eb4@3 [d4,f4], bb4]/8", D: "[[bb3,g4]@16 [c4,ab4]@5 ~ [d4,f4]@8 [eb4,g4]@18, eb4@11 bb4@13]/3",
  E: "[[c4,eb4,ab4]@3 [d4,f4]@5 eb4@8 eb5@7 ~, ~@6 bb4@41 ~, ~ g4@2]/3", // Ab Dm
  F: "[~@11 d6@5, eb4@13 ~@3, bb3@21 ~@11, ~@3 bb5@5]/2", G: "[c5,c6]", H: "[d5,d6]",
  I: "[eb5@5 c6@2 bb5@2 g4@5 c5@10, g4@3 c6@5]/3", J: "[[bb4,bb5]@47 ~]/3", K: "[eb4@2 [d4,f4], bb4]/6",
  L: "[~@24 d6@10 [c5,c6]@16 [d5,d6]@15 ~ eb5@9 c6@4 bb5@4 ~ g4@10 c5@20 [bb4,bb5]@14, ~@2 eb4@26 ~@37 g4@18 ~@45, ~@2 bb3@21 ~@105, ~@7 bb5@10 ~@25 c6@15 ~@7]/8", // C D Bb
  M: "c5", N: "d5", O: "[c5,eb5]", P: "[d5,f5]", Q: "[eb5,ab5]", R: "[f5,bb5]", S: "[g5 ab5, c6]/2", T: "bb5/3",
  U: "a5", V: "g5", W: "~@2 bb5 a5, f5", X: "[e5,g5]", Y: "[f5@6 ~@5 e6@5, f4@13 ~@3, c4@21 ~@11, ~@3 c6@5]/2",
  Z: "[e5,e6]", AA: "[f5@5 d6@2 c6@2 a4@5 d5@10, a4@3 d6@5]/3", AB: "[[c5,c6]@43 ~@5]/3",
})).s("gm_string_ensemble_2").gain(0.39).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A@4 B@2 C D@3 ~@10 E@3 ~@9 F@2 G H@3 G I J@2 K L M@2 K N O@4 ~@10 F@2 G P@3 G I J@2 K L M@2 K N Q R Q R Q R S T U I
  V@3 I W X@2 Y Z AA@2 Y AB AC@4 ~@3
>`.pickRestart({
  A: "[[g3,bb3]@16 [ab3,c4]@16 [g3,bb3]@16 [ab3,c4]@15 ~, eb3@63 ~]/4", B: "[bb2,f3,d4]/2",
  C: "[c3,g3,eb4]@7 [bb2,f3,d4]", // Cm Bb
  D: "[[ab2,eb3,ab3]@6 [bb2,f3]@10 ~@4 bb3@2 ab3@10 g3@11 ~@5, ~@6 bb3@13 ~@29, ~@8 [bb2,eb3]@13 ~@3]/3", E: "eb2/3",
  F: "[~ eb4, eb3@31 ~]/2", G: "[c4,eb4,ab4]",
  H: "[[d4,f4]@16 [eb4,g4]@16 ~@11 db6@3 ~@2, bb4@47 ~, ~@2 [d4,f4], ~@41 eb6@6 ~]/3", I: "[d4,f4,bb4]",
  J: "[[eb4,g4]@13 ~@3]/2", K: "[ab3,eb4]", L: "[b3,f4]@15 ~", M: "[g3@16 bb3@15 ~, eb4@31 ~]/2", N: "[bb3,d4]",
  O: "[bb3@15 ~ c4@16 bb3@16 c4@15 ~, eb4@31 ~]/4",
  P: "[[d4,f4]@16 [eb4,g4]@16 ~@12 db6@3 ~, bb4@47 ~, ~@2 [d4,f4], ~@41 eb6@6 ~]/3", Q: "[c4,ab4]", R: "[d4,bb4]",
  S: "[eb4,bb4]", T: "[f4,bb4]", U: "[c4,g4]@15 ~",
  V: "[[e4,g4]@16 [f4,a4]@16 ~@12 eb6@3 ~, c5@47 ~, ~@2 [e4,g4], ~@41 f6@6 ~]/3", W: "[e4,g4,c5]",
  X: "[[f4,a4]@13 ~@3]/2", Y: "[bb3,f4]", Z: "[db4,g4]@15 ~", AA: "[a3@16 c4@15 ~, f4@31 ~]/2", AB: "[c4,e4]",
  AC: "[f3,c4]/4", // F5
})).s("gm_synth_strings_1").gain(0.4).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B@2 C@2 D@2 E@4 F@3 G H@2 I@2 J K@3 L@2 M@2 N@2 O@2 P@3 Q R S@2 T U@3 V W X Y Z AA A B@2 AB AC@2 AD AE@3 AF AG@2 P@3
  Q R S@2 T U@3 V W X Y Z AA ~@9 AH AI AJ@2 AK AL@3 AM AN AO AP AQ AR AS AT@2 AU AV@3
>`.pickRestart({
  A: "g4@6 f4 g4", B: "[ab4@3 g4@3 f4 g4@7 f4 g4]/2", C: "[ab4@6 g4@6 eb4@2 f4@17 ~]/2",
  D: "[~ [bb3,f4]!2 [bb3,f4]@2 [d4,bb4] [bb3,f4] ~@2 g3 ~@3 bb3 [d4,eb4] d4, ~@7 g4@6 ~@3, ~@14 eb4@6 bb3@5 ~@7, ~@11 eb4@3 ~@2]/2", // Bb5 Gm Bb5 Ebmaj7
  E: "[c4@4 eb4@2 d4@4 bb3@2 eb4@2 ~@6 bb3@2 ab3@4 ~@2 ab3@2 f3@2 g3@15 ~ [bb3,eb4]@15 ~, ~@14 eb4@12 eb4@11 ~@10 g3@15 ~@2]/4", // Eb5
  F: "[[eb3,ab3,c4]@15 ~ [bb3,eb4]@15 ~ [ab3,c4]@15 ~, ~@15 g3@15 ~ eb3@15 ~@2]/3", G: "[f3,bb3,d4]@15 ~",
  H: "[[bb3,d4]@3 d4@2 eb4 d4 [bb3,eb4]@7 [c4,d4,eb4] [bb3,d4], ~@3 bb3@4 ~@9]/2", // Bb Eb5 Cm Bb
  I: "[[ab3,c4]@6 [bb3,d4]@8 ~@8 f3@4 g3@5 ~, ~@14 [bb3,eb4]@4 eb4@13 ~, ~@16 g3@4 bb3@11 ~]/2", // Ab Bb Eb5
  J: "[ab3,c4]@3 [bb3,d4]@5", // Ab Bb
  K: "[~@12 ab3@2 f3@2 g3@15 ~ [eb4,g4]@10 ~@4 bb3@2, ~@2 bb3@4 ab3@6 ~@19 bb3@12 ~ eb4@4, ~@2 eb4@3 eb4@10 ~@6 g4@3]/3", // Eb
  L: "[[c4,ab4]@6 [bb3,g4]@4 [ab3,f4]@4 bb3@17 ~, ~@14 g4@15 ~@3]/2", // Fm Eb Db
  M: "[[c4,ab4]@6 [bb3,g4]@4 [g3,eb4]@4 [bb3,f4]@15 ~@3]/2", N: "[d4@3 d4@2 eb4 d4 eb4@5 eb4 ~ bb3 g3, ~@13 d4@3]/2",
  O: "[[ab3,c4]@3 [bb3,d4]@4 [bb3,eb4]@4 [bb3,eb4,g4]@4 [g3,bb3]]/2", // Ab Bb Eb5 Eb Gm
  P: "[ab3@2 ~@2 eb4@2 [bb3,d4]@8 g3@4 ~@10 ab3@2 f3@2 g3@15 ~, c4@4 ~@10 eb4@6 eb4@6 eb4@19 ~@3, ~ [eb3,ab3]@2 ~@6 bb3@2 ab3@3 ~@10]/3", // Bb Ab5
  Q: "ab3@3 ~@5 [c4,eb4]@5 ~ [ab3,c4,eb4]@2, [c4,eb4] ~, ~@2 ab3@5 ~", R: "f4 f3 [bb3,d4,f4]@2, [bb3,d4] ~",
  S: "[[g3,bb3,eb4]@14 [g3,eb4]@2 [d4,f4]@6 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@4 [g3,bb3,d4]@2, ~@14 bb3@7 ~@11]/2", // Eb Cm Dm Gm
  T: "[ab3,c4,eb4]@2 ~@2 [c4,eb4]@2 ~@2 ab3 ~ ab3@3 ~ [ab3,c4,eb4]@2, ~ ab3@3 ~@4, ~@3 [c4,eb4]@4 ~", // Ab Cm Ab Cm
  U: "[[bb3,f4]@3 ~@2 f3@3 ~@11 eb4@2 [f3,bb3,d4]@3, f3@9 ~@11 g3@7 ~ g3@7 ~ g3@6 ~@6, ~@6 bb3@12 bb3@7 ~ bb3@7 ~ bb3@7 ~@7, ~@6 f4@10 eb4@5 ~ eb4@7 ~ eb4@7 ~@11]/3", // Bb5 Bb
  V: "ab3@3 ~ ab3@2 [ab3,c4,eb4]@4 ab3@3 ~ ab3@2, [c4,eb4]@3 ~@2 [c4,eb4]@3", // Ab Cm
  W: "g3@3 ~ g3@2 g3@4 [g3,d4]@6, d4@9 ~@7, b3@3 b3@5", X: "[eb3,g3,c4]@3 [eb3,g3]@2 g3 ~ g3, ~@3 c4@3 c4@2",
  Y: "g3@5 ~ g3@10, [bb3,f4]@15 ~, ~@5 [bb5,db6]@2 ~@9", Z: "ab3@4 ~@2 [ab3,c4]@9 ~, [c4,eb4]@3 ~@5, ~@4 eb3@11 ~",
  AA: "~@3 bb3@5, f3@15 ~, ~ d4@3", AB: "ab4@6 g4@4 f4@5 ~",
  AC: "[bb3@2 eb4 d4@2 bb3@3 ~@5 ab3@3, ~@2 bb3@3 eb4@4 eb3@4 ~@3, ~@8 ab3@3 c4@5, ~@5 eb4@3]/2",
  AD: "eb4 ~ eb4 [d4,f4]@2 [eb4,g4]@3, ~ bb3@7", // Dm Eb
  AE: "[[c4,ab4]@3 [bb3,g4]@2 [g3,eb4]@2 ~ d4@3 c4@2 [bb3,d4,f4]@2 c4@2 d4@2 [bb3,c4,f4]@2 [bb3,d4,f4]@3, ~@7 bb3@6 ~@2 [bb3,f4]@4 ~@5, ~@14 f4@7 ~@27]/3", // Fm Eb Cm Bb Bbsus2 Bb Bb5
  AF: "[c3,g3,eb4]@4 eb4 ~ bb3 g3, ~@4 c3@3 ~, ~@5 d4@3", // Cm
  AG: "[[ab3,c4]@3 [bb3,d4]@4 [bb3,eb4]@2 [g3,bb3,eb4]!2 [g3,bb3,eb4]@4 [g3,bb3]]/2", // Ab Bb Eb5 Eb Gm
  AH: "bb3@3 ~@5 [d4,f4]@5 ~ [bb3,d4,f4]@2, [d4,f4] ~, ~@2 bb3@5 ~", AI: "g4 g3 [c4,e4,g4]@2, [c4,e4] ~",
  AJ: "[[a3,c4,f4]@14 [a3,f4]@2 [e4,g4]@6 [a3,c4,e4]@3 ~ [a3,c4,e4]@4 [a3,c4,e4]@2, ~@14 c4@7 ~@11]/2", // F Dm Em Am
  AK: "[bb3,d4,f4]@2 ~@2 [d4,f4]@2 ~@2 bb3 ~ bb3@3 ~ [bb3,d4,f4]@2, ~ bb3@3 ~@4, ~@3 [d4,f4]@4 ~", // Bb Dm Bb Dm
  AL: "[[c4,g4]@3 ~@2 g3@3 ~@11 f4@2 [g3,c4,e4]@3, g3@9 ~@11 a3@7 ~ a3@7 ~ a3@6 ~@6, ~@6 c4@12 c4@7 ~ c4@7 ~ c4@7 ~@7, ~@6 g4@10 f4@5 ~ f4@7 ~ f4@7 ~@11]/3", // C5 C
  AM: "bb3@3 ~ bb3@2 [bb3,d4,f4]@4 bb3@3 ~ bb3@2, [d4,f4]@3 ~@2 [d4,f4]@3", // Bb Dm
  AN: "a3@3 ~ a3@2 a3@4 [a3,e4]@6, e4@9 ~@7, db4@3 db4@5", AO: "[f3,a3,d4]@3 [f3,a3]@2 a3 ~ a3, ~@3 d4@3 d4@2",
  AP: "a3@5 ~ a3@10, [c4,g4]@15 ~, ~@5 [c6,eb6]@2 ~@9", AQ: "bb3@4 ~@2 [bb3,d4]@9 ~, [d4,f4]@3 ~@5, ~@4 f3@11 ~",
  AR: "~@3 c4@5, g3@15 ~, ~ e4@3", AS: "a4@6 g4 a4", AT: "[bb4@3 a4@3 g4 a4@7 g4 a4]/2", AU: "bb4@3 a4@2 g4@3",
  AV: "[f4@11 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(0.3)

// chords · piano
const piano = note("<A@4 B C D@2 E@2 ~@38 A@4 ~@26 F G H I J K L M N ~@14 O P@2 Q R@3>".pickRestart({
  A: "[~@4 g3@4 ~@2 ab3@6 ~@4 g3@4 ~ ab3@7, eb2@6 f3@10 ~@18 bb2@6 ~@8 ab2@15 ~, ~ bb2@3 ~@4 ab2@8 eb2@3 f3@5 ~@8, ~@4 eb3@14 eb3@17 ~ eb3@14 ~@14]/4",
  B: "~ d4, bb2@3 c4@5, ~ f3@3 ~@4, ~@4 bb3@11 ~", C: "[bb3,d4,f4]@3 [f3,bb3,d4]@3 [d3,f3,bb3]@2",
  D: "[[g3,c4,eb4]@11 ~ [c4,eb4]@2 [bb3,d4]@2 ab3@2 ~@2 c4@2 ~@4 bb3@2 f3@4, ~@6 g4@5 ~ d4@3 ~, ~@8 c4@2 ~ bb3@2 ~@3, ~@9 eb3@3 ~@4]/2", // Cm Bb
  E: "[~@2 g3 ab3@2 ~@3 g3@8, eb2, ~ eb3@15, ~@5 eb4@11]/2", F: "[eb3,ab3,c4]@9 ~ [eb3,g3,c4]@5 ~",
  G: "[f3,bb3,d4]@15 ~", H: "[eb3,ab3,c4]@5 [eb3,g3,c4]@3", I: "[f3,bb3,d4]", J: "[f3,ab3,c4]@15 ~",
  K: "[f3,bb3,d4]@5 [f3,bb3,d4]@3", L: "[bb3,eb4]@15 ~, ab3@13 ~@3", M: "[ab3,c4]@9 ~@5 eb3@2, eb4@3 ab3, ~@10 c4@5 ~",
  N: "f3@2 bb3 [bb3,d4]@5, ~@4 f3@11 ~", O: "~@5 a3 [g3,bb3,d4] [f3,a3,c4], f2@3 ~, ~@2 f3@3 ~@3, ~@3 g3@3 ~@2",
  P: "[[f3,bb3,d4]@3 [f3,a3,c4]@3 bb3 [a3,c4]@5 [g3,bb3] [a3,c4]@3, ~@3 f3@3 ~@2]/2", // Bb F Am Gm Am
  Q: "[bb3,f4]@3 [a3,f4]@2 [bb3,f4]@3", R: "[[a3,f4]@23 ~, f2@43 ~@5]/3",
})).s("gm_piano").gain(0.64).pan(0.4)

// chords · epiano2
const epiano2 = note(`<
  A B@2 C@2 D@2 E@3 F G@2 H@2 I@4 J@2 K L M N O P Q@2 R@2 S T U V W X Y Z AA AB@2 AC AD AE AF AG AH A B@2 AI L M AJ O
  AK@2 AL AM@2 AN T U V W X Y Z AA AB@2 AC AD AE AF AG AH AO AP@2 AQ AR AS AT AU AV AW AX AY AZ AW BA BB@2 BC BD BE BF
  BG BH BI BJ@2 BK BL@3
>`.pickRestart({
  A: "[bb3,g4]@6 [ab3,f4] [bb3,g4]", B: "[[c4,ab4]@3 [bb3,g4]@3 [ab3,f4] [bb3,g4]@7 [ab3,f4] [bb3,g4]]/2",
  C: "[[c4,ab4]@3 [bb3,g4]@3 [g3,eb4] [bb3,f4]@9]/2", // Fm Eb Cm Bb5
  D: "[~@2 d4 ~ d4@2 f4@4 bb4@2 f4@2 [eb4,g4]@13 ~ [c4,eb4]@2 [bb3,d4]@2, f4@5 ~ d4@8 ~@18]/2", // Eb Cm Bb
  E: "[ab3 eb3 [c4,eb4] [bb3,d4]@3 [bb3,eb4] bb3@3 bb3 ab3@2 ~ ab3 f3 g3@8, c4@4 ~@10 eb4@12 eb4@21 ~]/3", // Cm Bb Eb5
  F: "~@3 f3@2 g3@3, g4, ~ bb3@3",
  G: "[~@3 g4@2 f4@2 ~@3 eb3 f3@2 g3@3, ab4@3 ~@4 g4@8 ~, c4 ab3@3 ~@4, ~ eb3@6 ~@9]/2",
  H: "[ab4@3 g4@3 eb4 ~@3 bb3 c4@2 d4@3, c4@6 ~ f4@8 ~, ~@18 f3@13 ~]/2",
  I: "[[d4,f4]@2 bb3 f4@2 bb4 f4 ~@4 d4@2 ~@3 [ab3,c4]@2 [c4,eb4] d4@2 [f3,eb4]@2 bb3@3 ~ f3@2 g3@3, ~@6 d4@8 g4@18 ~@20 bb3@9 ~@3, ~@18 g3@4 ~@4 eb4@9 ~@11 eb4@16 ~@2, ~@10 c4@6 ~@3 bb3@4 g3@4 ~@5]/4", // Dm Ab Cm F7
  J: "[ab3 eb3 [c4,eb4] bb3@2 [f3,bb3]@2 bb3@2 ~@6 f3, c4@2 ~ d4@4 eb4@3 eb4@3 eb4@3, ~ ab3@2 ~@4 g3@4 ab3@3 ab3@2, ~@9 bb3@4 ~@3]/2", // Cm Bb5
  K: "[bb3,eb4]@15 ~, g3@3 ~", L: "bb3@2 ~ f3@2 g3@3, eb4@15 ~, g3@3 ~@5, ~ bb3@3", M: "[ab3,c4,eb4]@15 ~",
  N: "~@2 eb3 [f3,eb4]@2 [g3,bb3,d4]@3, bb3@5 ~@3, [g3,eb4]@3 ~@5", O: "[ab3,c4,eb4]",
  P: "~@2 bb3 ~@3 f3@2, d4@6 c4@9 ~, bb3@2 ~@3 d4@3, ~ f3@3 f3@2 ~@2",
  Q: "[[f3,bb3,d4]@5 ~ [f3,d4]@10 eb4@2 ~@4 g3@10, ~@3 bb3@6 d4@2 ~@5, ~@8 g4@7 ~, ~@10 bb3@5 ~]/2", // Bb Dm
  R: "[[eb3,ab3,c4]@3 [f3,bb3,d4]@4 [eb3,g3,eb4]@9]/2", S: "[eb3,ab3,c4]@3 [f3,bb3,d4]@5",
  T: "g3@3 ab3@2 ~ ab3 f3, bb3@3 ~, eb4@9 ~ eb4@6", U: "~@4 f4 ~@2 bb3, g3 ~, ~ bb3@2 bb3@3 eb4@2, ~@2 eb4@2 ~ g4@3",
  V: "[ab3,bb3,c4,eb4]@5 [c4,eb4,bb4]@3", W: "[d4,f4]@5 [d4,f4]@3, bb3",
  X: "[eb3,g3,bb3]@5 ~@2 eb3, eb4@7 ~, ~@5 bb3@3, ~@3 g3", Y: "d4@6 eb4@4 d4@5 ~, [g2,f3,bb3]",
  Z: "[bb3,c4,eb4]@5 [c4,eb4,bb4]@3, ab2@3 ~", AA: "[bb3,d4]@5 [bb3,f4]@3, [bb2,f3]",
  AB: "[eb4@9 ~ d4@4 ~@12 [f3,bb3,d4]@6, [g3,bb3]@25 ~@7, c3@17 ~ bb4@13 ~, ~@7 eb4@6 ~@3]/2", // Bb Gm
  AC: "[ab2,bb3,c4,eb4]@5 [ab3,c4,eb4]@3", AD: "[g2,b3,d4,f4]", AE: "[c3,g3,bb3,eb4]",
  AF: "eb4@2 eb4 [f3,d4], [bb3,f4], g3@3 ~", AG: "bb3@5 ~@2 eb3, [c4,eb4]@15 ~, ab3@3 ab3, ~@5 bb3@3",
  AH: "[bb2,f3,bb3,d4]", AI: "[c4,ab4]@3 [bb3,g4]@2 [ab3,f4]@3",
  AJ: "~@2 eb3 [f3,d4]@2 [g3,bb3,eb4]@3, bb3@5 ~@3, [g3,eb4]@3 ~@5", // Dm Eb Cm
  AK: "[[f3,bb3] ~@6 f3, d4@9 ~ d4@6 ~@2 d4@6 ~@2 d4@6, ~ f3!3 f3!3 ~, ~@3 c4@4 c4@4 c4@4 ~]/2", // Bb5
  AL: "eb4 ~@2 g3@5, g4@7 ~, ~ d4@2 ~@5, ~@2 bb3@5 ~",
  AM: "[eb3@2 eb4 [f3,bb3]@2 [bb3,f4]@2 eb3@6 ~@2 bb3, [ab3,c4]@3 d4@4 eb4@8 ~, ~@7 g3@7 g3@2, ~@13 eb3@3]/2", // Bb5 Ab
  AN: "ab3@2 ab3 bb3@2 bb3@3, [eb3,c4]@3 [f3,d4]@5", AO: "[c4,eb4]@5 [eb4,bb4]@3",
  AP: "[f4@4 ~@4 eb4@5 [c4,eb4]@3, ~@3 f4 ~@4, ~@7 bb4@6 ~@3]/2", AQ: "[d4,f4]@7 ~",
  AR: "c4@3 ~@2 eb4@2 f2, f2@13 ~@3, ~@6 ab3@9 ~", AS: "~@10 g2@3 ~ g2@2, [g2,d4]@5 f4@3, ~@3 bb3@5",
  AT: "~@5 [ab2,ab3]@3, [ab2,eb4]@5 ~@3, ~@3 c4@5", AU: "[bb2,c4,eb4]@3 bb2!2 [bb2,ab3]@2 bb2, ~@3 [ab3,c4]@2 ~@3",
  AV: "[f3,bb3,d4]@15 ~", AW: "[c4,d4,f4]@5 [d4,f4,c5]@3", AX: "[e4,g4]@5 [e4,g4]@3, c4",
  AY: "[a3,c4]@5 ~@2 f3, f4@7 ~, ~@5 c4@3, ~@3 a3", AZ: "e4@6 f4@4 e4@5 ~, [g3,c4]", BA: "[c4,e4]@5 [c4,g4]@3, g3",
  BB: "[f4@9 ~ e4@4 ~@12 [g3,c4,e4]@6, [a3,c4]@25 ~@7, ~@7 f4@6 ~@3, ~@18 c5@13 ~]/2", // C Am
  BC: "[bb2,c4,d4,f4]@5 [bb3,d4,f4]@3", BD: "[a2,db4,e4,g4]", BE: "[d3,a3,c4,f4]",
  BF: "f4@2 f4 [g3,e4], [c4,g4], a3@3 ~", BG: "c4@5 ~@2 f3, [d4,f4]@15 ~, bb3@3 bb3, ~@5 c4@3", BH: "[c3,g3,c4,e4]",
  BI: "[c4,a4]@6 [bb3,g4] [c4,a4]", BJ: "[[d4,bb4]@3 [c4,a4]@3 [bb3,g4] [c4,a4]@7 [bb3,g4] [c4,a4]]/2",
  BK: "[d4,bb4]@3 [c4,a4]@2 [bb3,g4]@3", BL: "[[a3,c4]@47 ~]/3",
})).s("gm_epiano2").gain(0.64).pan(0.7)

// other · distortion guitar
const distortion_guitar = note("<~@77 A@2 B C D E F G H I@2 J K L@2 M@2 N O P Q R S ~@8>".pickRestart({
  A: "[~ ab2, ~@7 eb3@9]/2", B: "[f3,bb3]", C: "[eb3,ab3]", D: "[f3,bb3]@15 ~", E: "[f2,f3]", F: "g2@7 g2, g3",
  G: "[ab2,ab3]", H: "[bb2,bb3]", I: "[c3@2 f5 e5@2 c5@2 d5@3 f5 d5@4 d5]/2", J: "d5@4 c5@2 c5@3 ~ c5@2 bb4@2 a4@2",
// … 113 more lines

More by Morandi