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, A@4 for four bars: edit a riff to change every repeat.
// bass · electric bass finger
const bass = note(`<
~ A B C D E D F D G H I D G H I J H K L J H K L M N O P Q N O P Q R E D F D G H I D G H I J H K L J H K L M N O P Q N
O P Q R E R E S T U@2 S V W@2 X@2 L Y Z AA AB AC AD AA AB AE@2 ~@4 N O P Q AF AG AH AI AF AG AH AI AF AG AH AI AF AG
AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AJ@2 AK@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@2 ~ f1 ~@2 f1 ~@2 f1@2 ~",
E: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@3 ab1@7 ~@2", F: "f1@2 ~ f2@3 eb2@3 d2@3 eb2@3 d2@2 ~ c2@3 bb1@2 ~",
G: "eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~",
H: "db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ db2 ~@2 db2@2 ~",
I: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ c2@6 eb2@4 ~@2", J: "f1@3 f2@3 f1@3 f2@2 ~ eb1@3 eb2@3 eb1@3 eb2 ~@2",
K: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~",
L: "c2@2 ~ c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2@2 ~", M: "c2@2 ~ c2 ~@2 c2 ~@2 c2 ~@2 c2@2 ~@10",
N: "f1@5 ~ f1@4 ~@5 g1@8 ~", O: "ab1@5 ~ ab1@7 ~@11", P: "bb1@4 ~@2 bb1@7 ~@2 c2@7 ~@2", Q: "~@3 db2@9 ~@3 c2@7 ~@2",
R: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~, ab1 ~@23", S: "eb2@14 ~ f2@7 ~@2", T: "c2@14 ~ bb1@8 ~",
U: "[ab1@7 ~@2 g1@8 ~@4 f1@9 eb2@7 ~@2 d2@7 ~@2]/2", V: "c2@14 ~ bb1@6 ~@3",
W: "[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",
X: "c2@2 ~ c2@3 c3@6 c2@2 ~ c2@2 ~ c3@6", Y: "c2@2 ~ c2 ~@2 c2@2 ~ c2 ~@2 c2@3 c3@3 c2@2 ~ c2@2 ~", Z: "f2 ~@6 eb2",
AA: "db2@4 ~@17 ab1@3", AB: "bb1 ~@7", AC: "~@3 c2@4 ~@2 bb1@3 ~@3 ab1@3 ~@3 g1@3", AD: "f1@4 ~@17 eb2@3",
AE: "[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",
AF: "~ f1@3 f2@3 f1@3 f2@3 f1@3 f2@3 f1@3 f2@2", AG: "~ ab1@2 ~ ab1@2 ~ ab2@3 ab1@3 ab2@3 ab1@3 ab2@2 ~ ab1@2",
AH: "~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1 ~",
AI: "~ db2@2 ~ db2@2 ~ db2@2 ~ db2@2 ~ c2@2 ~ c2@3 g1@2 ~ c2@2",
AJ: "[~@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",
AK: "[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 S V W@2 X@2 Y Z AA AB AC AD AE AB AC AF@2 ~@4 O P Q R AG AH AI AJ AG AH AI AJ AK AL@2 AM AN AO
AP AQ AR AS AT AU AV@2 AW AX AY@2 AZ BA BB@2 BC BD BE@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: "c3@14 ~ bb2@6 ~@3",
W: "[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",
X: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6",
Y: "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
Z: "[c3,c4]@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 [c3,c4]@3 [g3,c4]@3 [c3,c4]@3 [c3,g3]@2 ~", AA: "f3 ~@6 eb3",
AB: "db3@4 ~@17 ab2@3", AC: "bb2 ~@7", AD: "~@3 c3@4 ~@2 bb2@3 ~@3 ab2@3 ~@3 g2@3", AE: "f2@4 ~@17 eb3@3",
AF: "[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",
AG: "f2 f3 f2 f3 f2 f3 f2 f3", AH: "ab2@2 ~ ab2@2 ~ ab3@3 ab2@3 ab3@3 ab2@3 ab3@2 ~ ab2@3",
AI: "bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2 ~@2",
AJ: "db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~ c3@3 g2@2 ~ c3@2 ~", AK: "~ eb4@6 eb4@6 eb4@6 eb4@5",
AL: "[~ eb4@18 eb4@2 c4@2 eb4@13 ~ eb4@9 eb4@2]/2", AM: "~ f4@2 eb4@6 eb4@3 ~ g4@3 eb4@6 eb4@2",
AN: "~ ab4@11 ab4@3 ab4 ~@2 ab4 ~@3 ab4 ~", AO: "~@7 f4@4 ~@2 f4@11, ~ ab4@8 ~@15",
AP: "f4@3 eb4@3 ~@3 eb4@8 ~ c4@4 ~@2, ~ f4@2 ~", AQ: "c4@4 bb3@2 c4@3 bb3@6 ab3@3 g3@3 f3@2 ~",
AR: "~@3 c3@2 ~ ab2@4 ~ g2@2 f2@2 g2@3 ~ ab2@2 bb2@3, ~ f3@2 ~@21, ~@2 eb3@2 ~ bb2@2 ~@17",
AS: "c3@3 db3@3 eb3@4 f3@5 ~ eb3@3 f3@3 gb3@2", AT: "~ gb3@6 gb3@5 ~ gb3@6 gb3@4 ~",
AU: "~ gb3@6 f3@4 ~@5 eb3@3 f3@5, ~@13 f3@5 ~@6",
AV: "[~@3 c4@5 ~ c4@2 ~@2 c4@13 ~@5 eb4@2 c4@2 ~@2 eb4@2 ~ eb4@8, ~@9 c4@2 ~@5]/2",
AW: "~ eb4@5 db4@3 c4@3 db4@3 c4@3 bb3 ~@2 ab3@3", AX: "g3@3 ab3@2 ~ g3@3 f3@3 eb3@6 ~ db3@2 ~@3",
AY: "[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",
AZ: "ab4@6 ~ g4@3 ab4@6 f4 ~@2 f4@5", BA: "~@3 db5@4 ~@2 c5@2 ~ eb5@4 ~ eb5@3 ~ f5@2 ~",
BB: "[~ ab5@11 ~@3 ab5@6 f5@6 ~@7 c5@3 eb5@3 c5@2 ~@3 c5@3, ~@7 d5]/2",
BC: "~ [c5,f5]@5 ~ [c5,f5]@6 [c5,f5]@5 [c5,f5]@6, ~@7 eb5@17", // F5
BD: "~ [c5,f5]@5 ~ [c5,f5]@5 ~ c5@5 [c5,f5]@3 ~@3, ~@12 f5@5 ~@7", // F5
BE: "[~ 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 H K L ~@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: "~ c5@3 ~@4",
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: "~@6 c5@5 ~ bb4@3 ab4 ~@3 ab5 ~@2 g5@2", L: "~@3 ab5@19 ~@2",
})).s("gm_alto_sax").gain(0.45)
// other · lead 5 charang
const lead_5_charang = note(`<
~ A B C D E F G D H I J D H I J ~@9 K L M N K L M N O E F G D H I J D H I J ~@9 K L M N K L M N O E O E P Q R@2 P S
T@2 U@2 V W X Y Z ~ AA Y Z AB AC ~@4 K L M N AD AE AF AG AD AE AF AG AD AE AF AG AD AE AF AG AD AE AF AG AD AE AF AG
AD AE AF AG AD AE AF AG AH@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@2 ~ f2 ~@2 f2 ~@2 f2@2 ~",
E: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@7 ~@2",
F: "[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
G: "[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
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: "c3@14 ~ bb2@6 ~@3",
T: "[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",
U: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6", V: "c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~",
W: "c3@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 c3@3 c4@3 c3@2 ~ c3@2 ~", X: "f3 ~@7", Y: "[db3,f3,ab3,db4,f4] ~@7",
Z: "[bb2,bb3] ~@11", AA: "[f3,f4] ~@7",
AB: "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
AC: "[c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4]@3 [c3,g3,c4] ~@11", AD: "~ [f2,f3,ab3,c4]@17 ~@6",
AE: "~ [ab2,eb3,ab3,c4]@18 ~@5", AF: "~ [bb2,bb3]@18 ~@5", AG: "~ [db3,f3,ab3,db4]@10 ~@2 [c3,c4]@8 ~@3",
AH: "[~ 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 D E F@2 D G H I D G H I J K L M J K N O@2 P Q R S P Q R S T E F@2 D G H I D G H I J K L M J K N O@2 P Q R S P
Q R S T E T E U V W@2 U X Y@2 Z@2 AA AB AC AD AE AF AG AD AE AH@2 ~@4 P Q R S AI AJ AK AL AI AJ AK AL AI AJ AK AL AI
AJ AK AL AI AJ AK AL AI AJ AK AL AI AJ AK AL AI AJ AK AL AM@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@2 ~ f2 ~@2 f2 ~@2 f2@2 ~",
E: "f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@3 ab2@7 ~@2",
F: "[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
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 ~", N: "[bb2,bb3]@11 ~",
O: "[[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
P: "f2@5 ~ f2@4 ~@5 g2@8 ~", Q: "ab2@5 ~ ab2@7 ~@11", R: "bb2@4 ~@2 bb2@7 ~@2 c3@7 ~@2", S: "~@3 db3@9 ~@3 c3@7 ~@2",
T: "[f2,ab2]@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~ f2@2 ~", U: "eb3@14 ~ f3@7 ~@2", V: "c3@14 ~ bb2@8 ~",
W: "[ab2@7 ~@2 g2@8 ~@4 f2@9 eb3@7 ~@2 d3@7 ~@2]/2", X: "c3@14 ~ bb2@6 ~@3",
Y: "[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",
Z: "c3@2 ~ c3@3 c4@6 c3@2 ~ c3@2 ~ c4@6", AA: "c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~ c3@2 ~",
AB: "c3@2 ~ c3 ~@2 c3@2 ~ c3 ~@2 c3@3 c4@3 c3@2 ~ c3@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@3 f3@3 f2@3 f3@3 f2@3 f3@3 f2@3 f3@2", AJ: "~ ab2@2 ~ ab2@2 ~ ab3@3 ab2@3 ab3@3 ab2@3 ab3@2 ~ ab2@2",
AK: "~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2@2 ~ bb2 ~",
AL: "~ db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~ c3@2 ~ c3@3 g2@2 ~ c3@2",
AM: "[~ 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 I R I R U@7 V U@7 V U@7 V U@7 W X ~@3 Y
>`.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 ~@8 x ~@2 x ~@2 x ~@5 x ~", V: "~ x ~@8 x ~@2 x ~@2 x ~@5 x!2",
W: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x!2", X: "~ x ~@22", Y: "~@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 L P ~@4 A@3 Q A@3 R A@3 S A@3 R A@3 S A@3 R A@3 S A@3 R A@3 T ~@4 U
>`.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: "~@3 x ~@2 x ~", Q: "~@3 x ~@5 x ~@5 x ~@2 x ~ x!2 ~ x",
R: "~@4 x ~@2 x ~@8 x ~@2 x ~@4", S: "~@7 x ~@11 x!2 ~ x!2", T: "~ x ~@11 x ~@6 x ~ x!2", U: "~@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 I L ~@7 M ~@7 N ~@7 N ~@7 N
~@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",
K: "~@3 x ~@4", L: "~ x ~ x ~@2 x ~@5 x ~@2 x ~@8", M: "~ x!2 ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x ~@6",
N: "~@4 x!2 ~@4 x!2 ~ x ~@2 x ~@7",
})).gain(0.18)
// drums · low tom
const low_tom = s("lt").struct(`<
A B A B A B A B ~@11 C ~@3 C D ~@8 A B A ~@12 C ~@3 C D ~@8 A B A ~@7 E ~@4 F G@3 ~ G@3 H D ~@7 E ~@37
>`.pickRestart({
A: "~ x ~@3 x ~@2", B: "~ x ~@6", C: "~@18 x ~@2 x ~ x", D: "~ x", E: "~ x ~@2", F: "~@7 x", G: "x",
H: "~@19 x ~ x ~@2",
})).gain(0.6)
// drums · hihat
const hihat = s("hh").struct(`<
A B A B A B A@5 C A@3 C D A@3 D A@3 D E C B F E C B F A B A B A@3 C A@3 C D A@3 D A@3 D E C B F E C B F A B A B A@2 B
~ A@2 G ~ A@2 H ~@14 A@28 I@8 ~@5
>`.pickRestart({
A: "x!4", B: "x!3 ~", C: "x!2 ~@2", D: "~ x ~ x", E: "x ~ x ~ x ~@2 x", F: "x!2", G: "~ x ~@6", H: "~ x ~@5 x",
I: "~ x ~@5 x ~@5 x ~@5 x ~@4",
})).gain(0.6)
// … 45 more lines
More by Pat Benatar
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.