0:00/0:00
// I Do, I Do, I Do, I Do — ABBA
// 112 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 90 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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.
// bass · electric bass finger · "bass"
const bass = note(`<
~ A B C D E F G H A@2 C D I F J H B@2 K L M N O P Q R S D T F J U V@2 W X A@2 C Y Z L J H A AA K AB AC AD AE AF AG R H
Y AH F AI H AA B C AJ AK AL AM AN AO@2 AP AQ AR AS AT AU AO@2 AV AW AX AO AY AZ AX@2 BA BB@2
>`.pickRestart({
A: "g1@9 ~ b1@8 d2@6", B: "g1@5 b1@4 d2@3", C: "c2@9 ~ e2@8 g1@6", D: "g2 f2 e2 d2", E: "c2@7 ~@3 c2@2 g1@5 ~ g1@6",
F: "c2@7 ~@3 c2@2 g1@6 c2@6", G: "a1@7 ~@3 c#2@8 e2@6", H: "d2@9 ~ f2@8 a2@6", I: "c2@7 ~@3 c2@2 g1@6 g1@6",
J: "a1@9 ~ c#2@8 e2@6", K: "c2@8 ~@2 c2@2 f2@7 ~@3 f2@2", L: "c2@7 ~@3 c2@2 g1@6 c2@5 ~", M: "g2@4 ~ g2 d2@3 g2@3",
N: "c2@7 ~@3 c2@2 g1@5 ~ c2@6", O: "f2@7 ~@3 f2@2 e2@8 ~@2 e2@2", P: "d2@4 ~ d2 c2@4 ~ c2",
Q: "d2@7 ~@3 d2@2 a1@5 ~ a1@6", R: "d2@7 ~@3 d2@2 a1@6 d2@5 ~", S: "d2@4 ~ f2@4 a2@3",
T: "c2@7 ~@3 c2@2 g1@7 ~@3 g1@2", U: "d2@7 ~@3 d2@2 f2@6 a2@6", V: "g1@7 ~@3 b1@8 d2@6",
W: "c2@6 ~@4 c2@2 f2@7 ~@3 f2@2", X: "c2 ~@11", Y: "g2@6 f2@6 e2@6 d2@5 ~", Z: "c2@8 ~@2 c2@2 g1@7 ~@3 g1@2",
AA: "g1@10 b1@8 d2@5 ~", AB: "c2@8 c2@3 ~ g1@6 c2@6", AC: "g2@7 ~@3 g2@2 d2@6 g2@5 ~", AD: "c2@4 ~ c2 g1@3 c2@3",
AE: "f2@7 ~@3 f2@2 e2@7 ~@3 e2@2", AF: "d2@7 ~@3 d2@2 c2@8 ~@2 c2@2", AG: "d2@7 ~@3 d2@2 a1@7 ~@3 a1@2",
AH: "c2@7 ~@3 c2@2 g1@8 ~@2 g1@2", AI: "a1@5 c#2@4 e2@3", AJ: "g#1@5 c2@4 g#1@3", AK: "c#2@3 ~@2 c#2 g#1@4 ~ g#1",
AL: "c#2@7 ~@3 c#2@2 g#1@6 c#2@6", AM: "a#1@5 d2@4 f2@3", AN: "d#2@9 ~ f#2@8 a#2@6", AO: "g#1@5 c2@4 d#2@3",
AP: "c#2@5 f2@4 g#1@3", AQ: "g#2 f#2 f2 d#2", AR: "c#2@4 ~ c#2 g#1@4 ~ g#1", AS: "c#2@4 ~ c#2 g#1@3 c#2@3",
AT: "a#1@9 ~ d2@8 f2@6", AU: "d#2@5 f#2@4 a#2@3", AV: "c#2@7 ~@3 c#2@2 f#2@7 ~@3 f#2@2", AW: "c#2 ~@7",
AX: "g#1@9 ~ c2@8 d#2@6", AY: "c#2@10 f2@8 g#2@5 ~", AZ: "c#2@5 f2@4 g#2@3", BA: "c#2@7 ~@3 c#2@2 f#2@8 ~@2 f#2@2",
BB: "[c#2@4 ~@2 g#1@4 ~@2 c#2@25 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.4)
// chords · piano
const piano = note(`<
~ A@2 B A C B D E A@2 B A C B D E A@2 F B G B H@2 I@2 E A C B D E A@2 F J A@2 B A C B D E A@2 F B G B H@2 I@2 E A C B
D E A@2 B K L M N O K@2 M K L M N O K@2 P Q K@2 M@2 K@2 P R@2
>`.pickRestart({
A: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
B: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
C: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // C G
D: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~", // A
E: "[f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~", // Dm
F: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // C F
G: "[d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~", // Gm
H: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
I: "[f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~", // D
J: "[e4,g4,c5] ~@23", // C
K: "[d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~", // G#
L: "[f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~", // C# G#
M: "[f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~", // C#
N: "[f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~ [f4,a#4,d5] ~", // A#
O: "[f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~ [f#4,a#4,d#5] ~", // D#m
P: "[f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~", // C# F#
Q: "[f4,g#4,c#5] ~@23", // C#
R: "[[f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [f4,g#4,c#5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [d#4,g#4,c5] ~ [f4,g#4,c#5]@24 ~@12]/2", // C# G# C#
})).s("gm_piano").gain(0.35)
// other · tenor sax · "sax 1"
const tenor_sax = note(`<
A@2 B C@2 D E F G H@2 E I D E J K H@2 L@2 M E N@2 O@2 K I D E J K H@2 E P@2 B C@2 Q@2 R@2 S B L@2 T E N@2 U@2 K I D V
J K H@2 W@2 X Y K Z AA@2 AB@2 X J K Z L@2 J AC@2 AD J AC@2 AD AE@2 ~
>`.pickRestart({
A: "[~@2 c4 e4 c4 e4 f4 c4 f4 f#4 d#4 f#4@11 ~ f#4]/2", B: "g4@2 e4 f4@2 d4 e4@2 c4 d4@2 b3",
C: "[c4@6 e4@3 d#4@2 d4@10 ~@3]/2", D: "c4 b3", E: "c4", F: "c#4@3 c#4", G: "d4@17 ~ d4@6", H: "b3/2", I: "b3",
J: "c#4", K: "d4", L: "c4/2", M: "a#3", N: "a3/2", O: "d4/2",
P: "[~@4 c4@2 e4@2 c4@2 e4@2 f4@2 c4@2 f4@2 f#4@2 d#4@2 f#4@21 ~@3 f#4@2]/2",
Q: "[g3@6 a3@3 b3@2 d4@3 c4@4 f4@3 e4@3]/2", R: "[a3@6 b3@3 c#4@2 e4@3 d4@6 f4@2 f#4@2]/2", S: "f#4@19 ~@3 f#4@2",
T: "a#3@23 ~", U: "[d4@47 ~]/2", V: "c4@23 ~", W: "[c4@47 ~]/2", X: "c#4 c4", Y: "c#4@23 ~", Z: "d#4",
AA: "[~@23 c5, c4]/2", AB: "[c#5@6 a#4@4 ~@2 g#4@3 ~@3 a#4@4 ~@2 c4@24, c#4 ~, ~@11 g#4@11 ~@2]/2",
AC: "[~@2 c#4 f4 c#4 f4 f#4 c#4 f#4 g4 e4 g4@11 ~ g4]/2", AD: "g#4@2 f4 f#4@2 d#4 f4@2 c#4 d#4@2 c4",
AE: "[c#4@9 ~@7]/2",
})).s("gm_tenor_sax").gain(0.45).pan(0.2)
// other · tenor sax · "sax 2"
const tenor_sax_2 = note(`<
A@2 B C@2 D E F G H@2 F I D E F G H@2 J F I F K@2 L@2 M N D E F M H@2 O P@2 B C@2 Q@2 R@2 S B O F I E K@2 L@2 M N D E
F G T@3 U V G M W X@2 G U V G M W X@2 Y Z@2 AA M AB@2 AA Y AC ~
>`.pickRestart({
A: "[~@2 e4 g4 e4 g4 a4 f4 a4 a#4 f#4 a#4@11 ~ a#4]/2", B: "b4@2 g4 a4@2 f4 g4@2 e4 f4@2 d4",
C: "[e4@6 a4@3 g#4@2 g4@10 ~@3]/2", D: "e4 d4", E: "e4@23 ~", F: "e4", G: "f4@23 ~", H: "g4/2", I: "d4",
J: "e4@12 f4@11 ~", K: "f4/2", L: "f#4/2", M: "f4", N: "g4", O: "e4 f4",
P: "[e4@2 ~@2 e4@2 g4@2 e4@2 g4@2 a4@2 f4@2 a4@2 a#4@2 f#4@2 a#4@21 ~@3 a#4@2]/2",
Q: "[g3@6 a3@3 b3@2 d4@3 c4@4 f4@3 e4@3]/2", R: "[a3@6 b3@3 c#4@2 e4@3 d4@6 a4@2 a#4@2]/2", S: "a#4@10 ~ a#4",
T: "[g4@2 e4]/3", U: "d#4", V: "f4 d#4", W: "f#4", X: "g#4/2", Y: "f4 f#4",
Z: "[f4 ~ f4 g#4 f4 g#4 a#4 f#4 a#4 b4 g4 b4@11 ~ b4]/2", AA: "c5@2 g#4 a#4@2 f#4 g#4@2 f4 f#4@2 d#4",
AB: "[~@2 f4 g#4 f4 g#4 a#4 f#4 a#4 b4 g4 b4@11 ~ b4]/2", AC: "f4 ~@7",
})).s("gm_tenor_sax").gain(0.45).pan(0.8)
// chords · electric guitar clean · "git. 1"
const electric_guitar_clean = note(`<
~ A@2 B A C B D E A@2 B A C B D E A@2 F G H B I J K@2 J A C B D E A@2 L M A@2 B A C B D E A@2 N B H B I J K@2 J A C B
D E A@2 B O P Q R S O@2 T U V Q R S O@2 W ~ O@2 Q@2 O@2 X Y ~
>`.pickRestart({
A: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~ [b3,d4,g4]", B: "~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4]",
C: "~@3 [c4,e4,g4] ~@5 [b3,d4,g4] ~ [b3,d4,g4]", D: "~@3 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~ [c#4,e4,a4]",
E: "~@3 [d4,f4,a4] ~@5 [d4,f4,a4] ~ [d4,f4,a4]", F: "~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,f4,a4] ~ [c4,f4,a4]",
G: "~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,e4,g4]", H: "~@3 [a#3,d4,g4] ~@5 [a#3,d4,g4] ~ [a#3,d4,g4]",
I: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~ [a3,c4,f4]", J: "~@3 [a3,d4,f4] ~@5 [a3,d4,f4] ~ [a3,d4,f4]",
K: "~@3 [a3,d4,f#4] ~@5 [a3,d4,f#4] ~ [a3,d4,f#4]", L: "~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,f4,a4] ~@2",
M: "[c4,e4,g4] ~@11", N: "~@3 [c4,e4,g4] ~@5 [c4,f4,a4] ~ [c4,f4,a4]",
O: "~@3 [c4,d#4,g#4] ~@5 [c4,d#4,g#4] ~ [c4,d#4,g#4]", // G#
P: "~@3 [c#4,f4,g#4] ~ [c#4,f4,g#4] ~@3 [c4,d#4,g#4] ~ [c4,d#4,g#4]", // C# G#
Q: "~@3 [c#4,f4,g#4] ~@5 [c#4,f4,g#4] ~ [c#4,f4,g#4]", R: "~@3 [d4,f4,a#4] ~@5 [d4,f4,a#4] ~ [d4,f4,a#4]",
S: "~@3 [d#4,f#4,a#4] ~@5 [d#4,f#4,a#4] ~ [d#4,f#4,a#4]", T: "~@3 [c#4,f4,g#4] ~ [c#4,f4,g#4] ~@3 [c#4,f4,g#4] ~@2",
U: "~@3 [c4,d#4,g#4] ~ [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~ [c4,d#4,g#4]", // G#
V: "~@3 [c#4,f4,g#4] ~@5 [c4,d#4,g#4] ~ [c4,d#4,g#4]", W: "~@3 [c#4,f4,g#4] ~ [c#4,f4,g#4] ~@3 [c#4,f#4,a#4] ~@2",
X: "~@3 [c#4,f4,g#4] ~@5 [c#4,f#4,a#4] ~@2", Y: "[c#4,f4,g#4] ~@2 [c4,d#4,g#4] ~@2 [c#4,f4,g#4] ~@5",
})).s("gm_electric_guitar_clean").gain(0.3)
// chords · piano · "piano 2"
const piano_2 = note(`<
~ A@2 B A C B D E A@2 F A C B D E A@2 G B H B I J K L E A C B D E A@2 G M A@2 B A C B D E A@2 G B H B N O P L E A C B
D E A@2 B Q R S T U Q@2 S Q R S T U Q@2 V W Q@2 S@2 Q@2 V X ~
>`.pickRestart({
A: "~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4]", // G
B: "~@2 [c4,e4,g4]!2 ~ [c4,e4,g4] ~@2 [c4,e4,g4]!2 ~ [c4,e4,g4]", // C
C: "~@2 [c4,e4,g4]!2 ~ [c4,e4,g4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4]", // C G
D: "~@2 [c#4,e4,a4]!2 ~ [c#4,e4,a4] ~@2 [c#4,e4,a4]!2 ~ [c#4,e4,a4]", // A
E: "~@2 [d4,f4,a4]!2 ~ [d4,f4,a4] ~@2 [d4,f4,a4]!2 ~ [d4,f4,a4]", // Dm
F: "~@2 [c4,e4,g4]!2 ~ [c4,e4,g4] ~@2 [c4,e4] [c4,e4,g4] ~ [c4,e4,g4]", // C
G: "~@2 [c4,e4,g4]!2 ~ [c4,e4,g4] ~@2 [c4,f4,a4]!2 ~ [c4,f4,a4]", // C F
H: "~@2 [d4,g4,a#4]!2 ~ [d4,g4,a#4] ~@2 [d4,g4,a#4]!2 ~ [d4,g4,a#4]", // Gm
I: "[f4,a4]@2 [c4,f4,a4]!2 ~ [c4,f4,a4,c5] ~@2 [c4,f4,a4]!2 ~ [c4,f4,a4,c5], c5@7 ~@5 [e4,g4,c5]@8 ~@2 [e4,g4] ~", // F C Em
J: "[d4,f4]@2 [d4,f4,a4]!2 ~ [d4,f4,a4] ~@2 [d4,f4,a4]!2 ~ [d4,e4,f4,a4,c5], c5@4 ~ c5@5 ~@2, ~@12 [c4,e4]@8 ~@2 c4 ~", // Dm Dm7 C
K: "[d4,f#4]@2 [d4,f#4,a4]!2 ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]!2 ~ [d4,f#4,a4]", // D
L: "~@2 [d4,f#4,a4]!2 ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]!2 ~ [d4,f#4,a4]", M: "[c4,e4,g4] ~@11",
N: "[f4,a4]@2 [c4,f4,a4]!2 ~ [c4,f4,a4,c5] ~@2 [c4,f4,a4]!2 ~ [c4,f4,a4], c5@8 ~@4 [e4,g4,c5]@8 ~@2 [e4,g4,c5] ~", // F C
O: "f4@2 [c4,f4,a4]!2 ~ [c4,f4,a4,c5] c4@2 [c4,f4,a4]!2 ~ [c4,e4,f4,a4,c5], [d4,c5]@8 ~@2 d4 ~ [e4,c5]@8 ~@4", // F Fmaj7 D7 C
P: "d4@2 [d4,f4,a4] [d4,f#4,a4] ~ [d4,f#4,a4] ~@2 [d4,f#4,a4]!2 ~ [d4,f#4,a4], f#4 ~@3", // Dm D
Q: "~@2 [c4,d#4,g#4]!2 ~ [c4,d#4,g#4] ~@2 [c4,d#4,g#4]!2 ~ [c4,d#4,g#4]", // G#
R: "~@2 [c#4,f4,g#4]!2 ~ [c#4,f4,g#4] ~@2 [c4,d#4,g#4]!2 ~ [c4,d#4,g#4]", // C# G#
S: "~@2 [c#4,f4,g#4]!2 ~ [c#4,f4,g#4] ~@2 [c#4,f4,g#4]!2 ~ [c#4,f4,g#4]", // C#
T: "~@2 [d4,f4,a#4]!2 ~ [d4,f4,a#4] ~@2 [d4,f4,a#4]!2 ~ [d4,f4,a#4]", // A#
U: "~@2 [d#4,f#4,a#4]!2 ~ [d#4,f#4,a#4] ~@2 [d#4,f#4,a#4]!2 ~ [d#4,f#4,a#4]", // D#m
V: "~@2 [c#4,f4,g#4]!2 ~ [c#4,f4,g#4] ~@2 [c#4,f#4,a#4]!2 ~ [c#4,f#4,a#4]", W: "[c#4,f4,g#4] ~@11",
X: "[c#4,f4,g#4] ~@2 [c4,d#4,g#4] ~@2 [c#4,f4,g#4] ~@5", // C# G# C#
})).s("gm_piano").gain(0.3)
// chords · vibraphone · "bells"
const vibraphone = note(`<
~@4 A B ~@5 C D E ~@4 F G@2 H ~ I@2 ~@2 J K L ~@3 F M ~@5 N O ~@3 P Q ~ R S ~ T@2 ~@2 U V W ~@3 P M ~@6 X ~@2 Y Z ~@3
AA AB ~@11
>`.pickRestart({
A: "[b4,g5]@5 ~ [a4,f5]@5 ~ e5@6 [f4,d5]@5 ~, ~@3 g4 ~@2", B: "[e4,c5]@3 ~", C: "~@6 e5@3 d#5@2 ~",
D: "[b4,d5,g5]@6 [a4,f5]@5 ~ [g4,e5]@5 ~ [f4,d5]@5 ~", E: "[e4,c5]@13 ~@11", F: "~@3 g4",
G: "[c5@27 ~@3 e5@5 ~ d5@6 c5@6]/2", H: "a#4@19 ~@5", I: "[~@6 f5@11 ~ e5@11 ~ d5@11 ~ c5@6]/2",
J: "d4@6 f4@6 a4@5 ~ g#4@5 ~", K: "g4@6 b4@5 ~ c5@5 ~ d5@5 ~", L: "c5@5 ~@7", M: "g5@2 ~",
N: "[b4,g5]@6 [a4,f5]@5 ~ [g4,e5]@6 [f4,d5]@5 ~", O: "[e4,c5]@5 ~@3", P: "~@11 g4", Q: "~@2 g5@17 ~@5",
R: "~ e5 d5 c5", S: "a#4@5 ~@3", T: "[~@6 f5@11 ~ e5@12 d5@12 c5@6]/2", U: "d4@2 f4@2 a4@3 ~",
V: "[b4,g5]@4 ~@2 [a4,f5]@5 ~ [g4,e5]@5 ~ [f4,d5]@4 ~@2", W: "[e4,c5]@5 ~@7", X: "~@10 g#4 ~ g#5 ~@11",
Y: "[c5,g#5]@5 ~ [a#4,f#5]@5 ~ [g#4,f5]@5 ~ [f#4,d#5]@4 ~@2", Z: "[f4,c#5]@7 ~@5", AA: "~@22 g#4 ~", AB: "g#5 ~@23",
})).s("gm_vibraphone").gain(0.35)
// drums · kick
const kick = s("bd").struct("<[~@2 x] [x ~@4 x!2 ~@5]!35 x [x ~@4 x!2 ~@5]!43 x [x ~@4 x!2 ~@5]!7 [x!2] ~>").gain(0.41)
// drums · snare
const snare = s("sd").struct(`<
A B@3 C B@7 C B@14 D@2 B@6 E F B@3 C B@7 C B@7 D B@15 C B@6 E F B@3 G B@3 H ~
>`.pickRestart({
A: "~@9 x ~ x", B: "~ x ~ x", C: "x!3 ~@6 x ~@2", D: "x!12", E: "x!4", F: "x ~@5 x!3 ~@3", G: "~@3 x ~@2 x!3 ~@3",
H: "~ x ~@2",
})).gain(0.46)
// drums · hihat
const hihat = s("hh").struct(`<
~
[x ~ x!2 ~ x!2 ~ x!2 ~ x]!35
x
[x ~ x!2 ~ x!2 ~ x!2 ~ x]!43
x
[x ~ x!2 ~ x!2 ~ x!2 ~ x]!7
[x!3 ~]
~
>`).gain(0.46)
// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@15 B ~@19 B ~@7 B ~@15 B ~@7 B ~@11 A ~@5>".pickRestart({
A: "~@11 x", B: "~@9 x!3",
})).gain(0.41)
// drums · mid tom
const mid_tom = s("mt").struct(`<
~@4 A ~@7 B ~@7 C ~@14 D E ~@3 F ~@7 C ~@15 C ~@7 F ~@6 D E ~@3 G ~@3 H ~
>`.pickRestart({
A: "~@6 x!5 ~", B: "~@6 x!6", C: "~@3 x!6 ~@3", D: "~ x!2 ~ x!2 ~ x!2 ~ x!2", E: "~@10 x!2", F: "~@6 x!3 ~@3",
G: "~@9 x!2 ~", H: "~@4 x!2 ~@6",
})).gain(0.41)
// drums · high tom
const high_tom = s("ht").struct("<~@4 A ~@7 B ~@7 C ~@15 D ~@3 B ~@23 C ~@7 B ~@7 D ~@7 E ~>".pickRestart({
A: "~@6 x ~@3 x!2 ~@12", B: "~@3 x!3 ~@6", C: "x!3 ~@9", D: "~@3 x", E: "~ x ~@2",
})).gain(0.41)
// drums · crash
const crash = s("cr").struct(`<
~ A ~@3 A ~@7 A ~@7 A ~@7 A ~@6 A@2 ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@6 A@2 ~@3 A ~@2 B ~
>`.pickRestart({
A: "x", B: "~ x",
})).gain(0.46)
// … 5 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.