Strudelify

Shape of My Heart

Backstreet Boys

KeyE♭ majorTempo98 bpm
0:00/0:00
// Shape of My Heart — Backstreet Boys
// 98 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 11 "Staff 17" piano (copy of ch 4 piano)
// note: Full arrangement: all 94 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/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 · "MIDI MAN!A 3000!"
const bass = note(`<
  ~@3 A B C@2 D E C@2 D E C@2 D E F D G B H I J K L M N O P Q R S T Q R U T Q R S V W X Y Z H I J K L M N AA AB AC AD AE
  AF AG AH AI AJ@2 AF AK AL AM AN AO AP AQ AF AK AL AM AN AO AP AQ AF AK AL AM AN AR AS AT ~@6
>`.pickRestart({
  A: "~@18 eb2@5 ~", B: "ab1@11 ~", C: "eb1!2 ~@6", D: "bb1!2 ~@6", E: "ab1!2 ~@6", F: "c2!2 ~@6", G: "a1!2 ~@6",
  H: "eb1@3 eb1@3 ~@3 eb1@3 eb1@8 ~ eb1@3", I: "ab1@3 ab1@3 ~@3 ab1@3 eb1@8 ~ ab1@3",
  J: "bb1@3 bb1@3 ~@3 bb1@3 ab1@8 ~ ab1@3", K: "g1@3 g1@3 ~@3 g1@3 g1@8 ~ bb1@3",
  L: "c2@3 c2@3 ~@3 eb2@3 bb1@8 ~ ab1@3", M: "f1@3 f1@3 ~@3 f1@3 f1@8 ~ g1@3", N: "ab1@3 ab1@3 ~@3 ab1@3 ab1@8 ~ ab1@3",
  O: "bb1@3 bb1@3 ~@3 bb1@3 bb1@5 ~ ab1@5 ~", P: "ab1@3 ab1@3 ~@3 ab1@3 ab1@10 ~@2",
  Q: "eb1@3 eb1@3 ~@3 eb1@3 eb1@10 ~@2", R: "eb1@3 eb1@3 ~@3 eb1@11 ~ ab1@3", S: "bb1@3 bb1@3 ~@3 bb1@3 bb1@10 ~@2",
  T: "ab1@3 ab1@6 ab1@8 ~ ab1@3 bb1@3", U: "bb1@3 bb1@6 bb1@3 bb1@10 ~@2", V: "ab1@3 ab1@3 ~@3 ab1@11 ~ bb1@3",
  W: "c2@3 c2@3 ~@3 c2@3 c2@10 ~@2", X: "bb1@3 bb1@3 ~@3 bb1@13 ~@2", Y: "a1@3 a1@6 a1@13 ~@2", Z: "ab1@16 ~@2 eb2@5 ~",
  AA: "g1@3 g1@6 g1@3 g1@5 ~ g1@3 b1@3", AB: "c2@3 c2@6 c2@3 bb1@8 ~ bb1@3", AC: "eb1@3 eb1@6 gb1@3 ab1@8 ~ bb1@3",
  AD: "c2@3 c2@3 ~@3 c2@3 bb1@8 ~ f1@3", AE: "eb1@3 eb1@6 gb1@3 ab1@5 ~ g1@5 ~", AF: "f1@3 f1@3 ~@3 f1@3 f1@8 ~ f1@3",
  AG: "g1@3 g1@6 g1@3 g1@8 ~ g1@3", AH: "ab1@3 ab1@6 ab1@3 ab1@8 ~ ab1@3", AI: "b1@3 b1@6 b1@3 c2@5 ~ d2@5 ~",
  AJ: "[eb2@23 ~]/2", AK: "bb1@3 bb1@3 ~@3 bb1@3 f1@8 ~ bb1@3", AL: "c2@3 c2@3 ~@3 c2@3 bb1@8 ~ bb1@3",
  AM: "a1@3 a1@3 ~@3 a1@3 a1@8 ~ c2@3", AN: "d2@3 d2@3 ~@3 f2@3 c2@8 ~ bb1@3", AO: "g1@3 g1@3 ~@3 g1@3 g1@8 ~ a1@3",
  AP: "bb1@3 bb1@3 ~@3 bb1@3 bb1@8 ~ f2 g2 ~", AQ: "bb2@4 g2@4 ~ e2@3 c2@4 a1@4 ~ g1@3",
  AR: "g1@3 g1@3 ~@3 g1@3 g1@10 ~@2", AS: "bb1@11 ~", AT: "c2@11 ~",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A B C D A@2 C E F A C E A F C G H A I D J K L M N O P Q P A@2 C E F A C E A F C G H A I R J K L M N O P S T U T U V
  W X Y Z A AA AB AC AD AE AF AG AH AA AB AC AD AE AF AG AH AA AB AC AD AE AF AG AI AJ AK@5
>`.pickRestart({
  A: "[eb4,ab4]@8 ~ g4@13 ~@2, bb3@11 ~", B: "[bb3,eb4,ab4]@8 ~ [bb3,g4]@13 ~@2",
  C: "[eb4,g4]@8 ~ [d4,f4]@13 ~@2, bb3@11 ~", D: "[ab3,c4,eb4]@11 ~", E: "[ab3,bb3]@9 [c4,eb4]@8 ~ [d4,f4]@5 ~, d4 ~@2",
  F: "[eb4,ab4]@8 ~ [eb4,g4]@13 ~@2, bb3@11 ~", G: "[ab3,bb3]@9 [c4,eb4]@8 ~ [d4,eb4,f4]@5 ~, d4 ~@2",
  H: "[c4,eb4,ab4]@8 ~ [c4,eb4,g4]@13 ~@2", I: "[a3,c4,f4]@11 ~", J: "[eb3,eb4,g4,bb4,eb5]@11 ~",
  K: "[ab3,eb4,ab4,c5,eb5]@10 ~@2 [ab3,eb4,ab4,c5,eb5]@5 ~ [eb3,eb4,g4,bb4,eb5]@5 ~", // Ab Eb
  L: "[bb3,f4,bb4,d5]@5 ~ [ab3,ab4]@5 ~", M: "[g3,d4,g4,bb4,d5]@11 ~", N: "[c4,g4,c5,eb5]@5 ~ [bb3,bb4]@5 ~",
  O: "[f3,f4,a4,c5]@11 ~", P: "[ab3,ab4,c5,eb5]@11 ~",
  Q: "[bb4,eb5,g5]@8 ~ bb4@3 [bb4,d5,f5]@10 ~@2, bb3@11 ~, f4@3 ~@5", R: "[bb3,eb4,ab4]@11 ~",
  S: "[b3,b4,d5,g5]@5 ~ [b4,d5,g5]@5 ~", T: "[c4,eb4,g4]@5 ~ [bb3,d4,f4]@5 ~", U: "[g3,bb3,eb4]@5 ~ [ab3,c4,eb4]@5 ~",
  V: "f3@3 ab3@19 ~@2, c4@11 ~", W: "[g3,b3,d4,f4]@11 ~", X: "[ab3,c4,eb4,g4]@11 ~",
  Y: "[b3,d4,f4]@10 ~@2 [c4,eb4]@5 ~ [d4,f4]@5 ~", Z: "[bb3,eb4,g4]@11 ~", AA: "[f3,f4,a4,c5,f5]@11 ~",
  AB: "[bb3,f4,bb4,d5,f5]@10 ~@2 [bb3,f4,bb4,d5,f5]@5 ~ [f3,f4,a4,c5,f5]@5 ~", AC: "[c4,g4,c5,e5]@5 ~ [bb3,bb4]@5 ~",
  AD: "[a3,e4,a4,c5,e5]@11 ~", AE: "[d4,a4,d5,f5]@5 ~ [c4,c5]@5 ~", AF: "[g3,g4,b4,d5]@11 ~",
  AG: "[bb3,bb4,d5,f5]@11 ~", AH: "[bb3,d4,f4]@5 ~ [c4,e4,g4]@5 ~", AI: "[g3,c4,e4]@5 ~ [c4,e4,g4]@5 ~",
  AJ: "[c4,e4,c5,e5]@5 ~@5 [d5,f5]@8 ~ [e4,g4,e5]@5, [bb2,f3]@23 ~, ~@9 [d4,f4]@3 ~@7 g5 ~@4", // C Dm Em Bb5 Dm
  AK: "[~ a4 [f5,a5]@9 ~ [e5,g5]@8 ~@3 [a4,c5,f5]@6 ~ [a4,c5,f5]@75 ~@15, ~ [c3,g3]@26 ~@2 [f2,f3,a3]@66 ~@25, ~ f4@6 ~@4 [e4,g4]@3 ~@8 [d4,f4]@6 ~ [c4,f4]@6 ~@85]/5", // F Em F C5 F Em Dm F5
})).s("gm_synth_strings_1").gain(0.72)

// chords · pad halo · "Staff 9"
const pad_halo = note(`<
  ~@5 A B C ~ D E@2 ~ A@2 F G H A I J@2 K L M N O P Q P A B C ~ D R ~@2 A@2 F G H A I ~ S K L M N O P T ~@11 U V W X T Y
  Z ~ U V W X T Y Z ~ U V W X T Y ~@7
>`.pickRestart({
  A: "[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@13 ~@2", B: "[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@8 ~@4 eb4@3, ~@18 f4@5 ~",
  C: "[bb3,eb4,g4]@8 ~ [bb3,d4,f4]@13 ~@2", D: "[bb3,eb4,ab4]@5 ~ [bb3,g4]@3 [bb3,eb4,g4]@8 ~@7",
  E: "[[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@8 ~ [bb3,d4,f4]@16 ~@14]/2", F: "[bb3,eb4,g4]@8 ~ [d4,f4]@13 ~@2",
  G: "[ab3,bb3,d4]@8 ~ [c4,eb4]@8 ~ [d4,f4]@5 ~", H: "[c4,eb4,ab4]@8 ~ [c4,eb4,g4]@13 ~@2", I: "[a3,c4,f4]@11 ~",
  J: "[~@12 [g4,bb4,eb5]@11 ~, [ab3,c4,eb4]@29 ~@19]/2", K: "[ab4,c5,eb5]@16 ~@2 [g4,bb4,eb5]@5 ~",
  L: "~ [bb4,d5,f5]@10 ~ ab4@10 ~@2", M: "[g4,bb4,d5]@11 ~", N: "[c5,eb5] g4@5 ~ g4@6 bb4@10 ~", O: "[a4,c5,f5]@11 ~",
  P: "[ab4,c5,eb5]@11 ~", Q: "[bb4,eb5,g5]@5 ~ [bb4,d5,f5]@5 ~", R: "[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@8 ~@7",
  S: "[g4,bb4,eb5]@11 ~", T: "[b4,d5,g5]@11 ~", U: "[bb4,d5,f5]@16 ~@2 [a4,c5,f5]@5 ~", V: "[c5,e5,g5]@5 ~ bb4@5 ~",
  W: "[a4,c5,e5]@11 ~", X: "[a4,d5,f5]@5 ~@2 a4@4 ~ c5@10 ~@2", Y: "[bb4,d5,f5]@11 ~",
  Z: "[c5,f5,a5]@5 ~ [c5,e5,g5]@5 ~", // F C
})).s("gm_pad_halo").gain(0.72)

// chords · epiano1 · "Staff 11"
const epiano1 = note(`<
  A B C D E F G H I G@2 H J G@2 K L M G N O@2 ~@8 G@2 H I G@2 H J G@2 K L M G P@3 ~@7 Q R Q S T U V W X@2 Y ~@7 Y ~@7 Y
  ~@13
>`.pickRestart({
  A: "~@23 bb4", B: "eb5 ab5@5 ab5@3 g5@6 g5@8 ~", C: "bb4 eb5@4 ab5@4 g5@6 g5@8 ~",
  D: "bb4 eb5@4 g5@4 [d5,f5]@13 ~@2, ~ g5 ~@22", E: "ab4 eb5@5 eb5@3 bb4@10 eb5@5",
  F: "[eb4,ab4]@5 ~@4 [bb3,eb4,g4]@13 ~@2, bb3 ~@2", G: "[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@13 ~@2",
  H: "[bb3,eb4,g4]@8 ~ [bb3,d4,f4]@13 ~@2", I: "[ab3,bb3]@9 [c4,eb4]@8 ~ [ab3,d4,f4,eb5]@5 ~, d4 ~@2",
  J: "[ab3,bb3,d4]@8 ~ [ab3,c4,eb4]@8 ~ [ab3,d4,f4,eb5]@5 ~", K: "[eb4,g4]@4 ~@2 bb3@5 ~, bb3@9 [d4,f4]@13 ~@2",
  L: "[ab3,bb3]@9 [c4,eb4]@8 ~ [d4,f4,eb5]@5 ~, c4 ~@2", M: "[c4,eb4,ab4]@8 ~ [c4,eb4]@3 g4@10 ~@2",
  N: "[c4,f4,f5]@5 ~ c5@5 ~, a3@11 ~", O: "[[c4,eb4]@3 eb5@26 ~@19, [ab2,ab3]@11 ~@13]/2",
  P: "[[c4,f4,f5]@10 ~@2 c5@41 ~@19, a3@11 ~@25]/3", Q: "[g3,c4,eb4]@5 ~ [f3,bb3,d4]@5 ~",
  R: "[g3,bb3,eb4]@5 ~ [ab3,c4,eb4]@5 ~", S: "[g3,bb3,eb4]@10 ~@2 [ab3,c4,eb4]@5 ~ [g3,bb3,d4]@5 ~",
  T: "[f3,ab3,c4]@11 ~", U: "[g3,b3,d4,f4]@11 ~", V: "[ab3,c4,eb4]@11 ~",
  W: "[b3,d4,f4]@10 ~@2 [c4,eb4]@5 ~ [d4,f4]@5 ~", // Bdim Cm Dm
  X: "[[eb4,g4]@25 ab5@5 ab5@3 g5@7 g5@2 f5@3 [a3,c4,f4]!2 ~, bb3@15 ~]/2", Y: "[a3,c4,f4]@5 ~@19",
})).s("gm_epiano1").gain(0.72)

// chords · acoustic guitar steel · "Staff 13"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I G@2 H J K G L I M G N O P Q R S T U V W X Y@2 Z AA Y@2 Z AB Y@2 Z AA AC Y AD AE AF AG AH AI AJ AK AL
  AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE AX AY AZ BA BB BC BD BE AX AY AZ BA BB BF BG BH@2 BI@5
>`.pickRestart({
  A: "~@23 bb3", B: "eb4 ~@5 eb3@3 eb3@11 ~ eb3@2 bb3, eb3@5 ~@4 [bb3,g4]@14 ~, ~ ab4@8 ~@15",
  C: "eb4 ~@5 eb3@3 [bb3,g4]@12 eb3@3, eb3@5 ~@4 eb3@11 ~@4, ~ ab4@8 ~@15", // Eb
  D: "bb3 [eb4,g4]@5 [bb2,bb3]@3 bb2@11 ~ bb2@2 ab3, bb2@5 ~@4 [bb3,d4,f4]@14 ~", E: "[ab2,c4,eb4]@11 ~",
  F: "[bb3,eb4,ab4]@5 ~@4 [eb4,g4]@13 ~@2", G: "[bb3,eb4,ab4]@8 ~ [bb3,eb4,g4]@13 ~@2",
  H: "[bb3,eb4,g4]@8 ~ [bb3,d4,f4]@13 ~@2", I: "[ab3,bb3,d4]@8 ~ [c4,eb4]@8 ~ [d4,f4]@5 ~",
  J: "[ab3,bb3,d4]@8 ~ [ab3,c4,eb4]@8 ~ [ab3,d4,f4]@5 ~", K: "[bb3,eb4,ab4]@8 ~ [eb4,g4]@13 ~@2",
  L: "[bb3,eb4,g4]@8 ~ [d4,f4]@13 ~@2", M: "[c4,eb4,ab4]@8 ~ [c4,eb4,g4]@13 ~@2", N: "[a3,c4,f4]@2 ~",
  O: "[ab3,c4,eb4]@11 ~", // Ab
  P: "g3 [bb3,eb4]@2 eb4 [g3,bb3]@2 g3 [bb3,eb4]@2 eb4 [g3,bb3]@2 g3 [bb3,eb4]@2 eb4 [g3,bb3]@2 g3 [bb3,eb4]@2 eb4 [g3,bb3]@2", // Eb5 Gm Eb5 Gm Eb5 Gm Eb5 Gm
  Q: "ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 g3 [bb3,eb4]@2 eb4 [g3,bb3]@2", // Cm Ab Cm Ab Cm Ab Eb5 Gm
  R: "bb3 [d4,f4]@2 f4 [bb3,d4]@2 bb3 [d4,f4]@2 f4 [bb3,d4]@2 ab3 [d4,f4]@2 f4 [ab3,d4]@2 ab3 [d4,f4]@2 f4 [ab3,d4]@2", // Dm Bb Dm Bb Dm Abdim Dm Abdim
  S: "g3 [bb3,d4]@2 d4 [g3,bb3]@2 g3 [bb3,d4]@2 d4 [g3,bb3]@2 g3 [bb3,d4]@2 d4 [g3,bb3]@2 g3 [bb3,d4]@2 d4 [g3,bb3]@2", // Bb Gm Bb Gm Bb Gm Bb Gm
  T: "g3 c4@2 eb4 [g3,c4]@2 g3 [c4,eb4]@2 eb4 [g3,c4]@2 g3 [bb3,eb4]@2 eb4 [g3,bb3]@2 g3 [bb3,eb4]@2 eb4 bb3@2", // C5 Cm C5 Eb5 Gm Eb5
  U: "[g3,a3] [c4,f4]@2 f4 [a3,c4]@2 a3 [c4,f4]@2 f4 [a3,c4]@2 a3 [c4,f4]@2 f4 [a3,c4]@2 a3 [c4,f4]@2 f4 [a3,c4]@2", // Gsus2 F5 Am F5 Am F5 Am F5 …
  V: "ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 ab3 [c4,eb4]@2 eb4 [ab3,c4]@2 ab3 [c4,eb4]@2 eb4 c4@2", // Cm Ab Cm Ab Cm Ab Cm
  W: "[ab3,bb3] [eb4,g4]@2 g4 [bb3,eb4]@2 bb3 [eb4,g4]@2 g4 [bb3,eb4]@2 bb3 [d4,f4]@2 f4 [bb3,d4]@2 bb3 [d4,f4]@2 f4 [bb3,d4]@2", // Absus2 Eb Eb5 Eb Eb5 Dm Bb Dm …
  X: "ab3 [c4,eb4]@22 ~", Y: "[bb3,eb4,ab4]!3 [bb3,eb4,g4]!5", Z: "[bb3,eb4,g4]!3 [bb3,d4,f4]!5",
  AA: "[ab3,bb3,d4]!3 [ab3,c4,eb4]!3 [ab3,c4,d4,eb4,f4] [ab3,d4,f4]", // Bb7 Ab Fm7 Ddim
  AB: "[ab3,bb3,d4]!3 [ab3,c4,eb4] [c4,eb4] [ab3,c4,eb4] [ab3,c4,d4,eb4,f4] [ab3,d4,f4]", // Bb7 Ab Cm Ab Fm7 Ddim
  AC: "[c4,eb4,a4] [c4,eb4,ab4]!2 [c4,eb4,g4]!5", AD: "[a3,c4,f4]!8", AE: "[ab3,c4,eb4]@5 ~@19",
  AF: "~@3 eb4 [g3,bb3]@2 ~@3 eb4 [g3,bb3]@2 ~@3 eb4 [g3,bb3]@2 ~@3 eb4 [g3,bb3]@2", // Gm
  AG: "~@3 eb4 [ab3,c4]@2 ~@3 eb4 [ab3,c4]@2 ~@3 eb4 [ab3,c4]@2 ~@3 eb4 [g3,bb3]@2", // Ab Gm
  AH: "~@3 f4 [bb3,d4]@2 ~@3 f4 [bb3,d4]@2 ~@3 f4 [ab3,d4]@2 ~@3 f4 [ab3,d4]@2", // Bb Abdim
  AI: "~@3 d4 [g3,bb3]@2 ~@3 d4 [g3,bb3]@2 ~@3 d4 [g3,bb3]@2 ~@3 d4 [g3,bb3]@2", // Gm
  AJ: "~@3 eb4 [g3,c4]@2 ~@3 eb4 [g3,c4]@2 ~@3 eb4 [g3,bb3]@2 ~@3 eb4 bb3@2", // C5 Gm
  AK: "g3@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2", // Am
  AL: "~@3 eb4 [ab3,c4]@2 ~@3 eb4 [ab3,c4]@2 ~@3 eb4 [ab3,c4]@2 ~@3 eb4 c4@2", // Ab
  AM: "[g3,b3,d4,f4] b3@2 [g3,b3,d4,f4]@2 [g3,b3,d4,f4]@2 [g3,b3,d4,f4]", // G7
  AN: "g3 [c4,eb4,g4]@2 g3 [c4,eb4]@3 [c4,eb4,g4]@2 g3 [c4,eb4,g4]@2 f3 [bb3,d4,f4]@2 bb3 [d4,f4]@2 [bb3,f4] d4@2 bb3 [d4,f4]@2", // Cm Bb Dm Bb5 Dm
  AO: "g3 eb4@2 g3 [bb3,eb4]@2 ~ [g3,bb3,eb4]@2 g3 [bb3,eb4]@2 ab3 c4@2 ab3 [c4,eb4]@2 ~ [ab3,c4,eb4]@2 ab3 [c4,eb4]@2", // Eb5 Eb Eb5 Cm Ab Cm
  AP: "g3 [c4,eb4,g4]@2 g3 [c4,eb4,g4]@2 [c4,eb4,g4]@3 g3 [c4,eb4,g4]@2 f3 [bb3,d4,f4]@2 bb3 [d4,f4]@2 bb3 [d4,f4]@2 bb3 [d4,f4]@2", // Cm Bb Dm
  AQ: "g3 eb4@2 g3 [bb3,eb4]@2 ~ [g3,bb3,eb4]@2 g3 [bb3,eb4]@2 ab3 c4@2 ab3 [c4,eb4]@2 [ab3,c4,eb4]@5 ~", // Eb5 Eb Eb5 Cm Ab
  AR: "f3 [ab3,c4]@2 f3 [ab3,c4]@2 [f3,ab3,c4]@3 f3 [ab3,c4]@2 f3 [ab3,c4]@2 f3 [ab3,c4]@2 ~ [f3,ab3,c4]@2 f3 [ab3,c4]@2", // Ab Fm Ab Fm Ab
  AS: "g3 [b3,d4]@2 g3 [b3,d4]@2 [b3,d4,f4]@3 g3 [b3,d4,f4]@2 g3 [b3,d4,f4]@2 g3 [b3,d4,f4]@2 ~ [b3,d4,f4]@2 g3 [b3,d4,f4]@2", // Bm Bdim
  AT: "ab3 [c4,eb4,g4]@2 ab3 [c4,eb4,g4]@2 [c4,eb4] ab3@2 ab3 [c4,eb4,g4]@2 ab3 [c4,eb4,g4]@2 ab3 [c4,eb4,g4]@2 ~ [ab3,c4,eb4]@2 ab3 [c4,eb4,g4]@2", // Cm Ab Cm
  AU: "b3 [d4,f4]@2 b3 [d4,f4]@2 ~ [b3,d4,f4] ~ b3 [d4,f4]@2 c4 eb4@5 d4 f4@5", AV: "[g3,bb3] [eb4,g4]@22 ~",
  AW: "eb4 ~@5 eb3@3 ~ [bb3,g4]@10 ~ [a3,c4,f4]!2 ~, eb3@5 ~@4 eb3@13 ~@2, ~ ab4@9 ~@14", // Eb F
  AX: "[a3,c4,f4]@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2 ~@3 f4 [a3,c4]@2", // F Am
  AY: "~@3 f4 [bb3,d4]@2 ~@3 f4 [bb3,d4]@2 ~@3 f4 [bb3,d4]@2 ~@3 f4 [a3,c4]@2", // Bb Am
  AZ: "~@3 g4 [c4,e4]@2 ~@3 g4 [c4,e4]@2 ~@3 g4 [bb3,e4]@2 ~@3 g4 [bb3,e4]@2", // C Bbdim
  BA: "~@3 e4 [a3,c4]@2 ~@3 e4 [a3,c4]@2 ~@3 e4 [a3,c4]@2 ~@3 e4 [a3,c4]@2", // Am
  BB: "~@3 f4 [a3,d4]@2 ~@3 f4 [a3,d4]@2 ~@3 f4 [a3,c4]@2 ~@3 f4 c4@2", // D5 Am
  BC: "a3@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4]@2", // Bm
  BD: "~@3 f4 [bb3,d4]@2 ~@3 f4 [bb3,d4]@2 ~@3 f4 [bb3,d4]@2 ~@3 f4 d4@2", // Bb
  BE: "[bb3,d4,f4]@3 [bb3,d4,f4]@3 ~@3 [bb3,d4,f4]@3 [c4,e4,g4]@5 ~ [c4,e4,g4]@5 ~", // Bb C
  BF: "a3@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4]@2 ~@3 g4 [b3,d4] f3", BG: "~ [bb3,d4,f4]@22 g3, bb2@11 ~",
  BH: "[~ [c4,e4,g4]@21 ~@2 [f3,bb3] e4@8 ~ [d4,f4]@14, c3@22 bb2@25 ~, ~@25 c4 ~@22]/2", // C Bb5 Dm
  BI: "[~ a3 c4 [f4,a4]@9 g3 c4 [e4,g4]@13 ~@3 a3 [f3,c4] f4@73 ~@15, ~ c3@11 c3@15 ~@2 f2@76 ~@15]/5", // F Em F5
})).s("gm_acoustic_guitar_steel").gain(0.72)

// chords · piano · "Staff 21"
const piano = note(`<
  ~@20 A B@2 C@3 D E F@2 ~@4 G ~@3 H@2 I@2 J K@3 B@2 C@3 D E L@2 ~@3 M N O P Q ~ R@3 S@4 T U@2 V@3 W X Y Z@2 V@3 W X AA
  ~@6
>`.pickRestart({
  A: "~@12 [ab3,c4]@5 ~ [bb3,d4]@5 ~", // Ab Bb
  B: "[[bb3,eb4]@3 [bb3,f4]@3 [bb3,eb4]@3 [bb3,c4]@6 [eb3,g3]@6 [eb3,ab3]@13 ~@2 [c4,f4]@5 ~ [c4,eb4]@5 ~]/2", // Eb5 Bb5 Eb5 Bbsus2 Eb Ab5 F5 Cm
  C: "[[bb3,d4]@5 ~ [bb3,d4]@3 [bb3,d4]@3 ~@3 f3@6 d3@8 ~ [g3,bb3]@3 [bb3,d4]@6 [g3,bb3]@6 [g3,c4]@13 ~@2 [g3,c4]@3 [g3,c4]@3 [f3,d4]@3 [f3,eb4]@3]/3", // Bb Gm Bb Gm C5 Dm F7
  D: "[f3,a3]@10 ~@5 eb4@3 d4@3 c4@3", E: "[ab3,c4]@5 ~@4 [ab3,c4]@3 ~@6 [ab3,eb4]@5 ~",
  F: "[[ab3,eb4]@5 ~@4 [bb3,d4]@8 ~ [ab3,c4]@3 [ab3,c4]@19 ~@8]/2", G: "c4@8 ~ bb3@13 ~@2",
  H: "[g3@5 ~ g3@3 g3@6 g3@6 ab3@6 bb3@8 ~@13]/2", I: "[~ eb4 ~ eb4@3 eb4@3 eb4@6 d4@6 d4@6 bb3@8 ~@13]/2",
  J: "[g3,c4,eb4]@8 ~ [g3,c4,eb4]@8 ~@4 [c4,eb4]@3", // Cm
  K: "[[g3,bb3,eb4]@5 ~@4 [g3,bb3,eb4]@8 ~ [g3,bb3,eb4]@3 [a3,c4,f4]@32 ~@7 [ab3,c4]@5 ~ [bb3,d4]@5 ~]/3", // Eb F Ab Bb
  L: "[[g3,d4]@8 ~ [b3,d4]@8 ~ [ab3,c4]@3 [g3,c4]@19 ~@8]/2", M: "f3@11 ~", N: "[g3,b3,d4,f4]@11 ~",
  O: "[ab3,c4,eb4,g4]@11 ~", P: "[b3,d4,f4]@10 ~@3 [c4,eb4]@5 [d4,f4]@5 ~", Q: "bb3 [eb4,g4]@22 ~",
  R: "[~@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@6 [c4,f4,a4]@6 [bb3,d4,g4]@8 ~ [bb3,d4,g4]@3 [bb3,d4,g4]@6 [bb3,d4,g4]@3 ~@3 [c4,e4,g4]@8 ~ [c4,e4,g4]@5 ~ [bb3,e4]@3 [bb3,e4,f4,g4]@3 [bb3,e4,g4]@3 [bb3,e4]@3]/3", // F Gm C Bbdim Edim Bbdim
  S: "[[a3,c4,e4]@5 ~ [c4,e4,g4]@3 [c4,e4,g4]@6 [c4,e4,g4]@6 [a3,d4,f4]@11 ~ [a3,c4,f4]@8 ~ [a3,c4,f4]@3 [b3,d4,f4]@8 ~ [b3,d4,f4]@3 [b3,d4,f4,g4]@8 ~ a4@3 g4@8 ~ [bb3,d4,f4]@3 [bb3,d4,f4]@6 [bb3,d4,f4]@6 [bb3,d4,f4]@3]/4", // Am C Dm F Bdim G7 Bb
  T: "~ [bb3,d4,f4]!2 [g3,c4,e4] [bb3,d4] [g3,c4,e4]!2 [a3,c4,f4]", // Bb C Bb C F
  U: "[[c4,f4]@3 [c4,g4]@3 [c4,f4]@3 [c4,d4]@6 [f3,a3]@6 [f3,bb3]@13 ~@2 [d4,g4]@5 ~ [d4,f4]@5 ~]/2", // F5 C5 F5 Csus2 F Bb5 G5 Dm
  V: "[[c4,e4]@5 ~ [c4,e4]@3 [c4,e4]@3 ~@3 g3@6 e3@8 ~ [a3,c4]@3 [c4,e4]@6 [a3,c4]@6 [a3,d4]@13 ~@2 [a3,d4]@3 [a3,d4]@3 [g3,e4]@3 [g3,f4]@3]/3", // C Am C Am D5 C G7
  W: "[g3,b3]@10 ~@5 f4@3 e4@3 d4@3", X: "[bb3,d4]@5 ~@4 [bb3,d4]@3 ~@6 [bb3,f4]@5 ~",
  Y: "[bb3,f4]@5 ~@4 [c4,e4]@8 ~ [a3,c4]@3 [a3,c4]@3", // Bb5 C Am
  Z: "[[c4,f4]@3 [c4,g4]@3 [c4,f4]@3 [c4,d4]@6 [f3,a3]@3 ~@3 [f3,bb3]@13 ~@2 [d4,g4]@5 ~ [d4,f4]@5 ~]/2", // F5 C5 F5 Csus2 F Bb5 G5 Dm
  AA: "[bb3,f4]@5 ~@4 [c4,e4]@8 ~@7", // Bb5 C
})).s("gm_piano").gain(0.72)

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

// drums · snare
const snare = s("sd").struct("<~@21 A@8 B A@15 ~ A@16 ~@2 A@24 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~@8 B ~@15 C ~@16 C A ~@7 D ~@7 E ~@7 F ~@6>".pickRestart({
  A: "~@3 x", B: "x!2 ~ x!2 ~@3", C: "x", D: "~@18 x!2 ~@4", E: "~@7 x", F: "~@4 x!3 ~",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@12 B@7 ~ C D@3 C D E@2 F G H@7 G H@6 ~ C D@3 C D E@2 G H@3 G H@3 ~ I J D@3 C D E@2 J D@3 C D E@2 J D@3 C D E K ~@6
>`.pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@3 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  D: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", E: "~ x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  F: "~@3 x", G: "~ x!7", H: "x!8", I: "~@21 x!2 ~", J: "x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  K: "~ x!3 ~ x!2 ~",
})).gain(0.72)

// … 31 more lines

More by Backstreet Boys