Strudelify

(Who Says) You Can't Have It All

Alan Jackson

KeyD majorTempo90 bpm
0:00/0:00
// (Who Says) You Can't Have It All — Alan Jackson
// 90 bpm, 3/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: Full arrangement: all 100 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/3)

// 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.

// other · pad metallic
const pad_metallic = note("<~@21 A@3 B@2 C@2 D@2 E@3 F@5 ~ G@2 H ~@10 I@2 ~@3 J@4 K@5 ~@24 L@2 M N@3 O@4>".pickRestart({
  A: "[~@31 c#4@11 d4@10 e4@44]/3", B: "[~@10 a4@53 ~]/2", C: "[~@10 e5@49 ~@5]/2", D: "[~@10 a4@21 g#4@22 ~@11]/2",
  E: "[~@9 e4@19 ~@3 e4@11 g4@10 a4@43 ~]/3", F: "[~@10 d5@21 b4@31 ~ a4@10 e4@22 d4@28 e4@35 ~@2]/5",
  G: "[~@21 a3@2 ~ b3@2 ~ d4@2 ~@2 e4@21 d4@12]/2", H: "c#4@31 ~", I: "[~@20 g6@39 ~@5]/2",
  J: "[c#5@10 d5@11 e5@10 f#5@11 a5@21 e5@11 d5@17 ~ e5@3 d5@11 b4@22]/4",
  K: "[a4@28 ~@3 a4@11 d5@10 f#5@10 ~ a5@10 f#5@10 ~@5 b5@3 c#6@3 ~ d6@10 ~ b5@19 ~@2 b5@32 ~]/5",
  L: "[~@31 f#4@11 g4@10 a4@12]/2", M: "b4@5 c#5@5 d5@6",
  N: "[e5@20 ~ e5@8 ~@2 a4@30 ~@2 g4@11 b4@11 d5@10 ~, ~@29 d5@4 ~@63]/3", O: "[g5@10 e5@29 d5@64 ~@25]/4",
})).s("gm_pad_metallic").gain(0.24)

// bass · electric bass finger
const bass = note(`<
  ~@22 A B C D B E C F G H I C D C D J K L M N O D P Q F N R S T U V I J K J W X C D Y E Z AA N AB AC AD D B D J AE AF M
  N O AG P AH F N R S AI AJ AK AL J AE U AM B K AN AO@4
>`.pickRestart({
  A: "a1@10 ~ b1@10 c#2@11", B: "d2@31 ~", C: "d2", D: "g1", E: "d2@15 ~", F: "e1", G: "~@7 e2, a1@31 ~",
  H: "a1@10 ~ e2@10 f#2@10 ~", I: "g2@31 ~", J: "d2@7 b1", K: "a1", L: "d2@20 ~ a1@3 ~ b1@3 c#2@4",
  M: "d2@11 c#2@10 b1@11", N: "a1@7 e2", O: "a1@24 ~ e1@3 f#1@4", P: "d2@7 e2", Q: "e1@25 e2@3 b1@3 ~",
  R: "a1@11 b1@10 c#2@11", S: "d2@28 d2@3 ~", T: "a2@25 f#2@3 e2@4", U: "d2@10 ~ e1@10 f#1@11", V: "g1@7 d2",
  W: "a1@11 b1@10 c#2@10 ~", X: "d2@27 ~ a2@4", Y: "d2@28 a1@3 ~", Z: "d2@25 e2@3 f#2@4", AA: "e2",
  AB: "a1@11 e2@10 f#2@11", AC: "g2@7 g2", AD: "d2@25 b1@3 a1@4", AE: "a1@31 ~", AF: "d2@25 b1@3 c#2@4",
  AG: "g1@27 ~ g1@4", AH: "e1@24 ~ b1@3 g#1@4", AI: "a2@25 f#2@3 e2@3 ~", AJ: "d2@11 e1@10 f#1@10 ~",
  AK: "g1@28 d2@3 ~", AL: "g2", AM: "g1@28 g1@3 ~", AN: "g1@29 ~@3", AO: "[g1@11 f#1@13 e1@14 ~ d2@65 ~@24]/4",
})).s("gm_electric_bass_finger").gain(0.35).pan(0.3)

// other · pad metallic
const pad_metallic_2 = note("<~@21 A@3 B ~ C@2 D@2 E@5 F@3 ~ G@3 ~@12 H I J@8 K L ~@24 M@3 N@7>".pickRestart({
  A: "[~@31 a3@11 b3@10 c#4@11 d4@30 ~@3]/3", B: "~@10 d5@21 ~", C: "[~@3 a4@20 ~@9]/2", D: "[~@9 f#5@53 ~@2]/2",
  E: "[~@10 a4@18 ~@3 a4@10 ~ b4@11 c#5@10 d5@40 ~@24 a5@30 ~@3]/5",
  F: "[d5@9 a4@22 ~@28 a4@26 ~@11, ~@31 g4@31 ~@34]/3", G: "[~@21 d4@2 ~ f#4@2 ~ g4@25 e4@43 ~]/3",
  H: "~@21 g6@5 ~ a6@2 ~@3", I: "a6@5 g6@10 ~",
  J: "[~@31 e5@11 f#5@10 g5@11 a5@11 ~@21 b5@15 ~@17 a5@32 f#5@28 ~@4 f#5@11 a5@10 d6@11 f#6@11 d6@9 ~@12 e4, ~@74 d6@29 ~@153]/8",
  K: "~@5 e4@5 d4@6", L: "c#4@7 ~", M: "[~@31 d5@11 e5@10 f#5@11 g5@11 a5@10 b5@12]/3",
  N: "[a5@19 ~@2 a5@7 g#5@3 d#5@32 b4@11 d5@10 g5@11 a5@11 a5@13 ~@14 g#5@65 ~@26, ~@119 a5@37 ~@68]/7",
})).s("gm_pad_metallic").gain(0.29)

// other · violin
const violin = note(`<
  A@3 B C D ~@2 E F G@4 ~ H I J@5 K L ~@26 M@2 N@2 O D P Q R ~@29 S T@2 U V W X Y Z@4
>`.pickRestart({
  A: "[~@18 a3@4 d4@7 e4@4 f#4@9 a4@17 f#4 ~ f#4@2 [e4,a4]@11 [f#4,a4]@16 e4 f#4@2 e4@3, ~@30 g4 ~@17]/3", // A5 F#m
  B: "d4@9 ~ g4@4 e4@2, ~@18 e4@3 ~@11, ~@19 f#4@3 ~@10", C: "f#4@7 e4@3 d4@11 b3@11", D: "a3@31 ~",
  E: "~@21 a3@7 b3@4", F: "a3",
  G: "[~@21 f#4@8 g4@2 ~ g#3@32 a3@18 f#4@2 b3@7 a3@2 b3@2 a3@30 ~@3, ~@21 a3@10 f#4@2 ~@95, ~@16 e4@25 ~@23]/4",
  H: "~@10 g4@11 b4@7 d5@4", I: "g4@10 g5@21 ~",
  J: "[f#5@28 e5@3 ~ b4@10 d4@11 e4@10 f#4@27 g4@2 ~@3 e4@32 d4@11 d5@15 c#5@3 b4@4, ~@31 d5@11 a4@50 f#4@4 ~@64, ~@94 d4@3 ~@63]/5",
  K: "a4@10 b4@11 c#5@11", L: "d5@31 ~", M: "[a5@25 g5@2 f#5@3 ~ f#5@3 e5@4 ~@4 c5@22, g5 ~@38 d5@5 ~@20]/2",
  N: "[g5@32 g4@7 a4@2 ~ f#4@8 ~ f#4@2 e4@11, b4@61 ~@3, ~@41 g4@3 ~@6 g4@2 ~@12]/2", O: "d4@25 c#4@3 b3@4",
  P: "d4@27 c#4@2 b3@3", Q: "a3@11 b3@11 c#4@10", R: "d4@31 ~", S: "b3@10 d4@11 g4@11",
  T: "[f#4@28 ~ f#4@2 e4@33, ~@14 g4 ~@17]/2", U: "d4@10 e5@10 f#5@11 ~", V: "b5@11 c#6@10 d6@11", W: "a5@7 b5",
  X: "a5@31 ~", Y: "g5@21 ~ d5@3 c#5@3 b4@4", Z: "[g4@12 f#4@12 e4@15 d4@64 ~@25]/4",
})).s("gm_violin").gain(0.16)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C D@2 E F G H I J K L M N O C P Q R S T G E F G H I J K L M U O V P Q R S W X Y O Z AA AB AC AD AE AF AG AH AI
  AJ@2 AK AL G E F G H I J K L M U O AM P AN AO AP W X Y O Z AA AB AC AQ AE AF AR AH AI AS AT AU O AV L AW AX@4
>`.pickRestart({
  A: "~@11 [d4,f#4]@10 d4@7 [a3,d4]@4, ~@7 a3@21 ~@4, ~@21 f#4@11", // D D5
  B: "~@7 a3@3 ~@18 a3@4, ~@10 [c#4,e4]@11 [c#4,e4]@11, ~@17 a3@11 ~@4", // C#m
  C: "~@10 [d4,f#4]@11 ~@7 a3@4, ~@3 a3@11 ~@2, ~@21 [d4,f#4]@11", // D
  D: "[~@7 a3@3 ~ d4@10 [d4,f#4]@7 ~ [a3,d4]@5 ~@8 [d4,f#4]@11 ~@7 a3@4, ~@10 f#4@11 ~@7 f#4@5 ~@6 a3@21 ~@4, ~@53 [d4,f#4]@11]/2", // D D5 D
  E: "~@7 a3, ~@7 a3@10 a3@11 ~@4, ~@10 [d4,f#4]@11 [d4,f#4]@11", // D
  F: "~@7 g3, ~@7 g3@11 g3@10 ~@4, ~@10 d4@11 ~@11, ~@11 b3@10 [b3,d4]@11", // Bm
  G: "~@10 [d4,f#4]@11 ~@7 a3@4, ~@7 a3@21 ~@4, ~@21 [d4,f#4]@11", // D
  H: "~@11 d4@10 ~@7 a3@4, ~@7 a3@21 ~@4, ~@10 f#4@10 ~ [d4,f#4]@11", // D
  I: "~@11 d4@10 ~@7 a3@4, ~@7 a3@21 ~@4, ~@10 f#4@11 [d4,f#4]@11", // D
  J: "~@7 e3, ~@7 e3@10 e3@11 ~@4, ~@11 [g#3,b3]@10 [g#3,b3]@10 ~", // G#m
  K: "~@10 [a3,c#4]@11 ~@7 e3@4, ~@3 e3@11 ~@2, ~@21 [a3,c#4]@11", // A
  L: "~@11 [a3,c#4]@10 ~@7 e3@4, ~@7 e3@21 ~@4, ~@21 [a3,c#4]@11", M: "~@6 g3@3 ~ [b3,d4]@11 ~@7 g3@4, ~@21 [b3,d4]@11",
  N: "~@11 b3@10 ~@7 g3@4, ~@7 g3@21 ~@4, ~@10 d4@11 [b3,d4]@11", // Bm
  O: "~@11 [b3,d4]@10 ~@7 g3@4, ~@7 g3@21 ~@4, ~@21 [b3,d4]@11", // Bm
  P: "~@7 g3, ~@7 g3@11 g3@10 ~@4, ~@10 [b3,d4]@11 [b3,d4]@11", // Bm
  Q: "~@3 a3@2 ~@9 a3@2, ~@10 [d4,f#4]@11 [d4,f#4]@11, ~@9 a3@5 ~@2", // D
  R: "~@6 a3@3 ~@19 a3@4, ~@10 [c#4,e4]@11 [c#4,e4]@11, ~@17 a3@11 ~@4", // C#m
  S: "~@7 a3@3 ~@18 a3@3 ~, ~@10 [d4,f#4]@11 [d4,f#4]@11, ~@17 a3@11 ~@4", // D
  T: "[a3,c#4]@11 [b3,d4]@10 ~ e4@10, ~@21 c#4@11", U: "~@7 g3@2 ~@2 b3@10 ~@7 g3@4, ~@10 d4@11 [b3,d4]@11",
  V: "~@6 a3@3 ~ [d4,f#4]@11 ~@7 a3@4, ~@21 [d4,f#4]@11", W: "[d4,f#4]@10 [c#4,e4]@11 [b3,d4]@11",
  X: "~@7 e3, ~@7 e3@11 e3@10 ~@4, ~@10 [a3,c#4]@11 [a3,c#4]@11", // A
  Y: "~@7 e3, ~@7 e3@10 e3@11 ~@4, ~@11 [a3,c#4]@10 [a3,c#4]@11", // A
  Z: "~@7 a3@4 ~@17 a3@4, ~@11 [d4,f#4]@11 [d4,f#4]@10, ~@17 a3@11 ~@4", // D
  AA: "~@7 e3@3 ~@18 e3@4, ~@10 [g#3,b3]@11 [g#3,b3,e4]@11, ~@11 e4@10 ~@11, ~@9 e3@5 ~@2", // G#m E
  AB: "~@11 [g#3,b3,e4]@10 ~@7 e3@4, ~@7 e3@21 ~@4, ~@21 [g#3,b3,e4]@11", // E
  AC: "~@7 e3@3 ~@18 e3@4, ~@11 [a3,c#4]@11 [a3,c#4]@10, ~@9 e3@5 ~@2", // A
  AD: "[a3,c#4]@10 ~ b3@11 [c#4,e4]@10, ~@5 d4@6 ~@5", // A C#m
  AE: "~@7 a3@3 ~@18 a3@4, ~@11 [d4,f#4]@10 [d4,f#4]@11, ~@17 a3@11 ~@4", // D
  AF: "~@7 f#3, ~@7 f#3@10 f#3@10 ~@5, ~@11 [a3,d4]@10 [a3,d4]@11", AG: "[d3,f#3]@10 ~ e3@10 [f#3,a3]@11, ~@5 g3@5 ~@6",
  AH: "~@7 g3, ~@7 g3@11 g3@10 ~@4, ~@11 [b3,d4]@10 [b3,d4]@11", // Bm
  AI: "~@7 g3, ~@7 g3@10 g3@10 ~@5, ~@11 [b3,d4]@10 d4@11, ~@11 b3@5", // Bm
  AJ: "[~@7 a3@3 ~@50 e3@4, ~@10 [d4,f#4]@11 f#4@11 ~@11 a3@10 [a3,c#4]@11, ~@18 a3@10 a3@14 c#4@11 ~@11, ~@22 d4@11 ~@6 e3@11 e3@10 ~@4]/2", // D A
  AK: "~@7 f#3, ~@7 f#3@10 f#3@11 ~@4, ~@11 [a3,d4]@10 d4@11, ~@11 a3@5", // D5
  AL: "~@7 [a3,c#4]@3 ~ d4@10 [c#4,e4]@11, ~@10 b3@11 ~@11", // A C#m
  AM: "~@11 [d4,f#4]@10 ~@7 a3@4, ~@7 a3@21 ~@4, ~@21 [d4,f#4]@10 ~", // D
  AN: "~@7 a3, ~@7 a3@10 ~ a3@10 ~@4, ~@10 [d4,f#4]@11 [d4,f#4]@11", // D
  AO: "~@7 a3, ~@7 a3@10 a3@11 ~@4, ~@11 [c#4,e4]@10 [c#4,e4]@11", // C#m
  AP: "~@28 a3@3 ~, ~@7 a3@10 a3@11 ~@4, ~@10 [d4,f#4]@11 [d4,f#4]@11", AQ: "[a3,c#4]@5 [b3,d4]@6 [c#4,e4]@5",
  AR: "[d3,f#3]@11 [e3,g3]@10 [f#3,a3]@11", AS: "~@7 a3@3 ~@18 a3@4, ~@10 [d4,f#4]@11 f#4@11, ~@9 a3@5 ~@2, ~@11 d4@5",
  AT: "~@7 e3, ~@7 e3@11 e3@10 ~@4, ~@10 c#4@11 ~@11, ~@11 a3@10 [a3,c#4]@11", AU: "[d3,f#3]@10 [e3,g3]@11 [f#3,a3]@11",
  AV: "~@7 a3, ~@7 a3@11 a3@10 ~@4, ~@11 [d4,f#4]@10 [d4,f#4]@11", // D
  AW: "~@7 g3@2 ~@2 [b3,d4]@10 b3@6 ~@2 g3@3, ~@21 d4@11, ~@27 b3@5", // Bm
  AX: "[[g3,b3]@11 [f#3,a3]@13 g3@12 ~@4 d4@64 ~@24, a3 ~@23 e3@9 ~@3 d3@67 ~@25, ~@37 f#3@66 ~@25, ~@38 a3@65 ~@25]/4", // G F#m
})).s("gm_acoustic_guitar_steel").gain(0.33)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~ A B A C A@2 D A@3 E C@2 D A D F D A C F ~ A@2 G A@2 H I J K L M N O P M C Q ~ C@2 G R I S T ~ A C U V D F C M W A@2
  G A@2 H I J K L M N O P M C Q ~ C@2 G R I S T ~ A C U V D F C ~ P F C X ~ Y@3
>`.pickRestart({
  A: "d3", B: "a2@31 ~", C: "a2", D: "g2", E: "e2@31 ~", F: "d3@31 ~", G: "~@7 d3@25, g2", H: "d3@21 ~@11",
  I: "~@7 b2@25, e2", J: "~@7 e3@25, a2", K: "a2@29 ~@3", L: "~@7 d3@21 ~@4, g2@29 ~@3", M: "d3@15 ~",
  N: "~@7 d3@24 ~, g2@31 ~", O: "d3@3 ~", P: "~@7 d3@22 ~@3, g2@15 ~", Q: "d3@7 ~", R: "d3@11 ~@5",
  S: "~@7 b2@14 ~@11, e2", T: "a2@27 ~@5", U: "d3@5 ~@11", V: "g2@29 ~@3", W: "a2@11 ~@21", X: "~@7 d3@23 ~@2, g2@15 ~",
  Y: "[~@7 a3@64 ~@25, ~ [a2,d3]@34 ~@13, ~@6 f#3@65 ~@25]/3", // D5
})).s("gm_acoustic_guitar_steel").gain(0.39)

// other · electric guitar clean
const electric_guitar_clean = note("<~@40 A B ~@6 C D ~ E F ~@22 G H ~@6 I J ~@15>".pickRestart({
  A: "d3@9 ~ c#3@10 ~ b2@11, ~@10 b2 ~@21", B: "a2@29 ~@3", C: "a2@5 b2@6 c#3@5", D: "d3@3 ~", E: "d3@10 e3@11 f#3@11",
  F: "g3", G: "d3@10 ~ c#3@9 b2@11 ~, c#3 ~@10 b2@2 ~@19", H: "a2@21 ~@11", I: "a2@11 b2@11 c#3@10", J: "d3@15 ~",
})).s("gm_electric_guitar_clean").gain(0.36)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@31 A@3 B@6 C D@2 E F G@7 H@5 I@7 J K L@5 M N O@2 P Q R S T U@2 V W X@2 Y Z@2 AA AB AC AD AE AF@2 AG@4
>`.pickRestart({
  A: "[~@32 [b3,d4]@54 ~@9 b3, ~@30 d3@56 ~@7 d3@3, ~@31 g3@55 ~@8 g3@2]/3", // Bm
  B: "[d4@24 ~@7 [a3,d4]@26 ~@39 d4@29 ~@2 c#4@22 ~@10 [a3,d4]@27 ~@6, ~@29 d3@27 ~@4 d3@33 d3@32 e3@32 f#3@29 ~@6, ~@30 f#3@27 ~@4 g3@33 f#3@33 ~@29 d3@29 ~@7, ~@63 [b3,d4]@32 a3@31 a3@33 ~@33]/6", // D5 Bm
  C: "d3@9 ~ c#3@10 ~ b2@11, ~@10 b2 ~@21", D: "[[a2,e3,a3,c#4]@29 ~@3 a4@32, ~@29 a3@35, ~@15 c#4@17, ~@31 e4@33]/2",
  E: "[g3,b3,d4]", F: "[a3,d4,f#4]",
  G: "[[e3,g#3,b3]@30 ~@2 e4@32 ~@32 c#4@15 ~@17 [d4,f#4]@31 ~ a3@32 [a3,d4,f#4]@12 ~@20, ~@30 [g#3,b3]@34 [a3,c#4,e4]@30 a3@16 ~@17 a3@32 ~@65, ~@93 e3@17 ~@49 [d3,f#3]@34 ~@31]/7", // E D G#m A D
  H: "[[g3,b3,d4]@30 ~@2 [d4,g4]@31 ~ [a3,d4]@31 ~ [a3,c#4]@31 ~ d4@27 ~@5, ~@30 g3@33 f#3@33 ~@31 [f#3,a3]@29 ~@4, ~@31 b3@34 ~@30 e3@33 ~@32]/5", // G G5 D5 A F#m
  I: "[[a3,c#4]@11 [b3,d4]@10 [c#4,e4]@10 ~ f#4@29 ~@35 [b3,d4]@31 ~ [d4,f#4]@30 ~@2 d5@31 [a3,d4,f#4]@30 ~@3, ~@31 a3@32 a4@32 g3@34 ~@95, ~@31 d4@30 d4@35 ~@31 a3@34 ~@63, ~@62 f#4@36 ~@60 [d4,f#4,a4]@33 ~@33, ~@32 d5@17 ~@63]/7", // A Bm C#m Bm D
  J: "b3@9 b3@2 b3@3 b3@2, [e3,g#3], ~@11 e4@5", K: "e4@25 ~@3 [d4,b4]@4, [a3,c#4], ~@25 [e4,c#5]@7",
  L: "[[c#4,a4]@23 ~@20 g4@20 ~ [g3,b3]@30 ~@2 g4@24 ~@8 [d4,f#4]@25 ~@7, ~@31 g3@32 d3@32 [b3,d4]@26 ~@6 a3@28 ~@5, ~@16 [b3,d4]@16 ~@15 g3@14 ~@19]/5", // F#m G D Bm
  M: "[g3,b3,d4,g4]@27 ~@5", N: "[a3,d4,f#4]@7 ~", O: "[[a3,c#4,e4]@29 ~@3 [d4,f#4]@28 ~@4, ~@31 a3@28 ~@5]/2",
  P: "d3@10 ~ c#3@9 b2@11 ~, c#3 ~@10 b2@2 ~@19", Q: "[a2,c#3,e3]", R: "[a3,c#4]@11 ~@5, e3",
  S: "~ g3@23 ~@8, [d3,b3]@29 ~@3", T: "[d3,f#3,a3]@25 ~@7",
  U: "[~ b3@27 ~@3 e4@31 ~@2, [e3,g#3]@14 e3@17 ~, ~@29 g#3@35, ~@15 b3@16 ~]/2", V: "[e3,a3,c#4]",
  W: "a2@11 b2@11 c#3@10", X: "[[d3,d4]@30 ~@2 f#4@23 ~@9, [f#3,a3]@23 ~@7 a3@26 ~@8, ~@31 d4@24 ~@9]/2",
  Y: "[d3,f#3]@10 ~ e3@10 f#3@11, ~@10 g3@11 a3@8 ~@3", // D
  Z: "[[d3,b3]@29 ~@3 g4@20 ~@12, g3@28 ~ g3@34 ~, ~@30 b3@33 ~, ~@31 d4@21 ~@12]/2", AA: "[d3,f#3,a3]@23 ~@9",
  AB: "[c#3,e3,a3]@23 ~@9", AC: "[f#3,a3]@10 [e3,g3]@11 ~ f#3@10, d3@8 ~@13 a3@10 ~",
  AD: "g3@9 ~@2 [b3,d4,g4]@5, d3, b3@11 ~@5, ~@9 g3@7", AE: "[d3,f#3,a3]",
  AF: "[[c#3,e3,a3]@31 ~ d3@32, ~@31 [g3,b3]@33]/2", // A G
  AG: "[~ [d3,g3]@10 [f#3,a3]@14 [e3,g3]@11 ~@4 d4@63 ~@25, ~ b3@8 ~@28 d3@67 ~@24, ~@19 f#3@33 ~@12, ~@39 a3@64 ~@25]/4", // G5 F#m Em
})).s("gm_electric_guitar_clean").gain(0.11)

// chords · piano
const piano = note("<~@66 A B C@3 D@2 E F G H@2 I J@3 K L@3 M N@4 O P@2 Q ~ R@4>".pickRestart({
  A: "~@21 a3@5 ~@3 a3@2 ~", B: "~ b3@5 d4@18 ~@4 e4@2 ~@2, a3 ~@15, ~ a#3@2 ~@29",
  C: "[e4@2 ~ e4@2 ~ e4@4 d4@18 ~ b3@2 ~ d4@7 [a3,d4]@4 [a3,d4]@7 [a3,d4]@3 a3 b3@6 g3@4 ~@17 f#3@4 a3@7 f#3@4, ~@2 f4@2 ~ d4@2 ~@21 d4@2 ~ a3@2 ~@20 d4@32 ~@11, ~@32 g3@22 ~@10 a3@21 ~@11]/3", // D5
  D: "[g3@3 f#3@3 ~ d3@10 ~ f#3@4 d4@6 ~ b3@3 ~@7 d3@3 ~@2 f#3@15 ~ a2@2 ~@2, ~@28 d4@14 ~ e3@2 ~@19, ~@28 a3@2 ~@2 a3@10 ~ a3@16 ~@5]/2",
  E: "[g3,b3]@2 c#4@2 [g3,b3]@2 a2@2 ~@4 [g3,b3]@2 [f#3,a3]@2 ~ a2@2 ~@2 [e3,g3]@2 [f#3,a3]@2 [d3,f#3]@2 ~ b2@4, ~ a3@2 ~@2 a3 ~@10, ~@11 f#3@2 ~@19", // G F#m Em F#m D
  F: "f#3@6 [e3,g3]@4 ~ d3@12 ~@9, d3@10 f#3@19 ~@3", G: "[a3,d4,f#4]@5 c#4@5 ~ [b3,d4]@5, ~@5 e4@11",
  H: "[[a3,c#4]@7 ~ a3@8, ~@28 a4@35 ~, ~@29 e4@34 ~, ~@30 c#4@33 ~]/2", I: "[g2,d3,g3,b3]",
  J: "[~ [d3,f#3]@20 ~ [e3,a3]@5 f#3@2 e3@2 d3@2 e3@24 ~@7 [b3,e4]@32, a3@20 ~@37 e3@39, ~@5 g#3@3]/3", // D A5 E5
  K: "[e3,a3,c#4,e4]", // A
  L: "[[c#3,a3,c#4]@11 [d3,b3,d4]@10 [e3,c#4]@10 ~ f#4@28 ~@2 e4 ~ d4@31 ~, ~@21 e4@9 ~ a3@29 a4@36, ~@32 f#3@63 ~, ~@32 d4@29 f#4@2 ~@33]/3", // F#m G C#m
  M: "[d3,f#3]@11 [e3,g3]@11 [f#3,a3]@10", // D Em F#m
  N: "[~@32 d4@30 ~@2 d4@32 [c#3,e3,a3]@25 ~@7, [d3,g3,b3]@29 a4@33 d3@35 ~@31, ~@28 b4@35 [f#3,a3]@34 ~@31, ~@15 g4@17 ~@32]/4", // A G F#m
  O: "[d3,f#3,a3]@10 ~ [e3,g3]@10 [f#3,a3]@10 ~", // D Em F#m
  P: "[[d3,g3,b3]@11 ~@22 a4@22 ~@9, ~@15 a3@13 ~@4, ~@31 d4@24 ~@9, ~@32 f#4@23 ~@9]/2", Q: "[a3,c#4,e4]@11 ~@5",
  R: "[[g3,b3]@11 a3@13 [e3,g3]@13 ~@3 d4@63 ~@25, d3@4 ~@7 f#3@12 ~@14 d3@68 ~@23, ~@19 f#3@33 ~@12, ~@39 a3@64 ~@25]/4", // G Em
})).s("gm_piano").gain(0.56)

// drums · kick
const kick = s("bd").struct(`<
  ~@22 A B@7 C A B@5 C B D A C E B C E B C A C E A C B C B C A C B@2 C B E B C A C E B@3 C B E A C E C@2 E B C A C E A C
  B C B A C B@3 F G ~@2
>`.pickRestart({
  A: "x ~@10 x ~@9 x ~@10", B: "x", C: "x ~@6 x", D: "x ~@20 x ~@3 x ~@2 x ~@3", E: "x ~@24 x ~@2 x ~@3",
  F: "x ~@10 x ~@12 x ~@7", G: "~@7 x ~@24",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@23 [~@21 x ~@10]!18 ~@17 [~@21 x ~@10]!17 ~@25>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@41 A@7 B A@8 ~@19 A@7 B A@8 C A ~ D ~@4>".pickRestart({
  A: "~@21 x ~@10", B: "~@18 x ~@2 x ~@10", C: "~@9 x ~ x ~@4", D: "~@11 x ~@4",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@57 [~@17 x ~@4 x ~@9] ~@17 [~@21 x ~@10] ~@18 [~@17 x ~@3 x ~@10] ~@5>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<A@2 B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ D E@16 F E@17 G E@38 ~@4>".pickRestart({
  A: "~@11 x ~@9 x ~@10", B: "~@7 x", C: "~@11 x ~@20", D: "x ~@10 x ~@9 x ~@10", E: "~@7 x ~@10 x ~@10 x ~@2",
// … 34 more lines

More by Alan Jackson