0:00/0:00
// The Sun Always Shines on TV — a-ha
// 132 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 7 synth brass 1 (copy of ch 14 harpsichord, 0.104 beats late); ch 9 piano (copy of ch 8 piano); ch 16 string ensemble 2 (copy of ch 13 choir aahs, 0.125 beats late); ch 1 piano (copy of ch 2 piano); ch 4 piano (copy of ch 3 piano); ch 15 harpsichord (copy of ch 11 harpsichord); ch 8 distortion guitar (copy of ch 9 distortion guitar); ch 15 choir aahs (copy of ch 11 choir aahs); ch 4 string ensemble 1 (copy of ch 3 string ensemble 1); ch 9 string ensemble 2 (copy of ch 8 string ensemble 2); ch 4 string ensemble 2 (copy of ch 3 string ensemble 2); ch 5 synth strings 2 (copy of ch 14 synth choir); ch 7 voice oohs (copy of ch 14 synth choir, 0.104 beats late)
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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.
// chords · string ensemble 2
const string_ensemble_2 = note(`<
A B@2 C A B@2 C A B@2 C A B@2 C D E F G H E I J H K@8 L M L M L M L M N O P Q N O P Q L M L M R@2 S@2 T@2 U V R@2 S@2
T@2 U V W@2 X C A Y X C A Y X C A Y Z AA L M N O R@2 S@2 T@2 U V ~@7 AB W@2 X C A Y X C A Y X C A Y Z AA AC@4 AD@8
AE@4 AF@6 AG@8 AH@2 ~@8
>`.pickRestart({
A: "[g3,b3,e4]", B: "[e4 f4 [g3,e4]@2, c4, a3@3 ~]/2", C: "[g3,b3,d4]", D: "[e4,g4,b4]", E: "[e4,a4,c5] [c4,f4,a4]",
F: "[e4,g4,c5]", G: "[g4,b4,d5]", H: "[g4,b4,e5]", I: "[e4,a4,c5]!2", J: "[f4,a4,c5] [g4,b4,d5]",
K: "[~ b3 d4 ~@3 b5@2, a5@3 g#4@2 [d5,f5]@3, ~ f4@4 ~@3, ~@2 b4 ~]/8", L: "~ a4 ~@3 a4 ~@2",
M: "~@2 a4@2 ~@2 d4 d#4 d4@8", N: "e4 c4 b4 ~ e4 c4 b4 ~", O: "e4@2 c4@2 b4@2 a4@2 ~@2 c4@2 ~ c4 ~ c4",
P: "d4 c4 b4 ~ d4 c4 b4 ~", Q: "e4@2 c4@2 b4@2 a4@2 ~@2 d4@2 ~ d4 ~ d4", R: "[[a3,c4,e4]@3 [b3,d4]]/2",
S: "[[a3,f4]@2 c4 b3, d4, ~ g4]/2", T: "[[b3,g4]@2 [a3,c4] [g3,c4,e4], e4@3 ~]/2", U: "[f3,a3,c4]",
V: "[d4,d5] [f4,f5]", W: "[[g3,b3]@2 [a3,c4] [a3,c4,f4], e4@3 ~]/2", X: "[c4,e4,g4]", Y: "[a3,c4,e4] [a3,c4,f4]",
Z: "[a3,c4,e4] [g3,b3,d4]", AA: "[f3,a3,c4] [g3,b3,d4]", AB: "d4", AC: "[[b3,e4] ~, a3]/4",
AD: "[~@64 g5@6 c5@29 d5@2 e5@3 d5@24, [b3,e4]]/8", AE: "[g5@6 c5@29 d5@2 e5@3 d5@11 b4@2 a4@3 g4@3 b4@2 d5@3]/4",
AF: "[[g3,e4]@2 [a3,c4] [c4,f4] [c4,g4]@2 [g3,b3,d4]@2 [g3,e4]@2 [a3,c4] [a3,c4,f4], b3@3 ~ b3@2, ~ e4 e4@2 ~ e4, ~@3 a3@7 ~@2]/6", // C Am F5 C5 G C Am F
AG: "[c4@4 [g3,d4]@4 [f3,c4]@4 [g3,d4]@4 ~@17 c4 b4 ~@2 c4 b4 ~@2 c4 b4 a4 ~@5 c4 b4 ~@2 c4 b4 ~@2 c4 b4 a4 ~@4, e4@8 e4!2 e4@2 e4!2 e4@2, a3 a3@7, ~ b3@3 ~@12]/8", // G5 F5 G5
AH: "[~ c4 b4 ~@2 c4 b4 ~@2 c4 b4 a4 ~@4, e4@4 e4@5 ~@7]/2",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.3)
// chords · string ensemble 2
const string_ensemble_2_2 = note(`<
A B@2 C A B@2 C A B@2 C A B@2 C D E F G H E I J H K@8 L M L M L M L M N O P Q N O P Q L M L M R@2 S@2 T@2 U V R@2 S@2
T@2 U V W@2 X C A Y X C A Y X C A Y Z AA L M N O R@2 S@2 T@2 U V ~@7 AB W@2 X C A Y X C A Y X C A Y Z AA AC@2 ~@38
>`.pickRestart({
A: "[g3,b3,e4]", B: "[e4 f4 [g3,e4]@2, c4, a3@3 ~]/2", C: "[g3,b3,d4]", D: "[e4,g4,b4]", E: "[e4,a4,c5] [c4,f4,a4]",
F: "[e4,g4,c5]", G: "[g4,b4,d5]", H: "[g4,b4,e5]", I: "[e4,a4,c5]!2", J: "[f4,a4,c5] [g4,b4,d5]",
K: "[~ b3 d4 ~@3 b5@2, a5@3 g#4@2 [d5,f5]@3, ~ f4@4 ~@3, ~@2 b4 ~]/8", L: "~ a4 ~@3 a4 ~@2",
M: "~@2 a4@2 ~@2 d4 d#4 d4@8", N: "e4 c4 b4 ~ e4 c4 b4 ~", O: "e4@2 c4@2 b4@2 a4@2 ~@2 c4@2 ~ c4 ~ c4",
P: "d4 c4 b4 ~ d4 c4 b4 ~", Q: "e4@2 c4@2 b4@2 a4@2 ~@2 d4@2 ~ d4 ~ d4", R: "[[a3,c4,e4]@3 [b3,d4]]/2",
S: "[[a3,f4]@2 c4 b3, d4, ~ g4]/2", T: "[[b3,g4]@2 [a3,c4] [g3,c4,e4], e4@3 ~]/2", U: "[f3,a3,c4]",
V: "[d4,d5] [f4,f5]", W: "[[g3,b3]@2 [a3,c4] [a3,c4,f4], e4@3 ~]/2", X: "[c4,e4,g4]", Y: "[a3,c4,e4] [a3,c4,f4]",
Z: "[a3,c4,e4] [g3,b3,d4]", AA: "[f3,a3,c4] [g3,b3,d4]", AB: "d4", AC: "[b3,e4]/2",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.7)
// other · piano
const piano = note(`<
~@29 A B C D ~@8 E F E F E F E F ~@7 G H I J ~@4 G H I J ~@19 E F ~@3 G H I J ~@4 K ~@60
>`.pickRestart({
A: "[a1,a2] [b1,b2]@7", B: "[d2,d3]", C: "[f2,f3]", D: "[b2,b3]", E: "~ e5@4 b5@4 e5@4 b5@3", F: "~ e5@4 b5@2 a5@9",
G: "c5 b4", H: "g4", I: "e5 d5", J: "a4", K: "g5 c5 a4@2",
})).s("gm_piano").gain(0.32).pan(0)
// other · piano · A B D F
const piano_2 = note("<~@29 [[a1,a2] [b1,b2]@15] [[d2,d3]] [[f2,f3]] ~@129>").s("gm_piano").gain(0.72).pan(0)
// other · piano
const piano_3 = note("<~@29 A B C D ~@8 E F E F E F E F ~@98 E F E F E F G ~@7>".pickRestart({
A: "[a1,a2] [b1,b2]@7", B: "[d2,d3]", C: "[f2,f3]", D: "[b2,b3]", E: "e5 b5 e5 b5", F: "e5@2 b5 a5@5", G: "a3",
})).s("gm_piano").gain(0.32).pan(1)
// other · harpsichord
const harpsichord = note("<A@2 B@2 C@6 B@2 D E ~ F G@2 H@2 I ~@140>".pickRestart({
A: "[g5@13 a5@2 f5]/2", B: "[g5@26 f5@4 e5 f5]/2", C: "[g5@45 a5@2 f5]/6", D: "g5", E: "c5", F: "g5@5 a5@2 f5",
G: "[g5@26 f5@3 e5@2 f5]/2", H: "g5/2", I: "e4",
})).s("gm_harpsichord").gain(0.25).pan(1)
// chords · piano
const piano_4 = note("<A@16 B@6 C@4 ~@135>".pickRestart({
A: "[~@7 g2, e2@4 b3@13 g2 c3@14 e2@4 b3@13 g2 c3@14, ~ b2@7 a2@11 g3@14 b2@7 a2@11 g3@13, ~ e3@5 f2@4 c4@7 e3@5 f2@4 c4@6, ~@3 g3@13 c2@8 g2@11 g3@13 c2@16]/8",
B: "[~@11 f2, e2@4 b3@13 g2 c3@14 e2@4 b3@4 a2@8, ~ b2@7 a2@11 g3@14 b2@15, ~ e3@5 f2@4 c4@7 e3@7, ~@3 g3@13 c2@8 g2@11 g3@13]/6",
C: "[[e3,c4]@4 ~@8 g3@4 e2@7 e2@9, a2@3 [g2,d3,b3]@4 ~, a3 g3 [f2,c3,f3,a3]@4 ~@2, ~ c4@4 ~@3, ~ [e2,e3]@3 [b2,e3,g3]@4]/4", // C G F E Em
})).s("gm_piano").gain(0.54).pan(1)
// bass · piano
const bass = note("<A B C D A B C D A B C D A B C D A B C D A B ~@7 E F@3 ~@128>".pickRestart({
A: "e2", B: "a2 f2", C: "c2", D: "g2", E: "[a1,a2] [b1,b2]@15", F: "[~@2 [b2,b3], [d2,d3]@2 ~, ~ [f2,f3]@2]/3",
})).s("gm_piano").gain(0.4).pan(0.2)
// other · harpsichord
const harpsichord_2 = note(`<
~@3 A B C ~@5 A B C ~@5 A D ~@49 E ~@3 E ~@7 E ~@23 E ~@3 E ~@7 E ~@11 E ~@3 E ~@7 E ~@18
>`.pickRestart({
A: "~@12 g4 f4 e4 f4", B: "g4", C: "c5", D: "e4", E: "b5 c6@2 b5 c6@2 ~@2",
})).s("gm_harpsichord").gain(0.64).pan(1)
// other · harpsichord · soft notes · G
const harpsichord_soft = note("<~@84 [~@3 [d4,g4,b4] [d4,g4,b4]@4] ~@76>").s("gm_harpsichord").gain(0.4).pan(1)
// bass · slap bass 1
const bass_2 = note(`<
~@26 A B@6 C D C D C D C D C E F@2 C E F G C D C D C E F H I J K L C E F H I J K L I M N H I O N P I O N H I O J Q C D
F R C E F H I J K L S T U V W X Y Z I M N H I O N P I O N H I O J Q AA AB AA AC AA AC AD AE I O N H I O N P I O N H I
O J Q I F C D C D C D AF@5 ~@3
>`.pickRestart({
A: "~@2 a2!14", B: "a2!16", C: "a2!10 ~ a2!5", D: "a2!8 d3!2 ~ d3!5", E: "a2!8 c3!2 ~ c3!5", F: "d3!10 ~ d3!5",
G: "f3!10 ~ f3!5", H: "g2!10 ~ g2!5", I: "e3!10 ~ e3!5", J: "a2!8 g2!2 ~ g2!5", K: "f2!10 ~ f2!5",
L: "d3!8 f3!2 ~ f3!5", M: "a2!9 f2 ~ f2!5", N: "c3!10 ~ c3!5", O: "a2!8 f2!2 ~ f2!5", P: "g2!9 ~@2 b2 ~@2 d3@2",
Q: "f2!8 g2!2 ~ g2!5", R: "f3!8 g3!8", S: "~@10 a3 a2!5", T: "~@10 c3@2 ~@2 c3!2", U: "~@10 d3!6",
V: "~@10 g3@2 ~@2 g3!2", W: "~@10 e3!6", X: "a2@2 a2@2 ~@6 g2@2 ~@2 g2!2", Y: "f2!4 ~@6 f3!5 e3", Z: "d3",
AA: "a3!4 ~@6 e3 a2!5", AB: "~@2 a2@2 ~@6 a3@2 ~@2 a3!2", AC: "~@2 c3@2 ~@6 c3@2 ~@2 c3!2", AD: "a2@2 ~@9 a2!5",
AE: "~@2 a2 c3 e3 c3 e3 a3 e3 a3 c4 a3 c4 e4 c4 e4", AF: "a2/5",
})).s("gm_slap_bass_1").gain(0.5).pan(0.3)
// bass · electric bass pick
const bass_3 = note(`<
~@26 A B@6 C D C D C D C D C E F@2 C E F G C D C D C E F H I J K L C E F H I J K L I M N H I O N P I O N H I O J Q C D
F R C E F H I J K L S T U V W X Y Z I M N H I O N P I O N H I O J Q AA AB AA AC AA AC AD AE I O N H I O N P I O N H I
O J Q I F C D C D C D AF@5 ~@3
>`.pickRestart({
A: "~@2 a1!14", B: "a1!16", C: "a1!10 ~ a1!5", D: "a1!8 d2!2 ~ d2!5", E: "a1!8 c2!2 ~ c2!5", F: "d2!10 ~ d2!5",
G: "f2!10 ~ f2!5", H: "g1!10 ~ g1!5", I: "e2!10 ~ e2!5", J: "a1!8 g1!2 ~ g1!5", K: "f1!10 ~ f1!5",
L: "d2!8 f2!2 ~ f2!5", M: "a1!9 f1 ~ f1!5", N: "c2!10 ~ c2!5", O: "a1!8 f1!2 ~ f1!5", P: "g1!9 ~@2 b1 ~@2 d2@2",
Q: "f1!8 g1!2 ~ g1!5", R: "f2!8 g2!8", S: "~@10 a2 a1!5", T: "~@10 c2@2 ~@2 c2!2", U: "~@10 d2!6",
V: "~@10 g2@2 ~@2 g2!2", W: "~@10 e2!6", X: "a1@2 a1@2 ~@6 g1@2 ~@2 g1!2", Y: "f1!4 ~@6 f2!5 e2", Z: "d2",
AA: "a2!4 ~@6 e2 a1!5", AB: "~@2 a1@2 ~@6 a2@2 ~@2 a2!2", AC: "~@2 c2@2 ~@6 c2@2 ~@2 c2!2", AD: "a1@2 ~@9 a1!5",
AE: "~@2 a1 c2 e2 c2 e2 a2 e2 a2 c3 a2 c3 e3 c3 e3", AF: "a1/5",
})).s("gm_electric_bass_pick").gain(0.5).pan(0.7)
// chords · distortion guitar
const distortion_guitar = note(`<
~@33 A B A B C B A B D@4 E@4 A B F@2 ~@7 G ~@7 G ~@2 H@2 ~@2 H@2 ~@2 H@2 ~@4 A B ~@9 G ~@10 H@2 ~@2 H@2 ~@2 H@2 ~@8
I@4 ~@2 H@2 ~@2 H@2 ~@2 H@2 ~@6 A B A B A B ~@8
>`.pickRestart({
A: "[a3,d4,f4,a4] ~@2 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4]", B: "~@3 [d4,g4,b4] [d4,g4,b4]@4", C: "[a3,d4,f4,a4]",
D: "[e6@13 ~@3]/4", E: "e6/4",
F: "[[a3,d4,f4,a4] ~@2 [a3,d4,f4,a4] ~@3 [a3,d4,f4,a4] ~@3 [d4,g4,b4] [d4,g4,b4]@4, ~@7 c6@5 ~@4]/2", G: "d4 f4",
H: "[[c4,e4] [b3,d4], g3]/2", I: "[e6@25 ~@7]/4",
})).s("gm_distortion_guitar").gain(0.4).pan(1)
// other · synth brass 2
const synth_brass_2 = note("<~@56 A B C D ~@4 A B C D ~@24 A B C D ~@4 E ~@60>".pickRestart({
A: "c5 b4", B: "g4", C: "e5 d5", D: "a4", E: "g5 c5 a4@2",
})).s("gm_synth_brass_2").gain(0.32).pan(1)
// other · string ensemble 1
const string_ensemble_1 = note("<~@58 A B C ~@5 A B C ~@8 D E F G D E H I J ~@8 A B C ~@64>".pickRestart({
A: "a2 g2", B: "f2", C: "d3 f3", D: "e3", E: "a3 f3", F: "c3", G: "g2", H: "a3 g3", I: "f3 g3", J: "a3 ~",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.2)
// other · string ensemble 2
const string_ensemble_2_3 = note("<~@76 A B C D@2 B E@2 F ~@69 G ~ G ~@3 H>".pickRestart({
A: "~@6 b4 d5", B: "b5", C: "a5", D: "g5/2", E: "[c6@3 b5]/2", F: "a5@8 c5 b5 a5 g5 e5 f5 d5 e5",
G: "c4@2 a3@4 c4@2 a3@3 ~@5", H: "c4 ~@7",
})).s("gm_string_ensemble_2").gain(0.57).pan(0.6)
// other · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@158 [c4@2 a3@4 c4@2 a3@3 ~@5] ~ [~@2 a3@4 c4@2 a3@3 ~@5]>")
.s("gm_string_ensemble_2").gain(0.36).pan(0.6)
// other · string ensemble 1
const string_ensemble_1_2 = note("<~@76 A B C D@2 B E@2 F ~@69 G ~@6>".pickRestart({
A: "~@6 b4 d5", B: "b5", C: "a5", D: "g5/2", E: "[c6@3 b5]/2", F: "a5@8 c5 b5 a5 g5 e5 f5 d5 e5",
G: "~ c4@2 a3@4 c4@2 a3@3 ~@4",
})).s("gm_string_ensemble_1").gain(0.45).pan(0)
// other · string ensemble 2
const string_ensemble_2_4 = note("<~@84 [~@9 b5 a5 g5 e5 f5 d5 e5] ~@35 [~@9 b5 a5 g5 e5 f5 d5 e5] ~@40>")
.s("gm_string_ensemble_2").gain(0.71).pan(0)
// other · string ensemble 1
const string_ensemble_1_3 = note("<~@85 A B ~@25 C D E F@2 D G@2 H ~@8 I@4 J@4 D E F@2 D G@2 H K ~@15>".pickRestart({
A: "a4 ~", B: "~@3 [d3,d4] [d3,d4]@4", C: "~@6 b4 d5", D: "b5", E: "a5", F: "g5/2", G: "[c6@3 b5]/2",
H: "a5@8 c5 b5 a5 g5 e5 f5 d5 e5", I: "[g5@6 c5@29 d5@2 e5@3 d5@24]/4",
J: "[g5@6 c5@29 d5@2 e5@3 d5@11 b4@2 a4@3 g4@3 b4@2 d5@3]/4", K: "[e4,g4,b4]",
})).s("gm_string_ensemble_1").gain(0.64).pan(1)
// other · string ensemble 2
const string_ensemble_2_5 = note(`<
~@85 A B ~@25 C D E F@2 D G@2 H ~@8 I@4 J@4 D E F@2 D G@2 H K ~@10 L ~@4
>`.pickRestart({
A: "a4 ~", B: "~@3 [d3,d4] [d3,d4]@4", C: "~@6 b4 d5", D: "b5", E: "a5", F: "g5/2", G: "[c6@3 b5]/2",
H: "a5@8 c5 b5 a5 g5 e5 f5 d5 e5", I: "[g5@6 c5@29 d5@3 e5@2 d5@24]/4",
J: "[g5@6 c5@29 d5@3 e5@2 d5@11 b4@3 a4@2 g4@3 b4@3 d5@2]/4", K: "[e4,g4,b4]", L: "~ c4@2 a3@4 ~@9",
})).s("gm_string_ensemble_2").gain(0.63).pan(0)
// other · string ensemble 2 · soft notes
const string_ensemble_2_soft_2 = note(`<
~@156
[~@7 c4@2 a3@3 ~@4]
~
[~ c4@2 a3@4 c4@2 a3@3 ~@4]
~
[~ c4@2 a3@4 c4@2 a3@3 ~@4]
>`).s("gm_string_ensemble_2").gain(0.35).pan(0)
// other · synth strings 1 · Cmaj7 G5
const synth_strings_1 = note(`<
~@97
[[b3,c4,e4]]
~@2
[c4 b3, [d4,g4]]
~@2
[f4@2 f4@2 f4@2 f4@2 e4@2 e4@2 e4 ~ d4 c4]
~@57
>`).s("gm_synth_strings_1").gain(0.3).pan(0.3)
// other · synth strings 1
// … 88 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.