Strudelify

Feels So Right

Alabama

KeyE♭ majorTempo92 bpm
0:00/0:00
// Feels So Right — Alabama
// 92 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "tom mid 2" electric bass finger (copy of ch 2 "tom mid 2" acoustic bass); ch 5 "tom mid 2" string ensemble 1 (copy of ch 4 "tom mid 2" synth strings 1)
// note: Full arrangement: all 77 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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 · piano · "tom mid 2"
const piano = note(`<
  A@4 B@4 C@6 D@2 E@2 F@4 G@5 H@7 I@2 J@4 K@4 L@7 M N@4 O P@5 Q R S T U V W X@3 Y Z@2 ~@2
>`.pickRestart({
  A: "[[eb4,g4,eb5]@27 ~@5 eb5@25 ~@7 g5@24 ~@8 ab5@31 ~, eb2@30 eb4@26 ~@7 eb5@26 ~@6 eb5@32 ~, ~@31 eb3@31 eb2@32 [eb3,ab4,c5]@34, ~@31 [ab4,c5]@26 ~@5 [g4,bb4]@28 ~@38]/4", // Eb Ab Gm
  B: "[[bb3,eb4,g4,bb4]@26 ~@6 eb5@28 ~@5 g5@26 ~@5 [c5,eb5]@29 ~@3, eb2@31 eb3@32 eb2@32 ab2@33, ~@31 [eb4,ab4,c5]@29 ~@3 g4@29 ~@3 [eb4,ab4]@30 ~@3, ~@16 [bb4,eb5]@7 ~@9]/4", // Eb Cm Ab Ab5 Eb5
  C: "[[bb3,eb4,g4,bb4]@27 ~@5 eb3@30 ~@2 eb5@25 ~@31 c5@4 eb5@3 ~ [c5,eb5,g5]@19 ~ g5@3 eb5@4 c5@2 ~@3 ab5@19 ~ c5@4 ab5@4 c5@2 ~ eb5, eb2@30 c4@27 ~@7 eb2@31 ab4 c5@20 ab4@8 ~@34 c5@20 ~@12 c5@2, ~@31 [eb4,ab4]@28 ~@3 [eb4,g4]@28 ~@4 c4@30 ~@35 ab2@33, ~@32 c5@25 ~@6 bb4@26 ~@6 eb4@29 ~@35 eb5@20 ~@13, ~@96 ab2@31 c3@33 ~@32]/6", // Eb Cm Ab5 Eb
  D: "[[c5,eb5,g5]@18 ~@2 c5@4 [eb5,g5]@4 c5@2 ~ [c5,eb5,ab5]@12 ~ c5@3 ab5@8 ~ g5@8, c2@31 ab2@23 ~@10]/2", // Cm Eb Ab
  E: "[[ab4,c5,f5]@21 ~@3 c5@5 ~@3 bb2@32, f2@31 [f4,bb4]@30 ~@3, ~@8 d5@7 ~]/2", // Fm Bb5
  F: "[[eb4,g4,bb4,eb5]@9 ~@3 [eb4,g4,bb4,eb5]@15 ~@5 [eb5,ab5]@25 ~@19 [eb4,g4,bb4,eb5]@15 ~@5 ab2@32, eb2@31 ab2@32 [g4,bb4,eb5]@10 ~@21 ab4@30 ~@4, ~@31 [ab4,c5]@26 ~@5 eb4@10 ~@23 [c5,eb5]@29 ~@4, ~@64 eb2@32 ab5@27 ~@5]/4", // Eb Ab5 Eb Ab Cm
  G: "[[eb4,g4,bb4,eb5]@27 ~@37 eb2@31 ~ [c4,eb4,ab4,c5]@19 ~@5 c5@6 ~@2 eb5@27 ~@4 ab4, eb2@30 [eb4,ab4]@26 ~@5 g4@29 ~@5 ab2@33 ~@32, ~@31 [c5,eb5]@25 ~@6 bb4@27 ~@37 eb4@29 ~@3 eb4@2, ~@32 eb3@31 eb5@26 ~@38 eb2@32 ~, ~@64 g5@26 ~@37 [g4,bb4]@28 ~@5]/5", // Eb Ab Ab5 Cm Gm
  H: "[c5@8 ab4@12 c5@4 bb4@6 ~@2 bb4@27 ~@5 [ab2,eb5]@31 ~ [c5,eb5,g5]@19 ~ g5@3 eb5@4 c5@2 ~@3 ab5@19 ~ c5@4 ab5@4 c5@2 ~ eb5 [c5,eb5,g5]@18 ~@2 c5@4 [eb5,g5]@4 c5@2 ~@14 c5@3 ab5@8 ~ [g2,g5]@8, eb3@30 eb4@28 ~@4 [eb4,ab4]@32 ~@33 eb5@20 ~@12 c3@33 ~@32, ~@31 [eb2,eb5]@32 ~@32 c3@32 ab2@33 ~@32 ab2@24 ~@8, ~@31 g4@28 ~@4 c5@31 ~@32 c5@20 ~@12 c5@2 ~@31 [c5,eb5,ab5]@12 ~@21]/7", // Ab5 Cm Eb G Ab5 Eb Ab
  I: "[[ab4,c5,f5]@21 ~@3 c5@5 ~@3 bb2@31 ~, f2@31 [f4,bb4]@30 ~@3, ~@8 d5@7 ~]/2", // Fm Bb5
  J: "[[eb4,g4,bb4,eb5]@9 ~@3 [eb4,g4,bb4,eb5]@15 ~@5 [eb5,ab5]@25 ~@19 [eb4,g4,bb4,eb5]@15 ~@5 ab2@31 [f4,f5], eb2@31 ab2@32 [g4,bb4,eb5]@10 ~@21 ab4@30 ~@4, ~@31 [ab4,c5]@26 ~@5 eb4@10 ~@23 [c5,eb5]@29 ~@4, ~@64 eb2@32 ab5@27 ~@5]/4", // Eb Ab5 Eb F Eb Ab Cm
  K: "[[d5,g5,bb5] ~@3 [d5,bb5] ~@3 [d5,bb5] ~@3 [d5,g5,bb5]@16 g4@3 [g4,g5,a5] [c5,e5] ~@2 [c5,e5] ~@3 [c5,e5] ~@4 c5@16 [a4,a5]@2 ~ [a4,a5] [d5,f5] ~@3 [d5,f5] ~@2 [d5,f5] ~@4 bb2@16 ~@3 [d5,f5,bb5] [bb2,bb3]@3 a5 [a2,a3,a5]@2 ~@6 [e5,g5,c6] ~@2 c6 c3@8 c3@7 [c4,f4,a4], g2@31 ~ a2@10 ~ a2@21 bb5@4 bb5@3 bb5@4 [d5,f5,bb5]@17 ~@8 c5 ~@7 c5@3 ~@17, g4@25 ~@6 a4@24 ~@8 bb2@10 ~@34 [c3,c4]@2 ~@11 bb2 ~@7, ~@4 g5@4 g5@4 ~@16 g5 ~@3 a5@3 a5@4 a5@4 [e5,a5]@16 ~@5 bb4@28 ~@3 bb4@4 [a4,e5]@2 ~@11 [c4,c5,e5,g5,c6]@15 ~]/4", // Gm Gsus2 C A Dm Bb A C …
  L: "[[c4,f4,a4]@30 a4 ~@24 c2@4 d2@4 [c4,f4,a4]@31 ~ bb2 bb2@23 c2@4 d2@4 [f2,c4,a4]@31 ~ f3@20 ~@5 c2@4 d2@3 ~ [f2,a4]@32, [f2,c3] ~@30 f3@32 f2 ~@95 gb4 ~@64, ~@32 [d4,f4]@31 ~@32 f4@62 ~@2 f4@63 ~@2, ~@32 bb4@28 ~@35 [d4,bb4]@30 ~@34 [d4,bb4]@30 ~@2 c4@30 ~@3]/7", // F F5 Dm Gm
  M: "[bb2,d4,f4,bb4]@7 ~", // Bb
  N: "[[d4,f4,a4]@18 ~@2 f4@4 d5@4 c5@3 ~ bb2@30 ~ a4@19 ~@2 f4@4 a4@6 ~@2 [bb2,bb4]@24 [a2,a4]@8, d2@31 [d4,f4]@29 ~@2 d4@22 ~@10 d4@25 ~@9, ~@32 bb4@28 ~@2 f4@19 ~@14 f4@25 ~@8, ~@63 d3@33 ~@32]/4", // Dm Bb A Dm
  O: "[bb3,d4,g4]@29 ~@3, g2", // Gm
  P: "[[g3,c4,e4]@26 ~@6 [c4,f4,a4]@10 ~@2 [c4,f4]@19 ~ [d4,bb4]@25 ~@7 f2@9 ~@3 [c4,f4,a4,c5]@17 ~@3 bb2@29 ~@3, c2@31 f2@33 bb2@31 [a4,c5]@10 ~@22 [d4,f4,bb4]@29 ~@4, ~@44 a4@16 ~@3 f4@25 ~@5 [c4,f4]@12 ~@3 f2@19 ~@33]/5", // C F F5 Gm F Am Bb F5
  Q: "[d4,f4,bb4]@9 ~@3 [f4,bb4]@15 ~@5, bb2, bb3@29 ~@3, ~@12 d4@11 ~@9", // Bb Bb5
  R: "[f4,bb4,d5]@11 ~ [f4,bb4,c5]@17 ~@3, bb2@31 ~, bb3@25 ~@7", S: "[f2,c4,f4,a4] ~@28 c4@3, f3", T: "[f3,d4,f4,bb4]",
  U: "[c4,f4,a4]@9 ~@3 [c4,f4,a4]@17 ~@3, f2", V: "[bb2,f4,bb4]@12 [f4,bb4,d5]@17 ~@3, d4@2 ~ bb2@5",
  W: "[c4,f4,a4]@9 ~@3 [f2,f4]@20, f2@11 [c4,a4]@17 ~@4", // F
  X: "[[d4,f4,bb4]@10 ~@2 [f4,bb4,d5]@17 ~@2 f2 c4@8 f4 ~@3 [c4,f4,a4]@17 ~@2 bb2 bb2@12 [f4,bb4,d5]@17 ~@3, bb2 ~@30 [f4,a4]@10 ~@22 [d4,f4,bb4]@10 ~@23, ~@32 f2@33 ~@11 bb2@20]/3", // Bb F Bb F Bb
  Y: "[d4,f4,bb4]@9 ~@3 [f4,bb4]@15 ~@5, [bb2,bb3]@29 ~@3, ~@12 d4@11 ~@9", // Bb Bb5 Bb
  Z: "[[f4,bb4,d5]@12 ~ [f4,bb4,c5]@23 ~@28, bb2@9 ~@7, bb3@31 ~@33]/2", // Bb Fsus4
})).s("gm_piano").gain(0.56).pan(0.6)

// bass · acoustic bass · "tom mid 2"
const bass = note(`<
  ~@3 A B C D E F@2 B G H I J@2 K L M N O P Q R S T U V W X Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV@2 AW AX AY@2 AZ@3 BA BB BC BD@2 BE BF BG BH BI BJ@2 ~@2
>`.pickRestart({
  A: "ab3@4 g3@4 ab3@3 ~ g3@8 eb3@2 ~@2 eb3@8", B: "eb2", C: "eb3@29 ~@3", D: "eb3", E: "ab2", F: "[eb2@31 eb3@32 ~]/2",
  G: "ab2@20 g2 ~@3 ab2 ~@3 bb2 ~@3", H: "c3@21 ~@3 c3@8", I: "ab2@17 ~@3 g2 ~@3 ab2 ~@3 bb2 ~@3",
  J: "[c3@31 ab2@24 ~ g2@8]/2", K: "f2@23 bb2 c3@8", L: "bb2@23 ~ bb1@4 c2@4", M: "eb2@5 ~ eb2@2 eb3@8",
  N: "ab2@9 ~@2 ab2@5 eb3@15 ~", O: "eb2@8 ~@3 eb2@4 ~ eb3@16", P: "ab2@8 ~@4 ab2@4 eb3@15 ~",
  Q: "eb2@8 ~@4 eb2 ~@3 eb2@12 ~@4", R: "eb3@9 ~@3 eb3 ~@3 eb3@13 eb2 ~@2", S: "eb2@9 ~@3 eb2 ~@3 eb2@13 ~@3",
  T: "ab2@9 ~@3 ab2 ~@3 ab2@5 ~@3 ab2@8", U: "eb2@8 ~@4 eb2 ~@3 eb2@13 ~@3", V: "eb3@9 ~@3 eb3 ~@3 eb3@13 ~@3",
  W: "eb2@8 ~@3 eb2 ~@4 eb2@15 ~", X: "ab1@8 ~@3 ab1 ~@4 ab1@7 ~@4 bb2@4 ~",
  Y: "[c3@8 ~@4 c3 ~@2 c3@16 ab2@9 ~@4 ab2 ~@3 ab2@5 ~@3 ab2@4 bb2@4]/2", Z: "c3@9 ~@3 c3 ~@3 c3@16",
  AA: "ab2@9 ~@2 ab2 ~@3 ab2@8 ~ g2@8", AB: "f2@9 ~@2 f2 ~@4 f2@16", AC: "bb2@10 ~ bb2 ~@4 bb2@8 bb1@4 c2@4",
  AD: "eb2@9 ~@2 eb2@4 ~ eb3@15 ~", AE: "ab2@10 ~@2 eb3@2 ~ eb3 f3@8 eb3@7 ~, ~@16 e3 ~@15",
  AF: "eb2@9 ~@2 eb3 ~@4 eb3@15 ~", AG: "ab2@19 d2@2 ~@3 d2@3 f2@4 ~", AH: "g2@12 d3@2 ~@2 d3@4 d2@11 ~",
  AI: "a2@11 e3 ~@3 e3@16 ~", AJ: "bb2@9 ~@3 f3@2 ~ f3@4 ~ f2@12", AK: "bb2@4 a2@3 ~@4 c3 ~@3 c3@5 ~@4 c3@7 ~",
  AL: "f2@8 ~@3 f2@3 ~@2 f3@14 ~@2", AM: "f3@10 ~@2 f3 ~@3 f3@13 ~@3", AN: "f2@8 ~@4 f2 ~@3 f3@15 ~",
  AO: "bb2@10 ~@2 bb2 ~@3 bb2@4 a2@8 g2@4", AP: "f2@8 ~@3 f2@2 ~@3 f3@13 ~@3", AQ: "f3@9 ~@3 f3 ~@3 f3@14 ~@2",
  AR: "f2@8 ~@4 f2 ~@3 f3@16", AS: "bb2@23 ~@6 db3@2 ~, ~@14 c3 ~", AT: "d3@9 ~@3 d3 ~@3 d3@16",
  AU: "bb2@9 ~@3 bb2 ~@3 bb2@11 ~ c3@4", AV: "[d3@10 ~ d3 ~@4 d3@15 bb2@10 ~@2 bb2 ~@4 bb2@8 a2@8]/2",
  AW: "g2@9 ~@3 g2 ~@3 g2@12 ~@4", AX: "c3@9 ~@3 c3 ~@3 c3@8 c2@3 d2@4 ~",
  AY: "[f2@12 f3 ~@3 f3@15 f2@9 ~@4 f3 ~@3 f3@15 ~]/2",
  AZ: "[f2@9 ~@2 f3 ~@4 f3@15 bb2@9 ~@4 bb2 ~@3 bb2@8 f2@7 bb1@9 ~@3 bb1 ~@4 bb1@13 ~@3]/3",
  BA: "bb1@10 ~@2 bb2 ~@3 bb2@6 ~ bb2 c3@8", BB: "f2@9 ~@3 f2 ~@2 f3@12 ~ f2@3 ~", BC: "bb2@10 ~ f3 ~@3 f3 g3@8 f3@8",
  BD: "[f2@9 ~@3 [f3,g3] ~@3 f3@15 bb2@9 ~@4 f3 ~@2 f3 g3@8 f3@8, ~@28 e3 ~@3]/2", BE: "f2@9 ~@3 f3 ~@3 f3@15 ~",
  BF: "bb2@8 ~@3 f3 ~@3 f3 g3@7 ~ f3@8", BG: "f2@8 ~@4 f3 ~@3 f3@16", BH: "bb2@8 ~@4 f3 ~@2 f3 g3@8 f3@4 ~@4",
  BI: "bb1@9 ~@2 bb1 ~@4 bb1@8 bb2@6 ~@2", BJ: "[bb2@11 ~@2 bb2@2 ~@3 bb2@10 ~@2 c3@11 ~@23, ~@29 bb2@2 ~@33]/2",
})).s("gm_acoustic_bass").gain(0.56).pan(0.3)

// chords · synth strings 1 · "tom mid 2"
const synth_strings_1 = note(`<
  A@4 B ~@7 C@4 D@6 ~@4 E F@2 G@7 H@4 I@3 J K L M N O P Q R@5 S@2 T@3 U@2 V W@8 X Y@4
>`.pickRestart({
  A: "[eb3@3 ~@21 eb3@3 ~@4 eb3@4 ~@20 eb3@5 ~@3 eb3@5 ~@19 eb3@3 ~@6 eb3@3 ~@29, eb6@25 ~@7]/4", B: "eb3@3 ~@13",
  C: "[g4@30 ab4@31 ~@2 g4@32 ab4@24 ~ g4@8, c4, eb4@119 ~@9]/4",
  D: "[[ab3,f4]@23 [g3,eb4]@8 [f3,d4]@33 ~@13 g3@18 [ab3,c4]@32 [g3,bb3]@32 [ab3,c4]@27 ~@6, ~@23 bb3@73 ~@96, ~@64 eb5@63 eb6@48 ~@17]/6", // Db Cm Dm Ab Gm Ab
  E: "~@15 [bb3,eb4,g4] [bb3,g4] eb4 [bb3,g4] [bb3,eb4] ~ [bb3,eb4] [bb3,eb4]@2 ~@8, ~@19 g4@4 ~@9", // Eb Eb5
  F: "[~@8 c5@7 [c4,eb4,ab4] ab4 [c4,eb4] [c4,ab4] [c4,eb4,ab4] eb4 [c4,ab4] [c4,eb4] eb4 c4 ~@22 [bb3,eb4,g4] bb3 [eb4,g4] [bb3,g4] [bb3,eb4,g4] eb4 [bb3,g4] [bb3,eb4] [bb3,eb4]@2 ~@6 ab5, ~@15 eb5@7 ab4@2 ~@7 g5@32 ~, ~@23 ab5@9 ~@22 g4@2 ~@8]/2", // Ab Cm Fm Ab Fm Cm Eb Eb5
  G: "[~@15 [c4,eb4,ab4] ~ [c4,eb4] [c4,eb4,ab4] [c4,ab4] eb4 [c4,ab4] [eb4,ab4] [c4,eb4] [eb4,ab4] c4 ~@6 g4@31 ab4@32 g4@33 ab4@31 [ab3,c4,f4]@23 ~ eb4@8 ~ f3@31 eb5, ab5@27 ~@5 eb4@128 ~@22 g3@9 d4@33, ~@24 c5@135 ~@24 bb3@41]/7", // Ab Cm Ab Fm Ab5 Cm Ab5 Fm
  H: "[eb5@63 eb6@32 eb5@32 ~]/4", I: "[[g2,g3]@31 [a2,a3]@32 bb2@32 [bb3,bb4,f5,bb5], ~@63 bb3@28 ~@5]/3",
  J: "[bb2,bb3,bb4,f5,bb5]@2 ~ [a2,a3,a4,e5,a5]@3 ~@5 [c3,c4,c5,g5,c6] ~@4 [c3,c4,c5,g5,c6]@16", // Bb5 A5 C5
  K: "~@15 [c4,a4] a4 [c4,a4] [c4,g4] [c4,a4] [f4,a4] c4 [c4,f4] ~ c4 ~@7, ~@15 f4@2 ~@5 a4@2 ~@8, ~@23 f4@2 ~@7", // F C5 F F5
  L: "~@15 [d4,f4,bb4] [d4,bb4] f4 [d4,bb4] [d4,f4,bb4] [f4,bb4] d4 [d4,f4,bb4]!2 f4 ~@7", // Bb Gm Bb Bb5 Bb
  M: "~@15 [c4,f4] [c4,a4] f4 [c4,a4] [c4,f4,a4] f4 [c4,a4] [c4,f4] f4 [c4,f4] ~@7, ~@11 a4 ~@4", // F5 F F5
  N: "~@15 [f4,bb4] bb4 f4 [d4,bb4] [d4,f4,bb4] d4 [f4,bb4] [d4,f4] [d4,f4,bb4] ~@8, ~@15 d4@2 ~@15", // Bb5 Gm Bb Bb5 Dm Bb
  O: "~@15 [g4,a4] a4 [c4,a4] [f4,g4] [c4,a4] [c4,f4,a4] ~ [c4,f4,a4]!2 c4 f4 c4 ~@5, ~@15 [c4,f4]@2 ~@7 a4@2 ~@6", // Gsus2 F Fsus2 F F5
  P: "~@15 [ab4,bb4] ~@2 bb4 ~ f4 ~ [f4,bb4] f4 bb4 f4!2 ~@5, ~@15 [d4,f4]@4 bb4@2 ~ d4@5 ~@5, ~@25 bb4@2 ~@5", // Absus2 Bb5 Dm
  Q: "~@16 [f4,g4,a4] [f4,a4] a4 [f4,a4] [f4,g4] a4 [f4,a4] ~ f4!2 ~ f4 f4@2 ~@2, ~@15 c4@15 ~@2, ~@24 a4@3 a4@2 ~@3", // F Fsus2 F
  R: "[~@16 bb4!2 ~ f4 ~ f4 f4@2 f4@4 g4@3 ~ [d4,a4]@32 bb4@30 ~ d5@24 c5@6 ~@2 bb4@22 ~@2 a4@8 [bb3,d4,g4], ~@16 d4@8 ~@7 f4@120 ~@9, ~@16 f4@3 bb4@4 ~@41 d4@62 ~ d4@28 ~@5, ~@95 a4@32 ~@33]/5", // D5 Gm
  S: "[[bb3,d4,g4]@23 ~@9 g3@31 ~, ~@23 f4@9 ~@32, ~@23 a3@6 ~@2 e4@32 ~, ~@3 c4@5]/2", T: "[f5,f6]/3",
  U: "[~@31 [f4,bb4,d5]@33]/2", V: "~@6 bb4@9 ~, [c5,f5]",
  W: "[~@24 g5@3 ~@12 d5@24 ~ a5@24 g5@4 ~@3 d5@8 f5@5 f5@19 ~ a5@23 g5@3 ~ f5@4 [d4,bb4]@32 ~ a5@23 g5@4 f5@4 d5@8 g5@5 f5@19 ~, f3@64 [a3,c4]@32 ~@127 [bb3,d4]@33, a3@31 c5 d4@30 ~ f4@192 ~, [c4,a4,a5]@27 f5@64 ~ f5@11 ~@56 d5@28 ~@69, ~@32 bb3@33 ~@30 [bb3,d4]@32 [c4,a4]@33 ~@32 [c4,a4]@32 ~@32]/8", // Gm Am Bb F Bb F
  X: "[f4,bb4,d5]@31 ~", Y: "[~@39 a3@3 a3@58 ~@28, c5@79 ~@49, f5@31 ~@33, ~@13 bb4@26 c4@58 ~@31, ~@19 f2@29 ~@16]/4",
})).s("gm_synth_strings_1").gain(0.32).pan(0.7)

// chords · acoustic guitar steel · "tom mid 2"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A B A B C@2 D@2 E F A B A B A B A B A B A B C@2 D@2 E F A B A B G@2 H I J K J K J K J K L@2 M@2 N O J
  K J K@3 J K J K J K J K@2 P@4
>`.pickRestart({
  A: "~@2 g4 ~@3 eb4!2, eb3, eb4@3 [eb4,g4]@3 ~@2, g4 bb4@2 [g4,bb4], ~ bb3@4 bb3@3", // Eb Gm
  B: "[c4,eb4] [g4,bb4]@2 [g4,bb4]@3 [g4,bb4]@2, ab3", // Cm Gm
  C: "[~ [g3,c4,eb4]@11 [c4,eb4]@12 [g3,c4,eb4,g4]@7 [ab3,c4,ab4]@12 ~ [ab3,c4,ab4]@12 [ab3,c4,ab4]@8, g4@11 ~ [g3,g4]@8 ~@44]/2", // Cm Ab G
  D: "[[g3,c4,g4]@12 [g3,c4,g4]@11 ~ [g3,c4,eb4]@7 [ab3,c4,ab4]@12 ~ [ab3,c4]@11 [bb3,eb4,g4]@9, ~@23 g4@8 ~@12 ab4@12 ~@9]/2", // C5 Cm Ab Eb
  E: "[c4,f4]@7 ~@5 [ab3,c4,f4]@11 ~ [g3,bb3,eb4]@8, ab3@3 ~@5", F: "[f3,bb3,d4]@12 [f3,d4]@4 [f3,bb3,d4]@15 ~",
  G: "[[g2,g3,bb3,d4,g4]@11 ~ g2@8 ~@8 g2@3 ~ [a2,a3,a4]@11 a2@8 ~@9 a2@4, ~@11 [d4,g4]@12 ~@8 [c4,e4]@12 ~@21, ~@12 [g3,bb3]@12 [g3,bb3,d4,g4]@7 ~@12 [a3,c4,e4,a4]@12 [a3,c4,e4,a4]@9, ~@20 g2@8 ~@23 a2@9 ~@4]/2", // Gm A G5 C Gm Am
  H: "[bb2,bb3,d4,f4,bb4]@11 bb2@8 ~@9 bb2@3 ~, ~@11 bb4@19 ~@2, ~@11 [bb3,d4,f4]@12 [bb3,d4]@7 ~@2, ~@5 bb2@2 ~, ~@24 f4@7 ~", // Bb
  I: "[bb2,bb3,d4,f4]@4 [a2,a3,c4,f4]@2 ~@5 [c3,c4,e4]@4 ~ [c3,c4,e4]@15 ~, ~@11 g4@20 ~", // Bb F C
  J: "~@2 a4 ~@3 f4!2, f3, f4@3 [f4,a4]@3 ~@2, a4 c5@2 [a4,c5], ~ c4@4 c4@3", // F Am
  K: "[d4,f4] [a4,c5]@2 [a4,c5]@3 [a4,c5]@2, bb3", // Dm Am
  L: "[~ [a3,d4,f4]@11 [d4,f4]@12 [a3,d4,f4,a4]@7 [bb3,d4,bb4]@12 ~ [bb3,d4,bb4]@12 [bb3,d4,bb4]@8, a4@11 ~ [a3,a4]@8 ~@44]/2", // Dm Bb A
  M: "[[a3,d4,a4]@12 [a3,d4,a4]@11 ~ [a3,d4,f4]@7 [bb3,d4,bb4]@12 ~ [bb3,d4]@11 [c4,f4,a4]@9, ~@23 a4@8 ~@12 bb4@12 ~@9]/2", // D5 Dm Bb F
  N: "[d4,g4]@7 ~@5 [bb3,d4,g4]@11 ~ [a3,c4,f4]@8, bb3@3 ~@5", O: "[g3,c4,e4]@12 [g3,e4]@4 [g3,c4,e4]@15 ~",
  P: "[[d4,f4]@4 [a4,c5]@9 [a4,c5]@16 ~@10 f2 c3 [f3,c4] ~@9 a3@50 ~@27, bb3@10 f2@15 ~@7, ~@29 [a4,c5]@12 c3 f3@3 c3@56 ~@27, ~@21 f4@8 ~@35, ~@42 c4@6 f3@53 ~@27]/4", // Dm Am F5 Am
})).s("gm_acoustic_guitar_steel").gain(0.21).pan(0.2)

// chords · acoustic guitar steel · "tom mid 2" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A B C D E ~ F ~ A ~ A ~ A ~ A ~ A ~ A B C D E ~ F ~ A ~ A ~@5 G ~ G ~ G ~ G H I J K ~ L ~ G ~
  G@3 ~ G ~ G ~ G ~ G@2 M@4
>`.pickRestart({
  A: "~@5 eb4@3", B: "~@5 g4 ~@2, ~@19 g3@4 ~@9", C: "eb4@3 eb4", D: "eb4@3 eb4@3 ~@2", E: "eb4@12 eb4@11 ~@9",
  F: "~@3 bb3 ~@4", G: "~@5 f4@3", H: "~@5 a4 ~@2, ~@19 a3@4 ~@9", I: "f4@3 f4", J: "f4@3 f4@3 ~@2",
  K: "f4@12 f4@11 ~@9", L: "~@3 c4 ~@4",
  M: "[~@23 f4@17 a3 a3@10 ~@18 c5@7 [c5,f5]@25 ~@27, ~@27 c4@23 ~@14, ~@29 f4@21 ~@14, ~@63 a4@37 ~@28]/4", // F5
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.2)

// chords · acoustic guitar steel · "tom mid 2"
const acoustic_guitar_steel_3 = note(`<
  A B A B A B A B A B A B C@4 D@2 A B A B A B A B A B A B C@4 D@2 A B A B E F@2 G H I H I H I H I J@4 K@2 H I H I@3 H I
  H I H I H I@2 L@4
>`.pickRestart({
  A: "~@8 bb3@4 ~@16 g4@3 ~, [eb3,g4,bb4]@12 [eb3,bb4]@19 ~, ~@4 g3@8 g4@12 eb4@7 ~, ~@16 g3@15 ~, ~@20 bb3@11 ~", // Eb Eb5
  B: "~@7 c4, [ab2,eb4,g4]@3 [ab2,eb4,g4]@5, ~ c4@3 c4@3 ~, ~ ab3@2 ab3", // Abmaj7
  C: "[[c4,eb4]@4 c4@4 [c4,eb4]@4 [c4,eb4]@4 [c4,eb4]@4 [c4,eb4]@3 [c4,eb4]@4 [g3,c4]@4 [c4,eb4]@4 ~ c4@3 [c4,eb4]@4 ~ c4@3 ~ c4@4 c4@3 ~ eb4@3 ~ c4@3 c4@4 ~ c4@4 [c4,eb4]@4 c4@3 ~ [c4,eb4]@4 c4@3 ~ c4@3 c4@4 c4@4 c4@4 c4@4 c4@4 [c4,eb4]@4 [ab3,c4]@4 [bb3,eb4]@4 ~ [g3,eb4]@3 ~, g4@8 g4@8 g4@7 g4@8 ab4@8 ab4@8 ab4@8 ab4@8 g4@8 ~ g4@7 g4@8 g4@32 g4@7 ~@2, ~@4 g3@8 g3@8 g3@7 ~@21 eb4@7 c4@4 ab3@4 ~@5 g3@8 g3@8 g3@7 g3@28 ~@9, ~@87 eb4@4 ~@4 [eb4,ab4]@8 [eb4,ab4]@8 ab4@8 ~@9, ~@107 ab3@8 ~@8 bb3@3 ~@2]/4", // Cm C5 Cm Ab Eb5 Cm Ab5
  D: "[[ab3,c4]@4 c4@4 c4@4 c4@4 [ab3,c4]@4 [f3,c4]@4 [g3,bb3,eb4]@4 [g3,bb3]@3 bb3@5 ~@4 bb3@4 [f3,bb3]@4 [f3,bb3,d4]@16, f4@8 f4@8 f4@8 ~@7 d4@9 d4@8 ~@16, ~@9 f3@2 ~@5]/2", // Ab F5 Eb Gm Bb5 Bb
  E: "[g3,bb3,d4,g4]@4 [g3,d4,g4]@4 [g3,bb3,d4,g4]@4 [g3,bb3,d4,g4]@4 [g3,d4,g4]@4 [g3,d4,g4]@4 [g3,bb3,d4,g4]@4 [g3,bb3,d4,g4]@3 ~, ~@12 f4@19 ~", // Gm G5 Gm G5 Gm
  F: "[[a3,c4,e4,a4]@4 c4@3 ~ c4@3 [a3,c4,e4,a4]@4 [a3,c4,e4,a4]@4 ~ [c4,e4]@4 [a3,c4,e4,a4]@4 [a3,c4,e4,a4]@3 [bb3,d4,f4,bb4]@4 ~ [bb3,d4,f4]@3 ~ [f4,bb4]@3 ~ f4@3 [bb3,d4,f4,bb4]@4 [bb3,d4,f4,bb4]@4 ~ [bb3,d4,f4,bb4]@3 [bb3,d4,f4,bb4]@4 ~, ~@7 [a3,e4,a4]@4 ~@8 [a3,a4]@4 ~@12 bb4@4 [bb3,d4]@4 [bb3,d4,bb4]@4 ~@17, ~@11 ab4@5]/2", // Am C Am Bb Bb5 Bb A5 A …
  G: "[d4,f4]@4 [a3,c4]@2 ~@5 [c4,e4,g4]@4 [e4,g4,c5]@16 ~, bb3@3 ~@29", // Dm Am C
  H: "~@8 c4@4 ~@16 a4@3 ~, [f3,a4,c5]@12 [f3,c5]@19 ~, ~@4 a3@8 a4@12 f4@7 ~, ~@16 a3@15 ~, ~@20 c4@11 ~", // F F5
  I: "~@7 d4, [bb2,f4,a4]@3 [bb2,f4,a4]@5, ~ d4@3 d4@3 ~, ~ bb3@2 bb3", // Bbmaj7
  J: "[[d4,f4]@4 d4@4 [d4,f4]@4 [d4,f4]@4 [d4,f4]@4 [d4,f4]@3 [d4,f4]@4 [a3,d4]@4 [d4,f4]@4 ~ d4@3 [d4,f4]@4 ~ d4@3 ~ d4@4 d4@3 ~ f4@3 ~ d4@3 d4@4 ~ d4@4 [d4,f4]@4 d4@3 ~ [d4,f4]@4 d4@3 ~ d4@3 d4@4 d4@4 d4@4 d4@4 d4@4 [d4,f4]@4 [bb3,d4]@4 [c4,f4]@4 ~ [a3,f4]@3 ~, a4@8 a4@8 a4@7 a4@8 bb4@8 bb4@8 bb4@8 bb4@8 a4@8 ~ a4@7 a4@8 a4@32 a4@7 ~@2, ~@4 a3@8 a3@8 a3@7 ~@21 f4@7 d4@4 bb3@4 ~@5 a3@8 a3@8 a3@7 a3@28 ~@9, ~@87 f4@4 ~@4 [f4,bb4]@8 [f4,bb4]@8 bb4@8 ~@9, ~@107 bb3@8 ~@8 c4@3 ~@2]/4", // Dm D5 Dm Bb F5 Dm Bb5
  K: "[[bb3,d4]@4 d4@4 d4@4 d4@4 [bb3,d4]@4 [g3,d4]@4 [a3,c4,f4]@4 [a3,c4]@3 c4@5 ~@4 c4@4 [g3,c4]@4 [g3,c4,e4]@16, g4@8 g4@8 g4@8 ~@7 e4@9 e4@8 ~@16, ~@9 g3@2 ~@5]/2", // Bb G5 F Am C5 C
  L: "[~@35 d4@6 ~@10 a3@50 ~@27, [bb2,f4,a4]@13 [bb2,f4,a4]@29 ~@3 c3@56 ~@27, ~@4 d4@14 d4@17 ~@6 f2@59 ~@28, ~@8 bb3@20 ~ bb3@13 ~@6 f3@53 ~@27]/4", // Bbmaj7
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.8)

// chords · acoustic guitar steel · "tom mid 2" · soft notes
const acoustic_guitar_steel_4 = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A B C@2 D E F ~ A ~ A ~ A ~ A ~ A ~ A B C@2 D E F ~ A ~ A G H ~@3 I ~ I ~ I ~ I J K@2 L M N ~ I
  ~ I@3 ~ I ~ I ~ I ~ I@2 O@4
>`.pickRestart({
  A: "~@5 eb3@3", B: "~@4 eb4@4 ~@19 eb4@4 ~",
  C: "[~@4 eb4@3 ~@5 eb4@4 ~@3 ab3@8 ~ eb4@3 eb4@4 ~ eb4@4 ~@4 eb4@4 ~@4 eb4@3 ~@4 eb4@4 ~, ~@3 ab3@8 ab3@8 ~@45]/2",
  D: "~@3 ab3@8 ~@8 eb4@4 ~@9", E: "~ ab3!2 f3@2 ab3 ~ eb4, ~ f3@2 ab3 ~@4", F: "~ bb3 ~@6", G: "~ bb3 ~@2 bb3!2 ~@2",
  H: "~@4 [a3,e4,a4]@3 ~@25", I: "~@5 f3@3", J: "~@4 f4@4 ~@19 f4@4 ~",
  K: "[~@4 f4@3 ~@5 f4@4 ~@3 bb3@8 ~ f4@3 f4@4 ~ f4@4 ~@4 f4@4 ~@4 f4@3 ~@4 f4@4 ~, ~@3 bb3@8 bb3@8 ~@45]/2",
  L: "~@3 bb3@8 ~@8 f4@4 ~@9", M: "~ bb3!2 g3@2 bb3 ~ f4, ~ g3@2 bb3 ~@4", N: "~ c4 ~@6",
  O: "[~@23 f3@19 ~@27 c5@7 [c5,f5]@25 ~@27, ~@27 c4@23 ~@14, ~@29 f4@21 ~@14, ~@63 a4@37 ~@28]/4", // F5
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@12 A@19 B A C A@6 D A@2 E A@7 D A D A C A@11 C A@5 F ~@3>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x!2", C: "x ~@2 x!2 ~ x ~", D: "x ~@2 x!2 ~@2 x", E: "x!2 ~ x!2 ~@3",
  F: "x ~@12 x ~@4 x ~@13",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@22 [~@3 x]!8 [~ x ~ x]!9 ~@5 [~ x ~ x]!18 ~@15>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@40 [~ x ~ x]!3 [x!2 ~@6] ~@18 [~ x ~ x]!11 [~@8 x ~@20 x ~@2] ~@3>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@6 x!2] [~@3 x]!3 [~@3 x!2 ~@3] ~@33>").gain(0.48)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@26 A B C D E F G H I J@2 K L K ~@4 K ~@3 K M N ~ O ~ K P Q ~ R ~ S ~ J ~ K T U V W X S Y Z AA ~@3
>`.pickRestart({
  A: "~@5 x!3", B: "~@2 x!2 ~@4", C: "~ x ~@3 x ~ x", D: "~@5 x ~@2", E: "~ x ~@2 x!2 ~@2", F: "~ x ~@2 x ~@2 x",
  G: "~ x!2 ~ x ~@2 x", H: "~ x!2 ~@2 x ~@2", I: "~ x ~ x!2 ~@3", J: "~@4 x!2 ~@2", K: "~ x ~@6", L: "~ x!2 ~ x!2 ~ x",
  M: "x!3 ~@5", N: "x!2 ~@4 x ~", O: "~ x ~@2 x ~@3", P: "~@3 x", Q: "~ x!5 ~@2", R: "~ x", S: "~ x!2 ~ x!2 ~@2",
  T: "~@3 x ~@12", U: "x!2", V: "~ x ~@2 x ~ x ~", W: "x!3 ~ x!2 ~ x", X: "~ x!4 ~@3", Y: "~ x ~@4 x ~",
  Z: "x!3 ~ x!3 ~", AA: "~@2 x ~ x ~@4 x ~@6",
})).gain(0.16)

// … 21 more lines

More by Alabama