Strudelify
Portofino cover art

1969 · Nur Das Beste

Portofino

Engelbert Humperdinck

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, A@4 for four bars: 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 J L H@2 M N J O J L P O Q R S T U V A W L@2 X O H@2 A Y Z@2 AA AB AC AD AE AF U A B A F AG G
  AH Y O AD O H AI AD AJ Y O AD AK AD AK AD R AL AM U AN AO AP AQ@2 AR AS AT AU AV AW AX AY AZ AW BA AW AZ AP BA BB AZ
  BC BD AO BE AO BE BF@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: "ab1@2 ~ ab1 eb2@2 eb1@2", M: "db2@5 ~ db2@2 ab1@8",
  N: "db2@5 ~ db2@2 ab1@4 db2@3 ~", O: "ab1@2 ~ ab1 eb2@2 ab1@2", P: "db2@5 ~@3 ab2@4 ab1@3 ~",
  Q: "db2@5 ~ db2@2 db2@4 ~@4", R: "eb2@2 ~ eb2 bb1@2 eb2@2", S: "ab1@3 ~@3 ab1@2 f1@5 ~ f1@2",
  T: "bb1@4 ~@2 bb1@2 eb2@5 ~ eb2@2", U: "ab1@5 ~ eb2@2 ab2@4 eb2@4", V: "ab1@5 ~ ab1 ~ ab1@6 ~@2",
  W: "db2@5 ~ ab2@2 bb2@4 ab2@3 ~", X: "ab1@4 ~@2 ab1@2 eb2@4 ab1@3 ~", Y: "db2@4 ~@2 db2@2 ab2@4 ab1@3 ~",
  Z: "gb1@5 ~ db2@2 eb2@4 db2@4", AA: "gb1 ~ gb1@4 db2@2 eb2@4 db2@3 ~", AB: "db2@3 ~@3 ab2@2 bb2@4 ab2@2 ~@2",
  AC: "ab1@2 ~ ab1 eb1@2 eb2@2", AD: "db2@4 ~@2 db2@2 ab2@4 db2@3 ~", AE: "gb1@5 ~ db2@2 gb2@4 db2@3 ~",
  AF: "db2@2 ~ ab2@3 ab2 ~", AG: "db2@4 ~@2 db2@2 ab2@7 ~", AH: "db2@2 ~ db2 ab1@2 ~@2",
  AI: "db2 ~ db2@2 ~@2 db2@2 ab2@4 ab1@4", AJ: "db2@2 ~ db2 db2@2 ab1@2", AK: "ab1@2 ~ eb2 ab2@2 ab1@2",
  AL: "ab1@2 ~ eb2 f2@2 c2@2", AM: "bb1@2 ~ bb1 eb2@2 bb1@2", AN: "a1@5 ~ e2@2 a2@6 ~@2", AO: "d2@5 ~ a2@2 b2@4 a2@4",
  AP: "d2@5 ~ a2@2 b2@4 a2@2 ~@2", AQ: "a1@5 ~ a1@2 e2@4 e1@4", AR: "a1@3 ~@3 a1@2 e2@4 a1@2 ~@2",
  AS: "a1@3 ~@3 a1@2 e2@4 a1@4", AT: "d2@2 ~ d2 a2@2 a1@2", AU: "d2 ~ d2@2 ~@2 d2@2 a2@4 a1@4",
  AV: "d2@5 ~ d2@2 b2@4 a2@4", AW: "d2@2 ~ d2 a2@2 d2@2", AX: "g2@5 ~ d3@2 e3@4 d3@2 ~@2",
  AY: "g2 ~ g2@4 d2@2 e2@4 d2@4", AZ: "g1@5 ~ d2@2 e2@4 d2@3 ~", BA: "a1@5 ~ e2@2 a2@4 a1@4",
  BB: "d2@2 ~ d2 e2@2 gb2 ~", BC: "d2@4 ~@2 a2@2 b2 ~ b2@2 a2@2 ~@2", BD: "a1@4 ~@2 e2@2 a2@4 e2@3 ~",
  BE: "d3 ~ d3@3 ~ a2@2 b2@4 a2@4", BF: "[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 I O P Q R S@2 T U V W A X@2 ~@4 Y ~ E ~@5 E ~ E ~@6 Z AA
  AB AC AD AE AF AG AH AI AB AC AJ AK AL AM AN@2 AO AP AQ AR AS AT AQ AU AV AW@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: "~@10 [gb3,bb3]!3 ~ [ab3,c4]!2", P: "[ab3,c4] ~ [bb3,db4] ~ [bb3,db4]@6 ~@6", Q: "bb3@5 ~ bb3@2 db4@5 ~ eb4@2",
  R: "db4@3 ~ ab3 ~ ab3@6 ~@2 ab3 ~", S: "[c4@3 ~ c4 ~ c4@4 bb3@3 ~ ab3@12 ~@6]/2", T: "[bb3,db4]@3 db4@3 gb4@2",
  U: "f4@5 ~ ab3@6 ~@2 ab3 ~", V: "c4@5 ~ db4@6 eb4@4", W: "~@2 f3@3 ~@3, db4@5 ~@3",
  X: "[[gb3,bb3]@5 ~ [f3,ab3]@2 ~@2 [e3,g3] ~ [f3,ab3]@11 ~@9]/2", Y: "~@2 eb4 ~@3 ab4 ~ ab5 ~@7",
  Z: "bb3@2 ab3@9 ~@5, [db3,gb3]@11 ~@5", AA: "b3@5 ~ a3@4 ~@6, [db3,e3]@9 ~@7", AB: "~@10 gb4 ~@3 db4 ~",
  AC: "e4 ~ d4@3 ~@11", AD: "~@10 [b3,d4]!3 ~ [a3,db4]!2", AE: "[a3,db4] ~ [g3,b3] ~ [e3,g3]@6 ~@6",
  AF: "~@10 e4 ~@3 b3 ~", AG: "d4 ~ db4 ~@13", AH: "~@10 [b3,d4] ~ [a3,db4] ~ [gb3,a3] ~",
  AI: "[g3,b3] ~ [e3,g3] ~ [d3,gb3]@5 ~@7", AJ: "~@10 [g3,b3]!3 ~ [a3,db4]!2", AK: "[a3,db4] ~ [b3,d4] ~ [b3,d4]@4 ~@8",
  AL: "b3 ~ b3 d4@2 ~@2 e4", AM: "d4@4 a3 ~ a3@6 ~@2 a3 ~", AN: "[db4@3 ~ db4 ~ db4@4 b3@4 a3@13 ~@5]/2",
  AO: "b3@5 ~ d4@6 g4@4", AP: "gb4@6 a3@7 ~ a3 ~", AQ: "db4@3 d4@3 e4@2", AR: "d4@5 ~@3", AS: "b3@6 d4@6 [b3,g4]@3 ~",
  AT: "[a3,gb4]@5 ~ a3@7 ~ a3@2", AU: "[gb3,d4]@9 ~@7", AV: "~@8 [d3,gb3]@3 ~ [e3,g3]@2 ~@2",
  AW: "[[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@2 C D B E B F E G E H B H E I E J K L E M N O E P Q R S ~@22 T@2 U V T W X T X Y G T@2 N Z AA AB N X AC AD AE AF
  AG AH ~@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 ~ db5 ~ db5 ~@3 ab4 ~", D: "db5 ~ db5 ~@3 ab4@2 db5 ~ db5 ~@3 ab4 ~",
  E: "db5 ~ db5 ~@5 db5 ~ db5 ~ db5 ~ ab4 ~", F: "db5 ~ db5 ~@3 db5 ~@5 ab4 ~@3",
  G: "~@2 db5 ~@5 db5 ~ db5 ~ db5 ~ ab4 ~", H: "~@2 ab4 ~@5 ab4 ~ ab4 ~@3 ab4 ~",
  I: "db5 ~ db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~ ab4 ~", J: "db5 ~ db5 ~@3 ab4 ~@3 db5 ~ db5 ~ ab4 ~",
  K: "~@2 db5 ~@3 ab4 ~ db5 ~ db5 ~ ab4 ~ ab4 ~", L: "~@10 ab4 ~ ab4 ~ ab4 ~",
  M: "ab4 ~ ab4 ~@3 ab4 ~@3 ab4 ~ ab4 ~ ab4 ~", N: "db5 ~ db5 ~@3 db5 ~@3 db5 ~ db5 ~ db5 ~",
  O: "ab4 ~ ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~", P: "~@2 bb4 ~@5 bb4 ~ bb4 ~ eb5 ~ eb5 ~",
  Q: "ab4 ~ ab4 ~@7 ab4 ~ ab4 ~ ab4 ~", R: "bb4 ~ bb4 ~@3 bb4 ~@3 eb5 ~ eb5 ~ eb5 ~", S: "ab4 ~ ab4 ~@3 ab4 ~@9",
  T: "db5 ~ db5 ~@3 db5 ~@3 db5 ~ db5 ~ ab4 ~", U: "db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~@3 ab4 ~",
  V: "db5 ~ db5 ~@3 db5 ~ db5 ~ db5 ~ db5 ~ ab4 ~", W: "db5 ~ db5 ~ db5 ~@5 db5 ~ db5 ~ ab4 ~",
  X: "~@2 ab4 ~@7 ab4 ~ ab4 ~ ab4 ~", Y: "db5 ~ db5 ~ ab4 ~@5 db5 ~ db5 ~ db5 ~", Z: "ab4 ~@5 ab4 ~ ab4 ~ ab4 ~@5",
  AA: "db5 ~ db5 ~@3 db5 ~@5 db5 ~ db5 ~", AB: "ab4 ~ ab4 ~@3 ab4 ~@5 ab4 ~ ab4 ~",
  AC: "db5 ~ db5 ~@3 ab4 ~ db5 ~ db5 ~ db5 ~ db5 ~", AD: "~@2 bb4 ~@3 bb4 ~ bb4 ~ bb4 ~@3 bb4 ~",
  AE: "~@2 eb5 ~@3 eb5 ~ ab4 ~ ab4 ~@3 ab4 ~", AF: "bb4 ~ bb4 ~@3 bb4 ~ eb5 ~ eb5 ~@3 eb5 ~",
  AG: "bb4@2 ab4 ~@3 ab4 ~@7 ab4 ~", AH: "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@7 ~ db4@7 ~ c4@7 ~@25]/6", // Ebm Db
  T: "[gb4@12 [ab3,f4]@19 ~, db4@15 ~, bb3@5 ~@11]/2", // Db
  U: "[[eb4,gb4] f4 [eb4,gb4] f4 [eb4,gb4] [db4,f4], ab3@47 ~, c4@7 ~ db4@7 ~ c4@7 ~ db4@7 ~ c4@7 ~@9]/6", // 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
  BH: "[db5,f5] ~ [f5,ab5]!2 ab5 ~ [db5,f5] ~ bb5@3 ~ [f5,ab5]!2 ab5 ~, ~@8 gb5 ~@7", // Db Fm Db Fm
  BI: "eb5 ~ eb5@4 f5@2 gb5@4 bb5@3 ~", BJ: "[f5,ab5]!3 ab5 ~@2 [db5,f5]!6 ~@2 db5@2, ~@14 f5 ~",
  BK: "[f5,ab5]!4 ab5 ~@11", BL: "~@2 [f5,bb5,db6] ~ [f5,a5,db6] ~ [f5,ab5,db6] ~ [f5,ab5,db6] ~ [g5,bb5,eb6] ~@5",
  BM: "bb5 [db5,ab5] ~@2 [db5,gb5,ab5]!2 [db5,ab5] [db5,gb5] [db5,gb5,ab5] [gb5,ab5] ~@6", // Db5 Dbsus4 Db5 Gb5 Dbsus4 Gbsus2
  BN: "[db5,e5,b5]!3 [db5,e5,a5]!6 ~@3 d5@2 ~@2", BO: "[g5,b5]@6 ~@2 [gb5,a5]@7 ~",
  BP: "~@2 [b5,d6] ~ [b5,d6] ~ [b5,d6] ~ [b5,d6] ~ [a5,db6]@4 b5@2, ~@14 g5 ~", // Bm A
// … 82 more lines

More by Engelbert Humperdinck