Strudelify

Butterfly Kisses

Bob Carlisle

KeyC majorTempo82 bpm
0:00/0:00
// Butterfly Kisses — Bob Carlisle
// 82 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 1/4 at bar 1, 4/4 at bar 2, 2/4 at bar 25, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 112 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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.

// chords · celesta
const celesta = note("<A B C@2 ~@29 D E F ~@45 G H I ~@21 A J@3 ~@3>".pickRestart({
  A: "d4 ~@2 [d4,g4] c4 ~@2 c4, d5!2 c5@2, ~ d4@2 ~@2 c4@2 ~, ~@3 g4", // G5
  B: "d4 ~@2 [d4,g4] ~@3 e5, d5!2 ~ g4, ~ d4@2 ~ [c4,c5]@4", // G5 C
  C: "[d4 ~@5 [d4,g4]@2 c4@2 ~@6 d4@2 ~@6 [c4,c5]@8, d5!2 c5@4 ~@2, ~ d4@2 ~@2 c4@2 c4@5 ~@4, ~@3 g4@2 d5@3, ~@8 d5 d4@2 [d4,g4]@5]/2", // G5 C G5
  D: "~@3 d5", E: "d5@2 c5@2 ~ g4 d5@2, ~@2 c5 ~", F: "d5 c5!2 ~", G: "~@2 c5 b4 a4@4",
  H: "d5@13 ~@3 e5@8 c5@8, ~@7 g4@5 ~@4, ~@15 c5@2 ~@15", I: "a4@15 ~",
  J: "[d4 ~@3 [c4,c5]@16 ~@4, d5 d5@8 ~@3, ~ d4@2 [d4,g4]@16 ~@5]/3", // C G5
})).s("gm_celesta").gain(0.16)

// bass · fretless bass
const bass = note(`<
  ~@4 A B C D E F C F C G H G H I J@2 K@4 D L M L M N O@7 P@6 Q@8 R@2 S@7 T@6 U@3 V@3 W@6 X@2 Y Z AA AB AC AD AE AF AG
  AH@5 AI AJ@3 AK@5 ~@3 AL C D AM@3
>`.pickRestart({
  A: "c2@27 ~ g1@4", B: "c2@23 ~ g1@4 d2@4", C: "c2", D: "a1 g1", E: "c1", F: "a1", G: "d2 e2", H: "f2 g2", I: "a2 b2",
  J: "[c3 f2@2 g2]/2", K: "[g1@16 c2@28 g1@4 c2@25 ~@3 g1@4 c2@25 ~@3 c2@2 ~@2 c2@16]/4", L: "f1", M: "e2@13 ~ e2@2",
  N: "a1 b1", O: "[c2@16 d2@35 ~@5 f1@32 g1@25 ~@3 g1@4 c2@24 ~@4 g1@4 c2@28 g1@4 c2@27 ~ c2@4 a1@8]/7",
  P: "[~ g1@2 c1@4 a1@4 c2@4 a1@4 c2@4 d2]/6",
  Q: "[~ e2@2 f2@2 g2@2 d2@2 e2@2 f2@2 g2@2 a2@2 b2@2 c3@2 f2@4 g2@2 g1@2 c2@3]/8", R: "~ g1 c2@6",
  S: "[~@2 c2 ~ c2@8 a1@8 g1@8 f1@16 e2@13 ~ e2@2 f1@16 e2@13 ~ e2@2 a1@8 b1@8 c2@4]/7",
  T: "[~@8 d2@35 ~@5 f1@32 g1@25 ~@3 g1@4 c2@24 ~@4 g1@4 c2@28 ~@4 d#2@16]/6",
  U: "[~@12 d#2@4 d2@32 c2@10 ~@2 c2@16 g1@4 c2@15 ~]/3", V: "[c2@12 d2@4 d#2@25 ~@3 d#2@4 d2@27 ~ d2@4 a1@15 ~]/3",
  W: "[d2 g1@2 a1@2 c2@2 a1@2 c2@2 d2]/6", X: "[e2 f2@2 d2]/2", Y: "e2 f2", Z: "g2 a2", AA: "b2 c3", AB: "f2",
  AC: "g2 g1", AD: "c2@7 g1", AE: "c2@25 ~@3 g1@4", AF: "c2@25 ~@3 c2@2 ~@2", AG: "c2 a1",
  AH: "[g1@8 f1@16 e2@13 ~ e2@2 f1@16 e2@13 ~ e2@2 a1@8]/5", AI: "b1 c2", AJ: "[d2@35 ~@5 f1@32 g1@24]/3",
  AK: "[~@4 g1@4 a1@28 b1@2 c2@2 b1@28 g1@4 ~@18 g1@2 ~@12 g1@55 ~, ~@72 g#1@33 ~@55]/5", AL: "~@5 g2 c3 g2",
  AM: "[~ c1@74 ~@21]/3",
})).s("gm_fretless_bass").gain(0.27)

// chords · piano · "Acoustic Piano"
const piano = note(`<
  ~@3 A@2 B C D E ~@11 F@4 G@3 H I J@7 K@3 ~ L@7 ~ M N O@4 P@5 Q@7 R@3 S@3 T@2 ~@11 U V@3 W@5 X@6 Y@3 Z AA AB@2 AC AD
  AE@3
>`.pickRestart({
  A: "[~@15 e4, ~@31 e4@17 c5@4 g3@4 g4@8, ~ c3, ~@8 g4@3 c4@5, ~@8 d5 g3 d5@6]/2",
  B: "~@7 e4, c3@5 g3 g4@2, g4 c5, d5 d5@3, ~ g3@2 c4@5",
  C: "~@7 e4, [c3,g4]@3 c4, d5 d5@3, ~ g3@3 c5@4, ~@3 c4@2 g3@3", // C5
  D: "~@6 e3@2 ~@7 f4, [a2,b4]@17 ~@11 g4@4, ~@3 e3@9 ~@4 [g2,a4]@16, ~@8 a3@9 ~@7 g3@8", E: "[c2,d4,e4,g4]",
  F: "[~@11 [c4,e4] ~@7 e5 ~@11 c4, ~@4 c3@6 g4@2 ~ g3@4 c4 g4@5 c4 c5 g3@2 c5 [c3,d5]@4, ~@4 d5@2 d5@6 d5@2 d5@6 d5 g3 d5@4 g4@6, ~@5 e4@3 c5@4 ~@3 c4 c5@4 ~ e4@9 c5@2, ~@5 g3@2 c4@2 g3@3 c3@8 c3@6 c4@3 g3@3]/4", // C Csus2
  G: "[~@12 c4@4 ~@12 g3@3 ~ g4 ~@27 f3@3 ~@29 g5@3 g5, [a2,b4]@16 [g2,a4]@15 f4@13 g3@8 c4@4 f4@7 [g3,b3]@21 b5@4 [e3,a5]@8, ~@4 e3@13 ~@3 d3@11 c4@9 f3@8 a3@16 g4@32, ~@2 a3@2 ~@2 g4@2 [f2,a4]@8 e2@3 e3 [e2,c6]@4, ~@9 c3@7 d4 e3 d4@6]/3", // Asus2 Gsus2 G A5 F C
  H: "~@7 g4, [f2,a5]@4 a3 c4 f4@2, ~ c3@7, ~ f3@3, ~@3 g3@5", // F
  I: "~@24 d4@7 [a3,c4], e2@5 e3@3, d4 g4, ~ b2@7, ~@2 e3 g3@5", // Am
  J: "[~@12 e4@4 ~@24 g3@7 ~@17 f#4@24 ~@24 c4@8 [c4,d4]@8 ~@4 g3@4 ~@76 [g4,e5]@4 c5 c3@7, [a2,a4]@17 ~@3 b3@11 [c3,c4,e4]@16 [d3,d4]@41 f2@12 g3@8 a3@12 g3@12 ~@4 b3@64 ~@8 [f4,d5]@9 ~@7, e4@12 ~@4 g4@12 g4@20 [g4,a4]@40 g3 f4@31 ~@8 d4@64 ~@12 [e4,c5]@13 ~@7, ~@4 a3@12 b2@16 ~@3 e3@13 ~@12 a3@28 c4@8 f3@24 ~@8 c4@9 ~@7 g3@64 ~@8 [d5,f5]@8, ~@8 c4@8 d4@8 d4@8 ~@7 c5@9 ~@40 a3@4 c3@28 g2@64 ~@40]/7", // Csus2 C A C D Dm Gsus2 C …
  K: "[~@8 [c5,e5]@8 [c5,e5]@8 ~@12 e3@4 ~@13 f4@3 [c2,c4,d4,e4,g4]@30 ~@10, [d5,f5]@6 ~ e3@2 ~@15, ~@4 c4@20 [a2,b4,d5]@16 [g2,a4,c5]@17 ~@39, ~@8 a3@2 ~@3 g4 ~@10]/3", // C Dm Bm7 Am7
  L: "[~@52 e4@4 [c3,e4,g4]@32 ~@12 f4@4 ~ [e4,g4]@15 ~@24 b3@8 ~@12 f4@4 [e3,b3,e4]@16 ~@12 c4@4 ~@8 b3@7 ~@9, ~@24 a3@32 d4 ~@31 f4@12 ~@4 e3@16 f3@17 ~@15 d3@16 ~@16 [f3,f4]@16 [g3,c4,d4,g4]@15 ~@9, ~@32 c4@25 ~@31 d3@17 ~@23 c4@8 [g3,c4,d4]@16 ~@8 d4@8 ~@20 c4@8 ~@28, ~@36 e4@8 e4@4 a4@9 ~@35 a3@13 ~@19 a3@13 ~@19 a3@12 ~@16 a3@8 a3@8 ~@24, ~@40 c5@17 ~@39 d4@9 ~@15 f4@12 f4@20 f4@12 ~@60]/7", // C Em E5 F Gsus4
  M: "~@9 f3@23", N: "~ [g4,d5]@3",
  O: "[~@9 [c4,e4] ~@7 e5 ~@11 c4 ~ e3, ~@2 c3@6 g4@2 ~ g3@4 c4 g4@5 c4 c5 g3@2 c5 [c3,d5]@4 [a2,b4]@2, ~@2 d5@2 d5@6 d5@2 d5@6 d5 g3 d5@4 g4@6 ~@2, ~@3 e4@3 c5@4 ~@3 c4 c5@4 ~ e4@9 c5@2 ~@2, ~@3 g3@2 c4@2 g3@3 c3@8 c3@6 c4@3 g3@3 ~@2]/4", // C Csus2 Asus2
  P: "[~@4 c4@4 ~@12 g3@3 ~ g4 ~@27 f3@3 ~@29 g5@3 g5 ~@28 g4@4 ~@24 d4@7 ~@5 a3@4, a3@8 [g2,a4]@15 f4@13 g3@8 c4@4 f4@7 [g3,b3]@21 b5@4 [e3,a5]@8 ~@4 c3@29 ~@3 b2@16 e3@11 c4@8 ~, ~@12 d3@11 c4@9 f3@8 a3@16 g4@32 ~@12 g3@4 a3@4 c4@4 f4@8 d4@16 g4@15 a3@5 ~@4, ~@4 g4@2 [f2,a4]@8 e2@3 e3 [e2,c6]@4 [f2,a5]@8 e2@8 [a2,e4,a4]@2, ~@7 c3@7 d4 e3 d4@6 ~@2 f3@6 ~@2 e3 g3@5 ~@2]/5", // Gsus2 G A5 F C F A5
  Q: "[~@4 e4@4 ~@24 g3@7 ~@17 f#4@24 ~@24 c4@8 [c4,d4]@8 ~@4 g3@4 ~@28 c3@4 ~@12 g2@4 ~@28 f4@4 [a#3,d#4,g4]@16, c4@8 b2@15 [c3,c4,e4]@16 [d3,d4]@41 f2@12 g3@8 a3@12 g3@12 ~@4 b3@24 g3@16 [e3,g3]@8 [g3,d4]@8 g3@12 d4@4 e4@8 ~@16, ~@8 g4@12 g4@20 [g4,a4]@40 g3 f4@31 ~@8 d4@24 c2@32 c2@12 c3@20 ~@16, ~@8 d4@8 d4@8 ~@7 c5@9 ~@40 a3@4 c3@28 g2@49 ~@3 c3@12 ~@4 e3@28 ~@16, ~@12 b3@12 ~@3 e3@13 ~@12 a3@28 c4@8 f3@24 ~@8 c4@9 ~@7 g3@8 d4@4 e3@4 d4@8 c4@16 ~@8 d4@8 [c2,c4]@16 ~@16]/7", // Csus2 D# C D Em G5 Gsus2 C
  R: "[~@4 [d#4,g4]@4 a3@14 ~ c4 [d4,f4]@6 ~@8 c4@2 [g3,d4,f4]@8, ~@4 a#3@12 [c4,d4,f4]@31 ~@13 e4@19 ~@17, ~@44 a3@4 g3@19 ~@5 g3@7 ~@17, ~@15 c4@4 ~@5]/3", // D# Dm G7 Dm7
  S: "[[c4,e4]@2 d4@2 ~@2 f4@2 a#3@12 ~@2 [d#4,g4]@2 a3@10 ~@2 [c4,d4]@3 ~ f4@2 ~@2 f4@4, ~@4 e4@4 [d#4,g4]@14 ~@2 f4@15 ~ a4@8, ~@5 a#3 [c4,d4]@3 ~@3, ~@48 b3 ~@19 a3@10 ~ [a3,c4]@17]/3", // C D# Csus2 D# Csus2 Am
  T: "[d4@2 c4@2 [g3,b3,d4]@7 ~@5, [a3,f4] ~@3]/2", U: "~@7 [c4,e4], c3@3 g4, d5 d5@3, ~ e4@3 c5@4, ~ g3@2 c4@2 g3@3",
  V: "[~@7 e5 ~@11 c4 ~@3 c4, c3@5 c4 g4@5 c4 c5 g3@2 c5 [c3,d5]@4 [a2,b4]@4, d5@2 d5@6 d5 g3 d5@4 g4@6 ~@2 a3@2, ~ g3@7 c3@6 c4@3 g3@3 ~ e3@3, ~@3 c4 c5@4 ~ e4@9 c5@2 ~@4]/3", // Csus2 Asus2
  W: "[~@12 g3@3 ~ g4 ~@27 f3@3 ~@29 g5@3 g5 ~@28 g4@4 ~@24 d4@7 ~@13 e4@4, [g2,a4]@15 f4@13 g3@8 c4@4 f4@7 [g3,b3]@21 b5@4 [e3,a5]@8 ~@4 c3@29 ~@3 b2@16 e3@11 c4@8 ~ c4@8, ~@4 d3@11 c4@9 f3@8 a3@16 g4@32 ~@12 g3@4 a3@4 c4@4 f4@8 d4@16 g4@15 a3@5 a3@12, ~@2 g4@2 [f2,a4]@8 e2@3 e3 [e2,c6]@4 [f2,a5]@8 e2@8 [a2,a4]@4, ~@5 c3@7 d4 e3 d4@6 ~@2 f3@6 ~@2 e3 g3@5 e4@3 ~]/5", // Gsus2 G A5 F C F A
  X: "[~@24 g3@7 ~@17 f#4@24 ~@24 c4@8 [c4,d4]@8 ~@4 g3@4 ~@40 e4@7 ~@13 b4@12, b2@15 [c3,c4,e4]@16 [d3,d4]@41 f2@12 g3@8 a3@12 g3@12 ~@4 b3@16 [a2,g4]@12 a3@8 c4@11 ~@25, g4@12 g4@20 [g4,a4]@40 g3 f4@31 ~@8 d4@24 [a3,c4,e4]@8 e3@24 ~@24, d4@8 d4@8 ~@7 c5@9 ~@40 a3@4 c3@28 g2@64 [b2,b3,d4,g4]@24, ~@4 b3@12 ~@3 e3@13 ~@12 a3@28 c4@8 f3@24 ~@8 c4@9 ~@7 g3@40 ~@8 g3@16]/6", // Csus2 C D A7 Gsus2 Am G
  Y: "[g3@7 ~@25 g#3@7 d4 e4@56, ~ [g#2,a#3,d#4]@4 ~@7, ~@8 c4@12 c4@19 [g2,g3,c4]@57, ~@3 d#3@3 d#3@4 ~@14, ~@4 g#3@3 g#4@3 ~@14]/3", // G#sus2 C5
  Z: "[f2,g3,a3], c4@29 ~@3", AA: "~ [g2,g3,c4,d4]@31",
  AB: "[g3@2 ~@13 [g4,e5], [d4,e4]@7 c3@3 c3@2 c3@2 [f4,d5]@2, c3@6 c4@2 ~@5 [e4,c5]@3, ~@8 g3@7 c2@17 [c2,d4]@32, ~@3 c4@2 g3@3 g3@3 g3@5]/2", // C Dsus2 Dm C Csus2
  AC: "~@12 a4@3 ~ e5@16, c2, f5@15 ~@17, a4@3 ~@5, ~ c3@3", AD: "~@7 e3@9 ~@8 f4@8, [a2,d5] [g2,c5]",
  AE: "[~ [c1,c3,d4,e4,g4]@69 ~@26]/3", // C
})).s("gm_piano").gain(0.3)

// chords · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note(`<
  ~@4 A@2 B@3 ~@11 C D@3 E@6 F@7 G@2 ~@11 H@2 I@8 J@8 K L@3 M@2 ~@10 N@3 O@2 P@8 Q@6 ~@2 R S T@5
>`.pickRestart({
  A: "[d4@15 c4@16 d4@16 ~@9 g5@4 e6@4, ~@47 c4@17]/2",
  B: "[[d4,f4,d6]@15 ~ [e4,c6]@15 ~ [d4,b5]@15 ~@13 g5@2 ~@2 [c3,g5]@32, ~@15 c4@16 b3@16 a3@16 g3@33, ~@47 a5@13 ~@2 f5@2 ~@32, ~ c4]/3", // Dm C G C5
  C: "~@15 d4@16 c4", D: "[~@15 d4@16 ~@8 g5@4 e6@4 ~ d4@15 [c4,c6]@32 a3, ~@31 c4@16 d6@17 ~@32]/3",
  E: "[d6@7 b5@8 a5@8 g5@8 [f3,a5]@32 ~ e3@31 [f3,a5]@32 [e3,g5]@32 [a3,a5]@16 [b3,b5]@15 [c4,c6]@2, ~@15 g3@16 ~@32 g5@33 ~@96]/6", // F Em A B C
  F: "[~@15 g5@17 f#5@17 ~@7 [f4,a4]@32 c5@15 b4@17 [d4,f4]@15 [c4,e4]@17 [d4,f4]@15 [c4,e4]@16 ~ [f4,f6]@15 ~ [e4,e6]@15 [a3,d4,d6]@9, ~@15 [d4,d6]@42 ~@31 g4@95 d4@17 ~@24, ~@120 g6@64 ~@15 c4@16 ~@9]/7", // F Dm C Dm C F E D5 …
  G: "[~@8 [g3,c6]@15 g5@33 ~@8, ~@7 c4@48 ~@9, ~@23 c3@30 ~@11]/2", H: "~@7 d4@16 c4@9",
  I: "[~@3 e6@4 ~ d4@15 [c4,c6]@32 d6@8 b5@8 a5@8 g5@8 ~ a5@31 ~ e3@31 [f3,a5]@32 [e3,g5]@32 [a3,a5]@16 [b3,b5]@15 [c4,c6]@10, ~@7 d6@16 ~@32 a3@16 g3@16 f3@32 g5@33 ~@104]/8", // C F Em A B C
  J: "[~@7 g5@17 f#5@17 ~@7 [f4,a4]@32 c5@15 b4@17 [d4,f4]@15 [c4,e4]@16 f4@16 ~ c4@4 d4@4 ~@4 f4@4 [d#4,g4]@32 [a3,c4,d4,f4]@32 [d4,f4]@10 [c4,e4]@6, ~@7 [d4,d6]@42 ~@31 g4@96 ~@80, ~@7 g6@4 ~@5, ~@159 e4@9 e4@9 ~@79]/8", // F Dm C D# Dm7 Dm C D
  K: "~@7 [d4,f4]@9", L: "[[c4,e4]@2 d4@2 e4@2 f4@2 [d#4,g4]@16 [a3,c4,d4,f4]@15 ~ a4@8, ~@13 [a3,c4,f4]@3]/3",
  M: "[[a3,d4,f4]@4 [g3,b3]@7 ~@5]/2", N: "[~@31 d4@16 c4@16 d4@16 ~@8 g5@4 e6@4 d6, ~@79 c4@17]/3",
  O: "[d4@15 [c4,c6]@32 ~ d6@7 b5@8 [g3,a5], ~@47 a3@17]/2", // C Gsus2
  P: "[~@7 g5@8 [f3,a5]@32 ~ e3@31 [f3,a5]@32 [e3,g5]@32 [a3,a5]@16 [b3,b5]@15 [c4,c6]@17 g5@17 f#5@17 ~@7 [f4,a4]@24, ~@47 g5@33 ~@111 [d4,d6]@42 ~@23]/8", // F Em A B C F D
  Q: "[~@8 c5@15 b4@17 [a4,c5]@32 [b4,d5]@31 g5@17 f5@7 d#5@8 ~ [c5,e5,g5]@55 ~, ~@8 g4@32 ~@63 [g#4,c5]@32 ~@57, ~@103 d#5@24 ~@65]/6", // Am Bm C G#
  R: "d4@15 c4@17", S: "d4@15 ~@9 g5@4 e6@4, ~@15 c4@17",
  T: "[[d4,f4,d6]@15 ~ [c4,c6]@15 [a3,d4,a5]@16 ~@20 c3@63 ~@30, ~@15 e4@17 ~@15 g3@83 ~@30, ~@47 c4@80 ~@33, ~@48 g5@77 ~@35, ~@33 e5@29 ~@18]/5", // Dm C D5
})).s("gm_string_ensemble_2").gain(0.16)

// other · flute
const flute = note("<~@5 A B@2 C ~@26 D@4 ~@29 E F ~@11 G@2 ~@14 H I@3 ~@4 J@2 K L M@2 ~>".pickRestart({
  A: "~ g4", B: "[f4@15 e4@16 d4@16 ~ c4@12 a3@4]/2", C: "g3", D: "[~@24 f4@16 g4@17 b4@15 c5@16 g4@32 ~@8]/4",
  E: "~@7 g4@4 e5@5 d5@16", F: "c5 ~@3", G: "[~@12 b4@4 a4@6 ~@9 d5@8 e5@4 f5@5 e5@8 ~@8]/2", H: "~@3 c5",
  I: "[~@8 a4@32 d5@33 ~@23, b4@11 ~@85]/3", J: "[g5@55 ~ e5@4 a5@4]/2", K: "g5", L: "d5 c5", M: "[~ g4@60 ~@3]/2",
})).s("gm_flute").gain(0.11)

// other · flute · soft notes
const flute_soft = note("<~@81 A B@2 ~@28>".pickRestart({
  A: "~@8 c5@5 ~@9 b4@5 c5@4 ~", B: "[~@3 c5@5]/2",
})).s("gm_flute").gain(0.08)

// chords · epiano1 · "Elec Piano"
const epiano1 = note("<~@9 A B@3 C D E F G@4 ~@17 H@8 I@5 ~@22 J@5 K@2 L M N O@2 ~@27>".pickRestart({
  A: "[g3,a3,c4,e4]", B: "[[e3,g3,c4]@31 ~ [a3,c4]@31 ~ [g3,c4]@32, ~@31 e3@32 e3@33]/3",
  C: "[d3,f3,a3,c4] [e3,g3,b3,d4]", D: "[f3,a3,c4]@2 ~ b3, ~ [g3,c4,d4]", E: "[d3,f3,a3,c4]@16 ~ b3@15, ~ [e3,g3,d4]",
  F: "[f3,a3,c4] [g3,b3,d4]", // F G
  G: "[[a3,c4,e4]@16 [b3,d4,g4]@15 ~ e4@7 ~ e4@8 [f3,g3,a3,c4]@32 ~ c4@15 ~@8 g3@8 ~@16, ~@31 [g3,c4]@17 ~@32 d3@32 ~@16, ~@2 g4 ~@2 g3 b3 ~]/4", // Am G F C5
  H: "[~@24 [g3,a3,c4,e4]@32 [e3,g3,c4]@31 ~ [a3,c4]@31 ~ [g3,c4]@32 [d3,f3,a3,c4]@16 [e3,g3,b3,d4]@16 [f3,a3,c4]@16 ~@8 b3@8 [d3,f3,a3,c4]@16 ~ b3@15 [f3,a3,c4]@8, ~@87 e3@32 e3@33 ~@48 [g3,c4,d4]@17 ~@15 [e3,g3,d4]@16 ~@8]/8", // Am7 C Am C5 Dm7 Em7 F Dm7 …
  I: "[~@8 [g3,b3,d4]@16 [a3,c4,e4]@16 [b3,d4,g4]@15 ~ e4@7 ~ e4@8 [f3,g3,a3,c4]@32 ~ c4@15 ~@8 g3@8 ~@24, ~@55 [g3,c4]@17 ~@32 d3@32 ~@24, ~@7 g4@2 ~@4 g3@2 b3@2 ~@3]/5", // G Am G F C5
  J: "[~@16 [g3,a3,c4,e4]@32 [e3,g3,c4]@31 ~ [a3,c4]@32 [e3,g3,c4]@32 [d3,f3,a3,c4]@16, ~@79 e3@33 ~@48]/5", // Am7 C Am C Dm7
  K: "[[e3,g3,b3,d4]@4 c4@6 ~ b3 [d3,f3,a3,c4]@4, ~ [f3,a3]@2 ~, ~@5 c4 ~@2]/2", L: "[e3,g3,b3,d4] [f3,a3,c4]",
  M: "[g3,b3,d4] [a3,c4,e4]", N: "~ [g3,c4], [b3,d4,g4]@23 ~@9, ~@16 e4@7 ~@9",
  O: "[g3@32 ~ c4@15 ~@8 g3@8, [f3,a3]@3 ~, ~ d3, ~@2 g3 ~]/2", // F
})).s("gm_epiano1").gain(0.22)

// chords · acoustic guitar nylon · "Acoustic Guitar (nylon)"
const acoustic_guitar_nylon = note("<~@39 A@4 ~@3 B@5 ~@61>".pickRestart({
  A: "[~@34 c4@5 ~@6 d4@6 d4@27 ~@17 e4@4 g4@4 e4@8 ~ d4@9 ~@7, ~@14 g3@25 ~@25, ~@20 c4@19 ~@25]/4",
  B: "[~@36 c4@4 ~@12 d4@4 ~@8 c4@8 a3@30 ~ c4@17 b3@16 ~@24, ~@24 c4@12 ~@4 d4@12 ~@4 e4@16 ~@31 d4@33 ~@24, ~@7 e3@3 ~@2 b3@2 ~@26, ~@16 a3@4 ~@2 g3@6 ~@2 g3@6 f3@13 ~@2 g3@17 ~@12]/5",
})).s("gm_acoustic_guitar_nylon").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B ~@15 C@4 B@7 D@3 ~@4 D@5 E D@4 ~@2 F@3 G D@6 ~ C@3 H C@7 ~@13 B@3 I C@6 ~ F@3 J F@2 ~@10
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~ x", D: "~@3 x", E: "~@5 x!2 ~", F: "~ x ~@2", G: "~ x ~ x", H: "~@4 x ~@2 x", I: "x!2",
  J: "~ x!2 ~@5",
})).gain(0.22)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@23 A ~@15 B ~ B ~@3 B ~ B ~@5 C ~@33 D ~@24>".pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@2", C: "~ x ~@6", D: "~@7 x",
})).gain(0.11)

// drums · snare
const snare = s("sd").struct(`<
  ~@21 A@3 B ~ B ~ B@3 ~ C@2 ~@5 C@10 ~ D@3 ~ C ~ C ~ C@3 ~ A@11 ~@12 B@3 ~ A ~ A ~ A@3 D@5 ~@11
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~@2", D: "~@3 x",
})).gain(0.22)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A ~@15 B C@2 D E F G F G H I ~ J K ~@16 L M@2 N O P N P N Q R A S ~@2 T U V U W V X ~@13 E@3 B C Y B Y Z AA ~ AB J
  AC AD AE AF ~@10
>`.pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~ x!3", D: "~ x ~@2", E: "x!2 ~ x", F: "x ~ x ~@4 x", G: "x!2 ~@2", H: "x ~@2 x ~@3 x",
  I: "x ~@2 x ~@4", J: "x!2", K: "x", L: "~ x!2 ~", M: "x!3 ~", N: "x ~@2 x", O: "x ~ x!2", P: "x ~@4 x!2 ~",
  Q: "~ x ~@3 x!2 ~", R: "~ x ~@6", S: "~ x ~ x", T: "~@5 x!3", U: "~ x!7", V: "~ x!2 ~ x!4", W: "~ x!3 ~ x!3",
  X: "~ x!3 ~@4", Y: "~@3 x!2 ~ x ~", Z: "~@4 x ~@2 x", AA: "~@3 x!2 ~@2 x", AB: "~ x", AC: "~@2 x ~@4 x",
  AD: "x!2 ~ x!3 ~ x", AE: "x!2 ~ x ~ x ~ x", AF: "x!2 ~@6",
})).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct("<~@67 [~@3 x ~@4] ~@2 [~@3 x ~@4] ~@27 [~ x ~@6] ~@13>").gain(0.16)

// drums · ride
const ride = s("rd").struct("<~@19 A B ~@10 B ~@5 C ~@11 D ~@10 C ~@4 E ~@3 E ~ A F ~@11 F ~@10 A ~@16>".pickRestart({
  A: "~ x", B: "x", C: "~@3 x", D: "~ x ~ x", E: "~ x!4 ~@3", F: "x!2",
})).gain(0.22)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@19 A ~@29 B ~@21 C ~@12 D ~@27>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@31 x", D: "~@3 x ~@4",
})).gain(0.11)

// drums · splash
const splash = s("cr").struct("<~@100 [~ x ~@2] ~@11>").gain(0.27)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@4 A B@3 ~ C D C D E F@2 C G H ~ I J@2 K L G J G@4 ~@3 M N@3 O P Q P Q R S@2 P T U ~ N V@2 W X V T@4 V ~@3 Y ~@8 Z@5
  G AA@2 AB G ~@2 L@3 AC J L G@4 H ~@16
>`.pickRestart({
  A: "~@5 x ~@2", B: "x!8", C: "~ x!5 ~@2", D: "~ x!4 ~@3", E: "~ x!7", F: "~ x!6 ~", G: "~ x!3 ~ x!3", H: "~ x!3 ~@4",
  I: "~@5 x!3", J: "~@2 x!2 ~ x!3", K: "~@8 x ~@3 x ~@7 x ~@2 x ~@3 x ~@4", L: "~ x!3 ~@2 x!2", M: "~@3 x!2 ~@3",
  N: "~@3 x!3 ~@2", O: "~@7 x", P: "x!4 ~@3 x", Q: "x!3 ~@4 x", R: "x!6 ~ x", S: "x!5 ~@2 x", T: "x!2 ~ x!3 ~ x",
  U: "x!2 ~@6", V: "x!2 ~ x!3 ~@2", W: "x ~@3 x ~@7 x ~@2 x ~@3 x ~@8 x ~@3", X: "x!2 ~@2 x!2 ~ x", Y: "~ x!2 ~@5",
  Z: "~@5 x!2 ~", AA: "x ~@4 x!3", AB: "x!2 ~@3 x!3", AC: "~@4 x ~@2 x ~@3 x ~@8 x ~@3 x ~@3 x ~@3",
})).gain(0.28)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 A ~@4 B C@5 D C E C ~@12 F ~ G H D ~ C I J I@5 K I L ~@13 M ~ N K ~@8 F O F@5 G F E ~@13 C H C ~@3 I ~@9
>`.pickRestart({
  A: "x!3 ~ x ~@3", B: "x ~@2 x", C: "x", D: "x ~@6 x", E: "x!2", F: "~ x", G: "~@3 x!2 ~@3", H: "~@7 x", I: "~@3 x",
  J: "~@2 x!2", K: "~@5 x!2 ~", L: "~ x ~ x", M: "~ x ~@2", N: "~ x!2 ~@5", O: "~ x!2 ~",
})).gain(0.16)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@11 A ~@19 B ~@4 C ~@4 D ~@19 E ~@14 F ~@18 G H ~@5 I ~@9>".pickRestart({
  A: "~@3 x", B: "~@3 x ~ x ~@2", C: "x ~@6 x", D: "~ x", E: "~ x ~ x ~@4", F: "~ x ~@2", G: "~@7 x", H: "~ x ~@6",
// … 22 more lines