Strudelify
Portofino cover art
KeyD♭ majorTempo120 bpm
0:00/0:00
// Portofino — Humperdinck Engelbert
// 120 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E B C F G H I J K L M N H O L J P Q R S P T U V W X Y A Z M@2 AA P H@2 AB AC AD@2 AE AF AG AH AI AJ AK A B AL
  F AM AN AO AC P AP AQ H AR AH AS AC P AP AT AU AV AU U AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BJ BN BJ BO
  BB BN BP BQ BR BS BA BT BA BT BU@2 ~@6
>`.pickRestart({
  A: "db2@2 ~ ab2 bb2@2 ab2@2", B: "db3 ~ db3@2 ~@2 ab2@2 bb2@4 ab2@4", C: "db2@3 ab2 bb2@2 ab2@2",
  D: "db3 ~ db3@2 ~@2 ab2@2 bb2@4 ab2@2 ~@2", E: "db2@5 ~@3 bb2@4 ab2@4", F: "db3 ~ db3@4 ab2@2 bb2@4 ab2@4",
  G: "db2@5 ~ db2@2 ab1@6 ~@2", H: "db2@2 ~ db2 ab2@2 ab1@2", I: "db2@5 ~ db2 ~ db2@4 ab1@4",
  J: "db2@5 ~ db2@2 ab1@4 db2@4", K: "ab1@2 ~ ab1 eb1@2 ab1@2", L: "db2@5 ~ db2@2 ab1@4 db2@3 ~",
  M: "ab1@2 ~ ab1 eb2@2 eb1@2", N: "db2@5 ~ db2@2 ab2@4 ab1@4", O: "db2@5 ~ db2@2 ab1@8", P: "ab1@2 ~ ab1 eb2@2 ab1@2",
  Q: "db2@2 ~ db2 ab1@2 db2@2", R: "ab1@4 ~@2 ab1@2 eb2@4 eb1@3 ~", S: "db2@5 ~@3 ab2@4 ab1@3 ~",
  T: "db2@5 ~ db2@2 db2@4 ~@4", U: "eb2@2 ~ eb2 bb1@2 eb2@2", V: "ab1@3 ~@3 ab1@2 f1@5 ~ f1@2",
  W: "bb1@4 ~@2 bb1@2 eb2@5 ~ eb2@2", X: "ab1@5 ~ eb2@2 ab2@4 eb2@4", Y: "ab1@5 ~ ab1 ~ ab1@6 ~@2",
  Z: "db2@5 ~ ab2@2 bb2@4 ab2@3 ~", AA: "ab1@4 ~@2 ab1@2 eb2@4 ab1@3 ~", AB: "db2@3 ~@3 ab2@2 bb2@4 ab2@4",
  AC: "db2@4 ~@2 db2@2 ab2@4 ab1@3 ~", AD: "gb1@5 ~ db2@2 eb2@4 db2@4", AE: "gb1 ~ gb1@4 db2@2 eb2@4 db2@3 ~",
  AF: "db2@3 ~@3 ab2@2 bb2@4 ab2@2 ~@2", AG: "ab1@2 ~ ab1 eb1@2 eb2@2", AH: "db2@4 ~@2 db2@2 ab2@4 db2@3 ~",
  AI: "gb1@5 ~ db2@2 gb2@4 db2@3 ~", AJ: "db2@2 ~ ab2@3 ab2 ~", AK: "ab1@3 eb2 ab2@2 eb2@2",
  AL: "db2@5 ~ ab2@2 bb2@4 ab2@4", AM: "db2@4 ~@2 db2@2 ab2@7 ~", AN: "db2@4 ~@2 db2@2 ab1@7 ~",
  AO: "db2@2 ~ db2 ab1@2 ~@2", AP: "db2@2 ~ db2 ab2@2 db2@2", AQ: "ab1@5 ~ ab1@2 eb2@4 ab1@4",
  AR: "db2 ~ db2@2 ~@2 db2@2 ab2@4 ab1@4", AS: "db2@2 ~ db2 db2@2 ab1@2", AT: "ab1@2 ~ eb2 ab2@2 ab1@2",
  AU: "db2@5 ~ db2@2 ab2@4 db2@4", AV: "ab1@5 ~ eb2@2 ab2@4 ab1@4", AW: "ab1@2 ~ eb2 f2@2 c2@2",
  AX: "bb1@2 ~ bb1 eb2@2 bb1@2", AY: "ab1@2 ~ eb2 ab2@2 eb2@2", AZ: "a1@5 ~ e2@2 a2@6 ~@2", BA: "d2@5 ~ a2@2 b2@4 a2@4",
  BB: "d2@5 ~ a2@2 b2@4 a2@2 ~@2", BC: "a1@5 ~ a1@2 e2@4 e1@4", BD: "a1@2 ~ a1 e2@2 e1@2",
  BE: "a1@3 ~@3 a1@2 e2@4 a1@2 ~@2", BF: "a1@3 ~@3 a1@2 e2@4 a1@4", BG: "d2@2 ~ d2 a2@2 a1@2",
  BH: "d2 ~ d2@2 ~@2 d2@2 a2@4 a1@4", BI: "d2@5 ~ d2@2 b2@4 a2@4", BJ: "d2@2 ~ d2 a2@2 d2@2",
  BK: "g2@5 ~ d3@2 e3@4 d3@2 ~@2", BL: "g2 ~ g2@4 d2@2 e2@4 d2@4", BM: "g1@5 ~ d2@2 e2@4 d2@3 ~",
  BN: "a1@5 ~ e2@2 a2@4 a1@4", BO: "g1@4 ~@2 d2@2 e2@4 d2@3 ~", BP: "d2@2 ~ d2 e2@2 gb2 ~", BQ: "g1@6 d2@2 e2@4 d2@3 ~",
  BR: "d2@4 ~@2 a2@2 b2 ~ b2@2 a2@2 ~@2", BS: "a1@4 ~@2 e2@2 a2@4 e2@3 ~", BT: "d3 ~ d3@3 ~ a2@2 b2@4 a2@4",
  BU: "[d1@25 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.45)

// other · piano · "A.PIANO"
const piano = note(`<
  ~@3 A B@2 C D ~@3 E F G ~ G ~@3 G F G ~ H ~ H ~@2 I J ~ K L M N O P ~ Q K L R S T U V W X Y Z ~ A AA ~@4 AB AC AD ~ G
  ~@3 G ~ G ~ AE ~ AE ~@2 I J AF AG AH AI AJ AK AL AM AN AG AH AO AP AQ AR AS AT AQ AT AU AT AV AT AW AX AY AZ ~ BA ~@7
>`.pickRestart({
  A: "~@8 [db4,f4] ~@3 [eb4,gb4] ~@3", B: "[[gb4,bb4] ~@5 [f4,ab4] ~@3 [e4,g4] ~ [f4,ab4]@7 ~@13]/2",
  C: "~@2 [ab4,f5] ~ [ab4,f5] ~ [ab4,f5] ~@3 [gb4,eb5] ~ [gb4,eb5] ~ [gb4,eb5] ~", D: "~@2 [f4,db5] ~ [f4,db5]@9 ~@3",
  E: "ab4@2 f4 ~@3 f4 ~ bb4 ~@3 ab4 ~@3", F: "eb4 ~@5 ab3 ~@9", G: "~@2 ab4 ~@3 f4 ~ bb4 ~@3 ab4 ~@3",
  H: "~@2 db4@2 c4@2 ab3@2 bb3@2 db4@2 ab3 ~ ab3 ~", I: "~@2 bb4@2 a4@2 ab4 ~@9", J: "bb4@2 ab4@7 ~@7",
  K: "~@10 f5 ~@3 c5 ~", L: "eb5 ~ db5 ~@13", M: "~@10 [c5,eb5]!3 ~ [bb4,db5]!2",
  N: "[bb4,db5] ~ [ab4,c5] ~ [eb4,gb4]@4 ~@8", O: "~@10 eb5 ~@3 bb4 ~", P: "db5 ~ c5 ~@13",
  Q: "~@2 [bb4,db5] ~ [ab4,c5] ~ [f4,ab4] ~ [gb4,bb4] ~ [db4,f4] ~@5", R: "~@10 [gb4,bb4]!3 ~ [ab4,c5]!2",
  S: "[ab4,c5] ~ [bb4,db5] ~ [bb4,db5]@6 ~@6", T: "[bb4,db5] ~ gb5@3 ~ ab4 ~ bb4@4 ab4 ~@3",
  U: "~@2 f5@2 ~@2 ab4 ~ bb4@4 ab4 ~@3", V: "~@2 eb5@4 ab4 ~ bb4@4 ab4 ~@3", W: "~@6 ab4 ~ bb4@4 ab4 ~@3, ~ f5@3 ~@4",
  X: "~@2 gb5@4 ab4@2 bb4@4 ab4 ~@3", Y: "~@2 f5@4 ab4@2 bb4@4 ab4 ~@3", Z: "~@2 eb5@4 [ab4,g5]@2 bb4@4 ab4 ~@3",
  AA: "[gb4,bb4] ~@5 [f4,ab4] ~@3 [e4,g4] ~ [f4,ab4] ~@3", AB: "~@2 f4 ~@3 f4 ~ bb4 ~@3 ab4 ~@3", AC: "eb4 ~@15",
  AD: "f4 ~ ab4 ~@3 f4 ~ bb4 ~@3 ab4 ~@3", AE: "~@2 db4@2 c4@2 ab3@2 bb3@2 db4@2 ab3 ~ ab3@2", AF: "b4@5 ~ a4@6 ~@4",
  AG: "~@10 gb5 ~@3 db5 ~", AH: "e5 ~ d5 ~@13", AI: "~@10 [b4,d5]!3 ~ [a4,db5]!2",
  AJ: "[a4,db5] ~ [g4,b4] ~ [e4,g4]@4 ~@8", AK: "~@10 e5 ~@3 b4 ~", AL: "d5 ~ db5 ~@13",
  AM: "~@10 [b4,d5] ~ [a4,db5] ~ [gb4,a4] ~", AN: "[g4,b4] ~ [e4,g4] ~ [d4,gb4] ~@11",
  AO: "~@10 [g4,b4]!3 ~ [a4,db5]!2", AP: "[a4,db5] ~ [b4,d5] ~ [b4,d5] ~@11", AQ: "~@2 g5 ~@3 a4 ~ b4 ~@3 a4 ~@3",
  AR: "~@2 gb5 ~@3 a4 ~ b4 ~ b4 ~ a4 ~@3", AS: "~@2 e5 ~@3 a4 ~ b4 ~ b4 ~ a4 ~@3", AT: "~@2 gb5 ~@3 a4 ~ b4 ~@3 a4 ~@3",
  AU: "~@2 e5@2 ~@2 a4 ~ b4 ~@3 a4 ~@3", AV: "~@2 g5 ~@3 a4 ~ b4 ~@3 b4 ~@3", AW: "~@2 e5 ~@3 a4 ~ b4 ~@3 a4 ~@3",
  AX: "d5 ~@15", AY: "~@8 [d4,gb4] ~@3 [e4,g4] ~@3", AZ: "[g4,b4] ~@5 [gb4,a4] ~@3 [f4,ab4] ~ [gb4,a4] ~@3",
  BA: "[gb4,d5] ~@15", // D
})).s("gm_piano").gain(0.45)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note(`<
  ~@3 A B@2 C D ~@4 E ~ E ~@5 F ~ E ~@6 G@2 H I J K L M ~ N H O P Q R S T@2 U V W X A Y@2 ~@4 Z ~ F ~@5 E ~ E ~@6 AA AB
  AC AD AE AF AG AH AI AJ AC AK AL AM AN AO AP@2 AQ AR AS AT AU AV AS AW AX AY@3 ~@7
>`.pickRestart({
  A: "~@4 [db3,f3]@2 [eb3,gb3] ~", B: "[[gb3,bb3]@5 ~ [f3,ab3]@3 ~ [e3,g3] ~ [f3,ab3]@8 ~@12]/2",
  C: "~@2 [ab3,f4] ~ [ab3,f4] ~ [ab3,f4]@3 ~ [gb3,eb4] ~ [gb3,eb4] ~ [gb3,eb4]@2", D: "~@2 [f3,db4] ~ [f3,db4]@12",
  E: "~@2 eb4 ~ ab4 ~ ab5 ~@9", F: "~@2 eb4@2 ab4 ~ ab5 ~@9",
  G: "[bb3@2 ab3@12 ~@2 [ab2,c3,eb3]@7 ~@9, gb3@23 ~@9, db3@7 ~@9]/2", H: "~@10 f4 ~@3 c4 ~", I: "eb4 ~ db4@2 ~@12",
  J: "~@10 [c4,eb4]!3 ~ [bb3,db4]!2", K: "[bb3,db4] ~ [ab3,c4] ~ [eb3,gb3]@3 ~@9", L: "~@10 eb4 ~@3 bb3 ~",
  M: "db4 ~ c4@3 ~@11", N: "~@2 [bb3,db4] ~ [ab3,c4] ~ [f3,ab3] ~ [gb3,bb3] ~ [db3,f3]@5 ~", O: "eb4 ~ db4@3 ~@11",
  P: "~@10 [gb3,bb3]!3 ~ [ab3,c4]!2", Q: "[ab3,c4] ~ [bb3,db4] ~ [bb3,db4]@6 ~@6", R: "bb3@5 ~ bb3@2 db4@5 ~ eb4@2",
  S: "db4@3 ~ ab3 ~ ab3@6 ~@2 ab3 ~", T: "[c4@3 ~ c4 ~ c4@4 bb3@3 ~ ab3@12 ~@6]/2", U: "[bb3,db4]@3 db4@3 gb4@2",
  V: "f4@5 ~ ab3@6 ~@2 ab3 ~", W: "c4@5 ~ db4@6 eb4@4", X: "~@2 f3@3 ~@3, db4@5 ~@3",
  Y: "[[gb3,bb3]@5 ~ [f3,ab3]@2 ~@2 [e3,g3] ~ [f3,ab3]@11 ~@9]/2", Z: "~@2 eb4 ~@3 ab4 ~ ab5 ~@7",
  AA: "bb3@2 ab3@9 ~@5, [db3,gb3]@11 ~@5", AB: "b3@5 ~ a3@4 ~@6, [db3,e3]@9 ~@7", AC: "~@10 gb4 ~@3 db4 ~",
  AD: "e4 ~ d4@3 ~@11", AE: "~@10 [b3,d4]!3 ~ [a3,db4]!2", AF: "[a3,db4] ~ [g3,b3] ~ [e3,g3]@6 ~@6",
  AG: "~@10 e4 ~@3 b3 ~", AH: "d4 ~ db4 ~@13", AI: "~@10 [b3,d4] ~ [a3,db4] ~ [gb3,a3] ~",
  AJ: "[g3,b3] ~ [e3,g3] ~ [d3,gb3]@5 ~@7", AK: "e4 ~ d4@2 ~@12", AL: "~@10 [g3,b3]!3 ~ [a3,db4]!2",
  AM: "[a3,db4] ~ [b3,d4] ~ [b3,d4]@4 ~@8", AN: "b3 ~ b3 d4@2 ~@2 e4", AO: "d4@4 a3 ~ a3@6 ~@2 a3 ~",
  AP: "[db4@3 ~ db4 ~ db4@4 b3@4 a3@13 ~@5]/2", AQ: "b3@5 ~ d4@6 g4@4", AR: "gb4@6 a3@7 ~ a3 ~", AS: "db4@3 d4@3 e4@2",
  AT: "d4@5 ~@3", AU: "b3@6 d4@6 [b3,g4]@3 ~", AV: "[a3,gb4]@5 ~ a3@7 ~ a3@2", AW: "[gb3,d4]@9 ~@7",
  AX: "~@8 [d3,gb3]@3 ~ [e3,g3]@2 ~@2", // D Em
  AY: "[[g3,b3]@5 ~ [gb3,a3]@3 ~ [f3,ab3] ~ [gb3,a3]@13 ~@7 [a3,d4]@10 ~@6, ~@31 [d3,gb3]@11 ~@6]/3", // G Gbm Fm Gbm D5 D
})).s("gm_harpsichord").gain(0.35).pan(0.2)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  A B C D E B F B G F H F I B I F J F K L M F N O P F Q R S T ~@22 U@2 V W U X Y U Y Z H U@2 O AA AB AC O Y AD AE AF AG
  AH AI ~@35
>`.pickRestart({
  A: "db5 ~ db5 ~@3 ab4@2 db5 ~ db5 ~ db5 ~@3", B: "db5 ~ db5 ~@3 ab4 ~ db5 ~ db5 ~ db5 ~ ab4 ~",
  C: "db5 ~ db5 ~@3 ab4@2 db5 ~ db5 ~ db5 ~ ab4 ~", D: "db5 ~ db5 ~@3 ab4 ~ db5 ~ db5 ~@3 ab4 ~",
  E: "db5 ~ db5 ~@3 ab4@2 db5 ~ db5 ~@3 ab4 ~", F: "db5 ~ db5 ~@5 db5 ~ db5 ~ db5 ~ ab4 ~",
  G: "db5 ~ db5 ~@3 db5 ~@5 ab4 ~@3", H: "~@2 db5 ~@5 db5 ~ db5 ~ db5 ~ ab4 ~", I: "~@2 ab4 ~@5 ab4 ~ ab4 ~@3 ab4 ~",
  J: "db5 ~ db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~ ab4 ~", K: "db5 ~ db5 ~@3 ab4 ~@3 db5 ~ db5 ~ ab4 ~",
  L: "~@2 db5 ~@3 ab4 ~ db5 ~ db5 ~ ab4 ~ ab4 ~", M: "~@10 ab4 ~ ab4 ~ ab4 ~",
  N: "ab4 ~ ab4 ~@3 ab4 ~@3 ab4 ~ ab4 ~ ab4 ~", O: "db5 ~ db5 ~@3 db5 ~@3 db5 ~ db5 ~ db5 ~",
  P: "ab4 ~ ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~", Q: "~@2 bb4 ~@5 bb4 ~ bb4 ~ eb5 ~ eb5 ~",
  R: "ab4 ~ ab4 ~@7 ab4 ~ ab4 ~ ab4 ~", S: "bb4 ~ bb4 ~@3 bb4 ~@3 eb5 ~ eb5 ~ eb5 ~", T: "ab4 ~ ab4 ~@3 ab4 ~@9",
  U: "db5 ~ db5 ~@3 db5 ~@3 db5 ~ db5 ~ ab4 ~", V: "db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~@3 ab4 ~",
  W: "db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~ db5 ~ ab4 ~", X: "db5 ~ db5 ~ db5 ~@5 db5 ~ db5 ~ ab4 ~",
  Y: "~@2 ab4 ~@7 ab4 ~ ab4 ~ ab4 ~", Z: "db5 ~ db5 ~ ab4 ~@5 db5 ~ db5 ~ db5 ~", AA: "ab4 ~@5 ab4 ~ ab4 ~ ab4 ~@5",
  AB: "db5 ~ db5 ~@3 db5 ~@5 db5 ~ db5 ~", AC: "ab4 ~ ab4 ~@3 ab4 ~@5 ab4 ~ ab4 ~",
  AD: "db5 ~ db5 ~@3 ab4 ~ db5 ~ db5 ~ db5 ~ db5 ~", AE: "~@2 bb4 ~@3 bb4 ~ bb4 ~ bb4 ~@3 bb4 ~",
  AF: "~@2 eb5 ~@3 eb5 ~ ab4 ~ ab4 ~@3 ab4 ~", AG: "bb4 ~ bb4 ~@3 bb4 ~ eb5 ~ eb5 ~@3 eb5 ~",
  AH: "bb4@2 ab4 ~@3 ab4 ~@7 ab4 ~", AI: "b4 ~ a4 ~@3 a4 ~@9",
})).s("gm_pizzicato_strings").gain(0.35).pan(0.7)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A@4 B@4 C@2 D@8 E@5 F G F H I J K@2 L@6 M@2 N@8 O@2 P@3 Q@2 R@4 S@6 T@2 U@6 V W@2 X Y Z@6 AA@2 AB@5 AC@5 AD@2 AE AF@4
  AG@4 ~@6
>`.pickRestart({
  A: "[[ab3,db4]@29 ~ [eb4,gb4]@2, f4@15 ~]/4", // Db5 Ebm
  B: "[[gb4,bb4]@6 [f4,ab4]@4 [e4,g4]@2 ~@18 ab3@33 ~, ~@6 [f4,ab4]@25 ~, ~@8 db4@23 ~]/4", C: "[ab3,db4,f4]/2",
  D: "[[bb3,gb4]@12 f4@20 [eb4,gb4]@16 f4@16 [eb4,gb4]@16 [db4,f4]@47 db4, db4@29 ~@3 c4@14 ~@2 db4@14 ~@2 c4@14 ~@50, ~@6 ab3@57 ~]/8", // Ebm Db
  E: "[[bb3,gb4]@15 f4@17 [eb4,gb4]@16 f4@16 [eb4,gb4]@16, ~@15 ab3@63 ~@2, ~@16 c4@7 ~ db4@7 ~ c4@7 ~]/5", // Ebm
  F: "[ab3,db4,f4]@15 ~", G: "[ab3,c4,eb4,gb4]", H: "~@8 db4@7 ~, [g3,bb3,eb4]@15 ~",
  I: "~@8 f4@7 ~, [ab3,c4,eb4]@15 ~", J: "[ab3,bb3,f4]@8 [g3,bb3,eb4]@7 ~, db4",
  K: "[[gb3,bb3,db4]@5 ~@11 gb4@14 ~@2, ~@5 [ab3,c4,eb4]@25 ~@2]/2", // Gb Ab
  L: "[bb3@3 ~ f4@12 [c4,eb4,gb4]@32, db4@5 ~@11, gb4 ~@7 ab3@87 ~]/6", // Cdim
  M: "[[bb3,gb4]@5 ~ [ab3,f4]@24 ~@2, db4@15 ~]/2", // Ebm Db
  N: "[[gb4,bb4]@7 ~@17 b3@7 ~ [bb3,gb4]@48 f4@16 [eb4,gb4]@16 [db4,f4]@16, db4@47 ~ c4@7 ~@9, ~@7 [f4,ab4]@25 ~@48 ab3@47 ~]/8", // Gb Ebm Db Fm
  O: "[[bb3,gb4]@15 ~ [ab3,f4]@15 ~, db4@15 ~]/2", // Ebm Db
  P: "[[ab3,c4,eb4]@3 [bb3,db4]@2 ~ eb4@2 [db4,f4]@14 eb4@2, gb4@8 ~@14 gb4 ~, ~@12 ab3@31 ~@5, ~@6 c4 ~@17]/3", // Ab Bbm Db
  Q: "[[gb4,bb4]@3 [f4,ab4]@2 [e4,g4] [f4,ab4]@9 ~]/2", R: "[[ab3,f4]@8 [bb3,gb4]@3 [ab3,f4]@5, db4@31 ~]/4",
  S: "[[eb4,gb4]@8 f4@8 [eb4,gb4]@8 [db4,f4]@23 ~, ab3@47 ~, c4@14 ~@2 db4@14 ~@2 c4@15 ~@49]/6", // Ebm Db
  T: "[gb4@12 [ab3,f4]@19 ~, db4@15 ~, bb3@5 ~@11]/2", // Db
  U: "[[eb4,gb4] f4 [c4,eb4,gb4] f4 [eb4,gb4] [db4,f4], ab3@95 ~, c4@7 ~ db4@7 ~@9 db4@7 ~ c4@7 ~@9]/6", // Ebm Cdim Ebm Db
  V: "~ db4, [g3,bb3,eb4]@15 ~", W: "[~@16 ab3@7 ~ [g3,eb4]@7 ~, [ab3,c4,eb4]@15 ~ [bb3,db4]@15 ~, ~@8 f4@15 ~@9]/2",
  X: "[bb3,bb4] ab4@6 ~, [db4,gb4] ~@15", Y: "b4@6 a4@7 ~@3, [db4,e4]@13 ~@3",
  Z: "[[g4,b4]@8 gb4@23 ~ [db4,e4,g4]@63 ~, d4@5 ~@11, ~@8 a4@87 ~]/6", AA: "[[b3,g4]@6 [a3,gb4]@25 ~, d4@15 ~]/2",
  AB: "[[g4,b4]@7 ~@17 c4@7 ~ g4@48, d4, ~@7 [gb4,a4]@25 b3@46 ~@2]/5", // G Gbm
  AC: "[gb4@15 ~ [e4,g4]@16 gb4@16 g4@16 [a3,gb4]@15 ~, a3@47 ~ b3@14 ~@18, ~@8 db4@7 ~ d4@23 ~]/5", // Em D
  AD: "[[a3,db4,e4]@6 [b3,d4]@5 ~ [db4,e4]@4 [d4,gb4]@15 ~, g4@15 ~@17, ~@6 a3@9 ~]/2", AE: "[b3,d4,g4]@15 ~",
  AF: "[[d4,gb4]@15 ~ db4@5 ~ [b3,d4]@5 ~ db4@3 ~ [d4,gb4]@23 ~ [d4,gb4]@4 [e4,g4]@3 ~, a3@21 ~@7 a3@26 ~@10, ~@15 e4@7 ~@5 e4@4 ~@33, ~@16 g4@15 ~@33]/4", // D Bm D Em
  AG: "[[g4,b4]@6 [gb4,a4]@4 [f4,ab4]@2 a4@18 ~ d4@18 ~@15, ~@12 gb4@37 ~@15, ~@15 a3@9 ~@8]/4", // G Gbm Fm
})).s("gm_synth_strings_1").gain(0.35).pan(0.2)

// chords · kalimba
const kalimba = note(`<
  ~@3 A B C D E F G H I J K L M N O P Q R S T U V W ~@2 X Y ~ Z AA AB AC AD AE AF AG AH AI AJ AK@2 AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA L BB BC BD BE BF BG BH BI BJ BI BK ~@2 BL BM BN BO BP BQ@2 BR BS BT@2 BU BV BW@2 BX BY BZ
  CA CB CC CD CE CF CG CH CI CJ CK CL CM@2 ~@6
>`.pickRestart({
  A: "~@8 f5 [db5,f5]!3 [db5,gb5] eb5 [eb5,gb5]!2", B: "bb5 [gb5,bb5]!4 ~ [f5,ab5]!3 ~ [e5,g5] ~ [f5,ab5]!4",
  C: "ab5 [f5,ab5]!4 f5 [f5,ab5]!3 ab5 [f5,ab5]!3 f5 ~@2", // Fm
  D: "~@2 [ab5,f6]!3 ~ [ab5,f6]@2 ~@2 [gb5,eb6] ~ [gb5,eb6] ~ [gb5,eb6]!2", // Db Ebm
  E: "[gb5,eb6] ~ [f5,db6] ~@3 [f5,db6]!7 ~@3", // Ebm Db
  F: "[db5,f5] ~@3 [db5,f5] ~ [db5,f5]!3 f5!2 ~ [eb5,gb5] ~@3, ~@9 db5@3 ~@4", // Db Ebm
  G: "[f5,ab5] ~@3 [f5,ab5] ~ [f5,ab5]!4 ~@2 [db5,f5] ~@3", // Fm Db
  H: "[gb5,bb5]!2 bb5 [gb5,bb5]!4 gb5 [gb5,bb5]!3 ~ [f5,ab5] ~@3", // Gb Fm
  I: "[f5,ab5] ab5 f5@2 ~@2 [f5,ab5] ~ [gb5,bb5]!3 bb5 [f5,ab5]!2 ab5 ~, ~@2 db5 ~@13", // Fm Gb Fm
  J: "[c5,eb5]!4 ~@2 [ab4,b4,c5] [ab4,c5]!3 ~@2 ab5@2 ~@2, ~@12 c5 ~@3", // Cm Ab
  K: "[db5,f5] ~ ab5@2 ~@2 [db5,f5] ~ [gb5,bb5]!3 bb5 [f5,ab5]!2 ~@2, ~@2 db5 ~@13", // Db Gb Fm
  L: "[gb5,eb6]!4 ~@2 [eb5,c6]!8 ~@2", M: "f5 ~ [f5,ab5]!2 ~@2 [db5,f5] ~ [gb5,bb5]!3 bb5 [f5,ab5]!2 ab5 ~",
  N: "[db5,f5]!3 ~ f5 ~ [db5,f5]!4 db5@2 gb5 [eb5,gb5]!2 ~, ~@10 f5 ~@5", // Db Ebm
  O: "[f5,ab5]!2 ~ ab5 f5 ~ [f5,ab5]!5 ~ [db5,f5]!3 ~", // Fm Db
  P: "[gb5,ab5,bb5] [gb5,bb5]!3 bb5 [gb5,bb5]!5 gb5 ~ [f5,ab5]!2 ~@2", // Gb Fm
  Q: "[f5,ab5] ~ [db5,f5] ~@3 [f5,ab5] ~ [gb5,bb5]!2 bb5 ~ [f5,ab5]!2 ab5 ~", // Fm Db Fm Gb Fm
  R: "[c5,eb5]!3 eb5 ~@2 [ab4,c5]!3 ~@3 [c5,ab5]!2 ~@2", // Cm Ab Fm
  S: "[db5,f5] ~ ab5@2 ~@2 [db5,f5] ~ bb5 ~ [db5,f5] ~@3 ab4 ~, ~@2 db5 ~@13", // Db
  T: "~@2 eb5 ~@3 f5 ~ gb5 ~@3 [gb5,bb5]!2 bb5 ~", U: "[f5,ab5]!3 ~@3 [db5,f5]!6 ~@4",
  V: "eb5 ~ eb5@4 f5 ~ gb5 ~@3 [gb5,bb5]!2 bb5 ~", W: "[f5,ab5]!6 ab5 ~@9",
  X: "~@2 [f5,bb5,db6] ~ [f5,a5,db6] ~ [f5,ab5,db6] ~ [f5,bb5,db6] ~ [g5,bb5,eb6] ~@5", // Bbm Faug Db Bbm Eb
  Y: "[db5,gb5,bb5] ~ [db5,gb5,ab5]@2 ~@12", Z: "[gb5,bb5] ~@7 [f5,ab5]@7 ~",
  AA: "~@2 [bb5,db6] ~ [bb5,db6] ~ [bb5,db6] ~ [bb5,db6] ~ c6@2 ~@2 bb5@2, ~@10 ab5 ~@3 gb5 ~", // Bbm
  AB: "[ab5,c6] ~ [ab5,c6]@2 ~@2 [gb5,bb5] ~ [c5,eb5]@8", AC: "~@8 eb5@4 f5@3 ~", AD: "[f5,ab5]@7 ~ [eb5,gb5]@6 ~@2",
  AE: "~@2 [ab5,c6] ~ [ab5,c6] ~ [ab5,c6] ~ [ab5,c6] ~ [gb5,bb5]@3 ~ ab5@2, ~@14 f5 ~", // Ab Gb
  AF: "[gb5,bb5] ~ [gb5,bb5]@3 ~ [f5,ab5] ~ [db5,f5]@7 ~", AG: "~@8 [db5,f5]@4 [eb5,gb5]@3 ~",
  AH: "[gb5,bb5]@7 ~ [f5,ab5]@6 ~@2", // Gb Fm
  AI: "~@2 [ab5,f6] ~ [ab5,f6] ~ [ab5,f6] ~ [ab5,f6] ~ ab5@2 ~@2 [ab5,f6] ~, ~@10 gb6 ~@5", // Db
  AJ: "eb6@2 db6@11 ~@3, gb5@13 ~@3",
  AK: "[~@16 bb5@2 ~@2 bb5@2 [gb5,bb5,db6]@7 ~ [gb5,bb5,eb6] ~, ~@14 gb5@4 ~@2 gb5 ~@11]/2", // Gb Ebm
  AL: "[f5,ab5]@3 ~ [f5,ab5] ~ [f5,ab5]@4 ~@4 ab5 ~, db6@5 ~@3", // Fm
  AM: "[eb5,c6]@2 ~@2 [ab5,c6] ~ [ab5,c6]@3 ~ [gb5,bb5]@3 ~ [f5,ab5] ~, ab5 ~@15", AN: "[db5,f5]@3 ~@5",
  AO: "[gb5,bb5]@5 ~ [gb5,bb5,db6]@2 ~@4 [bb5,gb6]@3 ~", AP: "[db6,f6]@4 ~@2 ab5@5 ~@3 ab5 ~",
  AQ: "[ab5,c6]@3 ~@3 [ab5,c6]@3 ~@3 [ab5,c6] ~@3, ~@6 eb6 ~", AR: "[f5,db6]@3 ~@5",
  AS: "~@8 [db5,f5]!4 gb5 [eb5,gb5]!3", AT: "[eb5,bb5] [gb5,bb5]!4 gb5 [f5,ab5]!3 ab5 [e5,g5] ~ [f5,ab5]!4",
  AU: "[f5,ab5]!2 ab5 [f5,ab5]!9 ~@4", AV: "[db5,f5]!2 f5 [db5,f5]!2 db5 [db5,f5]!5 f5 [db5,gb5] [eb5,gb5] eb5 gb5",
  AW: "ab5 [f5,ab5]!2 f5 [f5,ab5]!4 f5 [f5,ab5] ab5 ~ [db5,f5]!2 f5 ~", // Fm Db
  AX: "bb5 [gb5,bb5]!6 gb5 [gb5,bb5]!3 ~ [f5,ab5]!2 ab5 ~", // Gb Fm
  AY: "[f5,ab5] ab5 [db5,f5] ~@3 [f5,ab5] ~ [gb5,bb5]!3 ~ [f5,ab5]!2 ab5 ~", // Fm Db Fm Gb Fm
  AZ: "[c5,eb5]!3 eb5 ~@2 [ab4,c5]!4 ~@2 [c5,ab5]@2 ~@2", // Cm Ab Fm
  BA: "[db5,f5] ~ ab5@2 ~@2 [db5,f5] ~ [gb5,bb5]!3 bb5 [f5,ab5]!2 ab5 ~, ~@2 db5 ~@13", // Db Gb Fm
  BB: "~@2 [f5,ab5]!2 ~@2 [db5,f5] ~ [gb5,bb5]!3 ~ [f5,ab5]!2 ab5 ~", // Fm Db Gb Fm
  BC: "[db5,f5]!3 f5 [db5,f5]!4 db5 [db5,f5]!2 ~ [eb5,gb5]!2 gb5 ~", // Db Ebm
  BD: "[f5,ab5]!2 ab5 [f5,ab5]!6 f5 [f5,ab5] ab5 f5 [db5,f5]!2 db5", // Fm Db
  BE: "[gb5,bb5] bb5 [gb5,bb5]!4 gb5 [gb5,bb5]!3 bb5 ~ [f5,ab5]!2 ab5 ~", // Gb Fm
  BF: "[f5,ab5] ab5 [db5,f5] ~@3 [db5,f5] ~ [gb5,bb5]!3 bb5 [f5,ab5]!2 ab5 ~", // Fm Db Gb Fm
  BG: "[c5,eb5]!3 eb5 ~@2 [ab4,c5]!3 ~@3 [c5,ab5] ~@3", // Cm Ab Fm
// … 88 more lines

More by Engelbert Humperdinck