0:00/0:00
// Have I Told You Lately That I Love You? — Van Morrison
// 73 bpm, 2/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 9) are rendered on a constant 2/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 156 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(73/2)
// 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 · acoustic bass
const bass = note(`<
~@2 A B@4 C D E F C D E G H@2 I D J G K F K I E F K D E F E H I D J G K F K D E F K I E F E H I D J G L M N O N O P Q
P R N O N O P@2 S T K I E F K D E F E H I D J G K F K D E U K D E V E H D@2 J G K W N O N O P Q P R N O N O P@2 S T K
I E F K D E F E H I D J G K W E H I D J G K W E H I D J X@6 ~@2
>`.pickRestart({
A: "~@7 f#2", B: "[~ c#3@5 ~ f#2@3 e3@10 ~@2 e3@12 e3@6 f#2@6 ~ b2@38 ~@11]/4", C: "e1", D: "g#1", E: "a1@3 a1",
F: "b1", G: "b1@3 b1", H: "a1", I: "g#1@3 g#1", J: "f#1@3 f#1", K: "e1@3 e1", L: "e1@6 f#1 g#1", M: "b1 c#2 b1@4 ~@2",
N: "a2@2 ~ a2", O: "a2 ~", P: "g#2@2 ~ g#2", Q: "g#2 d#2", R: "g#2 ~", S: "b2@2 ~ b2", T: "b2 ~",
U: "b1@4 b1 c#2 e2@2", V: "b1@2 f#1 g#1", W: "f#1 g#1", X: "[~@2 b1@72 e2@65 ~@5]/6",
})).s("gm_acoustic_bass").gain(0.25)
// chords · piano
const piano = note(`<
~@2 A@5 B@2 C@2 D E F G H I J K L M N O P Q R S P T U V W@2 X@2 Y Z AA AB AC AD AE AF AC AD AG AH AI@2 X@2 Y Z AA AJ
AK AL AM AN AO AP AQ AR AS AT AU AK AQ@2 AV AW P Q R S P T U AX AY@2 AZ@2 Y Z AA AB BA BB BC BD BE BF BG BH BI BJ BK
BL BM BN@2 BO AK BP BQ BR AO BS AQ AR AS BT AU AK AQ BU BV BW BX Q R S P T U BY BZ@2 X@2 Y Z AA CA ~ CB X@2 Y Z CC CD
CE@2 X@2 Y CF@2 ~ CG@5
>`.pickRestart({
A: "[~@25 g#4@4 ~ a4@4 e5@4 c#5@4 e5@4 g#5@6 b5@6 g#5@6 b4@6 ~@10 g#4@3 a4@3 b4@3 c#5@3 d#5@3 e5@3 d#5@3 e5@3 ~ f#5@3 g#5@3 a5@3 b5@3 c#6@3, ~@21 f#2@49 ~ [b2,f#3,b3,e4]@49, ~@34 [f#3,a3,e4]@37 ~@49]/5", // Bsus4 F#m7
B: "[[e4,b4,b5]@31 ~@9 e5@4 d#5@4]/2", C: "[b4@6 c#5@6 f#4 g#4@5 f#4@16 ~@14]/2", D: "~@3 g#5 c#6@3 g#5",
E: "b5@3 c#6 g#5@3 e5", F: "f#5@9 g#5@3 c#5@8 c#5@3 c#5", G: "d#5@2 c#5 b4@5 ~@4 a4@4 b4@2 a4 b4 c#5 d#5 e5 f#5",
H: "g#5@3 b5 a5 g#5", I: "c#6@2 ~ e6 d#6 c#6", J: "d#6@2 b5@2 ~@3 g#5",
K: "c#6@3 ~@2 b5@4 g#5@2 ~@2 f#5@3 g#5@4 e5@2 c#5@2", L: "e5@7 ~@9 f#5@5 g#5@3", M: "~ c#5@10 ~@5 e5@5 c#5@3",
N: "c#5@4 b4@3 b4@5 ~@12", O: "~@3 c#5 b4@2 a4@3 g#4@3 a4@3 b4@3 c#5@3 d#5@3", P: "~ b3 [e4,g#4,b4]@2, e3@7 ~",
Q: "~ [g#4,b4], g#3, ~ e4@2 ~", R: "~ c#4 [e4,a4]@2, a3@5 ~@3", S: "b3 [d#4,f#4]",
T: "[d#4,g#4,b4] g#3 [d#4,g#4,b4]@2", U: "~ c#4 a4 e4, a3@3 ~",
V: "b3@6 b3@6 b4@5 c#5@4 d#5@3, [d#4,f#4] [b3,d#4,f#4]", W: "[e5@2 b5 g#5, [a3,c#4,e4]]/2",
X: "[~@2 g#5 d#5, [b3,d#4,f#4]]/2", Y: "[f#3,c#4,e4]", Z: "[a3,b3,e4]", AA: "[e3,g#3,b3]",
AB: "~@2 f#3 b3 e4 b3 f#4@2, a3, [b3,e4] ~", AC: "[e3,b3] [e4,b4]", AD: "g#3 [d#4,b4]", AE: "[a3,c#4,e4]@5 b3 e4 b3",
AF: "e4@2 c#4 d#4 e4 b3 f#4@2, a3", AG: "~@5 g#5 f#5 e5, [a3,c#4,e4]", AH: "d#5@3 e5 d#5 c#5 b4 a4, [b3,d#4]",
AI: "[g#4@2 b5 g#5, [a3,c#4,e4]]/2", AJ: "[b3,e4] b3 e4 f#4 g#4 f#4 e4@2", AK: "[c#4,e4,g#4]!2",
AL: "[c#4,e4,g#4]@4 ~@2 c#6 d#6, ~ [c#4,e4,g#4]", AM: "[c#4,e4,g#4,e6] [c#4,e4,g#4]",
AN: "[c#4,e4,g#4]@3 f#6 e6 d#6, ~ [c#4,e4,g#4]", AO: "[b3,d#4,g#4,b5] [b3,d#4,g#4]",
AP: "[b3,d#4,g#4]@4 ~@2 c#5 g#4, ~ [b3,d#4,g#4]", AQ: "[b3,d#4,g#4]!2",
AR: "[b3,d#4,g#4]@3 c#5 d#5 e5, ~ [b3,d#4,g#4]", AS: "[c#4,e4,g#4]!2, e5@7 ~@17",
AT: "[c#4,e4,g#4]@3 f#5 e5 d#5, ~ [c#4,e4,g#4]", AU: "[c#4,e4,g#4,e5] [c#4,e4,g#4]",
AV: "~ a3 b3 [c#4,b4] b4 c#5, [d#4,f#4,b4] [d#4,f#4]", AW: "d#5 c#5 d#5 e5 f#5 g#5, [d#4,f#4,b4]!2",
AX: "b3@2 b3 b4 c#5 d#5 e5 f#5, [d#4,f#4] [b3,d#4,f#4]", AY: "[e5@8 b5@4 ~ g#5@3, [a3,c#4,e4], g#5 ~@23]/2",
AZ: "[~@8 b5@4 ~ g#5@3, [b3,d#4,f#4]]/2", BA: "~ g#5 a5 b5 g#5 a5", BB: "b5@4 g#5@4 a5@4 b5@6 ~@4 g#5 a5",
BC: "b5@5 e6@3 ~ b5@3 ~ b5@11",
BD: "~@4 g#5@2 ~ g#5@2 ~ e5@2 ~ e5@2 ~ b4@2 ~ e5@2 ~ c#5@2, ~@3 a5@2 ~ a5@2 ~ f#5@2 ~ f#5@2 ~ d#5@2 ~ f#5@2 ~ d#5@2 ~",
BE: "b4@6 ~@2 b4@3 ~ b5@3 a5@2 ~ g#5@3 f#5@3", BF: "g#5@4 b5@4 g#5@4 b5 ~@3 g#6@5 b6@2 ~",
BG: "~ b6@7 ~@2 g#6@2 ~ f#6@3 f#6 e6@2 d#6@2 ~@3, ~@9 a6@2 ~@13",
BH: "d#6 e6 d#6 ~@3 c#6 d#6 c#6 ~@3 b5 c#6 b5 ~@3 a5 b5 a5!2 g#5 f#5", BI: "g#5@5 ~@10 g#5@4 f#5@5",
BJ: "f#6 e6 d#6 c#6 b5 a5", BK: "g#5@7 ~@11 a#6@3 b6@3",
BL: "~ g#6@2 ~ b5@2 ~@3 a5@3 g#5@6 a5@3 b5@2 ~, a#6@2 ~ d#6@2 ~@19", BM: "c#6@3 ~@2 d#6 e6 d#6",
BN: "[c#6@3 ~@9 [c#6,f#6]@5 ~@7 e6@5 ~@11 b3@4 c#4@4, ~@23 g#6@5 ~@20]/2", BO: "f#4 e4 f#4 e5 f#5 e5",
BP: "[c#4,e4,g#4]@2 c#6 d#6, ~ [c#4,e4,g#4]", BQ: "[a5,c#6,e6]!2", BR: "[a5,c#6,e6]@3 f#6 e6 d#6, ~ [c#4,e4,g#4]",
BS: "~@6 f#4@3 g#4@3 d#5@6 g#4@3 b4@2 ~, [b3,d#4,g#4] [b3,d#4]", BT: "[c#4,e4,g#4]@3 c#5 d#5 e5, ~ [c#4,e4,g#4]",
BU: "~ f#4 [b3,e4,g#4]@2, [b3,d#4,g#4] ~", BV: "e4 f#4@3", BW: "[b3,d#4,f#4]!2", BX: "[e3,b3] [e4,g#4,b4]",
BY: "b3@6 b3@6 a4@4 b4@2 a4 b4 c#5 d#5 e5 f#5, [d#4,f#4] [b3,d#4,f#4]", BZ: "[g#5@2 b5 g#5, [a3,c#4,e4]]/2",
CA: "[f#3,a3] [g#3,b3]", CB: "b5 g#5", CC: "[e3,g#3,b3]@4 g#5 a5", CD: "b5 c#6 d#6 e6 f#6 g#6",
CE: "[g#6@2 b5 g#5, [a3,c#4,e4]]/2", // A
CF: "[~@2 a2 b2 ~ e3 c#3!2 ~ e3 a3 b3 ~ c#4 b3 e4 ~ c#4 e4 b4 ~ c#5 e5@12 ~@14]/2",
CG: "[~@2 e3@7 e3 g#3@6 b3@6 ~ b3@6 ~ e4@5 ~ b4@6 ~ b4@6 [e5,g#5]@8 b5@8 e6@8 ~@3 g#6@13 ~@31, ~ [e2,b2]@48 ~@11, ~@16 g#3 ~@5 e4@7 g#4@6 g#4@7 e5@7 ~@25 b5@3 ~@43, ~@75 e6@2 ~@43]/5", // E E5
})).s("gm_piano").gain(0.3)
// chords · string ensemble 1
const string_ensemble_1 = note(`<
~@4 A@3 B@4 C D E F G@2 H@2 I J K J L M N O P Q@2 R G@2 H@2 I S T S ~@8 G@2 H@2 I S T U V@4 W@4 V@4 X@2 H@2 L M N O P
Q@2 R G@2 H@2 I S T S Y Z AA AB Y Z AA AB G@2 H@2 I S T AC V@4 W@4 V@4 X@2 H@2 L M N O P Q@2 R G@2 H@2 I S AD AE G@2
H@2 I S AF AG G@2 H@2 I AH@8
>`.pickRestart({
A: "[~@23 [a3,b3,c#4,e4]@49]/3", B: "[e4,g#4,b4]/4", C: "[b3,e4,f#4]", D: "[g#3,d#4,f#4]", E: "[c#4,e4,g#4]",
F: "[b3,d#4,f#4]", G: "[c#4,e4,g#4]/2", H: "[b3,d#4,f#4]/2", I: "[a3,c#4,e4]", J: "[a3,b3,c#4,e4]", K: "[g#3,b3,d#4]",
L: "b3 e4", M: "[d#4,f#4] b4", N: "[c#4,e4,b4]", O: "[b3,f#4]", P: "b3 ~@11 e4@12",
Q: "[~ [a3,e4], [d#4,f#4] ~, ~ b4@3]/2", R: "[d#4,f#4]", S: "[b3,c#4,e4]", T: "[g#3,b3,e4]",
U: "~@9 [e4,g#4] [f#4,a4] [g#4,b4]", V: "[~ e4, [a3,c#4]]/4", W: "[b3,g#4]/4", X: "[b3,d#4,g#4]/2", Y: "[e3,g#3,b3]",
Z: "[d#3,g#3,b3]", AA: "[e3,a3,c#4]", AB: "[f#3,b3,d#4]", AC: "[f#4,a4] [g#4,b4]",
AD: "[g#3,b3]@6 [f#3,f#4] [g#3,g#4]", AE: "[a3,a4]@2 [g#3,g#4] [a3,a4] [b3,b4]@3 ~",
AF: "[g#3,b3]@4 [g#4,g#5] [a4,a5]", AG: "[b4,b5]", AH: "[~@2 [b3,c#4,e4]@72 [e3,g#3,b3]@103 ~@15]/8",
})).s("gm_string_ensemble_1").gain(0.14).pan(0.6)
// other · string ensemble 2
const string_ensemble_2 = note(`<
~@5 A@2 ~@3 B C@4 D E F G H I J ~@4 K L@3 M N O P Q R S T ~ U V W X U V W Y Z O P AA@2 AB AC AD AE@2 AF@2 AG AH@2 AI
AJ@2 AK@2 AL@2 AM@2 ~@3 K L@3 M N O P Q R S AN AO AP AQ AR AS AP AQ AR AT AU@2 AV@2 R AW AX AY AZ@2 AF@2 AG AH@2 AI
BA@2 AK@2 AL@2 AM@2 ~@3 K L@3 BB AG O P O BC BD BE BF AG O P O BC BD BE BG AG O P Q R BH@8
>`.pickRestart({
A: "[~@17 c#4@3 d#4@3 e4@3 d#4@3 e4@3 ~ f#4@4 ~@11]/2", B: "~@2 e4@3 d#4@3",
C: "[c#4@6 b3@84 a4 b4 c#5 d#5 e5 f#5]/4", D: "g#5@6 f#5 g#5", E: "a5@2 [g#3,g#5] [a3,a5]",
F: "b5@2 g#5@2 d#5@2 b4 g#4, b3 ~", G: "b4", H: "e4@6 f#4 g#4", I: "e4@6 e4 c#4", J: "[e3,b3,e4]",
K: "~ b3 e4@2 e4 f#4 g#4 a4", L: "b4/3", M: "~@12 b4@4 c#5@3 b4@2 c#5@2 d#5", N: "e5", O: "b5 g#5", P: "f#5",
Q: "f#5 d#5", R: "g#4 f#4@2 g#4", S: "a4@2 g#4 f#4", T: "e4", U: "~ e6", V: "d#6", W: "c#6", X: "c#6 b5 c#6 d#6",
Y: "b5@6 e5 f#5", Z: "[e5,g#5]", AA: "[b5@2 d#5@2 g#4 [f#4,f#5]@2 [g#4,g#5], f#5 ~@11 g#5@18 ~@18]/2",
AB: "[a4,a5]@2 [g#4,g#5] [f#4,f#5]", AC: "[e3,e4,e5]", AD: "[f#3,a3] [g#3,b3]", AE: "[c#5@14 c#5 d#5]/2",
AF: "[e5@3 f#5]/2", AG: "g#5", AH: "g#5 a#5 g#5 a#5 g#5 a#5 g#5 a#5", AI: "g#5@3 a#5@3 g#5@3 a#5@3 g#5@4 a#5@4 b5@4",
AJ: "[c#6@3 d#6]/2", AK: "[e6@5 f#6 g#6 a6]/2", AL: "[b6 g#6 d#6 b5 b4@6 [d#4,f#4]@2 [f#4,b4]@2 [d#4,g#4]@2]/2",
AM: "[[c#4,a4] [b3,b4]@7]/2", AN: "e4@2 f#3 g#3", AO: "a3@2 g#3 f#3", AP: "f#3@3 e3", AQ: "d#3", AR: "c#3@3 d#3",
AS: "e3", AT: "e3@3 f#3", AU: "[g#3@3 e3]/2", AV: "[f#3@15 ~]/2", AW: "a4@6 g#4 f#4", AX: "~@4 b3 c#4",
AY: "f#4@4 e4@4 ~ g#4 a4 ~ b4@9 ~@3", AZ: "[c#5@7 d#5]/2", BA: "[c#6@9 c#6 d#6 e6]/2",
BB: "~@12 b4@4 c#5@2 a4 b4 c#5 d#5 e5 f#5", BC: "g#5 f#5@2 g#5", BD: "a5@2 g#5 f#5", BE: "e5@3 ~",
BF: "~@18 a4 [b4,c#5] d#5 c#5 [d#5,e5] f#5", BG: "g#3 b3, e3", BH: "[~@2 a4@72 [b3,e4,g#4]@103 ~@15]/8",
})).s("gm_string_ensemble_2").gain(0.35).pan(0.4)
// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
~@38 A ~@2 B@2 ~ C@4 D@5 E F G H I J@3 ~ K L M N O P@2 Q@2 ~@3 R@4 S@8 T@4 U@3 V@4 W@6 X@7 Y@7 Z AA@7 AB AC@8 AD@8
AE@5 ~@4 AF AG@2 AH ~
>`.pickRestart({
A: "~@6 [b2,b3]@3 [e3,e4]@2 ~ e4@2 ~ b3@2 ~ f#4@6, ~@11 e5@3 b4@3 f#5@6 ~", // B E
B: "[~@21 b3@2 ~ e4@2 ~ b3@2 ~ d#4@5 ~ e4@2 ~ f#4@6 ~@3, ~@20 b4@3 e5@3 b4@3 d#5@6 e5@3 f#5@6 ~@4]/2",
C: "[~@12 [b3,d#4,g#4]@11 ~ [a3,c#4,e4]@6 [e3,e4]@2 ~ a3@2 ~ c#4@11 ~ [b3,d#4,f#4]@11 ~ [b3,d#4,f#4]@11 ~ [a3,c#4,e4]@11 ~ [a3,c#4,e4]@12, ~@11 [b4,d#5,g#5]@12 [a4,c#5,e5]@6 ~@3 a4@3 c#5@12 [b4,d#5,f#5]@12 [b4,d#5,f#5]@12 [a4,c#5,e5]@12 [a4,c#5,e5]@13]/4", // G#m A E B A G#m A B …
D: "[~@3 a3@2 ~ c#4@2 ~ e4@2 ~ c#4@11 ~ [b3,d#4]@2 ~ g#3@8 ~ [g#3,b3,d#4]@17 ~ g#3@2 ~ b3@2 ~ d#4@5 ~ g#3@5 ~ [f#3,a3,c#4]@11 ~ [f#3,a3,c#4]@11 ~ [b3,c#4,e4]@11 ~ [b3,c#4,e4]@12, ~@2 a4@3 c#5@3 e5@3 c#5@12 [b4,d#5]@3 g#4@9 [g#4,b4,d#5]@18 g#4@3 b4@3 d#5@6 g#4@6 [f#4,a4,c#5]@12 [f#4,a4,c#5]@12 [b4,c#5,e5]@12 [b4,c#5,e5]@12 ~]/5", // B G#m F#m C#m7 B G#m F#m C#m7
E: "~@6 [e2,e3] [f#2,f#3]", // E F#
F: "[g#2,g#3]@3 [b2,b3]@3 [e3,e4]@2 ~ f#3@2 ~ g#3@2 ~ b3@2 ~ e4@3 ~@3, ~@8 f#4@3 g#4@3 b4@3 e5@3 ~@4", // G# B E
G: "~@6 [e3,e4]@2 ~ a3@2 ~ [c#4,e4]@9 [c#4,e4]@3, ~@8 a4@3 e5@9 ~@4", H: "~@2 [c#4,e4] ~@5",
I: "~@2 [e3,a3,c#4] ~ [e3,a3,c#4]@2 [e3,a3,c#4] ~", // A
J: "[[e3,a3,c#4]@6 [e3,a3,c#4]@3 ~@3 [e3,a3,c#4]@6 ~@6 d#3@11 ~ b3@29 ~ c#5@2 ~ g#4@3, ~@23 g#4@40 ~@9, ~@3 g#3@5 ~, ~@35 b4@28 ~@2 c#6@3 g#5@3 ~]/3", // A
K: "~@9 [g#3,b3]@2 ~ [g#3,b3]@12, ~@11 [g#4,b4]@12 ~", L: "~@3 a3 [a3,c#4,e4]@4", M: "~ [a3,c#4]",
N: "c#4@3 [a3,e4] e4@4", O: "~ e4", P: "[[g#3,d#4]@17 ~ f#3@2 ~ g#3@2 ~ d#4@18 ~@6, ~@17 f#4@3 g#4@3 d#5@18 ~@7]/2",
Q: "[~@6 b3@5 ~@7 b3@5 ~ [f#4,b4]@15 ~@9, d#3 ~, ~@5 b4@6 d#5@6 b4@6 [f#5,b5]@15 ~@10, ~@12 d#4@11 ~@25]/2", // B5
R: "[~@3 b3@2 ~ e4@8 ~ f#4@5 ~ b3@2 ~ [e3,g#3,b3,e4]@11 ~ [e3,g#3,b3,e4]@11 ~ [d#3,g#3,b3,d#4]@11 ~ [d#3,g#3,b3,d#4]@11 ~ [a3,c#4,e4]@11 ~ [a3,c#4,e4]@12, ~@2 b4@3 e5@9 f#5@6 b4@3 [g#4,b4]@12 [g#4,b4]@12 [g#4,b4]@12 [g#4,b4]@12 [a4,c#5,e5]@12 [a4,c#5,e5]@12 ~]/4", // E G#m A G#m A
S: "[~@3 f#3@2 ~ a3@5 ~ [b3,d#4,f#4]@5 ~ [f#3,d#4]@5 ~ [c#4,e4,g#4]@23 ~ [c#4,e4,g#4]@17 ~ [c#4,e4,g#4]@5 ~ [b3,d#4,f#4]@23 ~ [b3,d#4,f#4]@17 ~ [b3,d#4,f#4]@5 ~ [f#3,a3,c#4]@17 ~ [f#3,a3,c#4]@5 ~ [a3,b3,c#4,e4]@17 ~ [a3,b3,c#4,e4]@5 ~ [g#3,b3,e4]@24, ~@2 f#4@3 a4@6 [b4,d#5,f#5]@6 [f#4,d#5]@6 [c#5,e5,g#5]@24 [c#5,e5,g#5]@18 [c#5,e5,g#5]@6 [b4,d#5,f#5]@24 [b4,d#5,f#5]@18 [b4,f#5]@6 [f#4,a4,c#5]@18 [f#4,a4,c#5]@6 [a4,b4,c#5,e5]@18 [a4,b4,c#5,e5]@6 [g#4,b4,e5]@24 ~]/8", // B D#m C#m B F#m A E B …
T: "[~@3 f#3@2 ~ [a3,b3,c#4]@17 ~ [e3,g#3,b3,e4]@23 ~ [d#3,g#3,b3]@11 ~ [d#3,g#3,b3,d#4]@11 ~ [e3,a3,c#4,e4]@11 ~ [e3,a3,c#4,e4]@12, ~@2 f#4@3 [a4,b4,c#5]@18 [g#4,b4]@24 [g#4,b4]@12 [g#4,b4]@12 [a4,c#5]@12 [a4,c#5]@13]/4", // A E G#m A G#m A
U: "[~@3 c#4@2 ~ [b3,c#4,e4]@17 ~ [g#3,b3,e4]@11 ~ [g#3,b3,e4]@11 ~ [g#3,b3,d#4]@11 ~ [g#3,b3,d#4]@12, ~@2 c#5@3 e5@18 [g#4,b4,e5]@12 b4@12 [g#4,b4,d#5]@12 [g#4,b4]@12 ~]/3", // C#m7 E G#m E G#m
V: "[[e3,a3,c#4,e4]@8 ~ [e3,a3,e4]@2 ~ [e3,a3,c#4]@17 ~ b3@8 ~ [a3,c#4,e4]@8 ~ [a3,e4,g#4]@23 ~ [a3,e4,g#4]@11 ~ b3@3 g#3@8 [b4,d#5], ~@8 a4@3 a4@18 b4@9 [a4,c#5,e5]@9 [a4,e5]@24 [a4,e5,g#5]@12 b4@3 ~@10]/4", // A A5 A Amaj7 B A A5 Amaj7
W: "[[b3,d#4,f#4]@8 ~ [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@35 ~ [a3,c#4,e4]@23 ~ [b3,c#4,e4]@11 ~ [b3,c#4,e4]@11 ~ [g#3,b3,e4]@17 ~ g#3@2 ~ a3@2 ~ b3@24, ~@8 [b4,d#5,f#5]@3 [d#5,f#5]@36 [a4,c#5,e5]@24 [b4,c#5,e5]@12 [b4,c#5,e5]@12 [g#4,b4,e5]@18 g#4@3 a4@3 b4@24 ~]/6", // B A C#m7 E B D#m A C#m7 …
X: "[~@9 [a3,c#4,e4]@2 ~ [a3,c#4,e4]@44 ~ [a3,c#4,e4]@2 ~ [a3,c#4,e4]@8 ~ [a3,c#4,e4]@2 ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4]@23 ~ [g#3,b3]@29 ~ f#3@2 ~ g#3@2 ~ b3@17 ~ b3@2 ~ b3@2 d#5, ~@8 [a4,c#5,e5]@3 [a4,c#5,e5]@45 [a4,c#5,e5]@3 [a4,c#5,e5]@9 [a4,c#5,e5]@3 [a4,c#5,e5]@6 [a4,c#5,e5]@6 [a4,c#5,e5]@24 [g#4,b4]@30 f#4@3 g#4@3 b4@18 b4@3 b4@3 ~]/7", // A G#m A G#m
Y: "[~@4 b3@7 ~ b3@7 ~@5 [a3,c#4,e4]@27 ~@3 e4@17 ~ [e3,a3,c#4,e4]@11 ~ [e3,a3,c#4,e4]@15 ~ [e3,a3,c#4,e4]@7 ~ [e3,a3,c#4,e4]@11 ~ [d#3,g#3,b3,d#4]@11 ~ [d#3,g#3,b3,d#4]@9 ~@3 [d#3,g#3,b3,d#4]@24, d#4@2 c#4@2 ~@48 a4@2 ~@17 [a4,c#5]@12 [a4,c#5]@16 [a4,c#5]@8 [a4,c#5]@12 [g#4,b4]@12 [g#4,b4]@10 [g#4,b4]@2 [g#4,b4]@24 ~, ~ c#5@2 b4@6 ~@2 b4@6 ~@6 [a4,c#5,e5]@28 a5@2 e5@18 ~@71 [d#3,g#3,b3,d#4]@2 ~@24]/7", // A G#m A G#m A G#m
Z: "~@3 d#4@5 ~ e4@3, ~@3 b4@2 d#5@10 ~@2 e5@7, ~@2 b3 ~@9",
AA: "[~@6 f#4@12 ~@6 [g#3,b3,e4]@11 ~ [b3,e4]@8 ~ [b3,e4]@2 ~ [d#4,f#4]@11 ~ [b3,d#4,f#4]@11 ~ e4@2 ~ a3@8 ~ [a3,e4]@11 ~ [b3,d#4]@11 ~ [d#4,f#4]@11 ~ [g#3,b3,e4]@11 ~ [b3,e4]@8 ~ [b3,e4]@2 ~ [d#4,f#4]@11 ~ [b3,d#4,f#4]@11 e5, ~@3 e5@2 f#5@12 ~@30 [d#5,f#5]@12 ~@12 e5@3 ~@33 [d#5,f#5]@12 ~@24 [d#5,f#5]@12 ~@13, ~@4 e4@2 ~@17 [g#4,b4,e5]@12 [b4,e5]@9 [b4,e5]@3 ~@12 [b4,d#5,f#5]@12 ~@3 a4@9 [a4,e5]@12 [b4,d#5]@12 ~@12 [g#4,b4,e5]@12 [b4,e5]@9 [b4,e5]@3 ~@12 [b4,d#5,f#5]@12 ~]/7", // E E5 D#m B A5 B D#m E …
AB: "e4@2 ~ a3@8 ~ [a3,e4]@11 [b4,d#5], ~@2 a4@9 [a4,e5]@12 ~", // A5 B A5
AC: "[[b3,d#4]@11 ~ [d#4,f#4]@11 ~ [a3,e4,g#4]@23 ~ [a3,e4,g#4]@11 ~ [a3,e4,g#4]@11 ~ [b3,d#4,f#4]@8 ~ [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@35 ~ [a3,c#4,e4]@23 ~ [b3,c#4,e4]@11 ~ [b3,c#4,e4]@11 ~ e4@5 ~ d#4@3 e4@2 ~ b4@12, ~@11 [d#5,f#5]@12 [a4,e5,g#5]@24 [a4,e5,g#5]@12 [a4,e5,g#5]@12 [b4,d#5,f#5]@9 [b4,d#5,f#5]@3 [b4,d#5,f#5]@36 [a4,c#5,e5]@24 [b4,c#5,e5]@12 [b4,c#5,e5]@12 [g#4,b4]@12 ~@13, ~@167 e5@6 d#5@3 ~@3 b5@12 ~, ~@14 [g#3,b3] ~]/8", // B D#m Amaj7 B A C#m7 D#m Amaj7 …
AD: "[~@6 [e3,e4]@2 ~ g#3@2 ~ g#3@2 ~ a3@2 ~ b3@5 ~ [a3,e4,g#4]@23 ~ [a3,e4,g#4]@11 ~ [a3,e4,g#4]@11 ~ [b3,d#4,f#4]@8 ~ [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@35 ~ [a3,c#4,e4]@23 ~ [b3,c#4,e4]@11 ~ [b3,c#4,e4]@11 ~ e4@5 ~ d#4@3 e4@2 ~ b4@12, ~@8 g#4@3 g#4@3 a4@3 b4@6 [a4,e5,g#5]@24 [a4,e5,g#5]@12 [a4,e5,g#5]@12 [b4,d#5,f#5]@9 [b4,d#5,f#5]@3 [b4,d#5,f#5]@36 [a4,c#5,e5]@24 [b4,c#5,e5]@12 [b4,c#5,e5]@12 [g#4,b4]@12 ~@13, ~@167 e5@6 d#5@3 ~@3 b5@12 ~, ~@14 [g#3,b3] ~]/8", // E Amaj7 B A C#m7 Amaj7 B A …
AE: "[~@6 [e3,e4]@2 ~ g#3@2 ~ g#3@2 ~ a3@2 ~ b3@5 ~ [a3,e4,g#4]@23 ~ [a3,e4,g#4]@11 ~ [a3,e4,g#4]@11 ~ [b3,d#4,f#4]@8 ~ [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@36, ~@8 g#4@3 g#4@3 a4@3 b4@6 [a4,e5,g#5]@24 [a4,e5,g#5]@12 [a4,e5,g#5]@12 [b4,d#5,f#5]@9 [b4,d#5,f#5]@3 [b4,d#5,f#5]@36 ~]/5", // E Amaj7 B Amaj7 B
AF: "~@10 [e5,e6] ~ [c#5,c#6] ~@5 [b4,b5] ~@5", // E C# B
AG: "[~@2 [b4,b5] a5 a4 g#4 ~ a5 a4 g#4 ~@4 [f#4,f#5]@4 ~ e4@4 ~ d#4@5 [b3,b4]@7 ~ [c#4,c#5]@11, ~@18 e5@4 ~ d#5@5 ~@20]/2", // B F# B C#
AH: "~ d#3@3 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.2)
// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
~@55 A@2 B@2 C D@2 E F@5 G@2 ~@12 H ~@5 C ~ I J K@4 L@3 ~@21 M@2 ~@2 M@2 ~@7 N ~@7 N ~@10 O P Q ~
>`.pickRestart({
A: "[~@11 c#5@9 [c#5,e5]@3 ~ [c#4,e4]@5 [c#5,e5]@3 ~@16, ~@23 [c#5,e5]@6 ~@19]/2", // C#m
B: "[~@6 e4@2 ~ [e3,a3,c#4,e4]@2 ~ e4@5 ~ e4@2 ~ [e3,a3,c#4,e4]@2 ~ e4@5 ~ e4@2 ~ [e3,a3,c#4,e4]@2 ~ e4@6 ~@6, ~@5 [a4,c#5]@3 [a4,c#5]@3 [a4,c#5]@6 [a4,c#5]@3 [a4,c#5]@3 [a4,c#5]@6 [a4,c#5]@3 [a4,c#5]@3 [a4,c#5]@6 ~@7]/2", // A
C: "d#4 ~", D: "[~@4 g#4 ~@3, ~@23 g#5@6 ~@19]/2", E: "~@8 [g#4,b4]@3 ~@13",
F: "[~@9 [c#4,e4]@2 [a4,c#5,e5]@12 ~ [a3,c#4,e4]@11 ~ e4@11 ~ [a3,e4]@8 ~ c#4@2 ~ [a3,c#4]@11 ~ [a3,c#4,e4]@11 ~ [a3,c#4]@11 ~ b3@18 ~@6, [a2,a3] ~@9, ~@8 [a4,c#5,e5]@3 ~@12 [a4,c#5,e5]@12 [a4,c#5,e5]@12 [a4,c#5,e5]@9 [a4,c#5,e5]@3 [a4,c#5,e5]@12 [a4,c#5,e5]@12 [a4,c#5,e5]@12 [g#4,b4,d#5]@18 ~@7]/5", // C#m A A5 A G#m
G: "[~ f#3, ~@23 f#4@24 ~, ~@2 d#4 ~]/2", H: "~@17 d#5@6 ~", I: "~@3 [b3,e4]@2 [b4,c#5]@18 ~, ~@2 [b4,e5]@3 ~@19",
J: "~@11 [g#4,e5]@12 ~", K: "[~@11 d#5@12 [a4,c#5]@9 ~ c#4@2 ~ e4@18 ~@17 g#5@24 ~, ~@32 c#5@3 c#5@18 ~@43]/4",
L: "[~@14 g#4@9 f#5@9 ~@3 b4@36 ~]/3", M: "[~@8 f#4 ~@7, ~@23 f#5@3 ~@22]/2", N: "~@8 e5@3 ~@13",
O: "~@5 g#5 ~@3 g#5 [f#4,f#5] ~@13", P: "~@11 b4 b3 ~@11", Q: "~@2 d#4@9 ~ [b2,b3]@5 ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.1)
// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
~@8 A ~ B C ~@2 D E@2 F G@2 H ~ I ~@3 J K ~@2 L M@2 N@2 O P Q ~@84 R S ~@2 T ~@7 U ~@9 V W ~@10
>`.pickRestart({
A: "~@2 g#2 e3 b3@4", B: "~ b3 e4@3 b3 d#4@2", C: "c#4@2 b3@3 ~@3", D: "~@5 e4 g#4 c#4", E: "[~@4 [a3,e4]@11 ~]/2",
F: "~@6 f#3 g#3", G: "[b3@3 ~ e4@4, ~@11 a3@13, ~@23 [b3,c#4]@25]/2", H: "~@2 f#3 a3 c#4@3 ~",
I: "~ f#3 a3 b3 c#4@2 f#4@2", J: "~ b3 e4@3 d#4@3", K: "b3@7 ~", L: "~ e4 f#4 f#4@5", M: "[~ [a3,c#4,e4]@2 ~]/2",
N: "[[b3,d#4,f#4]@4 [b3,d#4,f#4]@6 b3 d#4 g#4@4]/2", O: "f#4 e4 f#4@3 ~@3, c#4@5 ~@3", P: "b3 c#4@2 ~",
Q: "~@2 f#3 g#3 b3@3 ~", R: "~ e3 e4 e4@2 d#4@2 b3", S: "e3@5 ~@3", T: "~@3 f#3@3 a3@3 a3@8 ~@7",
U: "[a2,f#3]!2 [d#3,g#3]@2", V: "~@3 g#4 f#4 e4", W: "f#4@3 b3@5",
})).s("gm_acoustic_guitar_nylon").gain(0.27)
// drums · kick
const kick = s("bd").struct(`<
~@7 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
A B A B A B A B A B A B A B A B A B A B A B A B A C ~@7
>`.pickRestart({
A: "x ~@2 x", B: "x", C: "~ x ~@10",
})).gain(0.16)
// drums · snare
const snare = s("sd").struct("<~@7 [~ x]!111 [~ x!2 ~] [~ x]!29 ~@8>").gain(0.28)
// drums · hihat
const hihat = s("hh").struct(`<
A B C ~@4 D E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E D E F E F E F E F E F E F E F G D E F E F E
F E D E F E F E F H D E F E F E F E F E F E F E F H D E F E F E F E F E F E F E F H D E F E F E F H D E F E F E F H D
E F E F E F E F E F E F E F I D E F E F E F J D E F E F ~@8
>`.pickRestart({
A: "~@5 x", B: "~@8 x ~@12 x ~@2", C: "~@3 x ~@4", D: "~@2 x!2", E: "x!4", F: "x ~ x!2", G: "x ~ x ~ x ~@2 x",
H: "x!2 ~ x", I: "x ~ x ~ x!2 ~@2", J: "x!3 ~",
})).gain(0.16)
// drums · splash
const splash = s("cr").struct(`<
~@6 A B ~@31 B ~@14 C B ~@7 B ~@6 D B ~@14 D B ~@14 D B ~@6 D B ~@6 D B ~@14 C B ~@6 E B ~@4 F ~@2 G H I J ~
>`.pickRestart({
A: "~@6 x!2", B: "x", C: "~@3 x", D: "~ x", E: "~@4 x!3 ~", F: "~ x ~@10", G: "~@10 x!3 ~ x!3 ~ x!3 ~ x!2",
H: "x ~ x!3 ~ x!4 ~ x!3 ~ x!3 ~ x!3 ~ x", I: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~ x", J: "x!2 ~@22",
})).gain(0.12)
// … 4 more lines
More by Van Morrison
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.