Strudelify

What's Another Year

Johnny Logan

KeyF majorTempo102 bpm
0:00/0:00
// What's Another Year — Johnny Logan
// 102 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 72 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 · fretless bass
const bass = note(`<
  A@4 B A@2 ~ C@2 D C@2 E C@5 F G E C H I J K L M N O P@2 C D Q G R C S T U V W X Y@2 K Z@2 AA@2 AB@2 AC@2 AD AE AF@7 AG
  AH AI AJ AK AL@2
>`.pickRestart({
  A: "f1@7 ~", B: "eb1@7 ~", C: "f1@9 ~@3 f1 ~@3 f1@13 ~@3", D: "f2@9 ~@3 f2 ~@3 f2@13 ~@3",
  E: "c2@9 ~@3 c2 ~@3 c2@13 ~@3", F: "f1@9 ~@3 f1 ~@3 d1@9 ~@3 d1 ~@3", G: "g1@9 ~@3 g1 ~@3 g1@13 ~@3",
  H: "f2@10 ~@2 f2 ~@3 f2@7 ~ e2@6 ~@2", I: "d2@11 ~ d2 ~@3 a1@7 ~ d1@8", J: "d2@9 ~@3 d2@2 ~@6 a1@2 ~@2 d1@8",
  K: "a1@9 ~@3 a1 ~@3 a1@13 ~@3", L: "a2@9 ~@3 a2 ~@3 a2@3 ~ e2@3 ~@5 a1@2 ~@2", M: "g1@10 ~@2 g1 ~@3 g1@12 ~@4",
  N: "g2@10 ~@2 g2 ~@3 g2@12 ~@4", O: "g2@9 ~@3 g2 ~@3 g2@11 ~@5",
  P: "[g2@15 ~ c2 ~@3 c2 ~@7 f2@14 ~@2 f2 ~@3 f2@13 ~@3]/2", Q: "d1@9 ~@3 d1 ~@3 d1@13 ~@3", R: "c2 ~@11 c2@13 ~@7",
  S: "f2@10 ~@2 f2 ~@3 f2 ~@3 f2 ~@3 f2@4 e2@3 ~", T: "eb2@9 ~@3 eb2 ~@3 eb2@11 ~@5",
  U: "eb2@10 ~@2 eb2 ~@3 eb2@13 ~@3", V: "eb1@10 ~@2 eb1 ~@3 eb1@12 ~@4", W: "eb2@11 ~ eb2 ~@3 eb2@10 ~@6",
  X: "c2@10 ~@2 c2 ~@3 c2@11 ~@5", Y: "c2@9 ~@3 c2 ~@3 c2@10 ~@6", Z: "d2/2", AA: "[a1@63 ~]/2", AB: "g1/2",
  AC: "[eb1@57 ~@7]/2", AD: "~@2 f1@11 ~ f1 ~@3 f1@14", AE: "~@3 f1@9 ~@4 f1 ~@3 f1@12",
  AF: "[~@5 f1@9 ~@4 f1 ~@3 f1@14 ~@3 d1@9 ~@3 d1 ~@3 d1@14 ~@3 g1@9 ~@4 g1 ~@3 g1@14 ~@3 c2@2 ~@6 c2@17 ~@9 f2@9 ~@3 f2 ~@3 f2@14 ~@3 f1@9 ~@4 f1 ~@3 f1@14 ~@3 f2@9 ~@3 f2 ~@4]/7",
  AG: "f2@14 ~@2 f1@9 ~@4 f1 ~@2", AH: "~ f1@14 ~@3 f2@9 ~@4 f2", AI: "~@3 f2@14 ~@3 f1@9 ~@3",
  AJ: "f1 ~@4 f1@14 ~@2 f2@9 ~@2", AK: "~@2 f2 ~@3 f2@14 ~@3 f1@9", AL: "[~@4 f1 ~@3 f1@14 ~@3 f2@34 ~@5]/2",
})).s("gm_fretless_bass").gain(0.48)

// other · alto sax
const alto_sax = note("<A B C@3 D E@2 ~@31 F G@2 H I J K L M ~@19 N O@3 ~>".pickRestart({
  A: "~@4 f4@2 ab4 ~ ab4@6 c5 ab4", B: "bb4@11 ~@4 g4@15 ~@2, ~@13 bb4@2 ~@17, ~@7 ab4 ~@8",
  C: "[~@11 f4@2 ab4 ~@2 ab4@11 c5@2 ab4@2 bb4@14 [c5,db5]@2 ~ eb5@19 ~@8 db5@4 ~ c5@4 ~ bb4@6 ab4@3 f4@2, ~@47 d5@2 ~@47]/3", // Dbmaj7
  D: "~ bb4@13 ~@2 eb5@16, ~@7 db5 ~@8, ~@15 d5@2 ~@15", E: "[f5@55 ~@9]/2", F: "~@7 eb4",
  G: "[~ eb5@26 bb4 c5@3 bb4@2 ab4@2 ~ ab4@21 ~@2 f5@3 eb5@2, ~@35 bb4@2 ~@27]/2",
  H: "~ c5@2 bb4@2 ab4@7 f4@2 eb4@2 bb4@2 ab4@3 f4@5 ~ eb4@3 c4@2", I: "~@3 c4@3 bb3@2 ab3@14 ~@6 f4@4",
  J: "~ f5@25 ~ d5@3 c5@2", K: "~ a4@10 ~ bb4@2 c5 ~@2 a4@3 g4@2 ~ f4@9",
  L: "~@4 f5@3 ~ d5@3 ~ c5@2 a4@10 ~@2 c4@2 d4@2 f4@2",
  M: "~@2 g4 ~ g4@2 f4@2 g4@12 f4 ~ f4@2 d4@4 ~@4, ~@3 ab4@2 ~@27", N: "~@7 a3@4 c4@5 d4@8 f4@8",
  O: "[a4@16 g4@3 f4@4 ~ d5@3 c5@38 ~@31, ~@23 c5@2 ~@71]/3",
})).s("gm_alto_sax").gain(0.46).pan(0.6)

// other · alto sax · soft notes
const alto_sax_soft = note("<~@5 [~@13 c5@2 ~@17] ~@40 [~@5 d2 ~@26] [~@22 g4 ~@5 c4@4] [~ d4@21 ~@10] ~@23>")
  .s("gm_alto_sax").gain(0.26).pan(0.6)

// chords · piano
const piano = note(`<
  A B A B C D E F G H@2 I J@4 G H@2 I J@4 K L M N O P Q R@2 S T U V W X@2 Y Z AA Z AB AC AB AD AE AF@3 AG@2 AH AI AJ@3
  AK@3 AL@6 AM AN@3
>`.pickRestart({
  A: "~@6 ab3 f3, ~ f3@6 ~, ~ ab3@2 ~, ~@12 db4@8 db4@9 ~@3, ~@16 f4@13 ~@3",
  B: "~@7 eb3, ~ eb3@6 ~, ~ g3@2 g3, ~@3 bb3@2 bb3@3, ~ eb4",
  C: "~@6 ab3 f3, ~ f3@6 ~, ~ ab3@2 ~, ~@3 db4@2 db4@2 ~, ~@4 f4@3 ~",
  D: "~@7 eb3, ~ eb3@6 ~, ~@8 g3@16 g3@7 ~, ~@12 bb3@8 bb3@11 ~, ~@16 eb4@15 ~",
  E: "~@4 c4 a3 g3 a3, ~@4 f3@15 ~@13, ~@8 g3@11 ~@13, ~@12 a3@7 ~@13", F: "f3 a3 g3 a3 c4 a3 g3 a3",
  G: "~@24 c4@4 f4@3 ~, f2, ~@4 f3@25 ~@3, ~@2 a3@2 f4@3 ~, ~@12 c4@8 a3@9 ~@3",
  H: "[[f3,a3,c4,e4]@3 [f3,a3,c4]@5 ~@2 a3 c4 d4 a3 c4 d4, ~@3 e4@6 f3@6 ~, ~ f2]/2", // Fmaj7 F
  I: "[f3,a3,c4]@12 [f3,a3,c4]@15 ~@5", // F
  J: "[~@8 g3@4 bb3@8 ~@4 d3@4 ~@4 [d3,g3]@11 ~@5 d3@16 ~@20 f3@4 ~@28 f3@4 c3@4 f3@3 ~, g2@28 bb3@37 ~@7 f3@12 ~@8 f3@8 ~@4 f3@11 ~@13, ~@4 d3@16 c4@9 ~@3 g2@25 ~@7 f2@31 ~ f2@32, ~@44 g3@21 ~@3 c3@16 ~@4 c3@8 ~@4 c3@16 ~@12, ~@76 c4@28 ~@4 c4@19 ~]/4", // G5
  K: "~@2 f3 a3 ~ a3 ~ d3, d2@3 ~, ~ d3@5 f3@2, ~@16 d4@9 ~@7",
  L: "~@2 f3 a3 ~ a3 f3 a3, d2@25 ~@7, ~ d3@4 ~@3, ~@16 d4@15 ~",
  M: "~@3 a3 c4 ~ e3 c3, a2@7 ~, ~ c3@5 ~@2, ~@2 e3@3 a3@3",
  N: "~@3 a3 c4 a3 e3 a3, a2@25 ~@7, ~ c3@5 ~@2, ~@8 e3@9 ~@15",
  O: "~@2 g3 bb3 d4 bb3 ~ d3, g2@29 ~@3, ~@4 d3@18 ~@2 g3@7 ~",
  P: "~@2 f3 bb3 ~ bb3 f3 bb3, g2@29 ~@3, ~@2 d3@9 ~@5, ~@16 d4@13 ~@3",
  Q: "~@4 d3@4 g3@4 b3@4 g3@4 d3@3 ~ g3@4 d3@4, g2@8 ~@4 g2@19 ~",
  R: "[~@4 g3@4 bb3@4 d4@2 ~@2 [bb3,d4] ~@3 [c3,bb3,d4] ~@7 [f3,a3,c4]@24 ~@4 f2@8, c3@13 ~@3 c3@2 ~@10 f2@27 ~@9, ~@13 [f3,a3,c4]@3]/2", // Bb Gm F
  S: "[f2,e3,a3,c4]@19 ~@5 f2@8, ~@5 [e3,a3,c4]@3", T: "[f2,eb3,a3,c4]@5 ~ f2@2, ~@5 [eb3,a3,c4]@3",
  U: "[d2,d3,gb3,a3,c4]@10 ~@2 d2@3 ~, ~@10 [d3,gb3,a3,c4]@5 ~", V: "[g2,d3,g3,bb3]@29 ~@3",
  W: "[c2,d3,g3,bb3] ~@11 [c2,d3,g3,bb3]@14 ~@6", // Gm
  X: "[f2,a3,c4]@11 ~ [f3,a3,c4]@4 f2@4 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@4 ~@2, f3@8 ~@16 f2@7 ~", // F
  Y: "[ab2,eb3,ab3,c4]@3 ~@3 [eb3,ab3,c4]@2, ~@3 [eb3,ab3,c4]@3 ~@2, ~ ab2", // Ab
  Z: "[ab2,f3,ab3,db4]@11 ~@13 [f3,ab3,db4]@7 ~, ~@3 [f3,ab3,db4]@3 ~@2, ~@16 ab2@15 ~", // Db
  AA: "[ab2,eb3,ab3,c4]@11 ~@13 [eb3,ab3,c4]@7 ~, ~@3 [eb3,ab3,c4]@3 ~@2, ~@16 ab2@15 ~", // Ab
  AB: "[c3,f3,a3,c4]@12 ~@12 [f3,a3,c4]@7 ~, ~@3 [f3,a3,c4]@3 ~@2, ~@16 c3@15 ~", // F
  AC: "[c3,f3,bb3,d4]@12 ~@12 [f3,bb3,d4]@7 ~, ~@3 [f3,bb3,d4]@3 ~@2, ~@16 c3@15 ~", // Bb
  AD: "[a2,f3,a3,d4]@11 ~ [a2,e3,a3,db4]@20", AE: "~@4 a4@3 ~ d5@4 a4 ~ a5@4 a4 ~ d5@2 ~@5 a4 a5@2 ~ a4",
  AF: "[a5@4 ~ a4@2 f5@4 ~ d5@6 ~@2 a5@3 ~ f5@3 ~ d5@2 ~@2 c5@3 g4@2 d5@4 g4 ~ e5@4 g4 g5@4 ~@2 g4 ~ c5@3 g4 d5@5 ~ g4 ~@4 g4 c5@5 ~ g4 ~@4 g4 c5@3 ~ g5@5 ~@3, ~@11 a4@2 ~@10 a4@2 ~@2 a4@2 ~@2 a4@2 ~@27 a3@18 ~@18, ~@68 g5@7 ~@5 d5@5 ~@2 g4@2 ~@7]/3",
  AG: "[bb4@4 ~ c5@4 ~ bb4@7 ~ f4 ~ f5@3 ~ bb4@3 ~ c5@2 ~@2 bb4@5 f4 ~@4 f4@2 bb4@6 ~ f4 f5@3 ~ bb4@4 f4@2 ~@2, ~@4 f4@2 ~@3 f4@2 ~@12 f4@2 ~@2 f4@2 ~@2 f4@2 ~@6 f5@5 ~@11 f4@2 ~@7]/2",
  AH: "f4@2 bb3@3 g3@2 ~ f4@3 bb3@2 g3@2 ~ f4@3 bb3@3 g3@2 f4@3 bb3@3 g3@2",
  AI: "f4@3 bb3@3 g3@2 ~@3 bb3@3 g3@2 ~ f4@3 bb3@2 g3@2 ~ f4@3 bb3@2 g3@2, ~@9 f4@4 ~@19",
  AJ: "[~@2 [f2,f3,a3,c4]@21 [f3,a3,c4]@4 ~@2 [f3,a3,c4]@5 ~ [e3,a3,c4]@21 [e3,a3,c4]@5 ~@2 [e3,a3,c4]@5 ~ [eb3,a3,c4]@21 [eb3,a3,c4]@4 f2@2, ~@27 f2@7 ~ f2@25 ~ f2@7 ~ f2@25 ~@2]/3", // F Am Adim
  AK: "[[eb3,a3,c4]@5 ~@2 [d2,d3,gb3,c4]@12 [d3,gb3]@13 ~@2 d3@4 ~@2 [g2,d3,g3,bb3]@13 [d3,g3,bb3]@12 [d3,g3,bb3]@9 [c2,g3,bb3,d4] ~@7 [c2,g3,bb3,d4]@14, ~@7 a3@25 [gb3,a3]@6 ~@58, ~@19 [d2,c4]@19 ~@15 g2@22 ~@21]/3", // Adim D7 D Gm Gbm D7
  AL: "[~@12 [f2,f3,a3,c4]@12 ~@13 [f3,a3,c4]@8 [f2,f3,bb3,d4]@13 ~@12 [f3,bb3,d4]@8 ~ [f2,f3,a3,c4]@12 ~@13 [f3,a3,c4]@8 [f2,f3,bb3,d4]@13 ~@13 [f3,bb3,d4]@8 [f2,f3,a3,c4]@13 ~@12 [f3,a3,c4]@8 ~ [f2,f3,bb3,d4]@12, ~@24 [f3,a3,c4]@13 ~@21 [f3,bb3,d4]@12 ~@21 [f3,a3,c4]@13 ~@21 [f3,bb3,d4]@13 ~@21 [f3,a3,c4]@12 ~@21, ~@28 f2@17 ~@17 f2@16 ~@18 f2@16 ~@17 f2@16 ~@18 f2@17 ~@12]/6", // F Bb F Bb F Bb F Bb …
  AM: "~@13 [f3,bb3,d4]@8 [f2,f3,a3,c4]@11, [f3,bb3,d4]@13 ~@19, ~@5 f2@16 ~@11", // Bb F Bb
  AN: "[~@15 [f3,a3,c4]@8 [f2,f3,bb3,d4]@13 ~@12 [f3,bb3,d4]@8 ~ [f2,f3,a3,c4]@13 ~@26, ~@2 [f3,a3,c4]@13 ~@21 [f3,bb3,d4]@12 ~@48, ~@6 f2@17 ~@17 f2@16 ~@40]/3", // F Bb F Bb
})).s("gm_piano").gain(0.2).pan(0.3)

// other · french horn
const french_horn = note("<~@3 A B C D@2 ~@50 E@2 F@8 G H I@2>".pickRestart({
  A: "~@5 bb4 ab4 g4", B: "ab4", C: "g4", D: "[a4@3 ~]/2", E: "[~@5 bb4@17 a4@7 ~ g4@7 ~@2 gb4@16 g4@9]/2",
  F: "[a4@8 bb4@21 a4@6 ~ g4@6 bb4@2 ~@6 bb4@17 ~@13 a3 ~@3 a3 ~@3 a3@12 ~@13 bb3 ~@4 bb3 ~@3 bb3@12 ~@13 a3 ~@3 a3 ~@3 a3@12 ~@14 bb3 ~@3 bb3 ~@3 bb3@12 ~@13 a3 ~@4 a3 ~@3 a3@12 ~@13 bb3 ~@3 bb3 ~@3]/8",
  G: "bb3@12 ~@14 a3 ~@3 a3 ~", H: "~@2 a3@12 ~@13 bb3 ~@3 bb3", I: "[~@4 bb3@12 ~@9 a3@33 ~@6]/2",
})).s("gm_french_horn").gain(0.36).pan(0.6)

// chords · flute
const flute = note("<~@6 A B C ~@7 D E F ~@43 G@5 H@5>".pickRestart({
  A: "[c5,e5]@3 ~ [d5,f5]@4 [e5,g5]@4 [f5,a5]@4 [g5,bb5]@4 [a5,c6]@4 [g5,bb5]@4 [a5,c6]@4", // C Dm Em F Gm Am Gm Am
  B: "[bb5,d6] [a5,c6] [g5,bb5] [f5,a5] [e5,g5] [d5,f5] [c5,e5] [bb4,d5]", C: "[a4,c5]@19 ~@13", D: "f4@3 a4",
  E: "g4 c5", F: "a4@15 ~", G: "[~@12 a4@33 bb4@30 ~@4 a4@33 bb4@5 c5@4 ~@4 bb4@18 ~@3 a4@14]/5",
  H: "[~@11 c5@6 ~@3 d5@6 ~@2 bb4@24 ~ a4@23 ~@3 c5@6 ~@2 d5@27 ~@7 a4@23 ~@16]/5",
})).s("gm_flute").gain(0.16).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@15 A B C D E F G ~@2 H@2 I@2 ~@3 J ~@4 K L ~ M N O P Q R S P T ~@8 U@6 V@8 W@2
>`.pickRestart({
  A: "~@2 e4 f4 e4 ~@3", B: "f4", C: "a4@3 c5", D: "e5 f5 c5@2", E: "g5@7 ~ a5@8 c5@16", F: "~@2 g5 a5 bb5 c5 g5 d6",
  G: "c6@3 ~", H: "~@20 a5 ~@3 d5 ~@3 a5 ~ a5 ~", I: "~@20 g5 ~@3 c5 ~@3 g5 ~ g5 ~", J: "~@16 d5 ~@3 d5 ~@11",
  K: "~@4 bb4@4 d5@4 c5@3 ~ a5@4 f5@4 g5@4 d5@2 ~@2", L: "d5 ~@11 d5@15 ~@5",
  M: "f4 ~ e4 ~ f4@2 g4@2 a4 ~ g4@2 a4 ~ bb4 ~ c5 ~ a4@2 c5@2 d5 ~ f5@2 e5@2 f5@2 g5 ~", N: "ab5@31 ~",
  O: "bb5@2 ab5 bb5", P: "c6", Q: "db6@2 c6 bb5", R: "a5", S: "bb5@2 a5 f5", T: "a5@13 ~@3",
  U: "[~@2 f5@33 e5@34 eb5@34 d5@67 c5 ~@7 c5@14]/6",
  V: "[~@16 f4 ~@3 f4 ~@3 f4@13 ~@12 f4 ~@4 f4 ~@3 f4@13 ~@12 f4 ~@3 f4 ~@3 f4@13 ~@13 f4 ~@3 f4 ~@3 f4@13 ~@12 f4 ~@4 f4 ~@3 f4@13 ~@12 f4 ~@3 f4 ~@3 f4@13 ~@13 f4 ~@3 f4 ~@3 f4@13 ~@12 f4 ~@3 f4, ~@3 c6@61]/8",
  W: "[~@4 f4@13 ~@8 c6@34 ~@5, ~@25 f4@29 ~@10]/2",
})).s("gm_string_ensemble_1").gain(0.31).pan(0.7)

// other · string ensemble 1 · soft notes · Am Bb Am Gm
const string_ensemble_1_soft = note("<~@15 [[a3,c4] [bb3,d4] c4 d4 c4 [bb3,d4] [a3,c4] [g3,bb3]] ~@56>")
  .s("gm_string_ensemble_1").gain(0.18).pan(0.7)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q R S T U V W X ~@6 I@2 ~@16 Y@2 Z@2 AA AB AC AD AE AF AG@2 AH AI@3
>`.pickRestart({
  A: "[f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3]@2 ~@2 [a3,c4]@4 a3@3 ~ [f3,a3,c4]@4 [f3,a3,c4]@4 a3@3 ~, ~@12 f3@7 ~@13", // F Am F
  B: "[e3,a3,c4]@4 [e3,a3]@4 [e3,a3,c4]@2 ~@2 [e3,a3,c4]@4 [e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3,c4]@4 [e3,a3,c4]@3 ~", // Am A5 Am
  C: "[d3,a3,c4]@4 [a3,c4]@4 [a3,c4]@2 ~@2 [d3,a3,c4]@4 [d3,a3,c4]@3 ~ [d3,a3,c4]@4 [d3,a3,c4]@4 [d3,a3,c4]@3 ~", // D7 Am D7
  D: "[c3,a3,c4]@4 [c3,a3,c4]@4 [c3,a3,c4]@2 ~@2 [c3,a3,c4]@4 [c3,a3,c4]@3 ~ [c3,a3,c4]@4 [a3,c4]@4 [a3,c4]@3 ~, ~@24 c3@7 ~", // F Am
  E: "[bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3]@2 ~@2 [g3,bb3,d4]@4 [g3,bb3,d4]@3 ~ [bb3,d4]@4 [g3,bb3,d4]@4 [bb3,d4]@3 ~", // Bb Gm Bb Gm Bb
  F: "[g3,bb3,d4]@4 [g3,bb3,d4]@4 [bb3,d4]@2 ~@2 [g3,bb3,d4]@4 [bb3,d4]@3 ~ [g3,bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3,d4]@3 ~", // Gm Bb Gm Bb Gm
  G: "[f3,a3,c4]@4 a3@4 [a3,c4]@2 ~@2 [f3,a3,c4]@4 [f3,a3,c4]@3 ~ a3@4 [f3,a3,c4]@4 [a3,c4]@3 ~", // F Am F Am
  H: "[f3,a3,c4]@4 [a3,c4]@4 [f3,a3]@2 ~@2 [f3,a3,c4]@4 [a3,c4]@3 ~ [a3,c4]@4 [f3,a3,c4]@4 [f3,a3,c4]@3 ~", // F Am F Am F
  I: "[f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@4 [f3,a3]@3 ~ [a3,c4]@4 [f3,a3,c4]@4 a3@3 ~", // F Am F
  J: "[e3,a3,c4]@4 [e3,a3]@4 [e3,a3,c4]@2 ~@2 [e3,a3,c4]@4 a3@3 ~ [e3,a3]@4 [e3,a3,c4]@4 [e3,a3,c4]@3 ~", // Am A5 Am A5 Am
  K: "[d3,a3,c4]@4 [d3,a3,c4]@4 [d3,a3,c4]@2 ~@2 [d3,a3,c4]@4 a3@3 ~ [d3,a3,c4]@4 [d3,a3,c4]@4 [d3,a3,c4]@3 ~", // D7
  L: "[c3,a3,c4]@4 [c3,a3,c4]@4 [c3,a3,c4]@2 ~@2 [c3,a3,c4]@4 [c3,a3,c4]@3 ~ [c3,a3,c4]@4 [c3,a3,c4]@4 [c3,a3,c4]@3 ~", // F
  M: "[d3,g3,bb3]@4 [g3,bb3]@4 [d3,g3,bb3]@2 ~@2 [d3,g3,bb3]@4 [d3,g3,bb3]@3 ~ bb3@4 [d3,g3,bb3]@4 [d3,g3,bb3]@3 ~", // Gm
  N: "[d3,g3,bb3]@4 [d3,g3,bb3]@4 [d3,bb3]@2 ~@2 [d3,g3,bb3]@4 [d3,g3,bb3]@3 ~ [d3,g3,bb3]@4 [d3,g3,bb3]@4 [d3,g3,bb3]@3 ~", // Gm
  O: "[f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@4 [f3,a3,c4]@3 ~ a3@4 [f3,a3,c4]@4 a3@3 ~", // F
  P: "[f3,a3,c4]@4 [f3,a3,c4]@4 [a3,c4]@2 ~@2 [f3,a3,c4]@4 [f3,a3,c4]@3 ~ [a3,c4]@4 [e3,a3,c4]@4 [e3,a3,c4]@3 ~, ~@20 f3@11 ~", // F Am F Am
  Q: "[a3,d4,f4]@4 [a3,d4,f4]@4 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@4 [a3,d4,f4]@3 ~ [a3,d4]@4 [a3,d4,f4]@4 [a3,d4,f4]@3 ~", // Dm D5 Dm
  R: "[a3,d4,f4]@4 [a3,d4,f4]@4 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@4 [a3,d4,f4]@3 ~ [a3,d4,f4]@4 [a3,d4,f4]@4 [a3,d4,f4]@3 ~", // Dm
  S: "[a3,c4,e4]@4 [a3,e4]@4 [c4,e4]@2 ~@2 [a3,c4,e4]@4 [c4,e4]@3 ~ [a3,c4,e4]@4 [a3,c4,e4]@4 [a3,c4,e4]@3 ~", // Am A5 C Am C Am
  T: "[a3,c4,e4]@4 [a3,c4,e4]@4 [a3,c4,e4]@2 ~@2 [a3,c4,e4]@4 e4@3 ~ [a3,c4,e4]@4 [a3,c4,e4]@4 [a3,c4,e4]@3 ~", // Am
  U: "[g3,d4]@4 d4@4 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@4 [bb3,d4]@3 ~ [bb3,d4]@4 [g3,bb3,d4]@4 [g3,bb3,d4]@3 ~", // G5 Gm Bb Gm
  V: "[f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@2 ~@2 [f3,bb3,d4]@4 [bb3,d4]@3 ~ [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@3 ~", // Bb
  W: "[g3,b3,d4]@4 [g3,b3,d4]@4 [b3,d4]@2 ~@2 [g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@4 [g3,b3,d4]@4 [g3,b3,d4]@3 ~", // G Bm G
  X: "[f3,bb3,d4]@4 [f3,d4]@4 [f3,bb3,d4]@2 ~@2 [f3,bb3]@4 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@11 ~, ~@12 d4@7 ~@13", // Bb Dm Bb Bb5 Bb
  Y: "[~@2 [f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3]@2 c4 ~@3 c4@2 [a3,c4]@3 ~@2 [f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3]@4 [e3,a3,c4]@4 [e3,a3]@4 ~ [e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3]@3 ~ [e3,a3,c4]@4 ~ [e3,a3,c4]@3, ~@7 [f3,a3]@2 ~@23]/2", // F Am F Am A5 Am A5 Am …
  Z: "[~ [e3,a3,c4]@4 [eb3,a3,c4]@4 [eb3,a3]@4 [eb3,a3,c4]@3 ~@2 [eb3,a3,c4]@4 [eb3,a3,c4]@3 ~ [eb3,a3,c4]@4 [eb3,a3,c4]@4 [eb3,a3,c4]@4 ~ [d3,gb3,c4]@4 [d3,gb3,c4]@4 [gb3,c4]@3 ~ [d3,gb3,c4]@4 [d3,gb3,c4]@3 ~@2 [d3,gb3,c4]@4]/2", // Am Adim Ebdim Adim D7 Gbdim D7
  AA: "[d3,gb3,c4]@4 [d3,gb3,c4]@4 [d3,g3,bb3]@4 [d3,g3,bb3]@4 ~ [d3,g3,bb3]@3 ~ [d3,g3,bb3]@4 [d3,g3,bb3]@3 ~ [d3,g3,bb3]@3", // D7 Gm
  AB: "~ [d3,g3,bb3]@4 ~ [d3,g3,bb3]@4 [d3,g3,bb3]@8 [d3,g3,bb3]@3 ~@11", // Gm
  AC: "~@12 [f3,a3,c4]@4 [f3,a3]@4 [f3,a3,c4]@3 ~ [f3,a3]@4 [f3,a3]@3 ~, ~@24 c4@7 ~", // F
  AD: "~ [f3,a3]@4 [f3,a3,c4]@4 [f3,a3,c4]@4 [f3,bb3,d4]@4 [f3,d4]@4 ~ [f3,bb3,d4]@3 ~ [f3,d4]@4 [f3,bb3]@2", // F Bb Dm Bb Dm Bb5
  AE: "~@2 [f3,bb3,d4]@4 [f3,bb3,d4]@4 ~ [f3,bb3,d4]@4 [f3,a3,c4]@4 [f3,a3,c4]@4 [f3,a3,c4]@3 ~ [f3,a3,c4]@4 ~", // Bb F
  AF: "[f3,a3,c4]@3 ~ [f3,a3,c4]@4 [a3,c4]@4 [f3,a3,c4]@4 [f3,bb3,d4]@4 ~ [f3,bb3,d4]@4 [f3,bb3,d4]@3 ~ [f3,bb3,d4]@3", // F Am F Bb
  AG: "[~ [f3,bb3,d4]@3 ~@2 [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,a3,c4]@4 [f3,a3]@4 ~ [f3,a3]@3 ~ [f3,a3,c4]@4 [f3,a3,c4]@3 ~ [f3,a3,c4]@4 [f3,a3,c4]@4 ~ [f3,a3,c4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@3 ~]/2", // Bb F Bb
  AH: "[f3,bb3,d4]@4 ~ [f3,bb3,d4]@3 ~ [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,bb3,d4]@4 [f3,a3]@4 ~ [f3,a3]@4 [f3,a3,c4]@2, ~@21 c4@8 ~@3", // Bb F
  AI: "[~@2 [f3,a3,c4]@4 [f3,a3]@3 ~ [f3,a3,c4]@4 ~ [f3,a3,c4]@4 a3@4 [f3,bb3,d4]@4 [f3,bb3]@4 [f3,bb3]@3 ~@2 [f3,bb3,d4]@4 [f3,bb3,d4]@3 ~ [f3,bb3,d4]@4 [f3,bb3,d4]@4 ~ [f3,d4]@4 [f3,a3,c4]@11 ~@28, ~@27 d4@7 ~@62]/3", // F Bb Bb5 Bb Dm F
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@8 A B C ~ D E F G H I J ~ K L M N O ~ P Q R S L T ~@6 H@2 ~@16 U@2 V W ~@2 X Y ~ Z AA ~@2 AB AC ~
>`.pickRestart({
  A: "~@8 c4@2 ~@6 c4@3 ~@9 [f3,c4]@3 ~", B: "~ c4 ~@6", C: "~@2 d3@2 d3 ~@11", D: "g3@4 ~@4 d4@2 ~@10 g3@4 ~@4 g3@3 ~",
  E: "~@8 g3@2 ~@6 g3@3 ~@13", F: "~@4 [f3,c4]@4 f3@2 ~@10 [f3,c4]@4 ~@4 f3@3 ~",
  G: "~@4 f3@4 c4@2 ~@6 f3@3 ~ f3@4 ~@8", H: "~@16 c4@3 ~ f3@4 ~@4 [f3,c4]@3 ~", I: "~@4 c4@4 ~@8 [e3,c4]@3 ~ c4@4 ~@8",
  J: "~@16 [d3,c4]@3 ~@13", K: "~ d3 ~@3 [d3,g3] ~@2", L: "~@4 g3 ~@11", M: "~@20 [f3,c4]@4 ~@4 [f3,c4]@3 ~",
  N: "~@4 f3 ~@11", O: "~@5 f4 ~@2", P: "~@4 c4@4 a3@2 ~@6 a3@3 ~@13", Q: "~@16 [a3,c4]@3 ~@13",
  R: "bb3@4 [g3,bb3]@4 ~@8 g3@3 ~ g3@4 ~@8", S: "~@16 f3@3 ~@13", T: "~ bb3 ~@6",
  U: "[~@18 f3@3 ~@10 c4@4 ~@4 c4@4 ~@9 c4@3 ~@9]/2", V: "~@9 c4@4 ~@19", W: "~@15 d3@3 ~@14", X: "~@4 c4 ~@3",
  Y: "~ c4@4 ~@12 bb3@4 ~@5 bb3@4 ~@2", Z: "~@2 f3 ~@5", AA: "~@22 c4@4 ~ c4@3 ~@2", AB: "~@6 c4@3 ~@10 [f3,c4]@4 ~@9",
  AC: "~@21 bb3@4 ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.07).pan(0.4)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@12 A B C@2 ~@15 D@2 E F G H I J K L M N O P Q P R S@8 ~@6 T U@2 V W@4 X ~
>`.pickRestart({
  A: "~@16 bb3@5 c4@4 ~ d4@5 ~", B: "g3@15 ~@17", C: "[~@4 c3@4 f3@4 c4@23 ~@29]/2",
  D: "[~@9 a3 ~@5 c4, ~@28 f3@12 c4@8 a3@7 ~ f3@8, ~@44 f3@8 c4@7 ~@5]/2",
  E: "~ a3 ~@2 a3 c4 ~ c4, e3@11 ~ e3@11 ~ e3@8, ~ c4 ~@2",
  F: "~@4 a3 c4 ~ c4, eb3@11 ~ eb3@11 ~ eb3@8, ~ a3@2 ~@5, ~ c4 ~@2",
  G: "~@4 gb3@4 ~@8 gb3@4 ~@8 gb3@3 ~, d3@11 ~ d3@11 d3@8 ~, ~@2 c4@2 ~ c4@3",
  H: "~@16 bb3@4 ~@7 bb3@3 ~@2, g3@11 g3@10 ~@2 g3@7 ~@2, ~@4 bb3@7 ~@21, ~@7 d4@8 ~@5 d4@9 ~@3",
  I: "[c3,g3,bb3]@2 ~@10 [c3,g3,bb3]@15 ~@5", J: "~@4 a3 ~ f3 a3, f3@4 c4@4 ~@2 c4@5 ~, ~@2 a3@4 f3@5 ~@5",
  K: "~@4 f3@4 a3@4 ~@4 f3@3 ~@8 f3@3 ~@2, c3@11 ~ c3@10 ~@2 c3@7 ~, ~@19 a3@8 ~@5",
  L: "~@20 c4@4 ~@3 ab3@5, eb3@11 ~ eb3@11 ~ eb3@8, ~@4 ab3@7 ~@5 ab3@9 ~@7, ~@8 c4@7 ~@17",
  M: "~@5 db4 ~ ab3, f3@12 f3@11 ~ f3@8, ~@4 ab3@8 ~@4 ab3@7 ~@9, ~ db4 ~@2",
  N: "~@2 c4 ~@4 ab3, eb3@11 ~ eb3@8 c4@7 ~@5, ~@4 ab3@7 ~@5 ab3@7 ~ eb3@8",
  O: "~@2 db4 ~ ab3 ~@2 ab3, f3@11 ~ f3@11 ~ f3@8, ~@4 ab3@8 ~@8 db4@7 ~@5",
  P: "~@4 f3 ~@2 f3, c3@11 ~ c3@11 ~ c3@7 ~, ~ f3@2 ~@5, ~@2 a3@2 ~ a3@2 ~",
  Q: "~ f3 ~@2 f3 ~@2 f3, c3@11 ~ c3@11 ~ c3@8, ~@2 bb3@2 ~ bb3@2 ~", R: "[a2,d3,g3]@10 ~@2 [a2,db3,g3]@17 ~@2 d3",
  S: "[~ d4@58 ~@5 c4@55 ~@9 bb3@57 ~@7 db4@61 ~@3, [f3,a3]@56 ~@6 a2@64 d3@59 ~@5 eb3@57 ~@9, ~@62 e3@58 ~@5 g2@65 eb2@65 ~, ~@63 a3@56 ~@8 g3@58 ~@6 g3@56 ~@9, ~@24 bb3@7 ~]/8", // F
// … 90 more lines