Strudelify

Papa Loved Mama

Brooks Garth

KeyE majorTempo150 bpm
0:00/0:00
// Papa Loved Mama — Brooks Garth
// 150 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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 · "Bass"
const bass = note(`<
  A B C D E F G H I J K D L M N O M P Q R S P Q E T D U ~@2 V W X Y@2 Z E AA AB G AC AD W X E AE I AF AG AD AH AI D L P
  Q AJ D L AK ~@2 AL AM D L Z AN AO AP D L ~@2 AQ AR D L P Q R S D L ~@2 AS Y AT AU
>`.pickRestart({
  A: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 b0 b1 b0 b1!2", B: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 e1",
  C: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 e1 e2 e1 e2!2", D: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  E: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 a0", F: "b1 ~ b1@2 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 b0",
  G: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", H: "c2 ~ c2 ~ c2 ~ c2@2 c2 ~ c2 ~ c2 ~ c2 c1",
  I: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", J: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2 ~ e2@2",
  K: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", L: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1 ~",
  M: "b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1 ~ b1 ~ b1 b0", N: "b1 ~ b1 ~ b1 ~ b1 b0 b1 ~ b1 ~ b1 ~ b1 ~",
  O: "c2 ~ c2 ~ c2 ~ c2 c1 c2 ~ c2 ~ c2@2 a#1 ~", P: "e2 ~ e2@2 e2@2 e2 e1 e2 ~ e2 ~ e2 ~ e2@2",
  Q: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 e1 e2 ~ e2 ~", R: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1 ~ a1@2",
  S: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", T: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1 ~ g#1 ~",
  U: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 ~", V: "~@12 e2 ~ e2 ~", W: "e2 ~ e2@2 e2 ~ e2@2 e2 ~ e2@2 e2 ~ e2@2",
  X: "e2 ~ e2@2 e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~", Y: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~",
  Z: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2", AA: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 a0 a1 a0 a1!2",
  AB: "b1 ~ b1 ~ b1 ~ b1 b0 b1 ~ b1 ~ b1 ~ b1@2", AC: "c2 ~ c2 ~ c2 ~ c2@2 c2 ~ c2 ~ c2 ~ c2 ~",
  AD: "b1 ~ b1 ~ b1 ~ b1 b0 b1 ~ b1 ~ b1@2 d#2 ~", AE: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1 ~ a#1 ~",
  AF: "b1 ~ b1 ~ b1 ~ b1@2 b1 ~ b1@2 b1 ~ b1 ~", AG: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 a#1 ~",
  AH: "e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 e1", AI: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ g#1 ~",
  AJ: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 g#1 ~", AK: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 d#2 ~",
  AL: "e2 ~ e2 ~ f2 ~ f2 ~ f#2 ~ f#2@2 f#2 ~ f#2 ~", AM: "g2 ~ g2 ~ g#2 ~ g#2 ~ g#2 ~ g#2@2 g#2 ~ g#2 g#1",
  AN: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2@2 e2 ~ e2 ~", AO: "a1 ~ a1@2 a1@2 a1 a0 a1 ~ a1 ~ a1 ~ a1@2",
  AP: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 a0 a1 ~ a1 ~", AQ: "e2 ~ e2 ~ f2 ~ f2 ~ f#2 ~ f#2@2 f#2 ~ f#2 f#1",
  AR: "g2 ~ g2 ~ g#2 ~ g#2 ~ g#2 ~ g#2@2 g#2 ~ g#1 ~", AS: "~@8 e2 ~ e2@2 e2 ~ d#2 ~",
  AT: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2!2", AU: "e2 ~ b2@2 d3 ~ e3 ~@5 e2@4",
})).s("gm_fretless_bass").gain(0.48)

// chords · piano
const piano = note(`<
  A B C D E F@2 G A H@2 I@2 F@2 J K L@2 M@2 H@2 N O D@2 ~@2 P Q@2 R@2 S T U V@2 W X Y@2 Z@2 AA@2 AB AC AD@2 N O AE@2 D
  AF@2 AG ~@2 AH AI AF@2 AJ@2 AK@4 ~@2 AL AM AK@2 AN@2 AO@2 AK@2 ~@2 AP R AQ AR
>`.pickRestart({
  A: "[f#4,b4,d#5,f#5]", B: "[g#4,b4,d5]@9 ~ [g#4,d5] ~ [g#4,b4,d5,e5] ~ [g#4,b4,d5,e5] ~, e5@5 ~@3",
  C: "g#4 ~@5 b5@7 ~@3, d5@13 ~@3, ~ g#4@6 ~, ~@4 e5@9 ~@3",
  D: "[g4,a4,c#5]@9 ~ [g4,c#5] ~ [g4,a4,c#5,e5] ~ [g4,a4,c#5,e5] ~, e5@5 ~@3", // A7 Gdim A7
  E: "g4 ~@5 a5@7 ~@3, c#5@13 ~@3, ~ g4@6 ~, ~@4 e5@9 ~@3",
  F: "[[a4,b4,d#5,f#5]@7 ~ [a4,b4,d#5,f#5] ~@3 [a4,d#5,f#5] ~ [a4,b4,d#5,f#5]@5 ~ [a4,b4,d#5,f#5] ~ [a4,b4,d#5,f#5]@4 b2 ~ [a4,b4,d#5,f#5]@2 ~@2]/2", // B7 D#dim B7
  G: "[g4,c5,e5,g5]@9 ~ [g4,c5,e5,g5] ~ c3 [g4,c5,e5,g5] ~@2", // C
  H: "[[e5,g#5]@23 ~ [g#4,d5,e5]@3 e3 e5@2 g#4 ~, d5@14 ~@14 d5 ~@3]/2", // E E7
  I: "[[g4,a4,c#5,e5]@19 a2 [g4,a4,c#5,e5]@3 a2 [c#5,e5] [a4,c#5,e5] ~ a2 [g4,a4,c#5,e5]@2 a2 ~, ~@12 g4 ~@3]/2", // A7 C#m A A7
  J: "g4 ~@5 c6@7 ~@3, e5@13 ~@3, ~ g4@6 ~, ~@4 g5@9 ~@3",
  K: "[a4,b4,d#5]@9 ~ [a4,d#5] ~ [a4,b4,d#5,f#5] ~ [a4,b4,d#5,f#5] ~, f#5@5 ~@3", // B7 Adim B7
  L: "[[g#4,b4,d5,e5]@9 ~ [g#4,b4,d5,e5] ~@3 [b4,d5,e5]@9 ~@4 e5@2 ~ e5 ~, ~@14 g#4@8 ~ g#4@9, ~@12 e5 b4 ~@2, ~@25 d5@2 ~@5]/2", // E7
  M: "[[g4,a4,c#5,e5]@18 [g4,a4,c#5,e5]@3 [g4,a4,c#5,e5] ~ a2 [g4,a4,c#5,e5]@2 a2 [g4,a4,c#5,e5]@2 a2 [g4,a4,c#5,e5]@2]/2", // A7
  N: "[a4,c#5,e5]@13 ~ [g4,a4,c#5,e5] ~", O: "~@2 a2!2 [g4,a4,c#5,e5]@2 ~@2 [g4,a4,c#5] ~ [g4,a4,c#5,e5]@3 ~@3",
  P: "~@3 [g#4,d5]", // G#dim
  Q: "[[g#4,b4,d5,e5]@19 e2 [g#4,b4,d5,e5]@3 e2 [d5,e5] [b4,d5,e5] ~ e2 [g#4,b4,d5,e5]@2 e2 ~, ~@12 g#4 ~@3]/2", // E7 Dsus2 E7
  R: "[b4,d5]@10 ~@4 d5 b4, g#4, e5@9 ~ e5@2 b4@2 ~@2, ~@11 d5@2 e5@2 ~", S: "~@3 e5@4 ~, ~ g#4@6 ~, ~@2 b4@5 ~",
  T: "~@3 e5@4 ~, ~ g4@6 ~, ~@2 a4@5 ~", U: "[g4,a4,c#5,e5]@5 a2 [g4,a4,c#5,e5] ~",
  V: "[[f#4,b4,d#5]@13 ~@5 f#3 ~ [f#4,b4,d#5] ~ f#3 ~ [f#4,b4,c#5]@4 [f#4,b4,d#5] ~@3, ~@7 [f#4,b4,c#5]@3 ~@6]/2", // B F#sus4 B F#sus4
  W: "[g4,c5,e5,g5]@5 c3 [g4,c5,e5,g5] ~", X: "[d#5,f#5,b5] ~@2 [b4,d#5,f#5,b5]@4 ~",
  Y: "[[b4,e5]@25 ~ e2!2 [g#4,b4,d5,e5]@2 e2 ~]/2", Z: "[[a4,e5]@25 ~ a2!2 [g4,a4,c#5,e5]@2 a2 ~]/2",
  AA: "[[b4,f#5]@25 ~ b2!2 [a4,b4,d#5,f#5]@2 b2 ~]/2", AB: "[e5,g5,c6] ~@2 [c5,e5,g5,c6]@4 ~",
  AC: "[b4,d#5]@10 ~@4 d#5 b4, a4, f#5@9 ~ f#5@2 b4@2 ~@2, ~@11 d#5@2 f#5@2 ~", // B
  AD: "[~@2 [b4,e5,g#5] ~@3 e3 ~ [b4,e5,g#5]@2 ~@2 e3 ~@5 e3 ~ [b4,e5,g#5] ~ e3 ~ [e5,f#5] ~ e3 ~ [b4,e5,g#5] ~@3, ~@7 [b4,e5,f#5]@3 ~@2 b4 ~@3]/2", // E Esus2 E Bsus4
  AE: "[~@6 e5@16 e2 ~ [g#4,d5,e5,b5]@2 e2 ~ [g#4,d5,e5,b5]@2 ~@2, ~ g#4@10 ~@5, ~@4 d5@18 ~@2 a#5 ~@7]/2", // E7
  AF: "[[g4,a4,c#5,e5]@7 ~ [g4,a4,c#5,e5] ~@3 [g4,c#5,e5] ~ [g4,a4,c#5,e5]@5 ~ [g4,a4,c#5,e5] ~ [g4,a4,c#5,e5]@4 a2 ~ [g4,a4,c#5,e5]@2 ~@2]/2", // A7 C#dim A7
  AG: "[g4,a4,c#5,e5]@9 ~ [g4,a4,c#5,e5] ~ a2 [g4,a4,c#5,e5] ~@2", AH: "[g#4,e5] [a4,f5] [a#4,f#5]@2",
  AI: "[b4,g5] [c5,g#5] [c5,d#5,g#5,c6]@2", // Em Fm G#
  AJ: "[[g#4,b4,d5,e5]@7 ~ [g#4,b4,d5,e5] ~@3 [g#4,d5,e5] ~ [g#4,b4,d5,e5]@5 ~ [g#4,b4,d5,e5] ~ [g#4,b4,d5,e5]@4 e2 ~ [g#4,b4,d5,e5]@2 ~@2]/2", // E7
  AK: "[~@6 e5@16 a2 ~ [g4,c#5,e5,a5]@2 a2 ~ [g4,c#5,e5,a5]@2 ~@2, ~ g4@10 ~@5, ~@4 c#5@18 ~@2 g#5 ~@7]/2", // A7
  AL: "[g#4,e5] [a4,f5] [a#4,c#5,f#5,a#5]@2", AM: "[b4,g5] [c5,g#5] [c5,g#5]@2",
  AN: "[[d5,e5,b5]@23 ~ d5!2 ~ e2 [b4,d5,e5]!2 ~@2, ~@12 e5 ~@3]/2", // E7
  AO: "[[e5,g5]@23 ~ [g4,c#5,e5]@3 e3 e5@2 g4 ~, c#5@14 ~@14 c#5 ~@3]/2", AP: "~ [g#4,b4,d5,e5]", AQ: "[g#4,b4,d5,e5]",
  AR: "~ [g#4,b4,d5,e5] ~@5 [g#4,b4,d5,e5] ~@4 b3@4", // E7
})).s("gm_piano").gain(0.32).pan(0.1)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A ~ B ~ C ~@4 D ~ E C ~@2 A ~ F ~@3 D G H B@2 ~@4 I ~@2 J K ~@2 L ~ M N@2 O@2 P@2 Q ~@2 R G H ~@2 B S ~@6 S ~ C ~@12
  T ~ U ~@8
>`.pickRestart({
  A: "~@10 b4 ~@5", B: "~@10 a4 ~@5", C: "~@12 b4 ~@3", D: "~@14 d5 ~", E: "~@8 a4 ~@7", F: "~@12 d5 b4@2 ~",
  G: "g4@13 ~@3", H: "~@6 e3 ~@2 e3 ~@6", I: "~@8 b4 ~@7", J: "~@5 d5@9 ~@2", K: "~@5 c#5@9 ~@2", L: "~@12 c#5 ~@3",
  M: "b4 ~@7", N: "[[g#4,d5]@13 ~@3]/2", O: "[[g4,c#5]@13 ~@3]/2", P: "[[a4,d#5]@13 ~@3]/2", Q: "c5 ~@7",
  R: "~@4 f#5 ~@7 [c#5,f#5] ~@3", S: "~@12 a4 ~@3", T: "~@7 e2 b4@2 ~@6", U: "~@14 c#5 ~",
})).s("gm_piano").gain(0.24).pan(0.1)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A B@2 C D E@2 F G H@2 I J E@2 F K L@2 M@2 L@2 N@2 O P ~@2 Q R@2 B S T U V W@2 X Y Z AA AB@2 AC@2 X AD AE@2 AF AG AH@2
  AI AJ AK O ~@2 AL AM AN@2 R@2 AO@2 AJ AK ~@2 AP AQ AF AG AR@2 AN@2 N@2 ~@2 AS AT AU AV
>`.pickRestart({
  A: "~@2 f#3 ~@2 b1 ~ f#3, b1@9 ~@3 b2@4, ~@2 b2@4 [f#3,b3]@7 ~@3", // B5
  B: "~@2 [e3,b3,e4] ~@3 e2@2 [e3,b3,e4]@2 e2@4 [e3,b3,e4]@2", C: "~@4 e3@2 ~@4 a2 ~ a2 ~ e3@2, a2@6 [e3,a3]@7 ~@3",
  D: "~@2 a3@2 e3@2 ~@2 a3 ~@2 a3 ~@2 a3 e3, a2@9 ~ a2@2 ~ a2@2 ~, ~@2 g3 ~@6 e3@2 ~ e3@2 ~@2",
  E: "[~@2 [b2,f#3]@2 ~@4 [b2,f#3]@4 ~@2 [b2,f#3]@3 b3 f#3 ~@2 f#3 ~@5 f#3 b2 b3 ~ b2, ~@6 b1@5 ~ b1@20, ~@8 c#3 ~@10 b2@2 ~ b2@2 f#3@2 b3@2 ~@2 f#3@2, ~@20 b3@2 ~ b3@2 b2@2 ~@5]/2", // B5
  F: "~@2 [c3,g3] ~ [c3,g3]@2 c2@2 ~@4 c3@2 g3 ~, c2@5 ~@3 [c3,g3]@4 ~@4, ~@5 c2@2 ~", // C5
  G: "~@2 [b2,f#3,b3] ~ [b2,f#3,b3]@2 ~@2 [b2,f#3,b3] ~ [b2,f#3,b3] ~ [b2,f#3,b3] ~ [b2,f#3,b3] ~, ~@3 b1@5", // B5
  H: "[~@2 [e3,b3] ~@5 [e3,b3]@4 ~@2 [e3,b3]@4 ~@4 [e3,b3]@3 e4 ~@5 b3, e2@5 ~ e2@5 ~ e2@5 ~ e2@14, ~@8 f#3 ~@17 b3@2 e4@2 e3@2, ~@27 e3@2 b3@2 ~]/2", // E5
  I: "~@2 [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3]@2 ~@2 [a2,e3]@2", // A5
  J: "~@2 [a2,e3]@2 a2 ~ [a2,e3]@3 a3 e3 ~ a3 e3 ~ e3, ~@11 a2@2 ~ a2@2", // A5
  K: "c#3 ~@5 b2@4 ~@2 b2@2 [f#3,b3]@2, b2@4 b1@5 ~ b1@4 ~@2, ~ f#3@2 ~@5", // B5
  L: "[~@2 [e3,b3] ~@5 [e3,b3]@4 ~@6 e2@2 ~@2 e2@2 ~@6 b3@2, ~@6 e2@5 ~ e2@5 ~@7 b3@4 e3@4, ~@14 [e3,b3]@6 e3@6 e2@5 ~]/2", // E5
  M: "[~@2 [a2,e3] ~@5 e3@4 a2 ~ a2@3 ~ a2 ~ a2 ~ a2@2 ~@2 a2 ~ a2@2 e3@2, ~@6 a2@5 ~@3 e3@6 ~@4 e3@5 ~@3]/2", // A5
  N: "[[a2,d#3,e3]@2 ~@2 e3 ~ [a2,e3]@5 ~ a2 ~ [a2,e3]@4 a2 ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~]/2", // A A5
  O: "~@2 [e3,a3] ~@3 a2@2 [e3,a3]@2 a2 ~@3 [a2,e3,a3]@2", // A5
  P: "~@2 [e3,a3] ~ [a2,e3,a3]@2 a2 ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~", Q: "~@12 [e3,b3,e4]@3 ~",
  R: "[~@2 [e3,b3] ~ [e3,b3]@2 e2@2 [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3]@3 ~ [e3,b3]@2 ~@2 [e3,b3]@3 e4 b3 ~ e4 b3 ~ b3, ~@3 e2@2 e2@3, ~@27 e3@2 ~ e3@2]/2", // E5
  S: "~@2 [e3,b3] ~@5 e3@2 b3@2 ~@2 b3@2, e2@5 ~ e2@10, ~@4 e4@3 ~, ~@3 e3", // E5
  T: "~@2 [e3,b3]@2 ~@4 [e3,b3]@7 ~, ~@6 e2@9 ~", U: "a2@2 e3 ~@7 e3@2 ~@2 e3@2, ~@6 a2@5 ~ a2@4, ~@4 a3@3 ~",
  V: "~@2 [a2,e3] ~@3 a2@2 ~@2 a2 ~ a2 ~ e3 ~, ~@2 e3 ~", // A5
  W: "[~@2 [b2,f#3] ~@2 [b2,f#3] ~@2 b1 ~@4 f#3 b2 [b2,f#3], ~@14 [b2,f#3]@4 b3@4 b2@5 ~@5, ~@20 f#3@4 b3@5 ~@3]/2", // B5
  X: "~@2 [c3,g3]@2 ~@4 [c3,g3]@7 ~, ~@6 c2@9 ~", Y: "~@2 [b2,f#3]@2 ~@4 [b2,f#3]@7 ~, ~@6 b1@9 ~",
  Z: "~@4 [e3,b3]@2 ~@4 [e3,b3]@3 ~ [e3,b3]@2", AA: "~@2 [e3,b3]@3 ~ e2@2 [e3,b3]@2 e2@2 b3 ~ b3 ~, ~@3 e3",
  AB: "[[a2,e3,a3]@2 ~@4 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@4 ~@2 a2@2 ~@2 [a2,e3,a3]@2 a2 ~ a2 ~ e3 ~]/2", // A5
  AC: "[~@4 [b2,f#3]@2 ~@4 [b2,f#3]@2 ~@2 f#3@4 b2@2 ~@2 b2@2 ~@2 b2@2 f#3@2 b2 ~, ~@14 b2@3 ~@3 f#3@4 b3@5 ~@3]/2", // B5
  AD: "~@2 [b2,f#3] ~@5 b2@2 f#3@2 ~@2 f#3@2, b1@5 ~ b1@10, ~@4 b3@3 ~, ~@3 b2", // B5
  AE: "[~@2 [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3]@4 ~@2 e3@2 b3@2 e3 ~ e3@2 b3@2 e3 ~, ~@6 e2@4 ~@2 e2@5 ~ e2@12 ~@2, ~@6 e4 ~]/2", // E5
  AF: "~@2 a2@3 ~ a2@2 ~@2 a2 ~@3 e3@2, ~@2 e3 a2", AG: "~@2 [a2,e3,a3] ~@7 a2@2 [a2,a3]@3 ~, ~@3 a2@2 ~@3, ~@2 e3 ~",
  AH: "[[e3,b3] ~@6 b3@2 e3 b3 e3 ~ e3 b3 e3, ~@4 e2@5 ~ e2@22, ~@3 e3@4 ~@9, ~@3 b3@3 ~@6 e4@2 ~@2]/2", // E5
  AI: "a2@2 e3 ~ e3@2 a2 ~ a2 ~ a2 ~ a2@2 e3 ~, ~@4 a2 ~@3 e3@4 ~@4", AJ: "a2@2 e3 ~@11 a2@2, ~@6 a2@7 ~@3, ~ e3",
  AK: "~@4 e3@2 ~@4 a2 ~@3 e3@2, a3@5 ~ a3@8 ~@2, ~@2 a2@7 ~@3 a2@4",
  AL: "[e3,b3,e4]@3 ~ [f3,c4,f4]@3 ~ [f#2,c#3,f#3] ~ f#2@2 [c#3,f#3]@2 [f#2,c#3,f#3] ~", // E5 F5 F#5
  AM: "[g2,d3,g3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g3,g#3]@2 ~@2 [g#2,d#3,g#3]@2 ~@2", // G5 G#5 G#maj7 G#5
  AN: "[[a2,e3] ~@4 a2@2 e3@2 a2 e3 a2 ~ a2 e3 a2, ~@4 a2@5 ~@23, ~@3 e3@3 ~@6 a3@2 ~@2]/2", // A5
  AO: "[~@2 [a2,e3] ~ [a2,e3]@3 ~ [a2,e3] ~ [a2,e3]@2 a2 ~ e3@4 a2 ~ a2@2 e3@2 a2 ~ a2@2 e3@2 a2 ~, ~@14 a2@3 ~@7 a3@4 ~@4]/2", // A5
  AP: "[e3,b3,e4]@3 ~ [f3,c4,f4]@3 ~ [f#2,c#3,f3,f#3]@2 ~@2 [f#2,c#3,f#3]@2 ~@2", // E5 F5 F#maj7 F#5
  AQ: "[g2,d3,g3]@3 ~ [g#2,d#3,g#3]@3 ~ [g#2,d#3,g#3] ~ g#2@2 [d#3,g#3]@2 [g#2,d#3,g#3] ~", // G5 G#5
  AR: "[[e3,a#3,b3]@2 e2@2 b3 ~ [e3,b3]@4 ~@2 e3 ~ [e3,b3]@4 ~@2 [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~, ~@10 e2@7 ~ e2@13 ~]/2", // E E5
  AS: "~@8 e4 b3 e3 ~ b3 e3 e4 b3, ~@11 e4@2 ~@3",
  AT: "f#3 ~@5 e3@4 ~@2 e3@2 [b3,e4]@2, e3@4 e2@5 ~ e2@4 ~@2, ~ b3@2 ~@5", AU: "[b3,e4]",
  AV: "[e3,b3,e4] ~@3 [d3,a3,d4] ~ [e3,b3,e4] ~@5 [e3,b3,e4]@4", // E5 D5 E5
})).s("gm_overdriven_guitar").gain(0.48).pan(0.9)

// chords · overdriven guitar · "Guitar" · soft notes
const overdriven_guitar_soft = note(`<
  A B@2 C ~ D ~ E F ~@2 G ~ D ~ E H ~ I ~ J ~ I K ~ L M ~@3 N ~ B ~ O ~ P Q ~ R F S ~ K T ~@2 R ~ U V W X Y Z AA ~ AB L
  ~@4 AC AD N ~ AE AF ~ AB ~@4 W X J ~ AC AD K ~@4 AG AH AI
>`.pickRestart({
  A: "~@6 b2@5 ~@5", B: "e2@3 ~@9 e3 ~@3", C: "~@6 a2@3 ~@7", D: "b1 ~@15", E: "~@13 g3 ~@2", F: "b1@5 ~@11",
  G: "~@9 a2 ~@6", H: "~@7 g3 ~@8", I: "~@4 b3 ~@11", J: "~@4 e3 ~@11", K: "~@4 a2 ~@11", L: "a2@3 ~@9 a2 ~@3",
  M: "a2@3 ~@13", N: "~@9 e2 ~@6", O: "e2@5 ~@11", P: "a2 ~@11 e3 ~@3", Q: "~@3 b1 ~@4 b1 ~@3 b1 ~@3", R: "c2@5 ~@11",
  S: "~@4 e2 ~@3", T: "~@2 e3 ~@5", U: "e2 ~@3 f#3 ~@11", V: "~@4 b3 ~@3 b3 ~@7", W: "~@12 f#3 ~@3", X: "~@12 e3 ~@3",
  Y: "~@7 e3", Z: "~@6 c#4 ~@9", AA: "~@13 e3 ~@2", AB: "~@10 e2 ~@5", AC: "~@7 a2", AD: "~@6 f#3 ~@9",
  AE: "a2 ~@3 b2 ~@11", AF: "~@4 e3 ~@3 e3 ~@7", AG: "~@7 c4 ~@8", AH: "e3", AI: "~@4 e3 ~ d4 ~@9",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.9)

// bass · electric bass pick · "Voice 1 (Melody)"
const bass_2 = note(`<
  A B C D E F G H I J C K L M N O P@2 Q R S T U V W X@2 Y Z AA@2 ~ A B C D E F G H I J C K L M N O P@2 Q R S T U V W
  AB@2 AC AD AE Q R S T U V W X@2 Y Z AE Q R S T U V W X@2 Y Z AF@2 ~@2
>`.pickRestart({
  A: "~@7 g2", B: "g2@2 g2@2 g2@2 g2@2 g#2@3 ~ e2@2 d2@2", C: "e2@2 d2@2 g2@5 ~ g#2@2 g#2@2 g#2@2",
  D: "g2@3 ~ g#2@2 g#2@2 g#2@2 g#2@2 e2 d#2@2 c#2", E: "e2@2 e2@2 a1@7 ~@3 a1@2", F: "f#2!3 e2 f#2!3 e2",
  G: "f#2!2 e2 g2 f#2!3 e2", H: "g2!3 e2 g2 e2!2 c2", I: "e2@2 b1@2 g2@2 f#2@3 ~@5 g2@2",
  J: "~@2 g#2@2 g#2@3 ~ g#2@2 g#2@2 e2@2 d2@2", K: "~ e2 g2 e2 g2 e2!2 c#2", L: "e2 c#2 e2 a1@3 ~ f#2",
  M: "~ f#2!5 e2 f#2", N: "~ f#2 e2 g2 f#2 e2!2 b2", O: "~@2 g2@2 g2@2 ~@2 e2@3 ~ b1@2 b1@2",
  P: "[d2@8 ~@2 b1@2 d2@2 e2@15 ~@3]/2", Q: "~@7 c#3", R: "~ e3 c#3!4 ~ c#3", S: "~ c#3!2 e3@3 ~ e3",
  T: "~ e2 g2 g#2 e2 b1 c#2 b1", U: "e2@2 e2@2 b1@7 ~@3 c#3@2", V: "~@2 e3@2 c#3@3 ~ c#3@2 a2@3 ~ c#3@2",
  W: "~@2 b2@8 ~@2 c#3@3 ~", X: "[e3@13 ~@3]/2", Y: "e3@2 b2@2 c#3@2 g#2@2 b2@3 ~ g#2@2 f#2@2", Z: "~ e2@4 ~ f#2 e2",
  AA: "[g2 e2@12 ~@3]/2", AB: "[e3@13 b2 c#3 b2]/2", AC: "e3 ~ b2!2 ~ e2 g2 e2", AD: "g#2@5 ~ f#2 e2", AE: "e2 ~@3",
  AF: "[g#2@2 e2@23 ~@7]/2",
})).s("gm_electric_bass_pick").gain(0.78)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@5 C B D B@7 E B F B G B D B@2 H B E H F B H I B@15 G B J B A B I G B G B@2 A B G B A B K B@3 G B K@2 G B E B D B@3
  F G D F A B L
>`.pickRestart({
  A: "x!2 ~@14", B: "~ x ~ x", C: "~@4 x ~@2 x ~@4 x ~@3", D: "x!3 ~ x ~ x ~@5 x ~@3", E: "x ~@5 x ~@7 x!2",
  F: "~@2 x!6", G: "~@4 x ~@3 x!2 ~@2 x ~ x ~", H: "~ x!3", I: "~@4 x ~@3 x!5 ~ x ~", J: "x!2 ~@2 x!4 ~@2 x!4 ~ x",
  K: "~@4 x ~@3 x ~@3 x ~ x!2", L: "x ~@2 x ~@2 x ~",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<A ~@15 B ~ C ~@8 B ~ C ~@22 A ~@7 A ~@3 A ~@11 B ~@5 C ~@2 C A ~ D>".pickRestart({
  A: "~@12 x!4", B: "~@3 x", C: "~@2 x!6", D: "~ x ~@2",
})).gain(0.48)

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

// … 42 more lines

More by Brooks Garth