0:00/0:00
// Two for the Price of One — ABBA
// 113 bpm, 4/4, key D 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 (4/4 at bar 1, 2/4 at bar 14, 4/4 at bar 14, 2/4 at bar 53, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 102 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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.
// other · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
A@8 ~ B@2 C ~ D@5 ~@3 E F@2 ~@7 G@3 H I J K@2 L@3 M@2 N@3 ~ O@3 ~ P@5 ~@3 Q@3 ~@16 R@7 ~@16
>`.pickRestart({
A: "[~@5 a4 a5 e5@11 ~@3 a3 a4 e4@14 a4 a5 e5@13 ~ a3 a4 d4@9]/8", B: "[~ [f#3,a3]@55 ~@8]/2",
C: "~@3 [f#3,a3]@5 ~@24", // F#m
D: "[~@3 [e3,g3]@4 ~@13 [f#3,a3]@51 ~@2 a4@4 a5@4 e5@36 c5@4 ~ b4@4 b4@4 a4@4 a4@4 b4@4 b4@8 ~@10, ~@117 c4@8 ~ d4@8 d4@16 ~@10]/5", // Em F#m
E: "~@3 e3", F: "[~ f#3@8 b2@8 d3@8 [c#3,e3]@32 ~@7]/2",
G: "[~@31 d3@8 e3@8 a2@8 b2@4 d3@4 e3@12 f#3@4 b2@8 ~@5 d3@4]/3", H: "e3 f#3 b2 d3",
I: "a2@8 ~@4 e3@2 ~ e3@2 g3@4 f#3@4 d3@7", J: "~ d3@8 e3@8 a2@8 b2@4 d3@3",
K: "[~ e3@12 ~ f#3@4 b2@8 ~@4 d3@4 e3@8 f#3@8 b2@8 d3@6]/2",
L: "[~@3 a2@8 ~@4 e3@2 e3@2 g3@4 f#3@8 d3@4 d3@33 ~@20 a4@4 a5@4]/3", M: "[e5@37 ~@20 a3@4 a4@3]/2",
N: "[~ e4@55 ~@2 a3@4 a4@4 d4@24 ~@6]/3", O: "[~@8 [f#3,a3]@65 [f#3,a3]@5 ~@18]/3",
P: "[~@10 [e3,g3]@5 ~@64 a4@4 a5@4 e5@35 ~@2 c4@4 b3@4 b3@4 a3@4 a3@4 b3@4 b3@8 ~@4, ~@13 [f#3,a3]@32 ~@17 c3@4 d3@4 d3@8 ~@2]/5", // Em F#m
Q: "[~@31 e3@8 f#3@8 b2@8 d3@8 [c#3,e3]@24 ~@9]/3", R: "[~@9 [d3,f#3]@64 ~ [f#3,a3]@68 ~@6 f#3@9 g3@9 a3@33 ~@25]/7",
})).s("gm_overdriven_guitar").gain(0.26).pan(0.7)
// bass · electric bass finger · "Bass"
const bass = note(`<
~ A@2 B@2 C@2 D@5 ~ E@5 F@4 G@2 H I@2 J@8 K L M N O@2 P@2 Q@8 ~ R@5 S T U@4 V W X Y Z AA AB@8 AC AD@8 AE@2 AF@2 AG@2
AH@4 AI@2 AJ@2 AK@2
>`.pickRestart({
A: "d3!4", B: "b2!4", C: "e3!4", D: "[d3@65 b2@65 e3@6 ~@24]/5",
E: "[~@3 e3@6 ~@11 d3@65 d3@32 e3@8 ~ f#3@8 g3@16 ~@4 g3@4 g3@2]/5",
F: "[~@2 g3@4 g3@4 f#3@4 f#3@4 ~ f#3@4 ~@4 f#3@4 f#3@4 f#3@4 f#3@4 e3@4 e3@4 e3@4 ~@4 e3@4 e3@4 e3@4 e3@4 ~ d#3@4 d#3@4 d#3@36 e3@8]/4",
G: "[~ f#3@8 b2@8 d3@8 a2@32 ~ d3@6]/2", H: "~ d3@4 a2@4 a2@4 e3@3",
I: "[~@2 e3@8 b2@8 ~ b2@8 e3@8 e3@8 e3@8 e3@8 a2@5]/2",
J: "[~@3 a2@8 ~ g3@4 f#3@4 d3@8 d3@8 d3@8 a2@8 a2@8 e3@8 ~ e3@8 b2@8 b2@8 e3@8 e3@8 e3@8 e3@8 ~ a2@8 a2@8 g3@4 f#3@4 d3@8 d3@8 d3@8 a2@8 ~ a2@8 e3@8 e3@8 b2@8 b2@8 e3@8 e3@8 ~ e3@8 e3@8]/8",
K: "a2@2 a2@2 g3 f#3 d3@2", L: "d3@8 ~ d3@8 a2@8 a2@7", M: "~ e3@8 e3@8 b2@8 b2@7", N: "~ e3@4 e3@4 e3@4 e3@3",
O: "[~@2 a2@8 a2@8 g3@4 ~ f#3@8 d3@4 d3@8 d3@8 d3@8 d3@5]/2", P: "[~@3 d3@8 d3@8 ~ d3@8 d3@8 b2@8 b2@8 b2@8 b2@4]/2",
Q: "[~@4 b2@8 ~ b2@8 b2@8 b2@8 e3@8 e3@8 e3@8 e3@8 ~ e3@8 e3@8 e3@8 e3@8 d3@65 b2@65 ~ e3@6 ~@17]/8",
R: "[~@10 e3@6 ~@10 d3@65 d3@33 e3@8 f#3@8 g3@16 ~@4]/5", S: "g3@4 g3@4 g3@4 ~ g3@4 f#3@4 f#3@4 f#3@4 ~@3",
T: "~ f#3@4 f#3@4 f#3@4 f#3@4 e3@4 e3@4 e3@4 ~@3",
U: "[~ e3@4 ~ e3@4 e3@4 e3@4 d#3@4 d#3@4 d#3@37 e3@8 f#3@8 b2@8 d3@8 a2@24 ~@9]/4", V: "d3!2 a2!2",
W: "e3@8 e3@8 ~ b2@8 b2@7", X: "~ e3@8 e3@8 e3@8 e3@7", Y: "~ a2@8 ~ a2@8 g3@4 f#3@4 d3@6",
Z: "~ d3@4 d3@4 a2@4 a2@3", AA: "~@3 e3@8 e3@8 b2@8 b2@5",
AB: "[~@3 e3@8 e3@8 e3@8 ~ e3@8 a2@8 a2@8 g3@4 f#3@4 d3@8 d3@8 d3@8 ~ a2@8 a2@8 e3@8 e3@8 b2@8 b2@8 e3@8 ~ e3@8 e3@8 e3@8 a2@8 a2@8 g3@4 f#3@4 d3@8 ~ d3@8 d3@8 a2@8 a2@8 e3@8 e3@8 b2@8 ~]/8",
AC: "b2 e3!3", AD: "[e3@8 a2@8 ~ a2@8 g3@4 f#3@8 d3@4 d3@65 c3@74 d3@9 e3@9 f#2@33 g2@9 g2@9 g2@7]/8",
AE: "[~@2 g2@9 ~ g2@9 g2@9 g2@9 g2@9 d2@9 d2@7]/2", AF: "[~@2 d2@9 ~ d2@9 d2@9 d2@9 d2@4 e2@4 ~ f2@4 ~ f#2@4 g2@7]/2",
AG: "[~@2 g2@9 g2@9 ~ g2@9 g2@9 g2@9 g2@9 g2@7]/2",
AH: "[~@2 d2@9 d2@9 d2@9 ~ d2@9 d2@9 d2@4 d2@9 ~ e2@4 f2@4 ~ f#2@4 g2@9 g2@9 ~ g2@9 g2@9 g2@9 g2@7]/4",
AI: "[~@2 g2@9 g2@9 d2@9 d2@9 ~ d2@9 d2@9 d2@7]/2", AJ: "[~@2 d2@9 d2@4 ~ e2@4 f2@4 ~ f#2@4 g2@9 g2@9 ~ g2@9 g2@7]/2",
AK: "[~@2 g2@9 g2@9 g2@9 g2@9 ~@26]/2",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.4)
// chords · epiano2 · "Piano"
const epiano2 = note(`<
~ A B A B C D E F G@2 H@3 I J K@6 L@5 M@5 N@2 O@2 P Q R@4 S@2 T@5 U V W X@5 Y Z AA@4 AB AC AD AE AF@4 AG AH@5 AI AJ@2
AK@2 AL@3 ~@17
>`.pickRestart({
A: "[c#4,e4] [d4,f#4]", B: "[c#4,e4] [c#4,e4]@2 [d4,f#4]@2 ~@3", C: "[d4,f#4] [e4,g4]",
D: "[d4,f#4] [d4,f#4]@2 [e4,g4]@2 ~@3", // D Em
E: "~@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 ~ [e4,g4]@3", // F#m Em
F: "~ [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@7", // Em D C#m D
G: "[~@5 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 ~ [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@6]/2", // F#m Em D C#m D
H: "[~@6 [f#4,a4]@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 ~@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [c#4,e4]@4 [e4,g4]@8 ~@13 [f#4,a4]@4 [f#4,a4]@4]/3", // F#m Em D C#m Em F#m
I: "[f#4,a4]!2 [e4,g4]!4 [d4,f#4]!2", J: "~ [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 [f#4,a4]@3",
K: "[~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 c5@4 ~ b4@4 b4@4 a4@4 a4@4 b4@4 b4@8 ~@4 [d4,b4]@4 [d4,b4]@4 [d4,b4]@4 [d4,b4]@4 [d4,a4]@4 [d4,a4]@4 ~ [d4,a4]@4 ~@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 ~@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 ~ [b3,f#4]@4 [b3,f#4]@4 [b3,f#4]@36 e4@8, ~@21 c4@8 ~ d4@8 d4@16 ~@138]/6", // F#m Em D G D5 Em B5
L: "[~ f#4@8 b3@8 d4@8 [c#4,e4]@24 ~@9 d5@8 e5@8 a4@8 b4@4 d5@4 e5@12 f#5@4 b4@8 ~@5 d5@4 e5@8 f#5@8 b4@8 d5@8 [a4,c#5,e5]@5, ~@58 [f#4,a4]@16 [c#4,e4]@16 [g4,b4]@16 [d4,f#4]@16 ~ [g4,b4]@16 [d4,f#4]@16 ~@5]/5", // C#m A F#m C#m G D G D
M: "[~@7 [g4,e5]@2 [g4,e5]@2 ~ [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@8 d5@8 e5@8 a4@8 b4@4 d5@4 e5@12 ~ f#5@4 b4@8 ~@4 d5@4 e5@8 f#5@8 b4@8 d5@8 ~ [a4,c#5,e5]@8 ~@4 [g4,e5]@4 [g4,e5]@4 [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@4 ~@2, ~@28 [f#4,a4]@16 [c#4,e4]@16 [g4,b4]@16 ~ [d4,f#4]@16 [g4,b4]@16 [d4,f#4]@16 ~@35]/5", // C Em D A C Em D F#m …
N: "[~@2 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 ~ [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@8 ~]/2", // D A Em Bm
O: "[~@3 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 ~ [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@4 [e4,g4]@4 [g4,b4]@4 [f#4,a4]@4 [d4,f#4]@4]/2", // Em Bm Dsus2 A Em G F#m D
P: "~@5 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@3", // D A
Q: "~ [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@7", // A Em Bm
R: "[~@6 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@2 [e4,g4]@2 [g4,b4]@4 ~ [f#4,a4]@8 [f#4,a4]@4 [d4,f#4]@32 [c#4,e4]@4 [c#4,e4]@8 ~ [d4,f#4]@8 a4@4 a5@4]/4", // Em Bm Dsus2 A Em G F#m D …
S: "[~@4 [c#4,e4]@16 [d4,f#4]@16 [c#4,e4]@4 ~ [c#4,e4]@8 [d4,f#4]@8 a3@4 a4@3, e5@37 ~@27]/2", // C#m D C#m D
T: "[~ e4@4 [d4,f#4]@16 [e4,g4]@16 ~ [d4,f#4]@4 [d4,f#4]@8 [e4,g4]@8 a3@4 a4@4 d4@4 ~@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 ~ [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4]/5", // D Em D Em F#m Em D C#m …
U: "[e4,g4]!3 [d4,f#4]!2 [c#4,e4]!2 [d4,f#4]", // Em D C#m D
V: "[d4,f#4]@8 ~@5 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@3", // D F#m Em
W: "~ [e4,g4]@4 [e4,g4]@4 ~@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@3", // Em
X: "[~@2 [d4,f#4]@4 [c#4,e4]@4 [e4,g4]@8 ~@12 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 ~ [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 ~ [e4,g4]@4 [d4,f#4]@4 c5@4 b4@4 b4@4 a4@4 a4@4 b4@4 b4@8 ~@4, ~@31 c4@2 d4@2 d4@4 ~]/5", // D C#m Em F#m Em D C#m D …
Y: "[d4,b4]@4 [d4,b4]@4 [d4,b4]@4 ~ [d4,b4]@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 ~@3", // G D5
Z: "~ [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 ~@3", // D5 Em
AA: "[~ [b3,g4]@4 ~ [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 [b3,f#4]@4 [b3,f#4]@4 [b3,f#4]@37 e4@8 f#4@8 b3@8 d4@8 [c#4,e4]@24 ~@9]/4", // Em B5 C#m
AB: "d5@2 e5@2 a4@2 b4 d5, [f#4,a4] [c#4,e4]", AC: "e5@12 ~ f#5@4 b4@8 ~@4 d5@3, [g4,b4]@16 ~ [d4,f#4]@15",
AD: "~ e5@8 f#5@8 b4@8 d5@7, ~ [g4,b4]@16 [d4,f#4]@15", // G D
AE: "~ [a4,c#5,e5]@8 ~@5 [g4,e5]@2 [g4,e5]@2 [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@6", // A C Em D
AF: "[~@2 d5@8 e5@8 a4@8 b4@4 ~ d5@4 e5@12 f#5@4 b4@8 ~@4 d5@4 e5@8 f#5@8 b4@8 ~ d5@8 [a4,c#5,e5]@8 ~@4 [g4,e5]@4 [g4,e5]@4 [b4,g5]@4 [a4,f#5]@4, ~@2 [f#4,a4]@16 [c#4,e4]@16 ~ [g4,b4]@16 [d4,f#4]@16 [g4,b4]@16 [d4,f#4]@16 ~@29]/4", // A C Em D F#m C#m G D …
AG: "[f#4,d5]@4 ~@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 ~ [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@3", // D A
AH: "[~ [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@8 ~@5 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@4 [e4,g4]@4 [g4,b4]@4 [f#4,a4]@4 ~ [d4,f#4]@4 ~@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 ~ [b3,d4,f#4]@4]/5", // A Em Bm Em Bm Dsus2 A Em …
AI: "[b3,d4,f#4]@2 ~ [e4,g4,b4]!4 [d4,f#4,b4]", // Bm Em Bm
AJ: "[[d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 ~ [c#4,e4,a4]@4 [e4,g4]@2 [e4,g4]@2 [g4,b4]@4 [f#4,a4]@8 [f#4,a4]@4 [d4,f#4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@3]/2", // Bm Dsus2 A Em G F#m D F#m …
AK: "[~ [e4,g4]@4 [e4,g4]@4 ~ [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@5 [f#4,a4]@4]/2", // Em D C#m D F#m
AL: "[~ [e4,g4]@5 [e4,g4]@5 [d4,f#4]@6 [a4,c5]@6 [g4,b4]@6 ~ [g4,b4]@7 [f#4,a4]@7 [f#4,a4]@8 [a3,f#4]@9 [c4,g4]@9 [d4,a4]@10 ~@16]/3", // Em D Am G F#m D C5 D5
})).s("gm_epiano2").gain(0.09).pan(0.3)
// other · vibraphone · "Bells"
const vibraphone = note("<~ A@7 ~@77 B@4 C D@2 E F G@2 H I@3 J@2>".pickRestart({
A: "[~@5 a4 a5 e5@11 ~@3 a4 a5 e5@11 ~@3 a4 a5 e5@11 ~@6]/7",
B: "[~@7 g5@9 g5@7 f#5@2 a5@4 ~ g5@4 d5@9 ~ g5@9 g5@7 f#5@2 a5@9 g5@9 g5@4 ~ f#5@9 f#5@14 ~@4 e5@4 ~ g5@4 f#5@7]/4",
C: "~@2 f#5@14 d5@9 g5@7", D: "[~@2 g5@7 f#5@2 a5@4 ~ g5@4 ~ d5@9 g5@9 g5@7 f#5@2 a5@9 g5@7]/2",
E: "~@2 g5@4 ~ f#5@9 f#5@14 ~@2", F: "~@2 e5@4 ~ g5@4 f#5@9 f#5@12",
G: "[~@2 d5@9 g5@9 g5@7 f#5@2 ~ a5@4 g5@4 ~ d5@9 g5@9 g5@7]/2", H: "f#5@2 a5@9 g5@9 g5@4 ~ f#5@7",
I: "[~@2 f#5@14 ~@4 e5@4 ~ g5@4 f#5@9 ~ f#5@13 d5@9 g5@9 g5@7 f#5@2 ~ a5@4 g5@4 ~ d5@7]/3",
J: "[~@2 g5@9 g5@7 f#5@2 a5@9 g5@9 ~@26]/2",
})).s("gm_vibraphone").gain(0.44)
// chords · piano · "Piano2"
const piano = note(`<
~ A B A B C D E F G@2 H@3 I J K@6 L@6 M N O@2 P@2 Q@2 R S T@4 U@2 V@2 W@3 X Y Z AA ~@10 AB AC AD AE@4 AF AG AH@5 AI AJ
AK AL@2 AM@3 ~@17
>`.pickRestart({
A: "[c#4,e4] [d4,f#4]", B: "[c#4,e4] [c#4,e4]@2 [d4,f#4]@2 ~@3", C: "[d4,f#4] [e4,g4]",
D: "[d4,f#4] [d4,f#4]@2 [e4,g4]@2 ~@3", // D Em
E: "~@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 ~ [e4,g4]@3", // F#m Em
F: "~ [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@7", // Em D C#m D
G: "[~@5 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 ~ [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@6]/2", // F#m Em D C#m D
H: "[~@6 [f#4,a4]@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 ~@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [c#4,e4]@4 [e4,g4]@8 ~@13 [f#4,a4]@4 [f#4,a4]@4]/3", // F#m Em D C#m Em F#m
I: "[f#4,a4]!2 [e4,g4]!4 [d4,f#4]!2", J: "~ [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 [f#4,a4]@3",
K: "[~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 c5@4 ~ b4@4 b4@4 a4@4 a4@4 b4@4 b4@8 ~@4 [d4,b4]@4 [d4,b4]@4 [d4,b4]@4 [d4,b4]@4 [d4,a4]@4 [d4,a4]@4 ~ [d4,a4]@4 ~@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [d4,a4]@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 ~@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 [b3,g4]@4 ~ [b3,f#4]@4 [b3,f#4]@4 [b3,f#4]@36 e4@8, ~@21 c4@8 ~ d4@8 d4@16 ~@138]/6", // F#m Em D G D5 Em B5
L: "[~ f#4@8 b3@8 d4@8 [c#4,e4]@24 ~@9 [f#4,a4,d5]@4 [f#4,a4,d5]@4 [f#4,a4,e5]@4 [f#4,a4,e5]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,b4]@4 [c#4,e4,d5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 ~ [d4,f#4]@4 [d4,f#4,d5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,f#5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,d5]@4 [d4,f#4,d5]@4 [a4,c#5,e5]@4 [a4,c#5,e5]@4 [g4,e5]@4 [g4,e5]@2 [g4,e5]@2 ~ [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@4 [f#4,d5]@4 [f#4,a4,d5]@4]/6", // C#m D F#m7 A C#m7 C#m Em Gmaj7 …
M: "[f#4,a4,d5] [f#4,a4,e5]!2 [c#4,e4,a4]!2 [c#4,e4,b4] [c#4,e4,d5] [g4,b4,e5]", // D F#m7 A C#m7 C#m Em
N: "[g4,b4,e5]@4 ~ [g4,b4,e5]@4 f#5@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4]@4 [d4,f#4,d5]@4 [g4,b4,e5]@3", // Em Bm D Em
O: "[~ [g4,b4,e5]@4 [g4,b4,f#5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,d5]@4 [d4,f#4,d5]@4 ~ [a4,c#5,e5]@4 [a4,c#5,e5]@4 [g4,e5]@4 [g4,e5]@4 [g4,e5]@4 [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@4 ~@2]/2", // Em Gmaj7 Bm D A C Em D
P: "[~@2 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 ~ [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@8 ~]/2", // D A Em Bm
Q: "[~@3 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 ~ [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@4 [e4,g4]@4 [g4,b4]@4 [f#4,a4]@4 [d4,f#4]@4]/2", // Em Bm Dsus2 A Em G F#m D
R: "~@5 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@3", // D A
S: "~ [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@7", // A Em Bm
T: "[~@6 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@2 [e4,g4]@2 [g4,b4]@4 ~ [f#4,a4]@8 [f#4,a4]@4 [d4,f#4]@32 [c#4,e4]@4 [c#4,e4]@8 ~ [d4,f#4]@8 ~@8]/4", // Em Bm Dsus2 A Em G F#m D …
U: "[~@4 [c#4,e4]@16 [d4,f#4]@16 [c#4,e4]@4 ~ [c#4,e4]@8 [d4,f#4]@8 ~@7]/2", // C#m D C#m D
V: "[~@5 [d4,f#4]@16 [e4,g4]@16 ~ [d4,f#4]@4 [d4,f#4]@8 [e4,g4]@8 ~@6]/2", // D Em D Em
W: "[~@10 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 ~ [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@4]/3", // F#m Em D C#m D F#m Em
X: "[e4,g4]!3 [d4,f#4]!2 [c#4,e4]!2 [d4,f#4]", // Em D C#m D
Y: "[d4,f#4]@8 ~@5 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@3", // D F#m Em
Z: "~ [e4,g4]@4 [e4,g4]@4 ~@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@4 [e4,g4]@3", // Em
AA: "~ [d4,f#4]@2 [c#4,e4]@2 [e4,g4]@4 ~@7", AB: "[f#4,a4,d5]!2 [f#4,a4,e5]!2 [c#4,e4,a4]!2 [c#4,e4,b4] [c#4,e4,d5]",
AC: "[g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4]@4 ~ [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4]@4 [d4,f#4,d5]@3", // Em G Gmaj7 Bm D
AD: "~ [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,f#5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,d5]@4 [d4,f#4,d5]@3", // Em Gmaj7 Bm D
AE: "[~ [a4,c#5,e5]@4 ~ [a4,c#5,e5]@4 [g4,e5]@4 [g4,e5]@2 [g4,e5]@2 [b4,g5]@4 [a4,f#5]@4 [f#4,d5]@4 [f#4,d5]@4 [f#4,a4,d5]@4 [f#4,a4,d5]@4 [f#4,a4,e5]@4 [f#4,a4,e5]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,b4]@4 ~ [c#4,e4,d5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,f#4]@4 [d4,f#4,d5]@4 [g4,b4,e5]@4 [g4,b4,e5]@4 [g4,b4,f#5]@4 [g4,b4,f#5]@4 [d4,f#4,b4]@4 ~ [d4,f#4,b4]@4 [d4,f#4,d5]@4]/4", // A C Em D F#m7 A C#m7 C#m …
AF: "[d4,f#4,d5] [a4,c#5,e5]!2 [g4,e5]!3 [b4,g5] [a4,f#5]", // D A C Em D
AG: "[f#4,d5]@4 ~@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 ~ [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@3", // D A
AH: "[~ [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,d4,f#4]@4 [b3,d4,f#4]@8 ~@5 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [e4,g4,b4]@4 [d4,f#4,b4]@4 [d4,f#4,b4]@4 [d4,e4,a4]@8 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [e4,g4]@4 [e4,g4]@4 [g4,b4]@4 [f#4,a4]@4 ~ [d4,f#4]@4 ~@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [c#4,e4,a4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 [b3,e4,g4]@4 ~ [b3,d4,f#4]@4]/5", // A Em Bm Em Bm Dsus2 A Em …
AI: "[b3,d4,f#4]@2 ~ [e4,g4,b4]!4 [d4,f#4,b4]", AJ: "[d4,f#4,b4] [d4,e4,a4]@2 ~@5",
AK: "~@9 [d4,f#4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [f#4,a4]@4 [e4,g4]@3", // D F#m Em
AL: "[~ [e4,g4]@4 [e4,g4]@4 ~ [e4,g4]@4 [d4,f#4]@4 [d4,f#4]@4 [c#4,e4]@4 [c#4,e4]@4 [d4,f#4]@4 [d4,f#4]@8 ~@4 [f#4,a4]@4 ~ [f#4,a4]@4 [f#4,a4]@5 [f#4,a4]@4]/2", // Em D C#m D F#m
AM: "[~ [e4,g4]@5 [e4,g4]@5 [d4,f#4]@6 [a4,c5]@6 [g4,b4]@6 ~ [g4,b4]@7 [f#4,a4]@7 [f#4,a4]@8 [a3,f#4]@9 [c4,g4]@9 [d4,a4]@10 ~@16]/3", // Em D Am G F#m D C5 D5
})).s("gm_piano").gain(0.1).pan(0.7)
// chords · brass section · "Brass"
const brass_section = note("<~@85 A@4 B C@2 D E F@2 G H@3 I@2>".pickRestart({
A: "[~@7 [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 a4@4 ~ g4@4 [b3,d4]@9 ~ [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 [b3,d4,a4]@9 [b3,d4,g4]@9 [a3,d4,g4]@4 ~ [a3,d4,f#4]@9 [a3,d4,f#4]@14 ~@4 [a3,d4,e4]@4 ~ [a3,d4,g4]@4 [a3,d4,f#4]@7, ~@25 [b3,d4]@9 ~@94]/4", // G Bm G Bm7 G Dsus4 D Asus4 …
B: "~@2 [a3,d4,f#4]@14 [a3,d4]@9 [b3,d4,g4]@7", // D D5 G
C: "[~@2 [b3,d4,g4]@7 f#4@2 a4@4 ~ g4@4 ~ [b3,d4]@9 [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 [b3,d4,a4]@9 [b3,d4,g4]@7, ~@11 [b3,d4]@9 ~@44]/2", // G Bm G Bm7 G Bm
D: "~@2 [a3,d4,g4]@4 ~ [a3,d4,f#4]@9 [a3,d4,f#4]@14 ~@2", E: "~@2 e4@4 ~ [a3,d4,g4]@4 [a3,d4,f#4]@9 [a3,d4,f#4]@12",
F: "[~@2 [a3,d4]@9 [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 ~ a4@4 g4@4 ~ [b3,d4]@9 [b3,d4,g4]@9 [b3,d4,g4]@7, ~@30 [b3,d4]@9 ~@25]/2", // D5 G Bm G Bm
G: "f#4@2 [b3,d4,a4]@9 [b3,d4,g4]@9 [a3,d4,g4]@4 ~ [a3,d4,f#4]@7", // Bm7 G Dsus4 D
H: "[~@2 [a3,d4,f#4]@14 ~@4 [a3,d4,e4]@4 ~ [a3,d4,g4]@4 [a3,d4,f#4]@9 ~ [a3,d4,f#4]@13 [a3,d4]@9 [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 ~ a4@4 g4@4 ~ [b3,d4]@7, ~@80 [b3,d4]@9 ~@7]/3", // D Asus4 Dsus4 D D5 G Bm
I: "[~@2 [b3,d4,g4]@9 [b3,d4,g4]@7 f#4@2 [b3,d4,a4]@9 [b3,d4,g4]@9 ~@26]/2", // G Bm7 G
})).s("gm_brass_section").gain(0.36)
// drums · kick
const kick = s("bd").struct(`<
~ A@6 B ~@6 C D E F ~@2 G A H I J K L M N D E O P Q R A S H J T L U N V D O W ~@6 X L U Y ~@2 Z AA Q AB A AC H AD J L
AE N AF D AG O Q AH A AI AJ ~ W ~@3 AK AL AK AL AM AN AK AO AP AQ AK AR AK AS AT AR ~
>`.pickRestart({
A: "x!4", B: "x", C: "~@5 x ~ x", D: "~@5 x ~@7 x ~@7 x ~@7 x ~@2", E: "~@5 x ~@7 x ~@7 x ~@8 x ~",
F: "~@3 x ~@3 x ~@8", G: "~@3 x", H: "~ x ~@7 x ~@7 x ~@7 x ~@6", I: "~ x ~@7 x ~@7 x ~@3 x ~@4 x ~@5",
J: "~ x ~@3 x ~@3 x ~@3 x ~@2", K: "~@2 x ~@7 x ~@8 x ~@7 x ~@4", L: "~@3 x ~@7 x ~@7 x ~@7 x ~@4",
M: "~@3 x ~@8 x ~@7 x ~@7 x ~@3", N: "~ x ~ x ~ x ~ x", O: "~@3 x ~@3 x ~@3 x ~@3 x", P: "~@6 x ~@7 x ~@8 x ~@7 x",
Q: "~@7 x ~@7 x ~@7 x ~@7 x", R: "~@7 x ~@8 x ~@7 x ~@7", S: "x ~@8 x ~@7 x ~@7 x ~@6",
T: "~@2 x ~@7 x ~@7 x ~@8 x ~@4", U: "~@3 x ~@7 x ~@8 x ~@7 x ~@3", V: "~@4 x ~@8 x ~@7 x ~@7 x ~@2", W: "~@3 x ~@12",
X: "~@27 x ~@4", Y: "~ x ~ x ~ x ~@2", Z: "~@15 x", AA: "~@6 x ~@7 x ~@7 x ~@8 x", AB: "~@7 x ~@7 x ~@8 x ~@3 x ~@3",
AC: "x ~@7 x ~@8 x ~@7 x ~@6", AD: "~ x ~@8 x ~@7 x ~@7 x ~@5", AE: "~@3 x ~@7 x ~@7 x ~@8 x ~@3",
AF: "~@4 x ~@7 x ~@8 x ~@7 x ~@2", AG: "~@5 x ~@8 x ~@7 x ~@7 x ~", AH: "~@7 x ~@7 x ~@7 x ~@8", AI: "x!2 ~@2",
AJ: "~@9 x ~@22", AK: "~@7 x ~@8 x ~@8 x ~@6", AL: "~@2 x ~@9 x ~@8 x ~@8 x ~",
AM: "~@7 x ~@3 x ~@4 x ~@4 x ~@3 x ~@6", AN: "~@2 x ~@8 x ~@9 x ~@8 x ~", AO: "~@2 x ~@8 x ~@8 x ~@9 x ~",
AP: "~@7 x ~@8 x ~@8 x ~@4 x ~", AQ: "~@2 x ~@4 x ~@3 x ~@8 x ~@9 x ~", AR: "~@2 x ~@8 x ~@8 x ~@8 x ~@2",
AS: "~@2 x ~@8 x ~@4 x ~@3 x ~@4 x ~@3 x ~@2", AT: "~@6 x ~@9 x ~@8 x ~@6",
})).gain(0.27)
// drums · snare
const snare = s("sd").struct(`<
~ A B A B A C D ~@6 E F G H ~@5 I J K L M N O@2 P Q R S T U@2 V W X Y Z AA AB AC AD ~@6 AE AF AG AH ~@5 AI AJ AK U AL
AM AN AO AP AQ AR AS AT AU AV AW D AX AY AZ ~@20
>`.pickRestart({
A: "x!2", B: "x ~@7 x ~ x ~ x ~ x!2", C: "x ~@3 x!3 ~", D: "x", E: "~@3 x ~@4", F: "~@5 x ~@11 x ~ x ~@12",
G: "~@5 x ~@26", H: "~@11 x ~@4", I: "~@17 x!2 ~@13", J: "~ x ~@7 x ~@6", K: "~@2 x ~@16 x ~@12",
L: "~@3 x ~@15 x ~@12", M: "~@3 x ~@8 x ~@3 x ~@3 x ~@3 x ~ x ~@5", N: "~ x ~@3 x ~@2", O: "~@5 x ~@15 x ~@10",
P: "~@3 x ~@3 x ~ x ~ x ~ x!2 ~", Q: "~@6 x ~@16 x ~@8", R: "~@7 x ~@15 x ~@8", S: "~@7 x ~@16 x ~@7",
T: "~@4 x ~@3 x ~ x ~ x ~ x!2", U: "~@9 x ~@15 x ~@6", V: "~@5 x ~@7 x ~@2", W: "~@10 x ~@7 x ~@4 x ~@3 x ~@3 x",
X: "~ x ~ x ~@15 x ~@12", Y: "~@3 x ~@16 x ~@3 x ~@3 x ~@3", Z: "x!3 ~@7 x ~@5", AA: "~@4 x ~@16 x ~@3 x ~@3 x ~@2",
AB: "~ x ~ x ~ x ~@15 x ~@10", AC: "~@3 x ~@7 x ~ x ~ x", AD: "~@3 x ~@12", AE: "~@9 x ~@6",
AF: "~@11 x ~@11 x ~ x ~@6", AG: "~@11 x ~@20", AH: "~@7 x", AI: "~@3 x", AJ: "~ x ~ x", AK: "~@8 x ~@16 x ~@6",
AL: "~@5 x ~@3 x ~ x ~ x ~ x", AM: "x ~@4 x ~@7 x ~@2", AN: "~@11 x ~@15 x ~@4", AO: "~@11 x ~@16 x ~@3",
AP: "~@3 x ~ x!3", AQ: "x ~ x ~@9 x ~@16 x ~@2", AR: "~@13 x ~@15 x ~@2", AS: "~@7 x ~@7 x",
AT: "~@7 x ~@3 x ~ x ~ x", AU: "~@3 x ~ x ~@9 x ~@15 x", AV: "~@15 x ~@16", AW: "x ~@3 x ~@2 x", AX: "~@9 x ~@22",
AY: "~@13 x ~@2", AZ: "~ x ~@3 x ~@10",
})).gain(0.27)
// … 44 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.