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, A@4 for four bars: 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]@6 [d#4,b4]@8 [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 F@2 O F P@6 Q K R S@2 T U K V@4 W@4 X@8 Y@5 Z@7 AA ~@7 AB@8 AC@3
T AD AE@3 AF AG K AH@3 AF AI AJ@3 AK AL AM AN@3 AO K AP@3 AQ ~
>`.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@2 b1@3 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!8", L: "b1!2 c#2 d2 b1!4",
M: "[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 b1@3 b2@6 b2@6 b2@6 b2@6 b2@5 b2@6 b2@6 b2@6 b2@5]/4",
N: "~ b2@6 b2@6 b2@6 b2@5", O: "b2!2 f#2 b2",
P: "[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",
Q: "~ c#2@3 d2@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2", R: "c#2 d2 b1!6",
S: "[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",
T: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 c#2@2", U: "~ d2@3 b1@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3",
V: "[b1@3 b1@3 b1@3 b1@2 e3@85]/4", W: "[~ [c#2,c#3]@7]/4",
X: "[~@4 b1@8 ~ b1!3 b1!3 b1@17 ~@3 [e2,e3]@25, ~@4 b2@35 ~@25]/8", // E
Y: "[~@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#
Z: "~ [b1,b2]@6 [b1,b2]@6 [b1,b2]@6 [b1,b2]@5", AA: "~ [b1,b2]@3 [b1,b2]@3 ~@5",
AB: "[~@8 f#2@6 b2@6 b2@6 ~ b2@6 b2@6 b2@6 b2@5 b2@6 f#2@6 b2@6 ~ b2@6 b2@6 b2@6 b2@6 b2@5 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",
AC: "[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",
AD: "~ d2@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3",
AE: "[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",
AF: "~ b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2", AG: "~ b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 c#2@3 d2@3",
AH: "[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",
AI: "b1!5 c#2 d2 b1",
AJ: "[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 c#2@3 d2@3 b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3 b1@3 b1@2]/3",
AK: "~ b1@3 b1@3 b1@3 b1@3 c#2@3 d2@3 b1@3 b1@2", AL: "~ b1@3 b1@3 b1@2 b1@3 b1@3 b1@3 b1@3 b1@3",
AM: "b1!4 c#2 d2 b1!2",
AN: "[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",
AO: "~ b1@3 b1@3 b1@3 c#2@3 d2@3 b1@2 b1@3 b1@3",
AP: "[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",
AQ: "~ 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 AL AN AO AP V AQ@2 X AR AS@2 AT AU AV AW AX@2 AY AZ BA BB BC@2 BD
BE BF BG BH@2 BI@2 BJ@2 BK@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]@6 [d#4,b4]@8 [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: "[~@6 [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: "[f#4,a#4]@3 [e4,g#4]@4 [e4,g#4]",
AO: "[d#4,f#4]!3 ~@2 [d#4,b4]@3", AP: "[f#4,a#4]@2 [e4,g#4]@2 [d#4,f#4] ~ b3!2",
AQ: "[~@17 b3@3 b3@3 c#4@2 d4@3 b3@3 b3@3 b3@9 ~@5]/2", AR: "~ d4@2 b3@3 b3@3 b3@9 ~@6",
AS: "[~@15 b3@3 b3@2 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@7]/2", AT: "~@14 b3@2 b3@3 c#4@3 d4@2", AU: "~ b3@3 b3@3 b3@9 ~@8",
AV: "~@4 b3!2 c#4 d4", AW: "b3!2 b3@3 ~@3", AX: "[~@11 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@10]/2",
AY: "~@10 b3@3 b3@3 c#4@3 d4@3 b3@2", AZ: "~ b3@3 b3@9 ~@11", BA: "~@3 b3!2 c#4 d4 b3", BB: "b3 b3@3 ~@4",
BC: "[~@8 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@13]/2", BD: "~@7 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@2", BE: "~ b3@9 ~@14",
BF: "~@2 b3!2 c#4 d4 b3!2", BG: "b3@3 ~@5", BH: "[~@5 b3@3 b3@3 c#4@3 d4@3 b3@3 b3@3 b3@9 ~@16]/2",
BI: "[~@4 b3@3 b3@3 c#4@3 d4@3 b3@2 b3@3 b3@9 ~@18]/2", BJ: "[~@3 b3@3 b3@3 c#4@3 d4@3 b3@2 b3@3 b3@9 ~@19]/2",
BK: "[~@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@3 B@2 C@2 D ~@15 E F G H@2 I@2 J K ~@43 L M N O P K Q@2 R@2 S@4 T ~ U@2 V@4 W ~ X Y Z AA AB ~@3
>`.pickRestart({
A: "~@5 d#4@3 ~@3 f#4@4 ~@9", B: "~@4 d#4@3 ~@3 f#4@4 ~@10", C: "~@3 d#4@3 ~@3 f#4@4 ~@11",
D: "~@2 d#4@3 ~@3 f#4@4 ~@12", E: "~@11 d#4", F: "~@4 f#4@4 ~@13 d#4@3", G: "~@3 f#4@4 ~@14 d#4@3",
H: "~@2 f#4@4 ~@14 d#4@3 ~", I: "~ f#4@4 ~@14 d#4@3 ~@2", J: "f#4@4 ~@14 d#4@3 ~@3", K: "f#4 ~@5", L: "~@20 d#4@3 ~",
M: "~ f#4@2 ~@9", N: "~@19 d#4@3 ~@2", O: "~ f#4@4 ~@19", P: "~@6 d#4 ~", Q: "[~@17 d#4@3 ~@3 f#4@4 ~@21]/2",
R: "[~@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
S: "[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
T: "~ a#5 b5 ~ a#5 b5 ~@18",
U: "[~@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
V: "[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
W: "a#5 b5 ~@22", X: "~ b4 c5 [c#5,d5] d#5 [e5,f5] f#5 [g5,g#5] a5 b5@15, ~@9 a#5 ~@14",
Y: "~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 ~ a#5 b5 a#5 ~ b5 a#5 ~ b5", Z: "a5 g#5 f5@2 f5@2 f5@2",
AA: "f5@6 f5@6 f5@5 f5@6 b4", AB: "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@2 K@4 L@3 F@4 M H@4 I@2 J@2 K@2 L@2 F N ~@8 O P ~@8 Q R L@4 K@15 J@4 K@2 L@2 F M H S
I J@2 K@2 L@2 F M H I@2 J@2 K@2 L@2 F M H I T ~
>`.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: "~ x ~ x ~ x ~ x", K: "~ x ~@2 x ~@2 x ~@2 x ~", L: "~ x ~@5 x ~@5 x ~@5 x ~@4", M: "x ~@5 x ~@5 x ~@4 x ~@5 x",
N: "x ~@5 x ~@4 x ~@12", O: "~@5 x!3", P: "x!4 ~@4", Q: "~@16 x ~@2 x ~@2 x ~",
R: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@4", S: "~@5 x ~@5 x ~@4 x ~@5 x ~", T: "~@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@3 L@5 M@3 N O@4 P@2 Q@2 R@2 S@2 F T ~@8 U V ~@8 W X S@3 R@16 Q@4 R@2 S@2 F@2 G@2
H@2 J K@2 L@2 M N O P@2 Q@2 R@2 S@2 F@2 G H@2 ~
>`.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: "~ x ~@5 x ~@4", L: "~ x ~@11 x ~@10", M: "x!2", N: "x ~@11 x ~@10 x", O: "~@11 x ~@11 x", P: "~@5 x ~@5 x",
Q: "~@3 x ~@3 x", R: "~@2 x ~@2 x", S: "~@7 x ~@11 x ~@4", T: "~ x ~@2", U: "~@5 x!3", V: "x!4 ~@4",
W: "~@16 x ~@2 x ~@2 x ~", X: "~ x ~@2 x ~@2 x ~@2 x ~@8 x ~@4",
})).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@3 L@5 M@3 N O@4 P@2 Q@2 R@2 S@2 F T ~@8 U V ~@8 W X S@3 R@16 Q@4 R@2 S@2 F@2 G@2
H@2 J K@2 L@2 M N O P@2 Q@2 R@2 S@2 F@2 G H@2 ~
>`.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: "~ x ~@5 x ~@4",
L: "~ x ~@11 x ~@10", M: "x!2", N: "x ~@11 x ~@10 x", O: "~@11 x ~@11 x", P: "~@5 x ~@5 x", Q: "~@3 x ~@3 x",
R: "~@2 x ~@2 x", S: "~@7 x ~@11 x ~@4", T: "~ x ~@2", U: "~@5 x!3", V: "x!4 ~@4", W: "~@16 x ~@2 x ~@2 x ~",
X: "~ x ~@2 x ~@2 x ~@2 x ~@13",
})).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 B ~@2 J B ~@2 K L ~@2 M N ~@2 O P ~@22 O
P ~@2 Q R ~@2 Q R ~@2 Q R ~@2 Q R ~@2 M N ~@2 Q P ~@2 S T ~@2 U V ~@2 W X ~@2 D Y ~@2 F Z ~@2 AA A ~ C AB ~@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",
H: "~@2 x ~@4 x ~@5 x ~@5 x ~@4", I: "~@19 x ~@4", J: "~@3 x", K: "~@17 x ~@5 x", L: "~@5 x ~@5 x ~@5 x ~@6",
M: "~@5 x ~ x", N: "~ x ~ x ~ x ~@2", O: "~@13 x ~@5 x ~@4", P: "~ x ~@5 x ~@5 x ~@10", Q: "~@7 x ~@2 x ~",
R: "~ x ~@2 x ~@2 x ~@4", S: "~@12 x ~@5 x ~@4 x", T: "~@5 x ~@5 x ~@12", U: "~@3 x ~ x ~ x", V: "~ x ~ x ~@4",
W: "~@7 x ~@5 x ~@5 x ~@4", X: "~ x ~@5 x ~@16", Y: "~@5 x ~@18", Z: "~ x ~@10", AA: "~ x ~@5 x ~@4 x ~@5 x ~@5",
AB: "~@5 x ~@4 x ~@5 x ~@5 x ~",
})).gain(0.5)
// drums · crash
const crash = s("cr").struct(`<
~ A ~@4 B ~@6 C ~@61 D ~@9 E ~@33 D ~ F ~ G ~ H ~ I ~ J ~ K ~ K ~ B L ~ M ~@2
>`.pickRestart({
// … 43 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.