0:00/0:00
// Hole In Your Soul — ABBA
// 152.5 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1, 2/4 at bar 2, 4/4 at bar 3) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 piano (copy of ch 4 "Electic Piano" epiano1)
// note: Full arrangement: all 141 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152.5/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.
// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
A@3 ~@2 B C ~@2 D@4 E@5 F@2 G H F@2 G I J@4 F@2 G K ~@7 L@4 M@2 N@2 O@2 P@2 Q@4 ~@17 R S@2 ~@7 T U V W V W X Y@3 ~@7
Z@3 AA AB AC AD AE AF AG AH AI AJ AK@3 AL@7 AM AN@8 AO@2 AP@4 AQ AR
>`.pickRestart({
A: "[~@20 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 [b3,d#4,f#4]@17 ~@16]/3", // E B
B: "~@5 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 ~", // E
C: "[c#4,e4,g#4]@17 ~@7", // C#m
D: "[~ [c#5,e5]@3 [c#5,e5]@3 [c#5,e5]@3 [c#5,e5]@3 [c#5,e5]@3 ~ [c#5,e5]@3 c#5@3 c#5@3 [b4,d#5]@3 [b4,d#5]@6 ~ [b4,d#5]@3 [a4,c#5]@3 [a4,c#5]@3 [a4,c#5]@6 ~ [g#4,b4]@3 [g#4,b4]@9 [e4,g#4]@3 [f#4,b4]@3 ~ [e4,g#4]@6 [b3,f#4]@3 [b3,f#4]@16, ~@10 e5@3 ~@35]/4", // C#m B A G#m E B5 E B5
E: "[~ [e4,g#4,b4]!6 [d#4,f#4,b4]@7 [d#4,f#4,b4] [c#4,e4,b4]@7 [c#4,e4,b4] [d#4,f#4,b4]@7 [c#4,d#4,f#4,b4] [c#4,e4,b4]@9]/5", // E B C#m7 B C#m7
F: "[[d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4 [e4,g#4] [d#4,f#4]!3 ~@2]/2", G: "[d#4,b4]@3 [f#4,a#4]@2 [e4,g#4]@2 [d#4,f#4]",
H: "[d#4,f#4]@2 [d#4,f#4]@2 [c#4,e4] [b3,d#4] [b3,d#4]@2", I: "[d#4,f#4]@2 ~@3 [b3,d#4] [a#3,f#4]@2",
J: "[[d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4 ~@3 [b3,d#4] [a#3,f#4]@2]/2", K: "[d#4,f#4] ~@7",
L: "[~@20 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 [e4,g#4]@3 [d#4,f#4]@2 [d#4,f#4]@3 [d#4,f#4]@3 ~@6 [d#4,b4]@9 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@5]/4", // G#m F# E D#m G#m F# E D#m
M: "[~ [d#4,f#4]@6 [c#4,e4]@3 [b3,d#4]@3 [b3,d#4]@6 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@11]/2", // D#m C#m B G#m F# E
N: "[~ [e4,g#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 ~@5 [d#4,b4]@9 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@6]/2", // E D#m G#m F# E D#m
O: "[~@3 [b3,d#4] [a#3,f#4]@2 [d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4]/2", // B D#m G#m F# E
P: "[~@9 [b3,d#4]@3 [a#3,f#4]@5 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 ~]/2", // B D#m G#m F# E
Q: "[~@8 [b3,d#4]@3 [a#3,f#4]@6 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 [e4,g#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 ~@6 [d#4,b4]@8 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@3 ~@5]/4", // B D#m G#m F# E D#m G#m F# …
R: "~@5 [e4,b4]!3", S: "[[e4,b4]!3 d#4@7 ~@6, ~@3 b4@5 ~@8]/2", T: "~@16 [e4,b4]@3 [e4,b4]@3 [e4,b4]@2",
U: "~ [e4,b4]@3 [e4,b4]@3 [e4,b4]@3 [d#4,b4]@9 ~@5", V: "~@7 [d#4,b4]@3 c#5@6 c#5@3 c#5@3 c#5@2, ~@5 e4@7",
W: "~ c#5@3 c#5@3 c#5@3 [e4,c#5]@6 [d#4,b4]@8, ~ e4@9 ~@14", X: "~@16 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2",
Y: "[~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 [e4,g#4,b4]@3 [d#4,f#4,b4]@27 [b4,e5,g#5,b5]@24 ~@10]/3", // E B E
Z: "[~@14 [d#4,b4]@9 [f#4,a#4]@9 ~@6 [d#4,f#4]@6 [d#4,f#4]@6 [c#4,e4]@3 [b3,d#4]@3 [a#3,b3,d#4,f#4]@6 [d#4,b4]@9 ~, ~@8 [e4,g#4]@3 ~@7]/3", // G#m F# D#m C#m B Bmaj7 G#m E
AA: "[f#4,a#4]@3 [e4,g#4]@4 ~", AB: "~@2 [b3,d#4] [a#3,f#4]@2 [d#4,b4]@3", AC: "[f#4,a#4]@3 [e4,g#4]@4 [e4,g#4]",
AD: "[d#4,f#4]!3 ~@2 [d#4,b4]@3", AE: "[f#4,a#4]@2 [e4,g#4]@2 [d#4,f#4] ~@3", AF: "~@20 d#4@3 ~",
AG: "~@2 f#4@4 ~@14 d#4@3 ~", AH: "~@2 f#4@4 ~@13 d#4@3 ~@2", AI: "~ f#4@4 ~@14 d#4@3 ~@2",
AJ: "f#4@4 ~@14 d#4@3 ~@3", AK: "[f#4@4 ~@14 d#4@3 ~@2 f#4@4 ~@14 d#4@3 ~@3 f#4@4 ~@13 d#4@3 ~@3 f#4@2]/3",
AL: "[~@10 d#4@6 ~@17 b3@3 ~@3 c#4@3 d4@3 c#4@3 b3@3 b3@6 ~@6 d#4@3 ~@3 f#4@4 ~@13 d#4@3 ~@3 f#4@4 ~@14 d#4@3 ~@3 f#4@4 ~@13 d#4@3 ~@3 f#4@4 ~@2 f#4@6 [d4,e4]@3 [b3,d4]@3 [b3,d4]@6 [f#4,a4]@2 [f#4,a4]@3, ~@10 b3@23 ~@3 b3@12 ~@9 [b3,d4,f4]@47 [b3,c#4,e4]@47 ~@17, ~@10 f#4@12 f#4@23 f#4@12 ~@88 b4@3 ~@20, ~@16 d#4@23 d#4@18 ~@111]/7", // Dsus2 Bm F#m Bdim C#m7
AM: "[f#4,a4]@3 [f#4,a4]@3 [d4,f4]@3 [b3,d4]@3 [b3,d4]@10 ~@2", // F#m Dm Bm
AN: "[~@6 d#4@6 ~@29 f#4@12 ~@6 d#4@3 ~@2 f#4@4 ~@14 d#4@3 ~@3 f#4@4 ~@13 d#4@3 ~@3 f#4@4 ~@14 d#4@3 ~@3 f#4@4 ~@7 [b3,d4,e4]@3 [b3,d4]@3 d4@6 [f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3 [d4,f4]@3 [b3,d4]@3 b3@16, ~@6 b3@47 ~ b3@46 [b3,c#4,e4]@46 ~@6 b3@21 ~@19, ~@6 f#4@11 f#4@24 ~@151, ~@12 d#4@23 d#4@18 [d4,f4]@47 ~@76 d4@10 ~@6]/8", // E7 Bm F#m Dm Bm C#m7 Dm
AO: "[~ d#4@6 ~@30 f#4@11, ~ b3@47, ~ f#4@12 f#4@24 ~@11, ~@7 d#4@24 d#4@17]/2",
AP: "[~@6 d#4@3 ~@3 f#4@4 ~@14 d#4@3 ~@3 f#4@4 ~@13 d#4@3 ~@3 f#4@4 ~@14 d#4@3 ~@2 f#4@4 ~@8 [d4,e4]@2, [b3,d4,f4]@47 [b3,c#4,e4]@47 ~@2]/4", // Dsus2 Bdim C#m7
AQ: "~ [b3,d4]@3 [b3,d4]@6 [f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3 [f#4,a4]@3 [d4,f4]@2", AR: "~ [b3,d4]@3 [b3,d4]@10 ~@10",
})).s("gm_overdriven_guitar").gain(0.35)
// bass · electric bass finger · "Bass"
const bass = note(`<
A B C@7 D@4 E@5 F@7 G F G F G F@3 H I@3 J K L M@4 N@3 O F P F Q@6 R S T U@2 V W X Y@4 Z@4 AA@8 AB@5 AC@5 AD@3 ~@7 AE@8
AF@3 V AG AH@3 AI AJ X AK@3 AL AM AN@3 AO K AP AQ@3 AR X AS@3 AT ~
>`.pickRestart({
A: "~@20 b1@3 b1", B: "~@2 b1@3 b1@3 b1@3 ~ b1@3 b1@9",
C: "[~@77 c#2@3 c#2@3 c#2@3 c#2@3 c#2@3 c#2@4 c#2@72, ~@5 e3@51 ~@28, ~@43 c#3@41]/7", D: "[~@5 [b1,b2]@19]/4",
E: "[b1,b2]!4", F: "b2!4", G: "b2!3 f#2", H: "b2 b1!2 c#2 d2 b1!3",
I: "[b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2]/3",
J: "~ b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@2", K: "~ b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3",
L: "b1!2 c#2 d2 b1!4",
M: "[b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b2@6 b2@6 b2@6 b2@6 b2@6 b2@5 b2@6 b2@6 b2@5]/4",
N: "~ b2@6 b2@6 b2@6 b2@5", O: "~ b2@6 b2@5 b2@6 b2@6", P: "b2!2 f#2 b2",
Q: "[b2@6 b2@6 f#2@5 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 f#2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@5 b2@6 b2@6 b2@3 b1@3 b1@2]/6",
R: "~ c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2", S: "~ b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3", T: "c#2 d2 b1!6",
U: "[b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@2]/2",
V: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@2", W: "~ d2@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3", X: "b1!8",
Y: "[b1@3 b1@3 b1@3 b1@2 e3@85]/4", Z: "[~ [c#2,c#3]@7]/4",
AA: "[~@4 b1@8 ~ b1!3 b1!3 b1@17 ~@3 [e2,e3]@25, ~@4 b2@35 ~@25]/8", // E
AB: "[~@88 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 [b1,b2]@9 [b1,b2]@5, ~@13 [c#2,c#3]@93 ~@14]/5", // B C#
AC: "~ [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@5", // B
AD: "[~ [b1,b2]@6 ~ [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 ~@10]/3", // B
AE: "[~@8 f#2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 f#2@6 b2@6 ~ b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 f#2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b2@6 b1@3 b1@3 b1@3]/8",
AF: "[c#2@3 d2@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2]/3",
AG: "~ d2@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3",
AH: "[b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3 c#2@3 d2@2]/3",
AI: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2", AJ: "~ b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 c#2@3 d2@3",
AK: "[b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@2]/3",
AL: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3", AM: "b1!5 c#2 d2 b1",
AN: "[b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@2]/3",
AO: "~ b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@2", AP: "b1!4 c#2 d2 b1!2",
AQ: "[b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2]/3",
AR: "~ b1@3 b1@3 b1@3 c#2@3 d2@3 b1@2 b1@3 b1@3",
AS: "[b1@3 b1@3 b1@3 c#2@3 d2@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@2 d2@3 b1@3 b1@3 b1@3 b1@2]/3",
AT: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 ~@2",
})).s("gm_electric_bass_finger").gain(0.45)
// chords · epiano1 · "Electic Piano"
const epiano1 = note(`<
A@6 B@3 C@6 D ~@2 E@2 F G E@2 F H I@4 E@2 F J@2 K@2 L@2 M@2 N@4 O@2 P@2 Q@2 R@2 S@4 T U V W@2 X Y ~ Z@2 AA@4 AB@4 AC@2
Z@2 AD@4 AE@2 AF AG AH AG AH AI AJ@3 ~@7 AK@2 AL AM AN AO AP AQ AR AS@2 X AT AU@2 AV AW AX AY AZ@2 BA BB BC BD BE@2 BF
BG BH BI BJ@2 BK@2 BL@2 BM@2 ~
>`.pickRestart({
A: "[~@20 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 [e4,g#4,b4]@3 [b3,d#4,f#4]@19 [d#4,f#4]@3 ~@6 e4@4 ~@15 b3@4 ~@15 g#4@4 ~@12 g#4@5 ~@2 [e4,g#4]@6 ~@6 [d#4,f#4]@4, ~@61 [e4,g#4]@5 ~@5 b4@5 ~ e4@5 ~ g#4@5 ~@5 f#4@5 ~ b3@5 ~@8 b3@5 ~ f#4@5 ~@21, ~@64 b3@5 ~@5 b3@5 ~ f#4@5 ~@5 e4@5 ~ g#4@5 ~ e4@5 ~@2 b4@5 ~ e4@5 ~@24]/6", // E B D#m E D#m E
B: "[~@12 e4@3 ~ g#4@3 ~@12 b3@4 e4@3 ~@9 f#4@3 ~@7 e4@3 [e4,g#4]@3 ~@3 b3@4 e4@2, g#4@16 ~@12 f#4@5 ~@5 [e4,g#4]@6 e4@5 ~ [f#4,a4]@6 ~@7 [g#4,b4]@6 ~@3, e4@12 ~@13 e4@5 ~@5 [d#4,f#4]@5 ~@7 d#4@5 ~@20, ~@9 b3@5 ~@8 b3@5 ~@14 b3@5 ~@8 b3@5 ~@13]/3", // E F#m G#m D#m
C: "[~@10 e4@3 [e4,g#4]@6 ~@13 b3@4 ~@6 d#4@3 ~@3 d#4@4 ~@15 d#4@4 ~@15 d#4@4 ~@9 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [d#4,f#4,b4]@21 [d#4,b4]@6, ~ [e4,g#4]@5 ~ b3@5 ~@8 [b3,e4,g#4]@5 ~ e4@5 ~@8 e4@5 ~@8 e4@6 ~@6 e4@5 ~@8 e4@5 ~@8 e4@5 ~@49, ~@4 [f#4,a4]@6 ~@13 f#4@22 ~@10 d#4@5 ~ d#4@5 ~@8 d#4@5 ~ d#4@5 ~@8 d#4@5 ~@46, ~@23 d#4@6 d#4@7 d#4@6 ~@3 b3@5 ~@8 b3@5 ~@8 b3@5 ~@7 b3@5 ~@8 b3@5 ~@43]/6", // E B G#m E F#m
D: "[e4,c#5]@3 ~@5", E: "[[d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4 [e4,g#4] [d#4,f#4]!3 ~@2]/2",
F: "[d#4,b4]@3 [f#4,a#4]@2 [e4,g#4]@2 [d#4,f#4]", G: "[d#4,f#4] ~@3", H: "[d#4,f#4]@2 ~@3 [b3,d#4] [a#3,f#4]@2",
I: "[[d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4 ~@3 [b3,d#4] [a#3,f#4]@2]/2", J: "[[d#4,f#4] b3!2 c#4 d4 b3!2 b3@3 ~@6]/2",
K: "[~@2 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@19]/2", L: "[~ b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@20]/2",
M: "[b3!2 c#4 d4 b3!2 b3@3 ~@7]/2",
N: "[~@20 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 [e4,g#4]@3 [d#4,f#4]@2 [d#4,f#4]@3 [d#4,f#4]@3 ~@6 [d#4,b4]@9 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@5]/4", // G#m F# E D#m G#m F# E D#m
O: "[~@19 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@11]/2", // G#m F# E
P: "[~ [e4,g#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 ~@5 [d#4,b4]@9 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@6]/2", // E D#m G#m F# E D#m
Q: "[~@3 [b3,d#4] [a#3,f#4]@2 [d#4,b4]@3 [f#4,a#4]@3 [e4,g#4]@4]/2", // B D#m G#m F# E
R: "[~@9 [b3,d#4]@3 [a#3,f#4]@5 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 ~]/2", // B D#m G#m F# E
S: "[~@8 [b3,d#4]@3 [a#3,f#4]@6 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 [e4,g#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 [d#4,f#4]@3 ~@6 [d#4,b4]@8 [f#4,a#4]@6 [e4,g#4]@6 [d#4,f#4]@3 [d#4,f#4]@3 b3@3 b3@2]/4", // B D#m G#m F# E D#m G#m F# …
T: "~ c#4@3 d4@3 b3@3 b3@3 b3@9 ~@2", U: "~@6 b3!2", V: "c#4 d4 b3!2 b3@3 ~",
W: "[~@17 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@4]/2", X: "~@16 b3@3 b3@3 c#4@2", Y: "~ d4@3 b3@3 b3@3 b3@9 ~@5",
Z: "[~@6 [d#4,f#4] [e4,g#4]@5 ~@4]/2", // D#m E
AA: "[~@2 [d#4,f#4] [e4,g#4]@3 [d#4,f#4] [f#4,a4]@3 [e4,g#4] [g#4,b4]@3 [e4,g#4] [f#4,a4]@3 [e4,g#4]@2 ~@2 [d#4,f#4] [e4,g#4]@5 ~@4]/4", // D#m E D#m F#m E G#m E F#m …
AB: "[~@2 [d#4,f#4] [e4,g#4]@3 [d#4,f#4] [f#4,a4]@3 [e4,g#4] [g#4,b4]@3 [e4,g#4] [f#4,a4]@3 [e4,g#4]@2 [e4,g#4] [d#4,f#4]@7 ~ [e4,b4]!3]/4", // D#m E D#m F#m E G#m E F#m …
AC: "[[e4,b4]!3 b4@5 f#4@2 ~@6, ~@3 d#4@7 ~@6]/2", // E5
AD: "[~@7 [d#4,f#4]@3 [e4,g#4]@9 [d#4,f#4]@3 [f#4,a4]@9 [e4,g#4]@3 [g#4,b4]@9 [e4,g#4]@3 [f#4,a4]@9 [e4,g#4]@6 ~@6 [d#4,f#4]@3 [e4,g#4]@15 ~@11]/4", // D#m E D#m F#m E G#m E F#m …
AE: "[~@7 [d#4,f#4]@3 [e4,g#4]@9 [d#4,f#4]@3 [f#4,a4]@9 [e4,g#4]@3 [g#4,b4]@6 [e4,b4]@3 [e4,b4]@3 [e4,b4]@2]/2", // D#m E D#m F#m E G#m E5
AF: "~ [e4,b4]@3 [e4,b4]@3 [e4,b4]@3 [d#4,b4]@9 ~@5", AG: "~@7 [d#4,b4]@3 c#5@6 c#5@3 c#5@3 c#5@2, ~@5 e4@7",
AH: "~ c#5@3 c#5@3 c#5@3 [e4,c#5]@6 [d#4,b4]@8, ~ e4@9 ~@14", AI: "~@16 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2",
AJ: "[~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 [e4,g#4,b4]@3 [d#4,f#4,b4]@27 [b4,e5,g#5,b5]@24 ~@10]/3", // E B E
AK: "[~@5 [b3,d#4]@3 [a#3,f#4]@6 [d#4,b4]@9 [f#4,a#4]@9 [e4,g#4]@12 ~@4]/2", // B D#m G#m F# E
AL: "~@5 [b3,d#4]@3 [a#3,f#4]@6 [d#4,b4]@9 ~", AM: "[f#4,a#4]@3 [e4,g#4]@4 ~",
AN: "~@2 [b3,d#4] [a#3,f#4]@2 [d#4,b4]@3", AO: "[f#4,a#4]@3 [e4,g#4]@4 [e4,g#4]", AP: "[d#4,f#4]!3 ~@2 [d#4,b4]@3",
AQ: "[f#4,a#4]@2 [e4,g#4]@2 [d#4,f#4] ~ b3!2", AR: "c#4@3 d4@3 b3@3 b3@2 b3@9 ~@4",
AS: "[~@17 b3@3 b3@3 c#4@3 d4@2 b3@3 b3@3 b3@9 ~@5]/2", AT: "~ d4@2 b3@3 b3@3 b3@9 ~@6",
AU: "[~@15 b3@3 b3@2 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@7]/2", AV: "~@14 b3@2 b3@3 c#4@3 d4@2", AW: "~ b3@3 b3@3 b3@9 ~@8",
AX: "~@4 b3!2 c#4 d4", AY: "b3!2 b3@3 ~@3", AZ: "[~@11 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@10]/2",
BA: "~@10 b3@3 b3@3 c#4@3 d4@3 b3@2", BB: "~ b3@3 b3@9 ~@11", BC: "~@3 b3!2 c#4 d4 b3", BD: "b3 b3@3 ~@4",
BE: "[~@8 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@13]/2", BF: "~@7 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@2", BG: "~ b3@9 ~@14",
BH: "~@2 b3!2 c#4 d4 b3!2", BI: "b3@3 ~@5", BJ: "[~@5 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@16]/2",
BK: "[~@4 b3@3 b3@3 c#4@3 d4@3 b3@2 b3@3 b3@9 ~@18]/2", BL: "[~@3 b3@3 b3@3 c#4@3 d4@3 b3@2 b3@3 b3@9 ~@19]/2",
BM: "[~@2 b3@3 b3@3 c#4@2 d4@3 b3@3 b3@3 b3@9 ~@20]/2",
})).s("gm_epiano1").gain(0.64)
// other · lead 1 square · "Fx3"
const lead_1_square = note(`<
~@34 A@2 B@2 C D@2 E ~@15 F G H I@2 J K L M ~@43 N O P Q R M S@2 T@2 U@4 V ~ W@2 X@4 Y ~ Z AA AB AC AD ~@3
>`.pickRestart({
A: "~@5 d#4@3 ~@3 f#4@4 ~@9", B: "~@4 d#4@3 ~@3 f#4@4 ~@10", C: "~@4 d#4@3 ~@2 f#4@4 ~@11",
D: "~@3 d#4@3 ~@3 f#4@4 ~@11", E: "~@2 d#4@3 ~@3 f#4@4 ~@12", F: "~@11 d#4", G: "~@4 f#4@4 ~@13 d#4@3",
H: "~@3 f#4@4 ~@14 d#4@3", I: "~@2 f#4@4 ~@14 d#4@3 ~", J: "~ f#4@4 ~@14 d#4@3 ~@2", K: "~ f#4@4 ~@13 d#4@3 ~@3",
L: "f#4@4 ~@14 d#4@3 ~@3", M: "f#4 ~@5", N: "~@20 d#4@3 ~", O: "~ f#4@2 ~@9", P: "~@19 d#4@3 ~@2", Q: "~ f#4@4 ~@19",
R: "~@6 d#4 ~", S: "[~@17 d#4@3 ~@3 f#4@4 ~@21]/2",
T: "[~@10 b4 [c5,c#5] d5 [d#5,e5] f5 [f#5,g5] g#5 [a5,a#5] b5@15 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5]/2", // C#maj7 Emaj7 Gmaj7 A#maj7
U: "[a#5 ~ b5 a#5 ~ b5 a#5 b5 ~ a5@3 g#5@3 f5@6 f5@6 f5@5 f5@6 f5@6 f5@6 f5@6 b4 [c5,c#5] d5 [d#5,e5] [f5,f#5] g5 [g#5,a5] a#5 b5@15 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 b5]/4", // C#maj7 Emaj7 F#maj7 Amaj7
V: "~ a#5 b5 ~ a#5 b5 ~@18",
W: "[~@6 [b4,c5] c#5 [d5,d#5] e5 [f5,f#5] g5 [g#5,a5] a#5 b5@15 a#5 ~ b5 a#5 ~ b5 a#5 ~ b5 a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5]/2", // Cmaj7 D#maj7 F#maj7 Amaj7
X: "[b5 ~ a#5 b5 ~ a5@3 g#5@3 f5@5 f5@6 f5@6 f5@6 f5@6 f5@6 f5@6 [b4,c5] c#5 [d5,d#5] [e5,f5] f#5 g5 [g#5,a5] b5@15 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~, ~@59 a#5 ~@36]/4", // Cmaj7 D#maj7 Fmaj7 Amaj7
Y: "a#5 b5 ~@22", Z: "~ b4 c5 [c#5,d5] d#5 [e5,f5] f#5 [g5,g#5] a5 b5@15, ~@9 a#5 ~@14",
AA: "~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 a#5 ~ b5 a#5 ~ b5", AB: "a5 g#5 f5@2 f5@2 f5@2",
AC: "f5@6 f5@6 f5@5 f5@6 b4", AD: "c5 [c#5,d5] d#5 [e5,f5] [f#5,g5] g#5 [a5,a#5] b5@15 ~@2",
})).s("gm_lead_1_square").gain(0.25)
// drums · kick
const kick = s("bd").struct(`<
A B ~@3 C D ~@6 E F@20 G H I@2 J K L M@2 N O@3 P F@3 Q H@4 I@2 J K M@2 O R F S ~@8 T U ~@8 V W O@5 X M@11 Y K@5 Z M N
O F AA H AB I J K Z M O@2 F Q H AB I J K M@2 O R F Q H AC AD ~
>`.pickRestart({
A: "~@20 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@8", C: "~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", D: "x",
E: "~ x!7", F: "x!4", G: "x ~@4 x ~@5 x ~@5 x ~@5 x", H: "~@5 x ~@5 x ~@5 x ~@5 x", I: "~@2 x ~@2 x ~@2 x ~@2 x",
J: "~@4 x ~@4 x ~@5 x ~@5 x ~@2", K: "~ x ~ x ~ x ~ x", L: "~@3 x ~@5 x ~@4 x ~@5 x ~@3",
M: "~ x ~@2 x ~@2 x ~@2 x ~", N: "~@2 x ~@4 x ~@5 x ~@5 x ~@4", O: "~ x ~@5 x ~@5 x ~@5 x ~@4",
P: "~ x ~@5 x ~@4 x ~@5 x ~@5", Q: "x ~@5 x ~@5 x ~@4 x ~@5 x", R: "~ x ~@5 x ~@5 x ~@4 x ~@5",
S: "x ~@5 x ~@4 x ~@12", T: "~@5 x!3", U: "x!4 ~@4", V: "~@16 x ~@2 x ~@2 x ~",
W: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@4", X: "~ x ~@6 x ~@5 x ~@5 x ~@3", Y: "~@2 x ~@5 x ~@5 x ~@6 x ~@2",
Z: "~@3 x ~@4 x ~@5 x ~@5 x ~@3", AA: "x ~@5 x ~@5 x ~@5 x ~@4 x", AB: "~@5 x ~@5 x ~@4 x ~@5 x ~",
AC: "~@5 x ~@4 x ~@5 x ~@5 x ~", AD: "~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.5)
// drums · snare
const snare = s("sd").struct(`<
A B ~@3 C D ~@6 E F@20 G@2 H@2 I J K L@2 M N@3 O P@3 Q R@4 S@2 T@2 U@2 V W F X ~@8 Y Z ~@8 AA AB V@5 U@12 AC T@5 U@2
V@2 F@2 G AD H I J K L N@2 P Q R AE S T@2 U@2 V W F AF G AD H ~
>`.pickRestart({
A: "~@20 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@8", C: "~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", D: "x",
E: "~ x!7", F: "~ x ~ x", G: "~@5 x ~@11 x ~@6", H: "~ x ~@2 x ~", I: "~@4 x ~@10 x ~@8", J: "~ x ~@3 x ~@2",
K: "~@3 x ~@10 x ~@9", L: "~ x ~@5 x ~@4", M: "~@2 x ~@10 x ~@10", N: "~ x ~@11 x ~@10", O: "~ x ~@10 x ~@11",
P: "x!2", Q: "x ~@11 x ~@10 x", R: "~@11 x ~@11 x", S: "~@5 x ~@5 x", T: "~@3 x ~@3 x", U: "~@2 x ~@2 x",
V: "~@7 x ~@11 x ~@4", W: "~@7 x ~@10 x ~@5", X: "~ x ~@2", Y: "~@5 x!3", Z: "x!4 ~@4", AA: "~@16 x ~@2 x ~@2 x ~",
AB: "~ x ~@2 x ~@2 x ~@2 x ~@8 x ~@4", AC: "~@8 x ~@12 x ~@2", AD: "~@5 x ~@10 x ~@7", AE: "~@11 x ~@10 x ~",
AF: "~@6 x ~@10 x ~@6",
})).gain(0.5)
// drums · low tom
const low_tom = s("lt").struct(`<
A B ~@3 C D ~@6 E F@20 G@2 H@2 I J K L@2 M N@3 O P@3 Q R@4 S@2 T@2 U@2 V W F X ~@8 Y Z ~@8 AA AB V@5 U@12 AC T@5 U@2
V@2 F@2 G AD H I J K L N@2 P Q R AE S T@2 U@2 V W F AF G AD H ~
>`.pickRestart({
A: "~@20 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@8", C: "~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~@3", D: "x", E: "~ x!7",
F: "~ x ~ x", G: "~@5 x ~@11 x ~@6", H: "~ x ~@2 x ~", I: "~@4 x ~@10 x ~@8", J: "~ x ~@3 x ~@2",
K: "~@3 x ~@10 x ~@9", L: "~ x ~@5 x ~@4", M: "~@2 x ~@10 x ~@10", N: "~ x ~@11 x ~@10", O: "~ x ~@10 x ~@11",
P: "x!2", Q: "x ~@11 x ~@10 x", R: "~@11 x ~@11 x", S: "~@5 x ~@5 x", T: "~@3 x ~@3 x", U: "~@2 x ~@2 x",
V: "~@7 x ~@11 x ~@4", W: "~@7 x ~@10 x ~@5", X: "~ x ~@2", Y: "~@5 x!3", Z: "x!4 ~@4", AA: "~@16 x ~@2 x ~@2 x ~",
AB: "~ x ~@2 x ~@2 x ~@2 x ~@13", AC: "~@8 x ~@12 x ~@2", AD: "~@5 x ~@10 x ~@7", AE: "~@11 x ~@10 x ~",
AF: "~@6 x ~@10 x ~@6",
})).gain(0.5)
// drums · pedal hat
const pedal_hat = s("hh").struct(`<
~@2 A ~@11 B@2 A ~@2 B A ~@2 B A ~@2 B A ~@2 B A ~ C D ~@2 E F ~@2 G H ~@2 I J ~@2 K L ~@2 M N ~@2 O P ~@2 Q R ~@22 Q
R ~@2 Q S ~@2 T U ~@2 T U ~@2 T U ~@2 O P ~@2 T V ~@2 W X ~@2 Y Z ~@2 AA AB ~@2 D AC ~@2 F AD ~@2 AE A ~ C AF ~@2
>`.pickRestart({
A: "x", B: "x!4", C: "~@23 x", D: "~@5 x ~@5 x ~@5 x ~@5 x", E: "~@7 x", F: "~ x ~ x ~ x ~ x", G: "~@5 x",
// … 59 more lines
More by ABBA
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.