Strudelify
Heartbreaker cover art

1980 · Best Shots

Heartbreaker

Pat Benatar

KeyF minorTempo157 bpm
0:00/0:00
// Heartbreaker — Pat Benatar
// 157.1 bpm, 4/4, key F minor. Source: mcgill + 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 132 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(157.1/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
const bass = note(`<
  ~ A B C B D E F G H I J G H I J K L M N K O M P Q R S T U R S T U V D E F G H I J G H I J K L M N K O M P Q R S T U R
  S T U V D V D W X Y@2 Z AA AB@2 AC AD AE AF AG AH AI AJ AK AH AI AL@2 ~@4 R S T U AM AN AO AP AM AN AO AP AM AN AO AQ
  AR AS AT AU AR AS AT AU AR AS AT AU AR AS AT AU AR AS AT AU AV@2 AW@3
>`.pickRestart({
  A: "~@15 ab1@7 ~@2", B: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~",
  C: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@3 ab1@9", D: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@3 ab1@7 ~@2",
  E: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1 ~@2", F: "f1@2 ~ f2@3 eb2@3 d2@3 eb2@3 d2@2 ~ c2@3 bb1@2 ~",
  G: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1 ~@2 f1 ~@2 f1@2 ~",
  H: "eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~",
  I: "db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2 ~@2 db2@2 ~",
  J: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ c2@6 eb2@4 ~@2", K: "f1@3 f2@3 f1@3 f2@2 ~ eb1@3 eb2@3 eb1@3 eb2 ~@2",
  L: "db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2@2 ~ db2 ~@2 db2 ~@2 db2@2 ~",
  M: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~",
  N: "c2@2 ~ c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2@2 ~",
  O: "db2@2 ~ db2@2 ~ db2 ~@2 db2@2 ~ db2@2 ~ db2@2 ~ db2 ~@2 db2@2 ~",
  P: "c2@2 ~ c2 ~@2 c2 ~@2 c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2", Q: "c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@2 c2@2 ~@10",
  R: "f1@5 ~ f1@4 ~@5 g1@8 ~", S: "ab1@5 ~ ab1@7 ~@11", T: "bb1@4 ~@2 bb1@7 ~@2 c2@7 ~@2", U: "~@3 db2@9 ~@3 c2@7 ~@2",
  V: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~, ab1 ~@23", W: "eb2@14 ~ f2@7 ~@2", X: "c2@14 ~ bb1@8 ~",
  Y: "[ab1@7 ~@2 g1@8 ~@4 f1@9 eb2@7 ~@2 d2@7 ~@2]/2", Z: "eb2@14 ~ f2@8 ~", AA: "c2@14 ~ bb1@6 ~@3",
  AB: "[ab2@3 g2@3 f2@2 ~ eb2@5 ~ db2@3 c2@3 bb1@5 ~ c2@3 db2@2 ~ g2@7 ~@2 f2@4 ~@2]/2",
  AC: "c2@2 ~ c2@3 c3@6 c2@2 ~ c2@2 ~ c3@6", AD: "c2@2 ~ c2@2 ~ c3@5 ~ c2 ~@2 c2@2 ~ c3@5 ~",
  AE: "c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~",
  AF: "c2@2 ~ c2 ~@2 c2@2 ~ c2 ~@2 c2@3 c3@3 c2@2 ~ c2@2 ~", AG: "f2 ~@6 eb2", AH: "db2@4 ~@17 ab1@3", AI: "bb1 ~@7",
  AJ: "~@3 c2@4 ~@2 bb1@3 ~@3 ab1@3 ~@3 g1@3", AK: "f1@4 ~@17 eb2@3",
  AL: "[c2@3 c3@3 c2@3 ~@15 c2@3 ~@9 c3@3 c2@3 c3@3 c2@2 ~, ~@3 c3@2 c3@2 c3@3 c3@2 ~@4, ~@4 c2@2 c2@2 ~ c2@2 c2@2 ~@3]/2",
  AM: "f1 f2 f1 f2 f1 f2 f1 f2", AN: "ab1@2 ~ ab1@2 ~ ab2@3 ab1@3 ab2@3 ab1@3 ab2@2 ~ ab1@3",
  AO: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1 ~@2",
  AP: "db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ c2@2 ~ c2@3 g1@2 ~ c2@2 ~",
  AQ: "db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ c2@2 ~@2 c2@3 g1@2 ~ c2@2", AR: "~ f1@3 f2@3 f1@3 f2@3 f1@3 f2@3 f1@3 f2@2",
  AS: "~ ab1@2 ~ ab1@2 ~ ab2@3 ab1@3 ab2@3 ab1@3 ab2@2 ~ ab1@2",
  AT: "~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1 ~",
  AU: "~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ c2@2 ~ c2@3 g1@2 ~ c2@2",
  AV: "[~@14 f2@3 f2@3 f2@2 f2@2 f2@2 ~ f2@3 f2@3 ~ f2@2 f1@2 ~ f1@2 ~@2 f2@2 f1 f2@2, ~ f1@32 f1@2 ~@3 f2@3 f2@2 ~@5, ~@14 f1 ~]/2",
  AW: "[f1 ~@2 f1 ~ f2 f1 ~@4 f2@2 ~@12 f1@45 ~@2, ~@2 f2@2 ~@4 f2@3 ~@3 f2@4 f2@4 f2@7 ~@43, ~@9 f1@4 f1@3 f1@4 f1@5 ~@47]/3",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B C B C D E F G H I F G H I J K L M J K L M N O P Q R O P Q R B C D E F G H I F G H I J K L M J K L M N O P Q R O
  P Q R B C B C S T U@2 V W X@2 Y Z AA AB AC AD AE AF AG AD AE AH@2 ~@4 O P Q R AI AJ AK AL AI AJ AK AL AM AN@2 AO AP AQ
  AR AS AT AU AV AW AX@2 AY AZ BA@2 BB BC BD@2 BE BF BG@5
>`.pickRestart({
  A: "~@15 [ab2,eb3,ab3]@8 ~", // Ab5
  B: "[f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2", // F5
  C: "[f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3] ~@2 [f2,c3,f3]@3 [ab2,eb3,ab3]@7 ~@2", D: "~@6 bb3@17 ~",
  E: "ab3@2 ~ bb3@3 ab3@3 f3@3 ab3@3 g3@3 eb3@3 f3@3", F: "~@6 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2",
  G: "eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2",
  H: "db3 ~@2 db3 ~@2 db3 ~@2 db3 ~@2 db3 ~@2 db3 ~@2 db3 ~@2 db3 ~@2",
  I: "bb2@2 ~ bb2@2 ~ bb2 ~@2 bb2@2 ~ [c3,g3]@6 [eb3,bb3]@5 ~", J: "[f2,f3] [eb2,eb3]", K: "[db3,ab3,db4]@17 ~@7",
  L: "[bb2,f3]", M: "~@3 [c3,g3] ~@2 [c3,g3] ~@2 [c3,g3] ~@2 [c3,g3]@3 [c3,g3]@3 c4@3 [c3,g3]@2 ~",
  N: "[c3,g3]@2 ~ [c3,g3]@3 [c3,g3]@3 [c3,g3]@3 [c3,g3]@3 ~@9", O: "[f2,c3,f3]@5 ~ [f2,c3,f3]@5 ~@4 [g2,d3,g3]@9",
  P: "[eb3,ab3]@4 ~@2 [ab2,eb3,ab3]@3 ~@15", Q: "[bb2,f3,bb3]@5 ~ [bb2,f3,bb3]@7 ~@2 [c3,g3,c4]@6 ~@3",
  R: "~@3 [db3,ab3,db4]@11 ~ [c3,g3,c4]@7 ~@2", S: "eb3@14 ~ f3@7 ~@2", T: "c3@14 ~ bb2@8 ~",
  U: "[ab2@7 ~@2 g2@8 ~@4 f2@9 eb3@7 ~@2 d3@7 ~@2]/2", V: "eb3@14 ~ f3@8 ~", W: "c3@14 ~ bb2@6 ~@3",
  X: "[ab3@3 g3@3 f3@2 ~ eb3@5 ~ db3@3 c3@3 bb2@5 ~ c3@3 db3@2 ~ g3@7 ~@2 f3@4 ~@2]/2",
  Y: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6", Z: "c3@2 ~ c3@2 ~ c4@5 ~ c3 ~@2 c3@2 ~ c4@5 ~",
  AA: "c3@2 ~ [c3,g3,c4] ~@2 [c3,g3,c4] ~@2 [c3,g3,c4] ~@2 [c3,c4]@2 ~ [c3,c4]@2 ~ [c3,c4]@2 ~ [c3,c4]@2 ~", // C5 C
  AB: "[c3,c4]@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 [c3,c4]@3 [g3,c4]@3 [c3,c4]@3 [c3,g3]@2 ~", AC: "f3 ~@6 eb3",
  AD: "db3@4 ~@17 ab2@3", AE: "bb2 ~@7", AF: "~@3 c3@4 ~@2 bb2@3 ~@3 ab2@3 ~@3 g2@3", AG: "f2@4 ~@17 eb3@3",
  AH: "[c3@3 c4@3 c3@3 ~@15 c3@3 ~@9 c4@3 c3@3 c4@3 c3@2 ~, ~@3 c4@2 c4@2 c4@3 c4@2 ~@4, ~@4 c3@2 c3@2 ~ c3@2 c3@2 ~@3]/2",
  AI: "f2 f3 f2 f3 f2 f3 f2 f3", AJ: "ab2@2 ~ ab2@2 ~ ab3@3 ab2@3 ab3@3 ab2@3 ab3@2 ~ ab2@3",
  AK: "bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2 ~@2",
  AL: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~ c3@3 g2@2 ~ c3@2 ~", AM: "~ eb4@6 eb4@6 eb4@6 eb4@5",
  AN: "[~ eb4@18 eb4@2 c4@2 eb4@13 ~ eb4@9 eb4@2]/2", AO: "~ f4@2 eb4@6 eb4@3 ~ g4@3 eb4@6 eb4@2",
  AP: "~ ab4@11 ab4@3 ab4 ~@2 ab4 ~@3 ab4 ~", AQ: "~@7 f4@4 ~@2 f4@11, ~ ab4@8 ~@15",
  AR: "f4@3 eb4@3 ~@3 eb4@8 ~ c4@4 ~@2, ~ f4@2 ~", AS: "c4@4 bb3@2 c4@3 bb3@6 ab3@3 g3@3 f3@2 ~",
  AT: "~@3 c3@2 ~ ab2@4 ~ g2@2 f2@2 g2@3 ~ ab2@2 bb2@3, ~ f3@2 ~@21, ~@2 eb3@2 ~ bb2@2 ~@17",
  AU: "c3@3 db3@3 eb3@4 f3@5 ~ eb3@3 f3@3 gb3@2", AV: "~ gb3@6 gb3@5 ~ gb3@6 gb3@4 ~",
  AW: "~ gb3@6 f3@4 ~@5 eb3@3 f3@5, ~@13 f3@5 ~@6",
  AX: "[~@3 c4@5 ~ c4@2 ~@2 c4@13 ~@5 eb4@2 c4@2 ~@2 eb4@2 ~ eb4@8, ~@9 c4@2 ~@5]/2",
  AY: "~ eb4@5 db4@3 c4@3 db4@3 c4@3 bb3 ~@2 ab3@3", AZ: "g3@3 ab3@2 ~ g3@3 f3@3 eb3@6 ~ db3@2 ~@3",
  BA: "[f4@2 eb4@2 c4 bb3 ~@2 eb4 c4 ~ bb3@2 ~ eb4 c4 ~ bb3 f4@2 eb4@2 c4 bb3@2 ~ eb4@2 ~ bb3 ~ f4@5 ~ ab4@6 ab4 ~ ab4 ~@2, ~@7 f4@2 ~@4 f4@2 ~@10 f4@2 ~ c4@2 ~@18]/2",
  BB: "ab4@6 ~ g4@3 ab4@6 f4 ~@2 f4@5", BC: "~@3 db5@4 ~@2 c5@2 ~ eb5@4 ~ eb5@3 ~ f5@2 ~",
  BD: "[~ ab5@11 ~@3 ab5@6 f5@6 ~@7 c5@3 eb5@3 c5@2 ~@3 c5@3, ~@7 d5]/2",
  BE: "~ [c5,f5]@5 ~ [c5,f5]@6 [c5,f5]@5 [c5,f5]@6, ~@7 eb5@17", // F5
  BF: "~ [c5,f5]@5 ~ [c5,f5]@5 ~ c5@5 [c5,f5]@3 ~@3, ~@12 f5@5 ~@7", // F5
  BG: "[~ bb3@12 bb3@5 bb3@5 bb3@5 bb3@2 ab3 ~ g3@2 ~ f3@2 ~ g3@3 ab3@2 eb3@3 f3@4 db3@4 c3@4 bb2@60 ~@2, ~@17 ab3 ~@42]/5",
})).s("gm_overdriven_guitar").gain(0.45)

// other · alto sax
const alto_sax = note("<~@78 A@2 ~@2 B C ~@2 D@2 E F G ~@4 H I@2 J@2 K L M ~@29>".pickRestart({
  A: "[~@4 eb5 ~ eb5@3 ab5@4 ~@2 eb5@3 db5 ~@3 db5@4 ~ c5@9 ~@12]/2",
  B: "~@4 eb5 ~@2 eb5@2 ab5@4 ~@2 eb5@2 ~ db5 ~@2 db5@3", C: "~@3 c5@10 ~@11",
  D: "[~@19 eb4@3 f4@4 ~@4 ab4@4 ~@2 g4@2 ~ f4@9]/2", E: "~@6 ab4@4 ~@3 g4@2 ~ f4@8",
  F: "~@7 ab4@4 ~@2 g4@2 ~ f4 ~@2 f4 ~ f4@2 ~", G: "~ eb4@2 ~ f4 ~@2 f4 ~@2 f4 ~@2 f4@4 ~@2 eb4@2 ~ f4@2",
  H: "~@7 c5@4 ~ bb4@2 ~@2 ab4@8", I: "[~@7 c5@4 ~ bb4@2 ~@2 ab4@10 ~@5 c5@4 ~ bb4@3 ab4 ~@2 ab4 ~@2 ab4@3]/2",
  J: "[~ g4@2 ab4 ~@3 ab4 ~@2 ab4 ~@2 ab4@5 ~ g4@2 ~ ab4@4 ~@5 c5@3 ~@2 bb4@2 ~ ab4@8 ~]/2",
  K: "~@7 c5@3 ~@2 bb4@2 ~@2 ab4@8", L: "~@6 c5@5 ~ bb4@3 ab4 ~@3 ab5 ~@2 g5@2", M: "~@3 ab5@19 ~@2",
})).s("gm_alto_sax").gain(0.45)

// other · lead 5 charang
const lead_5_charang = note(`<
  ~ A B C B D E F G H I J G H I J ~@9 K L M N K L M N O D E F G H I J G H I J ~@9 K L M N K L M N O D O D P Q R@2 S T
  U@2 V W X Y Z AA AB ~ AC AA AB AD AE ~@4 K L M N AF AG AH AI AF AG AH AI AF AG AH AI AJ AK AL AM AJ AK AL AM AJ AK AL
  AM AJ AK AL AM AJ AK AL AM AN@4 ~
>`.pickRestart({
  A: "~@15 [ab2,eb3,ab3]@7 ~@2", B: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~",
  C: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@9", D: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@7 ~@2",
  E: "[f2,f3] ~@2 f2@2 ~ [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2, ~@3 f3 ~@20", // F
  F: "[f2,f3] ~@2 [f2,f3]@3 [f2,f3]@3 [f2,f3]@3 [f2,f3]@3 [f2,f3]@3 [f2,f3]@2 ~ [f2,f3]@2 ~", // F
  G: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2 ~@2 f2 ~@2 f2@2 ~",
  H: "eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~",
  I: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3 ~@2 db3@2 ~",
  J: "bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ c3@6 eb3@4 ~@2", K: "f2@5 ~ f2@4 ~@5 g2@8 ~", L: "ab2@5 ~ ab2@7 ~@11",
  M: "bb2@4 ~@2 bb2@7 ~@2 c3@7 ~@2", N: "~@3 db3@9 ~@3 c3@7 ~@2",
  O: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~, ab2 ~@23", P: "eb3@14 ~ f3@7 ~@2", Q: "c3@14 ~ bb2@8 ~",
  R: "[ab2@7 ~@2 g2@8 ~@4 f2@9 eb3@7 ~@2 d3@7 ~@2]/2", S: "eb3@14 ~ f3@8 ~", T: "c3@14 ~ bb2@6 ~@3",
  U: "[ab3@3 g3@3 f3@2 ~ eb3@5 ~ db3@3 c3@3 bb2@5 ~ c3@3 db3@2 ~ g3@7 ~@2 f3@4 ~@2]/2",
  V: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6", W: "c3@2 ~ c3@2 ~ c4@5 ~ c3 ~@2 c3@2 ~ c4@5 ~",
  X: "c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~",
  Y: "c3@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 c3@3 c4@3 c3@2 ~ c3@2 ~", Z: "f3 ~@7", AA: "[db3,f3,ab3,db4,f4] ~@7",
  AB: "[bb2,bb3] ~@11", AC: "[f3,f4] ~@7",
  AD: "c3 ~@2 c3@3 c3@3 c3@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3", // C5
  AE: "[c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4] ~@11", AF: "[f2,f3,ab3,c4]@17 ~@7",
  AG: "[ab2,eb3,ab3,c4]@3 ~", AH: "[bb2,bb3]@3 ~", AI: "[db3,f3,ab3,db4]@5 ~ [c3,c4]@4 ~@2",
  AJ: "~ [f2,f3,ab3,c4]@17 ~@6", AK: "~ [ab2,eb3,ab3,c4]@18 ~@5", AL: "~ [bb2,bb3]@18 ~@5",
  AM: "~ [db3,f3,ab3,db4]@10 ~@2 [c3,c4]@8 ~@3", // Db C
  AN: "[~ f2@7 f2@3 f2@3 ~@11 f3@5 ~@7 f3@48 ~@11, ~ [f3,c4,f4]@13 f2@2 f2@2 [f3,f4]@2 [c4,f4]@48 ~@28, ~@15 [f3,c4,f4]@2 c4@2 f2@2 f2@13 f2@48 ~@14, ~@20 f3@5 ~@5 f3@7 ~@59]/4", // F5 F F5
})).s("gm_lead_5_charang").gain(0.5)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C B D E@2 F G H I F G H I J K L M N K O P@2 Q R S T Q R S T U D E@2 F G H I F G H I J K L M N K O P@2 Q R S T Q
  R S T U D U D V W X@2 Y Z AA@2 AB AC AD AE AF AG AH AI AJ AG AH AK@2 ~@4 Q R S T AL AM AN AO AL AM AN AO AL AM AN AP
  AQ AR AS AT AQ AR AS AT AQ AR AS AT AQ AR AS AT AQ AR AS AT AU@5
>`.pickRestart({
  A: "~@15 [ab2,eb3,ab3]@7 ~@2", B: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~",
  C: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@9", D: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@7 ~@2",
  E: "[f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2 [f2,f3] ~@2", // F
  F: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2 ~@2 f2 ~@2 f2@2 ~",
  G: "eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~ eb2@2 ~",
  H: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ db3 ~@2 db3@2 ~",
  I: "bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ c3@6 eb3@4 ~@2", J: "[f2,f3,ab3,c4]@12 [eb2,eb3,g3,bb3]@11 ~",
  K: "[db3,f3,ab3,db4]", L: "[bb2,bb3]@19 ~@5",
  M: "~@3 [c3,c4] ~@2 [c3,c4]@2 ~ [c3,c4] ~@2 [c3,c4]@2 ~ [c3,c4] ~@2 [c3,c4] ~@2 [c3,c4]@2 ~", // C
  N: "[f2,f3,ab3,c4] [eb2,eb3,g3,bb3]", O: "[bb2,bb3]@11 ~",
  P: "[[c3,g3]@2 ~ [c3,g3]@2 ~ [c3,g3]@3 [c3,g3]@3 [c3,g3]@3 ~@18 [c3,g3]@3 c4@3 ~@9, ~@5 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 ~@5, ~@3 c4 c4!2 ~@2]/2", // C5
  Q: "f2@5 ~ f2@4 ~@5 g2@8 ~", R: "ab2@5 ~ ab2@7 ~@11", S: "bb2@4 ~@2 bb2@7 ~@2 c3@7 ~@2", T: "~@3 db3@9 ~@3 c3@7 ~@2",
  U: "[f2,ab2]@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~", V: "eb3@14 ~ f3@7 ~@2", W: "c3@14 ~ bb2@8 ~",
  X: "[ab2@7 ~@2 g2@8 ~@4 f2@9 eb3@7 ~@2 d3@7 ~@2]/2", Y: "eb3@14 ~ f3@8 ~", Z: "c3@14 ~ bb2@6 ~@3",
  AA: "[ab3@3 g3@3 f3@2 ~ eb3@5 ~ db3@3 c3@3 bb2@5 ~ c3@3 db3@2 ~ g3@7 ~@2 f3@4 ~@2]/2",
  AB: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6", AC: "c3@2 ~ c3@2 ~ c4@5 ~ c3 ~@2 c3@2 ~ c4@5 ~",
  AD: "c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~",
  AE: "c3@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 c3@3 c4@3 c3@2 ~ c3@2 ~", AF: "f3 ~@6 eb3", AG: "db3@4 ~@17 ab2@3", AH: "bb2 ~@7",
  AI: "~@3 c3@4 ~@2 bb2@3 ~@3 ab2@3 ~@3 g2@3", AJ: "f2@4 ~@17 eb3@3",
  AK: "[c3@3 c4@3 c3@3 ~@15 c3@3 ~@9 c4@3 c3@3 c4@3 c3@2 ~, ~@3 c4@2 c4@2 c4@3 c4@2 ~@4, ~@4 c3@2 c3@2 ~ c3@2 c3@2 ~@3]/2",
  AL: "f2 f3 f2 f3 f2 f3 f2 f3", AM: "ab2@2 ~ ab2@2 ~ ab3@3 ab2@3 ab3@3 ab2@3 ab3@2 ~ ab2@3",
  AN: "bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2 ~@2",
  AO: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~ c3@3 g2@2 ~ c3@2 ~",
  AP: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~@2 c3@3 g2@2 ~ c3@2", AQ: "~ f2@3 f3@3 f2@3 f3@3 f2@3 f3@3 f2@3 f3@2",
  AR: "~ ab2@2 ~ ab2@2 ~ ab3@3 ab2@3 ab3@3 ab2@3 ab3@2 ~ ab2@2",
  AS: "~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2 ~",
  AT: "~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~ c3@3 g2@2 ~ c3@2",
  AU: "[~ f3@6 f3@3 f3@3 ~@3 [c4,eb4]@2 ~@5 [c4,eb4]@2 ~@5 f3@2 ~@2 f3@2 ~ f3@3 ~@10 eb4@48 ~@22, ~ c4@15 ~@3 [c4,eb4]@2 [c4,eb4]@2 ~@3 [c4,eb4]@3 c4@3 [c4,eb4]@4 [c4,eb4]@4 c4@4 c4@48 ~@28, ~ eb4@12 f3@2 f3@2 ~ f3@2 f3@2 f3@2 ~ f3@2 f3@3 ~@11 f3@5 f3@48 ~@26, ~@7 eb4 ~@6 eb4@2 ~@4 eb4@5 ~@35]/5", // Cm
})).s("gm_electric_guitar_clean").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A C A@7 D A@3 E A@3 E F@4 G F@3 G A B A H A@7 D A@3 E A@3 E F@4 G F@3 G A B A H A@3 I A@2 J K A@2 ~ L M N
  M O M N M P Q ~@4 A@3 R S T@2 U T@3 V T@3 U T@3 V T@3 U T@3 V T@3 U T@3 W ~@4 X
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~@15 x ~ x!2 ~@2 x ~ x", D: "~@11 x ~@6 x ~@5", E: "~@2 x ~@3 x!2", F: "~ x",
  G: "x ~@3 x ~ x!2", H: "~@18 x ~ x!2 ~ x", I: "~ x ~@2 x ~@2 x", J: "x!2 ~ x", K: "~ x ~@2", L: "~@5 x!3", M: "x",
  N: "x ~@6 x", O: "~ x ~@3 x ~ x", P: "~@16 x ~ x ~@2 x ~@2", Q: "~@3 x ~@2 x ~",
  R: "~@3 x ~@5 x ~@5 x ~@2 x ~ x!2 ~ x", S: "~@6 x ~@12 x ~@4", T: "~@7 x ~@11 x ~@4",
  U: "~@4 x ~@2 x ~@8 x ~@2 x ~@4", V: "~@7 x ~@11 x!2 ~ x!2", W: "~ x ~@11 x ~@6 x ~ x!2", X: "~@19 x ~ x ~@2",
})).gain(0.6)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@7 A ~@7 B ~@3 C ~@3 C D ~@11 E ~@7 B ~@3 C ~@3 C D ~@11 E ~@6 F G ~@2 H I J ~@2 K J ~@2 L M ~@7 N ~@7 O ~@7 O ~@7 O
  ~@13
>`.pickRestart({
  A: "~@6 x ~ x!2 ~ x!2 ~ x ~@5 x ~@3", B: "~@6 x ~ x!2 ~@14", C: "~@3 x!3 ~@2", D: "x!4 ~@4",
  E: "~@2 x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@6", F: "~ x ~@3 x ~@2", G: "~ x ~@6", H: "x!8", I: "x!5 ~@3", J: "~@7 x",
// … 69 more lines

More by Pat Benatar