0:00/0:00
// Simply Irresistible — Robert Palmer
// 141 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "MUTED GTR" electric guitar muted (copy of ch 3 "OVERDRIVE" overdriven guitar); ch 8 "CHARANG" lead 5 charang (copy of ch 7 "DISTORTION" distortion guitar); ch 13 "SITAR" sitar (copy of ch 14 "SHANNAI" shanai, 0.104 beats late)
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(141/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 · fretless bass · "FRETLESS"
const bass = note(`<
~@6 A B C D E F G H E F G H I J K L M J N O P Q R S T ~ U V W X Y V W Z AA AB E F G H E F G H E F G H E F AC AD AE AF
AG AH T ~ U V W X Y V W X Y V W X Y V W X AI ~@7 U V W X Y V W AJ@2 AK AL AM AL AN AL AO AP AQ@2 AR AS AT AU AV AW AX
AU AV AY AX AU AV AW AX AU AV AZ AD AE AF AG AH T BA@2 V W X Y V W X Y V W X Y V W X BB BC
>`.pickRestart({
A: "~@10 e2@2 b2 ~ a2 [e2,f2,g2]", B: "[c2,d2] ~@15, a1", C: "b1@11 ~ b2@2 a2 [e2,f2,g2]",
D: "[c2,d2] e2 e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2", E: "e2 ~ e2@2 d2@2 ~@2 e2@3 ~@3 g2@2",
F: "a2 ~ a2@2 g2@2 ~@2 a2@2 a1@2 ~@2 g2@2", G: "a2 ~ a2@2 g2@2 ~@2 a2@2 ~@4 d2@2",
H: "e2 ~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2", I: "e2 ~ e2@2 d2@2 ~ e2@2 ~@4 g2@2 a2",
J: "~ a2@2 g2@2 ~@2 a2@2 a1@2 ~@2 g2@2 a2", K: "~ a2@2 g2@2 ~@2 a2@2 ~@4 d2@2 e2",
L: "~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2 e2", M: "~ e2@2 d2@2 ~@2 e2@2 ~@4 g2@2 a2",
N: "~ a2@2 g2@2 ~@2 a2@2 ~@4 a1@2 b1", O: "~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1",
P: "~ b1@3 ~ b1 ~ b1 ~ b1@2 [g1,a1] ~ g#1@2 a1", Q: "~ a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ g1",
R: "~ g1@3 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2 b1", S: "~@2 b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1@2",
T: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@3 ~", U: "~@7 d2", V: "e2 ~ e2@2 d2@2 c#2@2 b1@2 e1@2 ~@2 d2@2",
W: "e2 ~ e2 ~ d2@2 c#2@2 b1@2 e1@2 ~@2 g2@2", X: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 g2@2",
Y: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 d2@2", Z: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 a1@2",
AA: "b1@3 ~@7 e2 [f2,g2] [a2,b2] a2 g2 [d2,e2,f2]", AB: "[c2,e2] ~ e2@2 d2@2 ~@2 e2@2 e1@2 ~@2 d2@2",
AC: "a2 ~ a2@2 g2@2 ~@2 a2@2 ~@4 a1@2", AD: "b1 ~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
AE: "b1 ~ b1@3 ~ b1 ~ b1 ~ b1@2 [g1,a1] ~ g#1@2", AF: "a1 ~ a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
AG: "g1 ~ g1@3 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2", AH: "b1 ~ b1@2 ~@2 b1 ~ b1 ~ b1 ~ b1 ~ b1@2",
AI: "a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@4",
AJ: "[a2 ~ a2 ~ g2@2 f#2@2 e2@2 a1@2 ~@2 d2@5 a2 e3@3 a2 d3@3 a2 e3@3 a2]/2",
AK: "d3@2 a1@2 d2@2 a1@2 d2@3 [b1,c2] [g1,a1] ~@3", AL: "g1 ~ g1 ~ g1@3 ~ g1 ~ g1 ~ g1@2 f#1@2",
AM: "f1 ~ f1 ~ f1@3 ~ f1 ~ f1@3 ~ f1@2", AN: "f1 ~ f1 ~ f1@3 ~ f1 ~ f1 ~ f1@2 g1@2",
AO: "f1 ~ f1 ~ f1@2 ~ f1 f1@2 ~ c2!2 ~ d2@2", AP: "d#2@3 a#2 f3@3 a#2 d#3@3 a#2!2 ~ [d#2,a#2] ~",
AQ: "[c#2@3 g#2 d#3@3 g#2 c#3@3 g#2!2 ~ b1@16 ~ d#2]/2",
AR: "d#2@2 f2@2 g#2@2 f2@2 d#2@3 ~ g#2 ~ [e2,f#2] [b1,c#2,d2]", // Esus2 Bm
AS: "a1 ~@3 d2 c2 a#1 [f1,g1,g#1] [d#1,f2] ~ [c#2,d#2] [g#1,a#1,b1] f#1 ~@3", AT: "e1@3 ~@11 d2@2",
AU: "e2 e1 d2 ~ e2 ~@2 g2", AV: "a2@2 a1@3 ~@9 g2@2", AW: "a2@2 a1 ~ g2@2 ~@2 a2@2 ~@4 d2@2", AX: "e2 e1 ~@5 d2",
AY: "a2 a1 g2 ~ a2 ~@2 d2", AZ: "a2@2 a1 ~ g2@2 ~@2 a2@2 ~@4 a1@2", BA: "[f1@29 ~ d2@2]/2",
BB: "a2 ~ a2 ~ g2@2 f#2@2 d2@2 e2 ~ e2@2 d2 ~", BC: "e2@2 d2 ~ e2@2 ~@10",
})).s("gm_fretless_bass").gain(0.49)
// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
~@4 A B C D E F G H I J K L M N O P Q R S@2 T@6 U ~@2 V W X Y Z AA AB AC AD G H I J K L AE AF AG AH AI J AJ AK AL AM@2
D AN E U ~@2 V W X Y Z AA AB@2 Z AA AB@2 Z AA AB@2 ~@8 Z AA AB@2 Z AA AO@3 AP AQ AR AS ~@23 AM@2 D AN E U AT AU Z AA
AB@2 Z AA AB@2 Z AA AB@2 Z AA AB AV AW
>`.pickRestart({
A: "~@7 [d3,a3,d4]", B: "[e3,b3] e4 [e3,b3] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4]@4 [e3,b3,e4] ~ [d3,a3,d4]@2",
C: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4]@4 [e3,b3,e4] ~@3", D: "[a2,e3,a3]@15 ~", E: "[b2,f#3,b3]@7 ~",
F: "~ [e3,b3,e4] ~ [e3,b3] ~ [e3,b3] ~@2 [e3,b3,e4]@4 [e3,b3,e4] ~@3", // E5
G: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@4 ~@4", // E5
H: "[a2,e3,a3] ~ [a2,e3] ~ [e3,a3] ~@3 [a2,e3,a3]@6 ~@2, ~@4 a2@3 ~@9", // A5
I: "[a2,e3,a3] ~ [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3,a3]@6 ~@2", J: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@8",
K: "[e3,e4] ~ [e3,b3] ~ [e3,b3,e4] ~@3 [e3,b3,e4]@5 ~@3", L: "[a2,a3]@2 [a2,e3]@2 [a2,e3] ~@3 [a2,e3,a3]@8, e3 ~@15",
M: "[a2,a3]@2 [a2,e3]@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@4 e3 ~@2 e3, e3 ~@15", // A A5
N: "[b3,e4] ~ [e3,b3] e3 b3@2 ~ [e3,b3,e4]@8 [e3,b3,e4]", O: "~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@4 ~@4 [a2,e3]",
P: "~ [a2,e3] ~ a2@4 [a2,e3,a3]@8 [a2,e3,a3], ~@3 a3@2 ~@11, ~@3 e3 ~@12", // A5
Q: "~ [a2,e3,a3] ~ [a2,a3]@3 ~ [a2,e3,a3]@4 ~@4 [e3,b3], ~@3 e3 ~@12", // A5 A A5 E5
R: "~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@8 [e3,b3]", // E5
S: "[~ [e3,b3,e4] ~ [e3,b3]@2 ~@2 [e3,b3]@4 ~@4 [a2,e3]@2 [a2,e3,a3] ~ [a2,e3,a3]@2 ~@2 [a2,a3]@7 ~ [a2,e3], ~@23 e3@5 ~@4]/2", // E5 A5 A A5
T: "[~ [a2,e3,a3] ~ [a2,e3]@2 ~@2 [a2,e3,a3]@5 ~@3 [b2,f#3,b3]@30 ~@2 [a2,e3,a3]@15 ~ [g2,d3,g3]@14 ~@2 [b2,f#3,b3]@14 ~@3]/6", // A5 B5 A5 G5 B5
U: "[g2,d3,g3]@7 ~", V: "[e3,b3,e4] ~ [e3,b3]@2 [e3,b3] ~@3 [e3,b3,e4]@8",
W: "[e3,b3,e4] ~ [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3]@6 ~@2", // E5
X: "[a2,e3,a3] ~ [a2,e3] ~ [a2,e3,a3] ~@3 [e3,a3]@6 ~@2, ~ a2", // A5
Y: "[a2,e3,a3] ~ [a2,e3]@2 a2@3 ~ [a2,e3,a3]@6 ~@2, ~@4 e3 ~@11", // A5
Z: "[e3,b3] ~ [e3,b3] ~ [e3,b3,e4] ~@3 [e3,b3,e4]@8", AA: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@6 ~@2",
AB: "[a2,e3]@2 [a2,e3] ~ [a2,a3]@3 ~ [a2,e3,a3]@7 ~, ~@4 e3 ~@11", AC: "[b2,f#3,b3] ~@3",
AD: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3] ~@3 [e3,b3,e4]@4 [e3,b3,e4] ~@3", // E5
AE: "[a2,a3]@2 [a2,e3]@2 [a2,e3,a3]@2 ~@2 [a2,e3,a3]@4 e3 ~@3, e3 ~@15", // A A5
AF: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@8", AG: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3]@2 ~@2 [e3,b3,e4]@4 ~@4",
AH: "[a2,e3] ~ [a2,e3] ~ a2@4 [a2,e3,a3]@8, ~@2 a3 ~@5, ~@4 e3 ~@11", // A5
AI: "[a2,e3,a3] ~ [a2,e3,a3] ~ [a2,a3]@3 ~ [a2,e3,a3]@4 ~@4, ~@4 e3 ~@11", // A5 A A5
AJ: "[e3,b3] ~ [e3,b3,e4] ~ [e3,b3]@2 ~@2 [e3,b3]@4 ~@4", // E5
AK: "[a2,e3]@2 [a2,e3,a3] ~ [a2,e3,a3]@2 ~@2 [a2,a3]@7 ~, ~@8 e3@5 ~@3", // A5 A
AL: "[a2,e3] ~ [a2,e3,a3] ~ [a2,e3]@2 ~@2 [a2,e3,a3]@5 ~@3", AM: "[[b2,f#3,b3]@15 ~]/2", AN: "[g2,g3]@7 ~, d3@3 ~",
AO: "[[a2,e3]@2 [a2,e3] ~ [a2,a3]@3 ~ [a2,e3,a3]@5 ~ d3@30 ~@4, ~@4 e3 ~@9 a3@28 ~@6]/3", // A5 A A5
AP: "g3@3 b3@2 ~ c4 ~ b3@7 ~", AQ: "a3 ~ a#3 ~ a3@11 ~", AR: "g3 ~ g#3@2 g3@11 ~", AS: "f3 g3 f3 d3 f3@4",
AT: "f3@15 ~", AU: "d3 f3 f#3 g#3 g3@2 a3 ~ g3@7 ~", AV: "[a2,e3]@2 [a2,e3] ~ [a2,e3,a3]@2 ~@2 d3@2 e3@2 e3@2 d3@2",
AW: "e3 d3 e3 ~@5",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.7)
// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
~@5 A@2 B C D E F@2 G H I J K L@2 M@2 N@2 O ~@8 P Q R S T Q R U V E F@2 G H I J W E X@2 Y E Z J ~@8 P Q R S T Q R S AA
AB R S AC Q R S ~@8 AD Q R S AE AF@4 AG@2 AH@2 AI@2 AJ@3 AK AL AM AN AO AP AQ AR AO AS AT AR AO AS AT AR AO AS ~@6
AU@2 AD Q R S AD Q R S AD Q R S AD Q R AV AW
>`.pickRestart({
A: "[~@4 b2@3 ~@2 e3@2 ~@2 [b2,e3]@5 ~@3 [b2,e3]@2 ~@2 e3@2 ~ [b2,e3]@2 ~@2, ~@4 b2 ~@7 b2 ~@3]/2", // E5
B: "~ e3@14 ~, a2@15 ~", C: "~ [b2,f#3]@14 ~", D: "e3@2 ~ [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3]@2 ~ [e3,b3]@4",
E: "~@4 [e3,b3] ~@3 [e3,b3]@5 ~@3", // E5
F: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@6 ~@2 [a2,e3] ~@3 [a2,e3,a3]@5 ~@3]/2", // A5
G: "[e3,b3]@2 [e3,b3]@2 [e3,b3] ~@3 [e3,b3] ~@3 [e3,b3,e4]@4", H: "~@4 [e3,b3] ~@3 [e3,b3,e4]@5 ~@3",
I: "[a2,e3,a3]@2 [a2,e3]@2 [a2,e3] ~@3 [a2,e3] ~@3 [a2,e3]@4", J: "~@4 [a2,e3] ~@3 [a2,e3,a3]@5 ~@3",
K: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~ e3 b3 ~@3 e4@4, ~@11 [e3,b3]@5", // E5
L: "[~@3 [e3,b3] ~@3 [e3,b3]@6 ~@2 [a2,e3]@2 [a2,e3] ~ [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@5]/2", // E5 A5
M: "[~@3 [a2,e3] ~@3 [a2,e3]@5 ~@3 [e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@5]/2", // A5 E5 E
N: "[~@3 [e3,b3] ~@3 [e3,b3]@6 ~@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3,a3]@5]/2", // E5 A5
O: "~@3 [a2,e3] ~@3 [a2,e3,a3]@4 ~@5", P: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@3 ~", Q: "d3 b2 d3 e3@3 ~ a2",
R: "[a2,e3,a3]@6 ~ a2", S: "[a2,e3,a3]@7 ~", T: "[e3,b3] ~@3 [e3,b3]@2 ~@2 b3@7 ~", U: "[f#3,b3] ~@7",
V: "e3 [e3,b3]!2 ~ [e3,b3] ~ [e3,b3]@2", W: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,b3,e4]@4",
X: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@6 ~@2 [a2,e3] ~@3 [a2,e3]@5 ~@3]/2", // A5
Y: "[e3,b3]@2 [e3,b3]@2 [e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@4", // E5 E
Z: "[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 ~@2 [a2,e3] ~@3 [a2,e3,a3]@4", // A5
AA: "[e3,b3,e4] ~@3 [e3,b3]@2 ~@2 [e3,b3]@8, ~@4 e4@3 ~", AB: "d3 a#2 d3 e3@3 ~ a2",
AC: "[e3,b3] ~ [e3,b3,e4] ~ e3@4, ~@4 b3@3 ~", AD: "[e3,b3]@2 ~@2 [e3,b3] ~@3 [e3,e4]@7 ~",
AE: "[e3,b3,e4]@2 ~@2 [e3,b3]@2 ~@2 [e3,b3]@7 ~", AF: "[d3 b2 d3 e3@3 ~ [a2,e3,a3]@7 ~ [d3,a3,d4]@15 ~@2]/4",
AG: "[g2@3 d3@2 g4 e5@2 g3 f4@2 c5 f5@14 d5@5 g5]/2",
AH: "[f5 e5 d5 c#5 c5 a#4 g4 c5 c5@2 c#5 c5 d5!2 f5 g5@14 ~ f5@2]/2", AI: "[g5 f5 g5@2 [b3,d#4]@16 f4@12]/2",
AJ: "[~@2 g5@10 g#5 ~ e5@6 g5 ~ d#5@5 ~ f5 ~ c#5@5 b4@3 ~ a4@4 g4@2 ~ [g4,a4] f4]/3", // Gsus2
AK: "e4@3 ~ d#4@2 c#4@2 ~ b3 c#4 d#4 f4 d#4 c#4 b3", AL: "a3 ~@3", AM: "~@4 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4] ~@5",
AN: "[b2,e3,b3,e4] ~@5 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4]@2 ~@2", AO: "~@2 [e3,a3,e4,a4] ~@2 [e3,a3,e4,a4] ~@2",
AP: "[e3,a3,e4,a4] ~@5 [e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4]@2 ~@2", AQ: "~@2 [b2,e3,b3,e4] ~@2 [b2,e3,b3,e4] ~@2",
AR: "[b2,e3,b3,e4] ~@5 [b2,e3,b3,e4]@2 ~@4 [b2,e3,b3,e4] ~@3", // E5
AS: "[e3,a3,e4,a4] ~@5 [e3,a3,e4,a4]@2 ~@4 [e3,a3,e4,a4] ~@3", AT: "~@4 [b2,e3,b3,e4] ~@5 [b2,e3,b3,e4] ~@5",
AU: "[a4@6 b4@5 ~ d5@6 e5@5 ~ g5@8]/2", AV: "[a2,e3,a3]@7 ~ d3@2 e3@2 e3@2 d3@2", AW: "e3 d3 e3 ~@5",
})).s("gm_distortion_guitar").gain(0.38).pan(0.3)
// chords · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note(`<
~@5 A ~@3 B C D@2 E F G H I J K L M J N ~@9 C ~@3 O ~ P ~ Q C D@2 E F G H I R S T U R V ~@9 C ~@3 O ~ P ~ F P ~@2 W P
~@10 X ~@3 R ~@39 X ~@3 X ~@3 X ~@3 X ~@4
>`.pickRestart({
A: "~@5 e3@2 ~@9", B: "b3@2 ~@7 e4@2 ~ e4@4", C: "~@8 e4@5 ~@3", D: "[a3@4 ~@8 a3@6 ~@2 a3 ~@11]/2",
E: "e4@2 ~@2 e4 ~@3 e4 ~@7", F: "~@4 e4 ~@11", G: "~@8 a3 ~@3 a3@4", H: "~@4 a3 ~@11", I: "~@8 e4 ~@7",
J: "~@3 e4 ~@3 e4@6 ~@3", K: "~@3 a3@2 ~@2 a3 ~@3 a3@5", L: "~@3 a3 ~@3 a3@5 ~@4", M: "~@7 e4 ~@3 b3@5",
N: "~@7 a3 ~@8", O: "e4 ~@3 e4@2 ~@2 e3@8, ~@4 e4@3 ~", P: "~@7 e3", Q: "b3 ~@3 e4 ~ e4@2", R: "~@4 e4 ~@3 e4@6 ~@2",
S: "~@4 a3@2 ~@2 a3 ~@3 a3@4", T: "~@4 a3 ~@3 a3@5 ~@3", U: "~@8 e4 ~@3 b3@4", V: "~@8 a3 ~@7", W: "e4 ~@3 e4@3 ~",
X: "~@8 b3@7 ~",
})).s("gm_distortion_guitar").gain(0.16).pan(0.3)
// chords · pad poly · "POLYSYNTH"
const pad_poly = note(`<
~@10 A ~@3 A ~@2 B@2 ~@2 C@2 ~ D@6 E ~@4 F G ~@5 A ~@3 A ~@3 A ~@3 A ~@2 H@2 I J K E ~@55 A ~@3 A ~@2 H@2 I J K E ~@4
F G ~@2 F G ~ L M ~@2 N M ~@2
>`.pickRestart({
A: "[b4,e5,a5]@2 ~@2 [b4,e5,a5]@3 ~@9", B: "[~@16 e5@2 ~ [b4,e5,a5]@3 ~@10, ~@15 [b4,a5]@2 ~@15]/2",
C: "[~@15 [b4,e5,a5]@2 ~@2 [b4,e5,a5]@3 ~@10]/2", // Esus4
D: "[~@15 [b3,d#4,f#4]@32 [a3,c#4,e4]@15 ~ [d3,g3,b3]@15 ~ [d#4,f#4,b4]@15 ~@2]/6", E: "[d4,g4,b4]@13 ~@3",
F: "~@6 [e4,b4,e5] [f#4,d5,f#5]", G: "[g4,e5,g5]@2 ~@2 [g4,e5,g5]@3 ~@9", H: "[[b3,d#4,f#4]@31 ~]/2",
I: "[a3,c#4,e4]@15 ~", J: "[d3,g3,b3]@15 ~", K: "[d#4,f#4,b4]@15 ~", L: "~@2 [e3,e4,e5]@2 ~@2 [b2,b3,b4]@3 ~@7",
M: "~@4 [e4,e5]@2 [f#4,d5,f#5]@2 [g4,e5,g5]@2 ~@2 [g4,e5,g5]@3 ~", N: "~ [b2,b3,b4] ~ [e3,e4,e5] ~@4, ~@2 a3 ~@13",
})).s("gm_pad_poly").gain(0.49).pan(0.2)
// other · distortion guitar · "DISTORTION"
const distortion_guitar_2 = note("<~@98 A@3 B C@3 D E F G ~@22 H@3 ~@16>".pickRestart({
A: "[~@3 g2@3 d3@2 ~ e5@2 g3 f4@2 c5 f5@14 d5@5 g5 f5 e5 d5 c#5 c5 a#4 g4 c5 c5@2 c#5 c5 d5, ~@4 g4 ~@19]/3",
B: "d5 f5 g5@14", C: "[~ f5@2 g5 f5 g5@2 [b3,d#4]@16 f4@13 ~ g5@10 g#5]/3", D: "~ e5@6 g5 ~ d#5@5 ~ f5",
E: "~ c#5@5 b4@3 ~ a4@4 g4@2", F: "~ [g4,a4] f4 e4@3 ~ d#4@2 c#4@2 ~ b3 c#4 d#4 f4", G: "d#4 c#4 b3 a3@4 ~@9",
H: "[~@3 a4@6 b4@5 ~ d5@6 e5@5 ~ g5@8 ~@13]/3",
})).s("gm_distortion_guitar").gain(0.27).pan(0.9)
// other · distortion guitar · "DISTORTION"
const distortion_guitar_3 = note("<~@98 A@2 B C@5 D E F ~@22 G H@2 ~@16>".pickRestart({
A: "[~@6 g2@3 d3@2 ~ e5@2 g3 f4@2 c5 f5@14, ~@11 g4@2 ~@19]/2", B: "d5@5 g5 f5 e5 d5 c#5 c5 ~@2 c5 c5@2",
C: "[c#5 c5 ~ d5 f5 g5@14 ~ f5@2 g5 f5 g5@2 [b3,d#4]@16 f4@13 ~ g5@10 g#5 ~ e5@6 g5 ~ d#5@4]/5", // B
D: "~@2 f5 ~ c#5@5 b4@3 ~ a4@3", E: "~ g4@2 ~ g4 f4 e4@3 ~ d#4@2 c#4@2 ~ b3", F: "c#4 d#4 f4 d#4 c#4 b3 a3@4 ~@6",
G: "~@3 a4@3 b4@2", H: "[~@2 d5@6 e5@5 ~ g5@8 ~@10]/2",
})).s("gm_distortion_guitar").gain(0.22).pan(0.1)
// other · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft_2 = note("<~@100 [~@11 a#4 g4 ~@3] [~@2 d5 ~@13] ~@5 [~@4 a4 ~@11] ~@42>")
.s("gm_distortion_guitar").gain(0.11).pan(0.1)
// other · shanai · "SHANNAI"
const shanai = note("<~ [~@12 e4!2 ~ e4] [e4!16]!2 [e4!13 ~@3] ~@145>").s("gm_shanai").gain(0.11)
// other · shanai · "SHANNAI" · soft notes
const shanai_soft = note("<[~ e4!15] [e4!12 ~@2 e4 ~] ~@148>").s("gm_shanai").gain(0.05)
// drums · kick
const kick = s("bd").struct(`<
~@5 A ~ B C D E D E D E D E F G H G H G H G I@4 J K L A D E D M D E D C D E D E D E D E D E D E D E D E N@5 K L A D E
D M D E D O D E D E D E D P D E D E Q E R S D E D E D E@2 T U E@8 T U C D E D E D E D E D E D E D E D E N@5 K L A D E
D E D E D E D E D E D E D@2 V
>`.pickRestart({
A: "~ x ~@2", B: "x", C: "x ~@9 x!2 ~@4", D: "x!2", E: "x ~@3 x ~@2 x", F: "x ~@6 x ~@7 x", G: "~@7 x ~@5 x ~ x",
H: "~@7 x ~@7 x", I: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", J: "~ x ~@3 x ~ x ~@2 x ~ x ~ x ~", K: "x!2 ~ x!4 ~",
L: "~ x ~@2 x ~@2 x", M: "x ~@3 x ~ x!2", N: "x!2 ~ x!5", O: "x ~@2 x ~ x ~ x", P: "x ~@3 x!2 ~ x", Q: "x!5 ~@3",
R: "x!8", S: "x!5 ~ x ~", T: "~@5 x ~@2", U: "~ x ~ x ~@4", V: "x!3 ~@5",
})).gain(0.44)
// drums · snare
const snare = s("sd").struct(`<
~@4 A ~@3 A B@9 C@10 D E F G H B@6 I J B@20 K F G H B@7 L B@15 M B@7 N O B@8 N O J B@20 K F G H B@15 M P
>`.pickRestart({
A: "~@3 x", B: "~ x ~ x", C: "~@3 x ~@7 x ~@4", D: "~@3 x ~@7 x ~@3 x", E: "x ~@2 x ~@3 x ~@4 x ~@3", F: "x!3 ~",
G: "x ~@2 x ~@2 x ~", H: "~ x ~@6", I: "~@4 x ~@7 x ~@2 x", J: "x ~@2 x", K: "x!2 ~@2 x ~@3 x ~@3 x ~@3", L: "~ x!3",
M: "~@2 x ~ x!4", N: "~@2 x ~ x ~@2 x", O: "x ~ x ~ x!4", P: "x!3 ~@5",
})).gain(0.44)
// drums · hihat
const hihat = s("hh").struct(`<
~@9 A@9 B C@10 D E ~@2 D A@5 E ~ D A@20 E ~@2 D A@6 F A@15 G D A@5 E ~@2 D A@6 E ~@3 A@21 E ~@2 D A@14 H ~
>`.pickRestart({
A: "x!8", B: "x ~ x!2 ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", D: "~ x!7", E: "x!7 ~",
// … 15 more lines
More by Robert Palmer
Addicted To Love1986 · A major · 110 bpmBad Case Of Lovin' You ( Doctor, Doctor)E major · 153 bpmI'll Be Your Baby TonightE♭ major · 96 bpmEarly in the MorningE minor · 120 bpmEvery Kind of PeopleG major · 161 bpmKnow By NowE major · 118 bpmMercy Mercy Me I Want YouG♯ minor · 100 bpmSome Guys Have All the LuckA major · 92 bpm
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.