0:00/0:00
// Name of the Game — ABBA
// 156 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/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 · lead 5 charang · "CHARANG"
const lead_5_charang = note("<~ A@5 B@3 C@3 D@2 B@3 E D@4 B@3 ~@120>".pickRestart({
A: "[~@4 [f#3,c#4]@15 [b3,e4] ~@3 f#3 [b3,e4]@4 [f#3,c#4]@22 ~ [b3,e4] ~@3 f#3 [b3,e4]@4 [f#3,c#4]@20]/5", // F#5 E5 F#5 E5 F#5
B: "[~@3 [b3,e4] ~@3 f#3 [b3,e4]@4 [f#3,c#4]@12 e4@4 d#4@20, ~ b3]/3", // E5 F#5
C: "[[f#3,c#4]@19 [b3,e4] ~@3 f#3 [b3,e4]@4 [f#3,c#4]@20]/3", D: "[~@3 [b3,e4] ~@3 f#3 [b3,e4]@4 [f#3,c#4]@20]/2",
E: "[f#3,c#4]", // F#5
})).s("gm_lead_5_charang").gain(0.17).pan(0.3)
// bass · fretless bass · "FRETLESS"
const bass = note(`<
~ A B@4 C@3 D E@4 F@3 D E@4 G@3 H I J K H I J L M N@3 O P Q R S P M T U V M T W X Y P W Z AA AB AC ~@7 AD AE AF AE AG
AH AI AJ@2 AK@2 AL@2 AM@2 R O P Q R S P M T U V M T W X Y P W Z AA AB AN ~@7 AD AE AF AE AG AH AI AJ@2 AK@2 AL@2 AM@4
R O P Q R S P M R O P Q R S P M AO@3
>`.pickRestart({
A: "f#2 g#2 a2 b2", B: "[b1 c#2 e2 f#2@2 g#2 a2 b2]/2", C: "[b1@2 c#2@2 e2@2 f#2@4 g#2@2 a2@2 b1@9 ~]/3",
D: "f#2@4 g#2@4 a2@4 b2@2 ~ b2", E: "[b1@4 c#2@4 e2@4 f#2@8 g#2@4 a2@4 b2@2 ~ b2]/2",
F: "[b1 c#2 e2 f#2@2 g#2 a2 b1@5]/3", G: "[b1@4 c#2@4 e2@4 f#2@8 g#2@4 a2@4 b1@18 ~ f#2]/3",
H: "f#1@2 ~ f#1 g#1@4 a1@4 c#2@4", I: "d#2@12 ~@3 d#2", J: "c#2@13 ~@2 c#2", K: "d2@8 ~@4 c#2 b1 ~ a1, ~@11 e2@2 ~@3",
L: "d2@14 ~ a1", M: "d2", N: "[b1@12 e1@16 ~@4 a1@11 ~@3 a1 ~, ~@31 e1@2 ~@15]/3", O: "d2 ~ d2@6", P: "e2",
Q: "d2@11 ~ d2@4", R: "a1@11 ~@3 a1 ~", S: "d2@2 ~@2 d2@7 ~ d2@4", T: "a1@5 ~ a1@2", U: "d2@9 ~@3 d2@4",
V: "e2@5 ~ e2@2", W: "c#2@9 ~@3 c#2@4", X: "f#1", Y: "b1@11 ~ b1@4", Z: "f#1@9 ~@3 f#1@4", AA: "b1",
AB: "~@4 e1@2 ~@2 e1@5 ~@3", AC: "e1 ~@3 e1@5 ~@7", AD: "~@7 a1", AE: "a1@4 ~@10 a1 ~", AF: "a1 ~ a1 ~ a1@4 ~@6 a1 ~",
AG: "a1@4 a2@4 ~@2 e2@2 ~@2 e2 ~", AH: "a1@6 ~@8 a1 ~", AI: "a1 a2 ~ c#2", AJ: "[f#1@4 ~@2 f#1@7 ~ f#1@2]/2",
AK: "[g#1@3 c#2@5]/2", AL: "[d2@25 ~@7]/2", AM: "[~@3 e1@4 ~]/2", AN: "e1 ~@3 e1@8 ~@4", AO: "[~@4 a1@29 ~@15]/3",
})).s("gm_fretless_bass").gain(0.44)
// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
~@25 A B C D E F G H@2 I@2 J K L M J N L O P Q R S T U V W X Y V W Z AA ~@6 AB@2 AC@2 AD AE@2 AF AG@2 AH AI AJ@2 AK@2
AL K L M J N L O P Q R S T U V W X Y V W Z AA ~@6 AB@2 AC@2 AD AE@2 AF AG@2 AH AI AJ@2 AK@4 AL K L M J N L O AL AM L M
AN AO L O AP@3
>`.pickRestart({
A: "[f#3,a3,c#4,f#4] ~@3 [f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@2 ~@2 [f#3,a3,c#4,f#4]@2 ~ [f#3,a3,c#4,f#4]", // F#m
B: "[f#3,a3,c#4,f#4]@2 ~ [f#3,b3,d#4,f#4] [f#3,b3,d#4,f#4]@3 ~ [f#3,b3,d#4,f#4]@8", // F#m B
C: "[e3,g#3,c#4,e4] ~@3 [e3,g#3,c#4,e4]@4 [e3,g#3,c#4,e4]@2 ~@2 [e3,e4]@3 [e3,g#3,c#4], ~@6 [g#3,c#4] ~", // C#m E C#m C#5
D: "[e3,g#3,c#4,e4]@2 ~ [d3,a3,c#4,f#4] [d3,a3,c#4,f#4]@2 ~@2 [d3,a3,c#4,f#4]@8", // C#m Dmaj7
E: "[f#3,a3,c#4,f#4]@2 ~@2 [f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@2 ~@2 [f#3,a3,c#4,f#4]@2 ~ [f#3,a3,c#4,f#4]", // F#m
F: "[f#3,a3,c#4,f#4]@2 ~ [f#3,b3,d#4,f#4]!2 ~@3 [f#3,b3,d#4,f#4]@7 ~", // F#m B
G: "[e3,g#3,c#4,e4] ~@3 [e3,g#3,c#4,e4]@4 [e3,g#3,c#4,e4]@2 ~@2 [e3,g#3,c#4,e4]@3 [e3,g#3,e4]", // C#m E
H: "[[e3,g#3,e4]@8 [d3,a3,c#4,f#4]@23 ~, c#4@3 ~@13]/2", I: "[[b2,f#3,a3,d4,f#4]@12 [e2,b2,d3,a3,b3,e4]@19 ~]/2",
J: "[a2,e3,a3,c#4,e4,a4]@8 [a2,e3,a3,c#4,e4,a4]@6 [a2,e3,a3,c#4,e4,a4] ~", // A
K: "d4@2 d4 [f#3,a3,e4,a4] [d3,f#3,a3,d4,e4,a4]@4 [d3,f#3,a3,d4,e4,a4]@8, [d3,f#3,a3,e4,a4] ~@3", // F#m7 D
L: "[b2,e3,g#3,b3,e4]@8 [b2,e3,g#3,b3,e4]@6 ~ [e3,g#3,b3,e4]", // E
M: "[e3,g#3,b3,e4]@3 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@4 [b2,e3,g#3,b3,e4]@8, ~@3 b2@4 ~@9", // E
N: "[d3,f#3,d4,e4,a4]@2 [f#3,d4,e4,a4] d3 [d3,f#3,a3,d4,e4,a4]@4 [d3,f#3,a3,d4,e4,a4]@8, a3 ~@3", // D
O: "[e3,g#3,b3,e4]@3 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@8", // E
P: "[a2,e3,a3,c#4,e4,a4]@8 [a2,e3,a3,c#4,e4,a4]@6 c#4 [a2,e3,a3,e4,a4]", // A A5
Q: "[d3,f#3,d4,e4]@2 [d4,e4] [d3,f#3] [d3,f#3,a3,d4,e4,a4]@4 [d3,f#3,a3,d4,e4,a4]@8, [a3,a4] ~@3", // D Dsus2 D A
R: "[b2,e3,g#3,b3,e4]@8 [b2,e3,g#3,b3,e4]@6 ~ [b2,e3,g#3,b3]", // E
S: "[b2,e3,b3,e4]@3 [e3,b3,e4] [e3,g#3,b3,e4]@4 [b2,e3,g#3,b3,e4]@7 ~, g#3 ~@15", // E5 E
T: "[a2,e3,a3,c#4,e4,a4]@8 [a2,e3,a3,c#4,e4,a4]@6 [e3,a3,e4] a4", // A A5
U: "[c#3,f3,g#3,c#4,f4]@2 f4 c#4 [c#4,f4]@3 ~ [c#3,f3,g#3,c#4,f4]@7 ~, ~ g#3@2 ~@5, ~@3 [c#3,f3]@4 ~@9", // C#
V: "~ f#4@15, [f#3,a3,c#4]@15 ~", W: "~ f#4@14 ~, [f#3,b3,d#4]@15 ~", X: "[g#3,b3,e4]@15 ~",
Y: "~ f4@14 ~, [f3,g#3,c#4]@15 ~", Z: "~@4 [e2,d3,a3,b3,e4,a4] ~@3 [e2,d3,a3,b3,e4,a4]@6 ~@2",
AA: "[e2,d3,a3,b3,e4,a4] ~@3 [e2,d3,a3,b3,e4,a4]@12", // Esus4
AB: "[[d3,a3,d4,f#4]@3 ~ [d3,b3,d4,g4]@7 ~ [d3,a3,d4,f#4]@7 ~ d3@4 d3@4 [d3,f#3,a3,d4]@3 ~, ~@5 [g3,a3,e4]@2 ~]/2", // D G D A7
AC: "[~@4 [a2,e3,a3,c#4,e4,a4]@2 ~@2 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@3 ~@9 [e3,a3,c#4,e4,a4]@3 ~, ~@8 a2@16 a2@7 ~, ~@8 e3@7 ~@5 [e3,a3,c#4,e4,a4]@7 ~@5]/2", // A
AD: "[d3,a3,d4,f#4,a4]@2 ~@2 [d3,a3,d4,f#4,a4]@3 ~ [d3,a3]@4 [d3,a3]@2 [d3,a3,d4,f#4,a4]@2, ~@4 [d4,f#4,a4]@3 ~", // D D5 D
AE: "[[d3,a3,d4,f#4,a4]@4 [d3,a3]@4 [d3,a3]@4 [d3,d4,f#4,a4]@3 ~ [a2,e3,c#4,e4,a4]@2 ~@2 [a2,e3,a3,c#4,e4,a4]@2 ~@2 [a2,e3,a3,c#4,e4,a4]@4 [a2,e3,a3,c#4,e4,a4]@2 [e3,a3,c#4,e4,a4]@2, ~@2 [d4,f#4,a4]@4 a3@3 ~@7]/2", // D D5 D A D
AF: "[a2,e3,a3,c#4,e4,a4]@4 [a2,e3,a3]@4 [a2,e3,a3]@4 [a2,e3,a3,c#4,e4,a4]@3 ~, ~ [c#4,e4,a4]@2 ~", // A A5 A
AG: "[[f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@3 ~ [f#3,a3,c#4]@4 [f#3,a3,c#4]@4 [f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@4 [f#3,a3,c#4,f#4]@3 ~, ~@3 f#4@2 ~@3]/2", // F#m
AH: "[g#3,b3,d#4,g#4]@4 [g#3,b3,d#4,g#4]@4 [g#3,b3,d#4,g#4]@3 ~ [g#3,c#4,f4,g#4]@4", // G#m C#
AI: "[g#3,c#4,f4,g#4]@4 [g#3,c#4,f4,g#4]@4 [g#3,c#4]@4 [g#3,c#4]@3 ~, ~@8 [f4,g#4]@7 ~", // C# C#5 Fm
AJ: "[[c#4,f#4]@4 [c#4,f#4]@4 [c#4,f#4,a4]@3 ~ c#4@4 c#4@4 [c#4,f#4]@4 [d3,a3,f#4,a4]@8, [d3,a3]@11 ~ [d3,a3,a4]@12 ~@8, a4@8 ~@4 f#4@7 ~@5 c#4@6 ~@2]/2", // F#5 F#m F#5 D D5
AK: "[~@12 [e2,b2,d3,a3]@19 ~, ~@12 [b3,e4]@17 ~@3]/2", // Esus4 E5
AL: "[e3,a3,c#4,e4,a4]@8 [a2,e3,a3,c#4,e4,a4]@6 ~ [a2,e3,a3,c#4,e4,a4]", // A
AM: "[d3,f#3,a3,d4,e4,a4]@3 [f#3,a3,d4,e4,a4] [d3,f#3,a3,d4,e4,a4]@4 [d3,f#3,a3,d4,e4,a4]@8", // D
AN: "[a2,e3,a3,c#4,e4,a4]@8 [a2,e3,a3,c#4,e4,a4]@6 ~ [a2,e3,a3,c#4,e4,a4]", // A
AO: "[a3,d4,e4,a4]@3 [d3,f#3,d4,e4,a4] [d3,f#3,a3,d4,e4,a4]@4 [d3,f#3,a3,d4,e4,a4]@8, [d3,f#3] ~@7", // Asus4 D
AP: "[~@4 [a2,e3,a3,c#4,e4]@31 ~@13]/3", // A
})).s("gm_acoustic_guitar_steel").gain(0.19).pan(0.3)
// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
~@9 A@2 B@2 C@4 A@4 D@5 ~@7 E F G@2 H@4 ~@2 I@6 ~@14 J K@8 L@4 M@2 N@3 O@4 P@4 Q@4 ~@14 R S@8 T@4 M@2 U@2 V@3 W@4 P@4
X@4 Y@6
>`.pickRestart({
A: "[f#4 g#4 a4 g#4@5]/2", B: "[f#4@4 g#4@3 a4@5 g#4@20]/2", C: "[f#4 g#4 a4 g#4@2 f#4 e4 f#4@4 f#4@5]/4",
D: "[f#4@2 g#4@2 a4@2 g#4@4 f#4@2 e4@2 f#4@8 f#4@11 ~@7]/5", E: "~@2 f#4 g#4", F: "a4",
G: "[~@4 d4@11 c#4@17, ~ [a3,e4,a4]@7]/2", // A5
H: "[~@12 [d4,a4]@3 c#4 [b3,g#4]@8 [a3,c#4,a4]@4 [g#3,b4]@12 [b3,g#4]@4 [a3,c#4,a4]@20, ~@3 e4@13, ~@7 d4@4 ~@5]/4", // D5 E A G#m E A
I: "[~@4 d4@11 c#4@4 [b3,d4,f#4] [a3,c#4]@16 ~@8 [d4,a4]@3 c#4 [b3,g#4]@8 [a3,c#4,a4]@4 b4@8 g#4@8 [a3,c#4,a4]@20, ~ [a3,e4,a4]@4 ~@6 e4@13, ~@15 [g#3,d4]@4 ~@5]/6", // Bm A D5 E A A5 G#dim
J: "~@12 d4@3 e4",
K: "[f#4@4 g4@8 f#4@8 e4@4 d4@4 ~@8 c#4@24 d4@8 f#4@15 e4 d4@8 ~@8 [e4,a4]@24 f#4@2 g#4@2, ~@7 e4@8 ~@8 [a3,c#4]@8 ~]/8", // A5 A
L: "[a4@4 b4@8 a4@8 g#4@4 a4@2 g#4@2 f#4@21 ~@7 f#4@4 g#4@4]/4", M: "[a4@2 b4 a4@2 g#4 f#4 g#4]/2",
N: "[a4@2 a4@2 a4@18 ~ d4@8 c#4@5 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@23 [a3,e4,a4]@13 ~@12]/3", // A A5
O: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@4 [b3,d4,a4]@3 c#4 [g#3,b3,g#4]@8 [a3,c#4,a4]@4 b4@12 g#4@4 [a3,c#4,a4]@8 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@3 e4@10 ~@3, ~@7 [g#3,d4]@4 ~@5]/4", // A Bm Bm7 G#m A G#dim
P: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@11 ~ [g#3,b3,e4,g#4]@3 [g#3,b3,e4,g#4] [g#3,b3,e4,g#4]@3 [g#3,b3,e4,g#4] [g#3,b3,e4,g#4]@8 d4@11 c#4@4 [b3,d4] [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@9 [a3,e4,a4]@4 ~@3]/4", // A Bm E Bm A A5
Q: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@4 [b3,d4,a4]@3 c#4 [b3,g#4]@8 [a3,c#4,a4]@4 b4@8 g#4@8 [a3,c#4,a4]@20, ~@3 e4@13, ~@7 [g#3,d4]@4 ~@5]/4", // A Bm Bm7 E A G#dim
R: "~@6 d4 e4",
S: "[f#4@4 g4@8 f#4@8 e4@4 d4@4 ~@8 c#4@24 d4@8 f#4@15 e4 d4@8 ~@8 a4@24 f#4@2 g#4@2, ~@7 e4@8 ~@8 [a3,c#4]@8 ~, ~@49 e4@13 ~@2]/8", // A
T: "[a4@4 b4@8 a4@8 g#4@4 a4@2 g#4@2 f#4@21 ~@11 f#4@2 g#4@2]/4", U: "[a4!2 a4@8 c#5@2 b4@2 a4@2]/2",
V: "[b4@2 a4 a4@16 ~@4 d4@8 c#4@5 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@23 [a3,e4,a4]@13 ~@12]/3", // A A5
W: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@4 [b3,d4,a4]@3 c#4 [g#3,b3,g#4]@8 [a3,c#4,a4]@4 b4@12 g#4@4 [a3,c#4,a4]@8 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4] [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@3 e4@10 ~@3, ~@7 [g#3,d4]@4 ~@5]/4", // A Bm Bm7 G#m A G#dim
X: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@4 [b3,d4,a4]@3 c#4 [b3,g#4]@8 [a3,c#4,a4]@4 b4@8 g#4@8 [a3,c#4,a4]@8 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4] [a3,c#4,e4,a4]@4 [a3,c#4,e4,a4]@3 [a3,c#4,e4,a4], ~@3 e4@10 ~@3, ~@7 [g#3,d4]@4 ~@5]/4", // A Bm Bm7 E A G#dim
Y: "[[a3,c#4,e4,a4]@3 [b3,d4,f#4,b4] [b3,d4,f#4,b4]@4 [b3,d4,f#4,b4]@11 ~ [g#3,b3,e4,g#4]@3 [g#3,b3,e4,g#4] [g#3,b3,e4,g#4]@3 [g#3,b3,e4,g#4] [g#3,b3,e4,g#4]@8 d4@11 c#4@35 ~@14, ~@18 [a3,e4,a4]@23 ~@7]/6", // A Bm E A5
})).s("gm_epiano1").gain(0.28)
// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
~@58 A B C D E F ~@16 G H ~@2 I H J K G L ~@12 A B C D E F ~@18 G H ~@2 I H J K G L ~@9
>`.pickRestart({
A: "~@4 [a2,a3,c#4,e4,a4] ~@3 [a2,a3,c#4,e4,a4]@7 ~", B: "[a2,a3,c#4,e4,a4] ~@3 [a2,a3,c#4,e4,a4]@12",
C: "~@4 [a2,a3,d4,f#4,a4] ~@3 [a2,a3,d4,f#4,a4]@7 ~", D: "[a2,a3,d4,f#4,a4] ~@3 [a2,a3,d4,f#4,a4]@12",
E: "~@4 [a2,a3,c#4,e4] ~@3 [a2,a3,a4]@7 ~, ~@4 a4@3 ~ [c#4,e4]@5 ~@3", // A C#m
F: "[a2,a3,c#4,e4,a4] ~@3 [c#4,e4,a4]@8 ~@4, ~ [a2,a3]@3", G: "~@4 a4@3 ~ a4@3 ~ a4@2 ~ a4",
H: "a4@2 ~ b4 b4@3 ~ b4@6 ~@2", I: "~@4 a4@2 ~ a4 a4@3 ~ a4@2 ~ a4", J: "~@4 g#4@2 ~ g#4!2 ~@2 g#4 g#4@4",
K: "f#4 ~@3", L: "a4@3 a4 b4@3 ~ b4@5 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.22).pan(0.4)
// other · piano · "A.PIANO 2"
const piano = note("<~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C@2 A ~ A ~ A ~ D@2 ~@120>".pickRestart({
A: "f#4 ~ g#4 ~ a4 ~ b4 ~", B: "f#4@2 ~@2 g#4@2 ~@2 a4@2 ~@2 b4@3 ~", C: "[f#4@2 ~@2 g#4@3 ~ a4@3 ~ b4@16 ~@4]/2",
D: "[f#4@2 ~@2 g#4@2 ~@2 a4 ~@3 b4@19 ~]/2",
})).s("gm_piano").gain(0.14).pan(0.7)
// chords · pad poly · "POLYSYNTH"
const pad_poly = note("<~ A@8 B@8 C@8 ~@7 D@4 ~@42 E@2 ~@42 E@4 ~@19>".pickRestart({
A: "[~@4 [c#4,f#4]@14 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@13 ~@3 [b3,b4]@20, ~@108 f#4@17 ~@3]/8", // F#5 E5 F#5 E5 F#5 E5 F#5 B
B: "[[c#4,f#4]@18 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@13 ~@3 [b3,b4]@20, ~@108 f#4@17 ~@3]/8", // F#5 E5 F#5 E5 F#5 E5 F#5 B
C: "[[c#4,f#4]@18 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 [c#4,f#4]@22 ~ [b3,e4] ~@4 [b3,e4]@4 ~@12 e4@4 [b3,d#4,b4]@20, ~@23 f#4@9, ~@92 c#4@15 ~@21]/8", // F#5 E5 F#5 E5 F#5 E5 B
D: "[~@2 [a3,c#4]@9 [b3,a4]@5, ~ [d4,f#4]@7]/4", E: "[~@12 [b3,d4,e4,a4]@19 ~]/2",
})).s("gm_pad_poly").gain(0.33)
// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@7 A@2 ~@6 B@2 ~@6 C@2 D E F G H I J K@2 ~@111>".pickRestart({
A: "[~@8 [e4,e5]@21 ~@3]/2", B: "[~ [e4,e5]@3]/2", C: "[~ [g#4,g#5]@3]/2",
D: "~@8 [e3,a3,c#4]@4 [d#3,g#3,c4] [c#3,d3,f#3,g3,a#3,b3] [c3,f3,g#3,a3] [b2,e3,g3]", // A G# Gmaj7 F Em
E: "~@8 [f#3,b3,d#4]@4 [f3,a#3,d4] [d#3,e3,g#3,a3,c4,c#4] [d3,g3,a#3,b3] ~", F: "~ [e3,c#4], ~@8 g#3@5 ~@3", G: "g#3",
H: "~@8 [e3,a3,c#4]@4 [d#3,g#3,c4] [c#3,d3,f#3,g3,a#3,b3] [c3,f3,g#3,a3] [a#2,b2,d#3,e3,f#3,g3]", // A G# Gmaj7 F Bmaj7
I: "~@8 [f#3,b3,d#4]@4 [f3,a#3,d4] [d#3,e3,g#3,a3,c4,c#4] [d3,g3,a#3,b3] [c3,c#3,f3,f#3,g#3,a3]", // B A# Amaj7 G C#maj7
J: "~@8 [e3,c#4]@7 f#3, ~@8 g#3@5 ~@3", K: "[g#3,g#5]/2",
})).s("gm_overdriven_guitar").gain(0.2).pan(0.7)
// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
A B C B C B C D@2 B E B F G C D@2 B C B C B C H@2 I J K L M N K ~@113
>`.pickRestart({
A: "~@15 f#3", B: "f#2@2 ~ f#2 g#2@3 ~ a2@3 ~ b2@2 ~ b2", C: "~@3 b2 c#3@2 ~@2 e3@2 ~@2 f#3@2 ~ f#3",
D: "[f#2@4 g#2@2 ~@2 a2 ~@3 b2@15 ~@4 f#3]/2", E: "~@3 b2 c#3@3 ~ e3@3 ~ f#3@2 ~ f#3",
F: "~@3 b2 c#3@3 ~ e3@2 ~@2 f#3@2 ~ f#3", G: "f#2@2 ~ f#2 g#2@2 ~@2 a2@2 ~@2 b2@2 ~ b2",
H: "[f#2@3 ~ g#2@4 a2 ~@3 b2@15 ~@5]/2", I: "f#2 ~@3 f#2@4 f#3@4 f#2 ~@2 f#3", J: "~@3 f#3 ~@3 f#3 b2@3 ~ b2@4",
K: "c#3 ~@3 c#3@4 f#3@4 c#3 ~@2 f#3", L: "~@3 f#3 ~@3 f#3 f#2@8", M: "~@4 f#2@4 f#3@4 f#2 ~@2 f#3",
N: "~@3 f#3 ~@3 f#3 b2@7 ~",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.3)
// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
~@36 A@12 B@8 C@2 ~@6 D@2 E@8 F@4 ~@2 A@12 B@8 G@2 ~@6 D@2 E@8 F@4 ~@4 A@16 ~@3
>`.pickRestart({
A: "[c#4 d4 [g#3,b3]@2, e4, a3 ~]/4", // G#m
B: "[[a3,e4] [b3,f4] a3 d#4 e4 f4 a4 [d#4,b4], c#4@3 b3@2 c#4@2 ~, ~ f#4 g#4 f#4]/8", C: "[~ [d4,e4,a4]@5 ~@2]/2",
D: "[[a3,f#4] [b3,g4]@2 [a3,f#4]@2 [g3,e4]@2 [f#3,d4]]/2", E: "[[c#4,e4] [d4,f#4] e4 f#4, a3, ~ c#4]/8",
F: "[[b3,d#4]@3 [f4,g#4]@5 [d4,f#4,a4]@8, ~@3 c#4@13]/4", G: "[~ [d4,e4,a4]@6 ~]/2",
})).s("gm_string_ensemble_1").gain(0.27)
// other · trombone
const trombone = note(`<
~@36 A@3 B C@4 D@4 E F@2 ~@14 G H I J K@2 L@2 ~@7 A@3 B C@4 D@4 E F@2 ~@14 G H I J K@2 L@2 ~@28
>`.pickRestart({
A: "e5/3", B: "~@4 d5 ~ c#5 ~ d5@4 c#5 ~ b4 ~", C: "[c#5 ~ a4 ~ e4@47 ~@9 c#5 ~ d5 ~]/4",
D: "[e5@2 ~@2 a5@8 e5@37 ~@3 d5 ~ c#5 ~ d5@4 c#5 ~ b4 ~]/4", E: "c#5@2 a4 ~ e4@9 ~@3",
F: "[f4@4 b4@6 c#5 b4 a4@20]/2", G: "~@14 a4!2", H: "a4@10 ~@2 c#5 ~ d5 ~", I: "e5 ~ a5 ~ a4@3 ~ a4@4 ~@2 a4!2",
J: "a4@11 ~ d5 ~ e5 ~", K: "[f#5 ~ a5 ~ a4@3 ~ b4 ~@3 c#5@14 ~@2 c#5 ~ d5 ~]/2", L: "[e5 ~ a5 ~ a4@27 ~]/2",
})).s("gm_trombone").gain(0.22).pan(0.7)
// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note("<A B C D E F C G@2 B C D E H I G@2 D C D E J K L@2 M N O P M N Q R S T@2 ~@109>".pickRestart({
A: "~@15 f#2", B: "f#1 g#1 a1 b1", C: "~@3 b1 c#2@2 ~ c#2 e2@2 ~ e2 f#2@2 ~ f#2", D: "f#1@2 ~ f#1 g#1@3 ~ a1@4 b1@4",
E: "~@3 b1 c#2!2 ~ b1 e2@2 ~ c#2 f#2@2 ~ f#2", F: "f#1 ~ g#1@2 a1@2 b1@2, ~@3 f#1@2 ~@11",
G: "[f#1@4 g#1@4 a1@4 b1@16 ~@3 f#2]/2", H: "f#1 ~@2 f#1 g#1@4 a1@4 b1@4", I: "~@3 b1 c#2@3 ~ e2@3 ~ f#2@2 ~ f#2",
J: "f#1 f#1@2 ~ g#1@4 a1@4 b1@4", K: "~@3 b1 c#2 ~@2 c#2 e2@2 ~ e2 f#2@2 ~ f#2", L: "[f#1@4 g#1@4 a1@4 b1@19 f#2]/2",
M: "f#1@2 ~ f#1 g#1@4 a1@4 c#2@4", N: "d#2@11 ~@4 d#2", O: "c#2@13 ~@2 c#2", P: "d2@2 ~@2 d2@4 ~@3 e2 c#2 b1 ~ a1",
Q: "c#2@11 ~@4 c#2", R: "d2@14 ~ a1", S: "d2", T: "[b1@3 e1@5]/2",
})).s("gm_synth_bass_2").gain(0.33).pan(0.8)
// drums · kick
const kick = s("bd").struct(`<
~ A@6 B ~ A@5 ~ B ~ A@6 B ~ A C A@3 C A@3 C A@4 D A@3 E A@3 D A@10 F G@6 A@13 H ~ A@3 D A@3 E A@3 D A@10 F G@6 A@13 H
~ H ~ A@3 D A@3 E A@3 D A@3 E D ~@2
>`.pickRestart({
A: "x", B: "x ~@2 x", C: "x ~@6 x ~@8", D: "x!2 ~@2", E: "x!2 ~ x", F: "~ x", G: "x!2", H: "~@3 x",
})).gain(0.49)
// drums · snare
const snare = s("sd").struct(`<
~ A@3 B A C ~ A@7 ~ A@7 ~ A@15 D A@3 D A@3 D A@10 ~@7 A@13 ~ A@4 D A@3 D A@3 D A@10 ~@7 A@13 ~@3 A@4 D A@3 D A@3 C A@3
D ~@3
>`.pickRestart({
A: "~ x", B: "~@3 x ~@4 x ~@6 x", C: "~@3 x ~@4 x ~@7", D: "~ x ~@2 x ~@3",
// … 42 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.