0:00/0:00
// Hunting High and Low — a-ha
// 100 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 13 "synth strings" named as a string part, played on synth strings 1 (its choir aahs patch is not one)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)
// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "electric bass"
const bass = note(`<
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA A AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU T
AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE N CF CG CH
CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ DA ~@3
>`.pickRestart({
A: "a#1@2 c2 ~ c2@2 ~@2 c2@2 ~@2 c2@2 a1@2", B: "c3 c2!2 a1 c2 ~ c2 a1", C: "a1@2 g1@2 a1@2 g1@2 e1 ~ a1 ~ c2@2 e2 ~",
D: "a2@2 a1@2 a1@2 e1 ~ a1@2 ~@2 c2 ~ e2@2", E: "f2@2 f1@2 f1@2 ~@2 f1@2 ~@2 f1@2 f1 ~",
F: "d#1@2 f1 ~ f1@2 ~@2 f1@2 ~@4 g#1@2", G: "a1@3 ~ a1@3 ~ a1@2 c2@2 a1@2 e1@2",
H: "g1@2 a1 ~ a1@2 ~@2 a1 ~ g1@4 e1@2", I: "f1@3 ~ f1@3 ~ f1@2 a1@4 c2@2", J: "c#2@2 c#2 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~",
K: "c3@2 c2@2 c2@2 ~@2 c2@2 ~@4 g1 ~", L: "a#1@2 c2 ~ c2@2 g1 ~ c2@2 ~@4 g1@2",
M: "f#1@2 g#1 ~ g#1@2 ~@2 d#2@2 c2@2 a#1@2 g#1@2", N: "g2 g1!2 ~ g1 ~ g1 b1",
O: "f1@2 g1 ~@3 f1@2 g1@2 a1@2 g1@2 e1@2", P: "g1@2 a1 ~ a1@2 f#1@2 a1@2 ~@2 a1@2 b1 ~",
Q: "a2@2 a1@2 a1@2 f#1 ~ g1@2 ~@2 g1@2 a1@2", R: "f2@2 f1@2 f1@2 ~@4 a1 ~@3 c2@2",
S: "d2@2 d2 ~ d2@3 ~ g1@2 a1 ~ g1@2 f1@2", T: "g1@2 a1 ~ a1@2 ~@2 a1@2 g1@2 a1@4", U: "a2 a1!2 ~ a1 ~ a1 c#2",
V: "c2@2 d2 ~ d2@2 ~@4 d2@4 c2@2", W: "d2@2 e2 ~ g1@2 e1@2 f1@2 f1@2 g1@4",
X: "a2@2 a1@2 a1@2 f#1 ~ a1@2 ~@2 a1@2 b1@2", Y: "a2 a1!2 ~ a1 ~ g1@2", Z: "e1@2 f1 ~ f1@2 ~@4 a1@2 c2@2 e2@2",
AA: "d3 d2!2 ~ d2 ~ g1 a1", AB: "e1@3 ~ e1@2 g1@2 d2@2 b1 ~ d2 ~ e2@2", AC: "d3 d2!2 ~ d2 ~ g1 f1",
AD: "g1@2 g1 ~ g1@3 ~ g1@3 ~ g1@2 f1@2", AE: "g1@2 a1 ~ a1@2 ~@4 g1@2 e1@2 g1 ~",
AF: "a1@3 ~ a1@3 ~ a1@3 ~ g1@2 e1@2", AG: "d#1@2 f1 ~ f1@2 ~@2 f1@2 a1@2 g1@2 f1@2",
AH: "d#1@2 f1 ~ f1@2 ~@2 f1@2 ~@2 f1@2 g#1@2", AI: "g1@2 a1 ~ a1@2 ~@2 a1@2 a1@2 g1@2 e1 ~",
AJ: "g1@2 a1 ~ a1@2 ~@2 a1@2 ~@2 a1@2 e2@2", AK: "f2@2 f1@2 f1@2 ~@4 a1@2 c2 ~ d2@2", AL: "c#3 c#2!2 ~ c#2 ~ c#2@2",
AM: "c3 c2!2 ~ c2 ~ a#1 g1", AN: "a#1@2 c2 ~ c2@2 a#1@2 c2@2 a#1@2 g1@2 f1 ~",
AO: "f#1@2 g#1 ~ g#1@2 f1@2 ~@2 g#1@4 f1 ~", AP: "g1@3 ~ g1@3 ~ g1@2 e1 ~ g1@3 ~", AQ: "f2 f1 g1 f1 g1 e1 d2 b1",
AR: "a2 a1!2 ~ a1 ~ a1@2", AS: "g1@2 a1 ~ a1@2 ~@2 g1@2 e1@2 g1@2 b1@2", AT: "e1@2 f1 ~ f1@2 e1@2 f1@2 c2@4 a1 ~",
AU: "c2@2 d2 ~ d2@2 c2@2 a1@2 g1@4 f1@2", AV: "a1@2 g1 ~ a1@3 ~ a1@3 ~ a1@3 ~", AW: "d3 d2!2 ~ d2 ~ d2 a1",
AX: "d2@2 e2 ~ g1@2 e1@2 f1@2 f1@2 g1@2 e1@2", AY: "a1@2 a1 ~ a1@3 ~ a1@3 ~ a1@3 ~",
AZ: "g1@2 a1 ~ a1@2 f#1@2 a1@2 f#1@2 g1@2 e1@2", BA: "f1@3 ~ f1@3 ~ f1@3 ~ f1@2 c2 ~",
BB: "d2@3 ~ d2@2 c2 ~ d2@3 ~ d2@2 a1@2", BC: "c2@2 c2 ~ c2@3 ~ c2@3 ~ c2@3 ~",
BD: "e1@2 g1@2 e1@3 ~ e1@2 g1@2 e1@2 e2@2", BE: "d3 d2!2 ~ d2 ~ d2 c2", BF: "c2@2 g1 ~ g1@2 f1@2 g1@2 ~@2 g1@2 f1@2",
BG: "a2 a1!2 ~ a1 ~ a1 g1", BH: "g1@2 a1 ~ a1@2 ~@2 a1@2 ~@2 g1@2 e1@2", BI: "f1@2 f1 ~ f1@3 ~ f1@2 g1@2 f1@3 ~",
BJ: "c2@2 d2 ~ d2@2 c2@2 d2@2 c2@2 d2@4", BK: "a#1@2 c2 ~ c2@2 g1@2 c2@2 a1@2 e1@2 g1@2",
BL: "a#1@2 b1 ~ b1@2 a1@2 b1@2 ~@2 e2@2 c2@2", BM: "a2@2 a1@2 a1@2 g1 ~ a1@2 e1@2 a1@2 c2@2",
BN: "e2@2 e1@2 e1@2 ~@2 e1@2 g1@4 b1 ~", BO: "d2@2 e2 ~ e2@2 ~@2 e2@2 a1 ~ g1 ~ e1@2",
BP: "f1@2 f1 ~ f1@2 g1@2 f1@3 ~ c2@2 a1@2", BQ: "g2 g1!2 e1 ~ g1@2 e1", BR: "g1@2 a1 ~ a1@2 ~@2 a1@2 g1@2 a1@2 g1@2",
BS: "a1@3 ~ a1@3 ~ g1@2 e1@2 g1@3 ~", BT: "f1@2 f1 ~ f1@3 ~ f1 ~ a1 ~@3 f1@2",
BU: "e1@2 f1 ~ f1@2 ~@4 g1@2 a1@2 c2@2", BV: "a2@2 a1@2 a1@2 g1@2 a1@2 ~@2 a1@2 g1 ~",
BW: "a1@2 a1@2 g1 ~ e1 ~ g1@2 e1 ~ g1@3 ~", BX: "f1@2 g1 ~ f1@2 g1@2 f1@2 g1@2 f1@3 ~",
BY: "c2@2 d2 ~ d2@2 c2@2 d2@2 ~@2 f1@2 a1 ~", BZ: "a#1@2 c2 ~ c2@2 a#1@2 ~@2 d#2@4 c2@2",
CA: "a#2@2 a#1@2 a#1@2 g1 ~ a#1@2 g1@2 f1@2 g1@2", CB: "g#1@2 f1@2 g#1@3 ~ g#1@2 a#1@2 g#1@2 f1@2",
CC: "g1@2 e1 ~ g1@2 e1@2 g1@2 e1@2 g1@2 e2 ~", CD: "f2@2 f1@2 f1@2 f1 ~ g1@2 ~@2 g1@4",
CE: "g1@2 a1 ~ a1@2 ~@2 a1@2 ~@2 f#1 ~ a1@2", CF: "e1@2 f1 ~ f1@2 ~@2 f1@2 a1@4 c2@2",
CG: "d2@3 ~ d2@2 c2@2 c2 ~ a1 ~@3 g1 ~", CH: "a1@3 ~ a1@3 ~ a1@2 g1@2 a1@2 c2@2",
CI: "e1 ~ g1@2 e1@2 g1@2 a1@2 ~@4 c#2@2", CJ: "d2@3 ~ d2@3 ~ d2@3 ~ d2@2 c2@2",
CK: "d2@2 a1 ~ g1@2 e1@2 f1@2 ~@2 g1@2 g1 ~", CL: "a1@3 ~ a1@3 ~ a1@3 ~ a1@2 f#1@2",
CM: "g1@2 a1 ~ a1@2 ~@2 g1@2 e1@2 g1@4", CN: "f1@3 ~ f1@2 g1@2 c2 ~ e2@2 c2@2 a1@2",
CO: "c2@2 d2 ~ d2@2 c2 ~ d2@2 c2@2 d2@2 c2@2", CP: "c3 c2!2 ~ c2 ~ c2 g1", CQ: "e1@2 g1@2 e1@3 ~ e1@3 ~ e1@3 ~",
CR: "d3@2 d2@2 d2@2 ~@2 c2 ~ d2@2 c2@2 d2@2", CS: "e2 e1!2 ~ e1 ~ e1 g1", CT: "d2@2 e2 ~ e2@2 ~@2 e2@2 ~@2 g1@2 e1@2",
CU: "d#1@2 f1 ~ f1@2 g1 ~ f1@2 c2@2 a1@2 g1@2", CV: "f1@2 g1 ~ g1@2 ~@2 g1@2 e1@2 g1@2 e1@2",
CW: "g1@2 a1 ~ a1@2 ~@2 a1@2 ~@2 a1@2 c2@2", CX: "a2@2 a1 ~ g1@2 e1@2 g1@2 b1@2 d2@2 e2@2",
CY: "f2@2 f1@2 f1@2 f1 ~ e1@2 g1@2 e1@4", CZ: "d3 d2@2 g1 a1 ~ a1 c#2", DA: "a1@2 a1 ~ a1@3 ~ a1@3 ~ a1@2 f#1 ~",
})).s("gm_electric_bass_finger").gain(0.4)
// chords · synth strings 1 · "synth strings"
const synth_strings_1 = note(`<
~@2 A@2 B C D A B E F@2 G H I J@2 K L M@2 N O P@2 K N Q H N L A@2 B R D A B E S F G H T U@2 K N V@2 N W X@2 Y N Z H
L@2 AA@2 B AB Q Z A AC AD AB H AE@2 K Y AF@2 AB N F AG G AH T AI AH K L V@2 N AJ AK@2 K L Z AH B AL@2 AB AH AM@2 AN
AO@2 ~@3
>`.pickRestart({
A: "[a3,c4,e4]", B: "[a3,c4,f4]", C: "[g#3,c4,f4]", D: "[c4,e4,a4]", E: "[c#4,f4,g#4]", F: "[g3,c4,d#4]",
G: "[g#3,c4,d#4]", H: "[b3,d4,g4]", I: "[a3,c4,f4] [b3,d4,g4]", J: "[[d4,e4,a4]@3 [b3,d4,g4]]/2", K: "[a3,c4,e4,f4]",
L: "[a3,d4,f4]", M: "[[c4,e4,g4]@3 [g3,c#4,e4]]/2", N: "[d4,f4,a4]", O: "[g3,b3,e4]@2 [c4,f4,a4] [g3,b3,d4]",
P: "[[d4,e4,a4]@7 [b3,d4,g4]]/2", Q: "[c4,e4,g4]", R: "[c4,f4,g#4]", S: "[c4,d#4,g4]", T: "[c4,f4,a4] [b3,d4,g4]",
U: "[[a3,d4,e4]@3 [g3,b3,d4]]/2", V: "[[c4,e4,g4]@3 [c#4,e4,g4]]/2", W: "[b3,e4,g4]@2 [c4,f4,a4] [b3,d4,g4]",
X: "[[a3,d4,e4]@7 [b3,d4,g4]]/2", Y: "[c4,e4,f4,a4]", Z: "[g3,c4,e4]", AA: "[[a3,c4,e4]@7 [g3,b3,d4]]/2",
AB: "[c4,f4,a4]", AC: "[g3,b3,e4]", AD: "[b3,e4,g4]", AE: "[[a3,c4,e4]@3 [b3,d4,g4]]/2",
AF: "[[c4,e4,a4]@3 [g3,b3,d4]]/2", AG: "[a#3,d4,f4]", AH: "[g3,b3,d4]", AI: "[a3,d4,e4]",
AJ: "[g3,b3,e4]@2 [c4,f4,a4] [b3,d4,g4]", AK: "[[d4,e4,a4]@3 [g3,b3,d4]]/2", AL: "[g3,b3,d4]/2",
AM: "[[a3,c4,e4]@3 [g3,b3,d4]]/2", AN: "[a3,c4,f4] [c4,e4,g4]", AO: "[[a3,d4,f4] [a3,c#4,e4]@3]/2",
})).s("gm_synth_strings_1").gain(0.24)
// other · oboe · "counter"
const oboe = note("<~@63 A B@2 ~@12 C D E F@2 ~@28>".pickRestart({
A: "~@7 e4", B: "[a4@2 e4 ~ e4 ~ g4@2 c4 d4 ~ e4 ~@3 b4@2 ~ c5 ~ d5 ~ g4@3 e4 ~ d4 ~@2 c4 ~]/2", C: "~@7 c4",
D: "g4@2 f4@2 g4 ~ g#4@4 g4@2 f4@2 g4 ~", E: "~@2 a#3 ~ c4 ~ f4 ~ g#4@3 ~ g4 ~ f4 ~",
F: "[~@8 g4@2 f4 g4 ~@2 g#4@4 g4 ~ f4 ~ g4@7 ~@3]/2",
})).s("gm_oboe").gain(0.12)
// drums · kick
const kick = s("bd").struct(`<
A B C D E A B E B F B G B H B I D B E A B J K B@4 E K H C B@3 C B@3 A K D B C L@2 K D L D E M D@2 B@2 L A B N K L@2 D
B@2 L K B@3 O B K L N B K B@2 C M K N E G B@3 D A B M K L B E B E P F B D M B@2 Q H A ~@2 R
>`.pickRestart({
A: "x ~@3 x!2 ~@2", B: "x!2", C: "x!2 ~@2 x!2 ~@2", D: "x ~@3 x ~@2 x", E: "x ~@2 x!2 ~@2 x", F: "x ~@2 x!3 ~@2",
G: "x ~@3 x!2 ~ x", H: "x ~@4 x ~@2", I: "x ~@2 x!3 ~ x", J: "x", K: "x!2 ~@2 x ~@3", L: "x ~@2 x!2 ~@3",
M: "x!2 ~@2 x ~@2 x", N: "~ x!2 ~ x!2 ~@2", O: "x ~@4 x ~ x", P: "~ x!2 ~ x!2 ~ x", Q: "x!2 ~ x!2 ~@3",
R: "~@5 x ~@2",
})).gain(0.36)
// drums · snare
const snare = s("sd").struct(`<
A@5 B A@3 C A@3 D A E A B A@3 F A@3 C A@3 D A@12 G A@3 H A@3 I A@3 J A@3 K A@3 C A@3 L A@7 K A@3 M A@3 N A@3 B A@3 O
A@3 P A@3 Q A@3 R A@3 S A ~@2 T
>`.pickRestart({
A: "~ x ~ x", B: "~@2 x ~@2 x ~@2", C: "~@2 x ~@2 x ~ x", D: "~@3 x ~@2 x ~", E: "~@4 x ~@6 x!2 ~@3",
F: "~ x ~ x ~@3 x", G: "~@2 x ~ x!3 ~@3 x ~ x ~ x ~", H: "~ x!2 ~", I: "~@2 x ~ x!2 ~@4 x!3 ~ x ~",
J: "~@4 x ~@6 x ~@2 x ~", K: "x ~@11 x ~ x!2", L: "~@4 x!2 ~@10", M: "~@4 x ~@5 x!3 ~ x ~", N: "x ~@5 x ~@5 x ~ x!2",
O: "~ x ~@6", P: "~@4 x ~@5 x ~ x!3 ~", Q: "x", R: "~@2 x ~@2 x!3", S: "~@5 x!2 ~@5 x ~@3", T: "~@3 x",
})).gain(0.36)
// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
~ A ~ B ~ C ~@3 D ~@3 E ~@3 F G ~@2 H ~@7 I ~@12 J ~@7 K ~@19 C ~@7 F ~@7 L ~@3 M ~@3 F ~@7 C ~@7 F
>`.pickRestart({
A: "~@9 x ~ x ~@4", B: "~@11 x ~@4", C: "~@8 x!2 ~@6", D: "~@12 x!2 ~@2", E: "~@3 x ~@4 x!2 ~@6", F: "~@9 x ~@6",
G: "~@3 x ~@12", H: "~@5 x ~@2", I: "~@5 x ~@10", J: "x!2 ~@6 x!2 ~@6", K: "x!2 ~@4 x ~ x!2 ~@6", L: "~@7 x",
M: "x!2 ~@2 x ~@3 x ~@7",
})).gain(0.12)
// drums · low tom
const low_tom = s("lt").struct("<~@46 [~@13 x!2 ~] ~@51 [~@3 x] ~@12>").gain(0.28)
// drums · hihat
const hihat = s("hh").struct(`<
A B@2 C B D A C A D B C B ~ B@3 D B E B ~ B@3 E@2 B E ~ B@4 E B@3 D B@3 ~ B@3 D B@3 ~ B A B F B A B ~ B@3 E B G B ~
B@3 D B@3 ~ B@3 E H B H ~ B@3 E B@3 ~ B@3 D B@3 ~ B@3 D B@3 ~ B ~@3
>`.pickRestart({
A: "~ x!3", B: "x!4", C: "x!2 ~ x", D: "x!2 ~@2", E: "x!3 ~", F: "~ x ~@2", G: "~ x!2 ~", H: "~@2 x!2",
})).gain(0.24)
// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~@11 B ~@28 C ~@11 D ~@7 E ~@7 F ~@15 G ~@7 H ~@12>".pickRestart({
A: "~@11 x!2 ~ x ~", B: "~@12 x!3 ~", C: "~@9 x!2 ~ x ~@3", D: "~@3 x ~@4", E: "~@6 x ~@3 x!3 ~ x!2",
F: "x ~@2 x ~@4", G: "~@5 x!2 ~@2 x!2 ~ x!3 ~", H: "x ~@2 x ~@2 x ~",
})).gain(0.28)
// drums · open hat
const open_hat = s("oh").struct(`<
A ~@2 B ~@2 A B A B ~ B ~@7 C ~@6 C ~ C ~@23 A ~ A ~ A ~@7 D ~@14 E ~ E ~@29
>`.pickRestart({
A: "x", B: "~ x", C: "~@3 x", D: "x ~@2 x", E: "x!2 ~@2",
})).gain(0.24)
// drums · crash
const crash = s("cr").struct(`<
~@6 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@2 C A ~@3 D A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 E A ~@3 A ~@3 A ~@3 A
~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7
>`.pickRestart({
A: "x", B: "x!2 ~ x ~@4", C: "x ~@2 x", D: "~@3 x", E: "~@5 x ~@2",
})).gain(0.32)
stack(bass, synth_strings_1, oboe, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, crash)
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.