0:00/0:00
// Take On Me — a-ha
// 175 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 4) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 165 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(175/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 · piano · "elec grand"
const piano = note("<~@84 A B@7 C ~@11 A B@3 C ~@56>".pickRestart({
A: "~@8 b4 a#4 a4 g#4 g4 g#4 a4 a#4", B: "b4 a#4 a4 g#4 g4 g#4 a4 a#4 b4 a#4 a4 g#4 g4 g#4 a4 a#4",
C: "b4 a#4 a4 g#4 g4 g#4 a4 a#4 ~@8",
})).s("gm_piano").gain(0.22).pan(0.8)
// bass · synth bass 1 · "synth bass"
const bass = note(`<
~@8 A B A B C D E F G D E F G D H D I D E F G D E F G D J F K L M N O L M N O P Q R S T U V W D E F G D E F G D J F K
L M N O L M N O P Q R S T U V X Y Z AA AB Y Z AA AC B AD AE AF ~@3 C D E F G D E F G D H D I D E F G D E F G D J F K L
M N O L M N O P Q R S L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AJ
>`.pickRestart({
A: "~@2 d2 c2 d3 ~@2 d2", B: "~@2 d2 c2 d3!2 ~ d2", C: "~@4 d2!3 ~", D: "~@3 g2 ~ g2 ~ g2", E: "g2 ~@3 c2!3 ~",
F: "~@3 f2 ~ f2 ~ f2", G: "e2 ~@2 e2 d2!3 ~", H: "g2 ~@3 f2!3 ~", I: "g2 ~@3 d2!3 ~", J: "g2 ~@3 a2!3 ~",
K: "g2!3 ~ c2!3 ~", L: "c2 ~ c2 ~ b1 ~ b1 ~", M: "b1 ~ b1 ~ a1 ~ a1 ~", N: "a1 ~ a1 ~ f1 ~ f1 ~",
O: "f1 ~ g1 ~ c2!3 ~", P: "~@3 c2 b1!3 ~", Q: "~@3 b1 a1!3 ~", R: "~@3 a1 f1!2 f2!2", S: "g1!2 g2!2 c2!3 ~",
T: "c2 ~ c2 ~ g1 ~ g1 ~", U: "g1 ~ g1 ~ f1!4", V: "f1!3 ~ g1!4", W: "g1!3 ~ d2!3 ~", X: "g1!3 ~ e3 ~@2 e2",
Y: "~@2 e2 d2 e3!2 ~ e2", Z: "~@2 e2 d2 a#2 ~@2 a#1", AA: "~@2 a#1 a1 a#2!2 ~ a#1", AB: "~@4 e3 ~@2 e2",
AC: "~@4 d3 ~@2 d2", AD: "~@2 d2 c2 g2 ~@2 g1", AE: "~@2 g1 f1 g2!2 g1 ~", AF: "g1 ~ g1 ~@5", AG: "b1 ~ b1 ~ a1!3 ~",
AH: "a1 ~ a1 ~ f1!3 ~", AI: "g1!3 ~ c2!3 ~", AJ: "g1!2 ~@6",
})).s("gm_synth_bass_1").gain(0.45)
// chords · epiano2 · "elec piano"
const epiano2 = note("<~@4 A@5 ~@11 B@6 ~@54 C@5 ~@3 D@5 ~@72>".pickRestart({
A: "[~@4 a5@16 ~@3 c5@16 ~, ~@3 d5@16 ~@21, ~@7 f5@32 ~ e5@32 ~@8]/5",
B: "[~@7 d6@4 ~, ~ a5@4 c6@4 ~@3, ~@3 b5@4 ~@5]/6", C: "[~ b5@4 d5@4 ~, ~@3 e5@16 ~@21, ~@7 g5@32 ~@41]/5",
D: "[e6@4 ~@12 c6@4 ~ d6@13 ~@6, ~@2 e6@8 c6 ~@9, ~@5 f6@16 ~@19]/5",
})).s("gm_epiano2").gain(0.54).pan(0.7)
// other · lead 2 sawtooth · "saw wave"
const lead_2_sawtooth = note(`<
~@12 A B C D E B C D E B C D F ~@67 A B G B G B C D E B C D E B C D F ~@56
>`.pickRestart({
A: "~@8 a5 ~ a5 ~ f5 ~ d5 ~", B: "~@2 d5 ~@3 g5 ~@3 g5 ~@3 g5 ~", C: "b5 ~ b5 ~ c6 ~ d6 ~ c6 ~ c6 ~ c6 ~ g5 ~",
D: "~@2 f5 ~@3 a5 ~@3 a5 ~@3 a5 ~", E: "g5 ~ g5 ~ a5 ~ g5 ~ a5 ~ a5 ~ f5 ~ d5 ~", F: "g5 ~ g5 ~ g5 ~@11",
G: "b5 ~ b5 ~ c6 ~ d6 ~ a5 ~ a5 ~ f5 ~ d5 ~",
})).s("gm_lead_2_sawtooth").gain(0.32)
// other · synth brass 1 · "brass"
const synth_brass_1 = note(`<
~@39 A@2 ~@2 A@2 ~@22 B@2 ~@2 C@2 ~@50 A@2 ~@2 D@2 ~@6 D@2 ~@2 D@2 ~@2 E@2 ~@2 F@2 G@4 ~@2 H@2 I@3 ~@5
>`.pickRestart({
A: "[~@8 g5@5 ~ a5@5 ~ g5@3 ~@9]/2", B: "[~@8 g5@6 a5@5 ~ g5@3 ~@9]/2", C: "[~@8 g5@6 a5@6 g5@3 ~@9]/2",
D: "[~@8 g5@5 ~ a5@4 ~@2 g5@3 ~@9]/2", E: "[~@8 g5@4 ~@2 a5@4 ~@2 g5@3 ~@9]/2",
F: "[~@8 g5@4 ~@2 a5@5 ~ g5@3 ~ c5 ~ c5 ~@3 c5 ~]/2",
G: "[~@2 c5 ~@3 d5@2 ~@2 b4@2 ~@2 g4@9 ~ c5@14 ~@2 g5@4 ~@2 a5@5 ~ g5@3 ~@9]/4",
H: "[~@8 g5@5 ~ a5@4 ~@2 g5@4 c5 ~ c5 ~@3 c5@2]/2", I: "[~@2 c5@2 ~@2 d5@2 ~@2 b4@2 ~@2 g4@9 ~ c5@14 ~@10]/3",
})).s("gm_synth_brass_1").gain(0.48)
// other · synth brass 1 · "brass" · soft notes
const synth_brass_1_soft = note("<~@159 A@2 B@4>".pickRestart({
A: "[~@8 g5@5 ~ a5@4 ~@2 g5@3 ~ c5 ~ c5@2 ~@2 c5@2]/2",
B: "[~@2 c5@2 ~@2 d5@2 ~@2 b4@2 ~@2 g4@8 ~@2 c5@14 ~@2 g5@5 ~ a5@4 ~@2 g5@2 ~@10]/4",
})).s("gm_synth_brass_1").gain(0.18)
// chords · synth strings 1 · "strings"
const synth_strings_1 = note(`<
~@8 A@2 B@8 C D@7 E@8 F@2 G@8 H@4 I@4 J@2 K@8 F@2 L@8 M@4 N@8 O@2 P@7 ~@3 Q@7 D@7 R@4 S@6 T@8 M@4 U@4 V@4 W@8 X@4 Y@4
Z@4 AA@4 AB
>`.pickRestart({
A: "[~ [d4,f4,a4]@3]/2", // Dm
B: "[~@8 [d4,e4,a4]@31 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // Dsus2 Dm G C F Dm G
C: "~ [c4,e4,g4]", // C
D: "[~@8 [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/7", // F Dm G F G Dm G
E: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@14 ~@2 [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // C F Dm G C F Dm G
F: "[~@8 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/2", // Am F
G: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@14 ~@2 [c4,f4,a4]@14 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@8]/8", // G C Em Am F C Em Am …
H: "[~@8 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // C Em Am F
I: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@8]/4", // G C G F G
J: "[~@8 [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/2", // Dm G
K: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // C F Dm G C F Dm G
L: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@14 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@8, ~@8 a#4 ~@119]/8", // G C Em Am F C Em Am …
M: "[~@8 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // C Em Am F
N: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [e4,g4,b4]@30 ~@2 [f4,a#4,d5]@24]/8", // G C G F G Em A#
O: "[~@4 [g4,b4]@7 ~ g4@4, ~ e4@3]/2", // G
P: "[b4@6 ~@2 [d4,f4,a#4]@31 ~ [d4,f4,a4]@31 ~ [d4,g4,b4]@31 ~@9, ~@40 c4 ~@71]/7", // A# Dm G
Q: "[~@8 [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@14 ~@2 [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@8]/7", // Dm G C F Dm G C
R: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/4", // C F Dm G
S: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/6", // C F Dm G Am F
T: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@14 ~@2 [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@8, ~@40 f4 ~@87]/8", // G C Em Am F C Em Am …
U: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
V: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // G C Em Am F
W: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // G C Em Am F
X: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
Y: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
Z: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
AA: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", AB: "[d4,g4,b4]@3 ~@5",
})).s("gm_synth_strings_1").gain(0.15)
// other · electric guitar muted · "mt guitar"
const electric_guitar_muted = note(`<
~@24 A B C D E B C D E B F G H ~@15 A B C D E B C D E B F G H ~@43 A B C D E B C D E B F G H ~@11 I J K L M J K L M J
K L M J K L M J K L M J K L M J K N ~@5
>`.pickRestart({
A: "~@8 d4 ~ d4 ~ f4 ~ d4 ~", B: "a4 ~ d4 ~ f4 ~ d4 ~ g3 ~ g3 ~ b3 ~ g3 ~",
C: "d4 ~ g3 ~ b3 ~ g3 ~ c4 ~ c4 ~ e4 ~ c4 ~", D: "g4 ~ c4 ~ e4 ~ c4 ~ f3 ~ f3 ~ a3 ~ f3 ~",
E: "c4 ~ f3 ~ a3 ~ f3 ~ d4 ~ d4 ~ f4 ~ d4 ~", F: "d4 ~ g3 ~ b3 ~ g3 ~ a3 ~ a3 ~ c4 ~ a3 ~",
G: "e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ f3 ~", H: "d4 ~ c4 ~ b3 ~ g3 ~@9", I: "~@8 c4 ~ c4 ~ e4 ~ c4 ~",
J: "g4 ~ c4 ~ e4 ~ c4 ~ b3 ~ b3 ~ e4 ~ b3 ~", K: "g4 ~ b3 ~ e4 ~ b3 ~ a3 ~ a3 ~ c4 ~ a3 ~",
L: "e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~", M: "g3 ~ g3 ~ b3 ~ d4 ~ c4 ~ c4 ~ e4 ~ c4 ~", N: "e4 ~@15",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.2)
// other · electric guitar muted · "mt guitar" · soft notes
const electric_guitar_muted_2 = note(`<
~@159
[~@2 a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~]
[g3 ~ g3 ~ b3 ~ d4 ~ c4 ~ c4 ~ e4 ~ c4 ~]
[g4 ~ c4 ~ e4 ~ c4 ~ b3 ~ b3 ~ e4 ~ b3 ~]
[g4 ~ b3 ~ e4 ~ b3 ~ a3 ~ a3 ~ c4 ~ a3 ~]
[e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~]
[g3 ~ g3 ~ b3 ~@11]
>`).s("gm_electric_guitar_muted").gain(0.08).pan(0.2)
// other · electric guitar clean · "cl guitar"
const electric_guitar_clean = note(`<
~@24 A B C D E B C D E B C D F ~@15 A B C D E B C D E B C D F ~@43 A B C D E B C D E B C D F ~@11 G H I J K H I J K H
I J K H I J K H I J K H I J K H I ~@6
>`.pickRestart({
A: "~@6 f4 ~", B: "~ f4 ~@2 f4 ~@2 f4", C: "~@2 f4 ~@3 e4 ~", D: "~ e4 ~@2 e4 ~@2 e4", E: "~@2 e4 ~@3 f4 ~",
F: "~@2 e4 ~@5", G: "~@4 c3!2 ~ c3", H: "~ c3 ~ c3 b2!2 ~ b2", I: "~ b2 ~ b2 a2!2 ~ a2", J: "~ a2 ~ a2 f2!2 ~ f2",
K: "g2!2 ~ g2 c3!2 ~ c3",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.8)
// other · electric guitar clean · "cl guitar" · soft notes
const electric_guitar_clean_2 = note(`<
~@159
[~ a2 ~ a2 f2!2 ~ f2]
[g2!2 ~ g2 c3!2 ~ c3]
[~ c3 ~ c3 b2!2 ~ b2]
[~ b2 ~ b2 a2!2 ~ a2]
[~ a2 ~ a2 f2!2 ~ f2]
[g2!2 ~@6]
>`).s("gm_electric_guitar_clean").gain(0.12).pan(0.8)
// other · lead 1 square · "square wave"
const lead_1_square = note("<~@12 A B C D E B C D E B C D F ~@67 A B G B G B C D E B C D E B C D F ~@56>".pickRestart({
A: "~@8 a4 ~ a4 ~ f4 ~ d4 ~", B: "~@2 d4 ~@3 g4 ~@3 g4 ~@3 g4 ~", C: "b4 ~ b4 ~ c5 ~ d5 ~ c5 ~ c5 ~ c5 ~ g4 ~",
D: "~@2 f4 ~@3 a4 ~@3 a4 ~@3 a4 ~", E: "g4 ~ g4 ~ a4 ~ g4 ~ a4 ~ a4 ~ f4 ~ d4 ~", F: "g4 ~ g4 ~ g4 ~@11",
G: "b4 ~ b4 ~ c5 ~ d5 ~ a4 ~ a4 ~ f4 ~ d4 ~",
})).s("gm_lead_1_square").gain(0.19)
// drums · kick
const kick = s("bd").struct("<A B@43 C D@2 A E B@23 C D@2 A E B@15 F G@3 H B@31 C D@2 A E B@31 I>".pickRestart({
A: "~@4 x!2 ~ x", B: "x!2 ~ x!3 ~ x", C: "x!2 ~ x!4 ~", D: "~@3 x!4 ~", E: "~@2 x!4 ~ x", F: "x!2 ~ x ~@3 x",
G: "x!2 ~@5 x", H: "x!2 ~@2 x!2 ~ x", I: "x!2 ~@6",
})).gain(0.29)
// drums · snare
const snare = s("sd").struct(`<
A B@11 C B@10 D C B@10 D C B@7 E ~@2 F C B@3 C B@10 D C B@7 E ~@2 F C B@3 C B@11 G ~@3 C B@11 C B@10 D C B@7 E ~@2 F C
B@31 E
>`.pickRestart({
A: "~@3 x", B: "~ x ~ x", C: "x!2 ~@4 x ~", D: "~@2 x ~@2 x!2 ~", E: "~ x ~@2", F: "x ~ x!2 ~@2 x ~", G: "x!2 ~@6",
})).gain(0.29)
// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@11 A ~@11 A ~@15 A ~@11 A ~@19 A ~@23 A ~@11 A ~@32>".pickRestart({
A: "~@3 x ~@4",
})).gain(0.29)
// drums · hihat
const hihat = s("hh").struct("<A B@43 C D@2 E B@24 C D@2 E B@16 F ~@3 A B@31 C D@2 E B@32 G>".pickRestart({
A: "~@4 x!4", B: "x!8", C: "x!7 ~", D: "~@3 x!4 ~", E: "~@3 x!5", F: "x!4 ~@4", G: "x!3 ~@5",
})).gain(0.19)
// drums · mid tom
const mid_tom = s("mt").struct(`<
~@12 A ~@11 A ~@11 A ~@11 A ~@3 A ~@11 A ~@11 A ~@3 A ~@11 A ~@3 A ~@11 A ~@11 A ~@11 A ~@32
>`.pickRestart({
A: "~@2 x!2 ~@4",
})).gain(0.29)
// drums · open hat
const open_hat = s("oh").struct("<~@47 x ~@27 x ~@55 x ~@33>").gain(0.19)
// drums · high tom
const high_tom = s("ht").struct("<~@24 A ~@11 A ~@11 A ~@15 A ~@11 A ~@19 A ~@23 A ~@11 A ~@32>".pickRestart({
A: "~ x ~@2",
})).gain(0.29)
// drums · crash
const crash = s("cr").struct("<~@35 A B ~@10 A B ~@14 A B ~@10 A B ~@19 B ~@22 A B ~@10 A B ~@32>".pickRestart({
A: "~@3 x ~@4", B: "~ x",
})).gain(0.29)
stack(
piano, bass, epiano2, lead_2_sawtooth, synth_brass_1, synth_brass_1_soft, synth_strings_1, electric_guitar_muted,
electric_guitar_muted_2, electric_guitar_clean, electric_guitar_clean_2, lead_1_square, kick, snare, low_tom, hihat,
mid_tom, open_hat, high_tom, crash
// … 1 more lines
More by a-ha
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.