0:00/0:00
// Son and Daughter — Queen
// 150 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 171 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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.
// bass · fretless bass · "bAIXO"
const bass = note(`<
A@2 B@2 A C D E F C D E G H@2 I J C D E G H@2 I J C D E K L@2 M N O@2 P@2 H@2 I A@2 B@2 ~ A C D E F C D E G H@2 I J C
D E G H@2 I J C D E K L@2 M N O@2 Q R H@2 I A@2 B@2 ~@2 S T I U V C D E K W@2 X@2 Y@2 Z AA AB@5 AC AD AE AF@2 AG AH@3
AI AJ@3 AK AL@8 AM@5 AN@8 AO@2 AP@2 AQ@2 AR@8 AS AT@6 AU@5 ~
>`.pickRestart({
A: "~ e1", B: "[~ e1@3]/2", C: "g1@3 e1 a1 g1@3", D: "e1@3 e1 b1 d2@3", E: "a1@3 g1@3 e1@3 a1@5 ~ e1@3 g1@6",
F: "e1 d1 e1@2", G: "e1 d1 e2!2", H: "d2@3 d2 e2@2 e2@2", I: "d2@2 e2!2", J: "d2 e1", K: "e1 d1 b1!2",
L: "a1@3 a1 b1@2 b1@2", M: "a1@2 b1!2", N: "a1@12 c#2@6 ~ c#2@5", O: "b1@9 ~ b1@2 c#2@6 c#2@6",
P: "[b1@12 c#2@6 a1@8 ~ b1@9 e2@6 e2@6]/2", Q: "b1@2 c#2!2", R: "b1@2 e2!2", S: "~ e2", T: "d2 e2", U: "d2!2 e2!2",
V: "d2!2 e1@2", W: "[b1@5 ~ b1@5 ~ b1@5 b1@5 ~ b1@5 b1@5 ~ b1@5 b1@5 b1@4]/2",
X: "[~@2 b1@5 b1@5 a1@5 a1@4 ~ b1@4 b1@4 ~ b1@4 ~ b1@4 b1@4 ~ b1@3]/2",
Y: "[~@2 b1@4 b1@4 b1@4 ~ b1@4 b1@4 b1@4 ~ b1@4 b1@4 b1@4 b1@4 b1@4]/2", Z: "b1@4 b1@4 b1@4 b1@4 ~ b1@4 b1@3",
AA: "~ b1@4 b1@4 b1@4 b1@4 b1@4 b1@3",
AB: "[~ b1@4 b1@4 b1@4 ~ b1@4 b1@4 b1@4 b1@4 d2@4 d2@4 c#2@4 c#2@4 c#2@4 c#2@4 c#2@4 ~ c#2@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 b1@4 ~ b1@4 b1@4 b1@4 b1@4]/5",
AC: "b1!6", AD: "b1@4 ~ b1@4 b1@4 b1@4 d2@4 d2@3", AE: "~ c#2@4 c#2@4 c#2@4 c#2@4 c#2@4 c#2@3",
AF: "[~ c#2@4 e2@4 d2@2 d2@2 d2@2 d2@2 e2@2 e2@2 e2@2 d2@2 d2@2 d2 ~ e2@2 ~@2 d2@2 d2@2 d2 d2@2 e2@2 e2@2 e2@2 d2@2]/2",
AG: "d2@2 d2@2 ~ e2@2 ~ d2@2 d2@2 d2@2 d2@2 e2@2 e2@2 e2@2 g2@2",
AH: "[g2@2 g2@2 e3@4 d3@2 d3@2 d3 d3@2 a2@2 a2@2 a2@2 g2@2 g2@2 g2@2 e2@4 d2@2 d2@2 d2@2 d2@2 e2@2 e2@2 e2@2 d2@2 d2@2 d2 ~ e2@2 ~@2 d2 d2@2 d2@2 d2@2 e2@2 e2@2 e2@2 d2@2 d2@2]/3",
AI: "d2 e2 ~ d2!4 e2!3 g2!2",
AJ: "[g2@2 e3@4 d3 d3@2 d3@2 d3@2 a2@2 a2@2 a2@2 g2@2 g2@2 g2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2]/3",
AK: "e2!12",
AL: "[e2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@14 d2@14 d2@7 d2@7 d2@6 d2@6 e1@12 g1@9 e1@3 a1@3 ~ g1@9 e1@8 e1@3 b1@3 ~ d2@9 a1@3 g1@2 e1@3 ~ a1@5 e1@3 g1@6 e1@6 d1@6 e1@12 g1@7]/8",
AM: "[~@2 e1@3 a1@3 ~ g1@9 e1@8 e1@3 b1@3 ~ d2@9 a1@3 g1@2 e1@3 ~ a1@5 e1@3 g1@6 e1@6 d1@6 b1@6 ~ b1@5 a1@9 ~ a1@2 b1@6 b1@6 a1@7]/5",
AN: "[~@3 a1@2 b1@6 b1@6 a1@12 b1@6 b1@6 a1@12 ~ c#2@6 c#2@6 b1@9 b1@3 c#2@6 c#2@6 b1@9 b1@3 c#2@6 c#2@6 b1@12 c#2@6 a1@8 b1@9 e2@6 ~ e2@5 d2@9 ~ d2@2 e2@6 e2@6 d2@7]/8",
AO: "[~@3 d2@2 e2@6 e2@6 d2@12 e2@6 e2@6 ~@7]/2", AP: "~@5 e1@12 ~@7", AQ: "[~@5 e1@36 ~@7]/2",
AR: "[~@11 d3@3 e3@3 d3@3 e3@3 e3@12 e3@3 d3@3 b2@3 a#2@3 a2@3 g2@3 f#2@6 e2@3 e2@3 e2@3 f#2@3 e2@12 e3@3 d3@3 b2@3 a#2@3 a2@3 g2@3 f#2@6 d3@3 e3@3 d3@3 e3@3 e3@12 e3@3 d3@3 b2@3 a#2@3 a2@3 g2@3 f#2@6 e3@3 d3@3 b2@3 a#2@3 a2@3 g2@3 f#2@6 b2@3 a#2@3 a2@4 g2@3]/8",
AS: "f#2@3 f2@3 g2@4 f#2@3 f2@4 e2@3 g2@4",
AT: "[f#2@4 f2@3 e2@4 g2@4 f#2@4 f2@4 e2@5 g2@4 f#2@5 f2@4 e2@5 g2@5 f#2@5 f2@5 e2@5 g2@5 f#2@6 f2@5 e2@6 g2@6 f#2@7 f2@6 e2@7 ~@7 f#2@8 ~@7 e2@8, ~@38 g2@3 ~@2 f2@3 ~@2]/6",
AU: "[g2@9 f#2@9 f2@10 e2@18 e2@18 e2@38 ~@18]/5",
})).s("gm_fretless_bass").gain(0.72)
// chords · reed organ · "eSCALA #1"
const reed_organ = note("<~@64 A@2 ~@3 B@3 C@6 D E F G ~@89>".pickRestart({
A: "[~ [e4,a4]@2 ~]/2", B: "[b3@11 ~ [d#5,f#5]@24 [c#5,e5]@24 [b4,d#5]@12]/3",
C: "[d#5@12 [a4,c5]@23 ~ [c#5,e5]@24 [b4,d#5]@23 ~ [a#4,c#5]@23 [g#4,b4]@24 ~ [g5,b5]@12]/6", D: "[f#5,a#5] [e5,g#5]",
E: "[d5,f#5] [c#5,f5]", F: "[b4,d#5] [a4,c#5]", G: "[g4,b4] ~",
})).s("gm_reed_organ").gain(0.64).pan(0.1)
// chords · rock organ · "eSCALA #2"
const rock_organ = note("<~@69 A@3 B@6 C D E F ~@89>".pickRestart({
A: "[[b2,b3,b4]@11 ~ [d#6,f#6]@24 [c#6,e6]@24 [b5,d#6]@12]/3", // B D#m C#m B
B: "[d#6@12 [a5,c6]@23 ~ [c#6,e6]@24 [b5,d#6]@23 ~ [a#5,c#6]@23 [g#5,b5]@24 ~ [g6,b6]@12]/6", C: "[f#6,a#6] [e6,g#6]",
D: "[d6,f#6] [c#6,f6]", E: "[b5,d#6] [a5,c#6]", F: "[g5,b5] ~",
})).s("gm_rock_organ").gain(0.64).pan(1)
// drums · kick
const kick = s("bd").struct(`<
A@3 ~ A B A C D B A C D E A C A B A C D E A C A B A C D B A C D B A F G B A C A@3 ~@2 A B A C D B A C D E A C A B A C
D E A C A B A C D B A C D B A C D B A C A@3 ~@3 A H A ~ D B A C I J K L M N O P Q R S T U V W X@2 Y Z AA AB AC AD AE
AF AG AH AI AJ AK AL AM AN AO AP AM AN AO AP AQ AN AO AP AQ AN AO AR AQ AN AO AP AM@3 ~ AS Y@6 AT AU AV AW AX AY AZ BA
BB BC BD BE BF ~
>`.pickRestart({
A: "~ x", B: "~@2 x!2", C: "~ x!2 ~@2 x ~@2", D: "~@4 x ~@2 x", E: "~@3 x!2 ~ x ~", F: "~ x!2 ~@2 x!2 ~",
G: "~ x ~@2 x ~@2 x", H: "x", I: "~ x ~@4 x ~", J: "~@6 x ~@10 x ~@6", K: "~@4 x ~@10 x ~@8", L: "~ x ~@4 x ~@5",
M: "~@2 x ~@9 x ~@8 x ~@2", N: "~@6 x ~@8 x ~@7 x", O: "~ x!2", P: "x ~@7 x ~@8 x ~@6", Q: "~ x ~@7 x ~@7 x ~@6",
R: "~ x ~@7 x ~@8 x ~@5", S: "~ x ~@3 x ~@3 x ~@2", T: "~@2 x ~@8 x ~@7 x ~@4", U: "~@3 x ~@7 x ~@7 x ~@4",
V: "~@3 x ~@8 x ~@7 x ~@3", W: "~ x ~ x ~ x", X: "~@5 x ~@7 x ~@7 x ~@2", Y: "~@5 x ~@5 x ~@5 x ~@5 x",
Z: "~@5 x ~@5 x ~@4 x ~@5 x ~", AA: "~@2 x ~@2 x ~@2 x ~@2 x", AB: "~@4 x ~@5 x ~@4 x ~@5 x ~@2",
AC: "~ x ~ x ~ x ~ x", AD: "~@3 x ~@4 x ~@5 x ~@5 x ~@3", AE: "~ x ~@2 x ~@2 x ~@2 x ~",
AF: "~@2 x ~@4 x ~@5 x ~@5 x ~@4", AG: "~ x ~@5 x ~@5 x ~@5 x ~@4", AH: "~ x ~@4 x ~@5 x ~@5 x ~@5", AI: "x!4",
AJ: "x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", AK: "~@13 x ~@10", AL: "~@3 x ~@6 x ~@13", AM: "~@5 x ~@18",
AN: "~@5 x ~@5 x ~@12", AO: "~@5 x ~@15 x ~ x", AP: "~ x ~", AQ: "~@5 x ~@9 x ~@8", AR: "~@8 x ~@2 x ~@8 x ~@3",
AS: "~@11 x ~@5 x ~@5 x", AT: "~@5 x ~@5 x ~@5 x ~@6", AU: "x ~@5 x ~@6 x ~@6 x ~@3", AV: "~@4 x ~@6 x ~@7 x ~@4",
AW: "~@4 x ~@8 x ~@8 x ~", AX: "~@4 x ~@4 x ~@2", AY: "~@5 x ~@10 x ~@7", AZ: "~@5 x ~@12 x ~@5", BA: "~@3 x ~@4",
BB: "x ~@2 x", BC: "~@2 x ~@4 x ~@3 x ~@4 x ~@3 x ~@3", BD: "~ x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x",
BE: "~@4 x ~@3 x ~@4 x ~@3 x ~@4 x ~", BF: "~ x ~@10",
})).gain(0.49)
// drums · snare
const snare = s("sd").struct(`<
~@4 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D ~ B A E ~@5 A B A C A B A C A B A C A B A C A B A
C A B A C A B A C A B A C A B A C ~@8 F A ~ B A C G H I J K L M N O P Q R S T U V W X Y@2 Z@2 AA@2 AB@2 AC@2 AD ~ AE
AF AG AE AH AF AG AE AI AF AG AE AI AF AG AE AJ AF AG AE AK ~@4 AL AM AN AM AN AM AN AO AP AQ ~@4 AR AS ~@5
>`.pickRestart({
A: "x", B: "x ~@4 x ~@2", C: "x ~@2 x ~@2 x ~", D: "x ~@2 x ~@4", E: "x ~@2 x ~@2 x!2", F: "~@18 x ~ x!2 ~ x",
G: "x!3 ~", H: "x ~@11 x ~@10 x", I: "~@5 x ~@4 x ~", J: "~@7 x ~@9 x ~@4 x ~", K: "x ~@6 x ~@8 x ~ x!3 ~@3",
L: "~ x ~@10", M: "~@2 x!2 ~@8", N: "~@6 x!2 ~@4", O: "~@5 x ~@7 x ~@7 x ~@2", P: "~@5 x ~@8 x ~@7 x ~",
Q: "~@3 x ~@3 x ~@3 x", R: "~@6 x ~@8 x ~@7 x", S: "~@7 x ~@7 x ~@7 x", T: "~ x!2", U: "x!3", V: "x ~@8 x ~@7 x ~@6",
W: "~ x ~@7 x ~@7 x ~@6", X: "~ x ~@17 x ~ x ~ x", Y: "~@9 x!3", Z: "~@17 x ~ x ~ x ~@2", AA: "~@8 x!3 ~",
AB: "~@15 x ~ x ~ x ~@4", AC: "~@7 x!3 ~@2", AD: "x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", AE: "~@17 x ~@6",
AF: "~@3 x", AG: "~@9 x ~@7 x ~@6", AH: "~@3 x ~@7 x ~@5 x ~@2 x ~@3", AI: "~@3 x ~@7 x ~@5 x ~@6", AJ: "~ x ~@6",
AK: "~@3 x ~@7 x ~@12", AL: "~@5 x ~@8 x ~@5 x ~@3", AM: "~ x ~@2 x ~@2 x!2 ~@3", AN: "~@7 x ~@2 x ~",
AO: "~@2 x ~@5 x ~@5 x ~@6 x ~@2", AP: "~@3 x ~@2 x ~@3 x ~@2 x ~@3 x ~@2 x ~@3",
AQ: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@4", AR: "~ x ~@14 x ~@7", AS: "~@3 x ~@4",
})).gain(0.49)
// drums · low tom
const low_tom = s("lt").struct(`<
~@40 A ~@46 B C D E A ~@3 F G H I J K L M N O P Q R S T U N V W X Y Z AA AB AC AD AE AF ~@27 AG AH AI AH AJ AH AJ AK
AL AM AN AO AP AQ AR AS ~@5
>`.pickRestart({
A: "x!4 ~@4", B: "~@5 x!2 ~ x!2 ~ x ~@12", C: "~@4 x!2 ~@2", D: "~@3 x!2 ~@7", E: "~@15 x ~@2 x ~@2 x ~ x",
F: "~@2 x!2", G: "x ~@5 x ~@5 x ~@4 x ~@5 x", H: "~@4 x ~@5 x ~@4 x ~@4 x ~@3", I: "~@2 x ~@4 x ~@4 x ~@4 x ~@6",
J: "~@7 x ~@4 x ~@11", K: "~@2 x ~@3 x ~@12 x!5", L: "x ~ x!2 ~@8 x ~@3 x ~@7", M: "~@4 x ~ x ~ x ~ x ~@10 x ~@2",
N: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", O: "~ x ~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~", P: "~ x ~ x ~ x ~ x ~ x ~ x",
Q: "~@2 x ~@3 x ~@4 x ~@3 x ~@3 x ~@3 x", R: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
S: "~@3 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3", T: "x!6", U: "x ~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
V: "~ x ~@5 x ~ x ~ x ~ x ~ x ~ x ~@6", W: "~ x ~ x ~@3 x ~ x ~ x ~ x ~ x!2 ~@7", X: "x!2 ~ x!6 ~@3",
Y: "x ~ x ~@3 x ~ x ~ x ~ x!2 ~ x ~@7 x", Z: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x ~@7 x",
AA: "~ x ~@3 x ~ x!2 ~ x ~ x ~ x ~@7 x ~", AB: "x ~ x!6 ~@3 x", AC: "x ~@3 x ~ x!2 ~ x ~ x ~ x ~@7 x ~ x",
AD: "~@3 x ~ x ~ x ~ x ~ x ~ x ~@7 x ~ x", AE: "~@3 x!2 ~ x ~ x ~ x ~ x ~@7 x ~ x ~", AF: "~ x!6 ~@3 x!2",
AG: "~@14 x ~@2 x ~@2 x ~@2 x", AH: "~@2 x ~@2 x ~@2 x ~@15", AI: "~@8 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x",
AJ: "~@2 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x", AK: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2",
AL: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@3 x ~@2 x ~@3", AM: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@4", AN: "~ x ~@8 x ~@8 x ~@4",
AO: "~@5 x ~@9 x ~@8", AP: "~@2 x ~@10 x ~@10", AQ: "~@2 x ~@12 x ~@8", AR: "~@5 x ~@14 x ~@3", AS: "~@13 x ~@10",
})).gain(0.44)
// drums · mid tom
const mid_tom = s("mt").struct(`<
~@8 A ~@3 A ~@7 A ~@7 A ~@3 A ~@16 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@8 B C D E F ~@9 G H I ~@26 J K ~@2 J ~@3 J ~@13 L
M L ~ L ~@3 J N O P Q ~@7
>`.pickRestart({
A: "~ x ~@2", B: "~@20 x ~@2 x", C: "x ~ x!2 ~@20", D: "~@6 x!2", E: "x ~ x!2 ~ x ~@18", F: "~@9 x ~ x!2 ~ x ~@9",
G: "~@10 x ~ x!7 ~@5", H: "~@20 x!3 ~", I: "x!2 ~@10", J: "~@23 x", K: "~ x!2 ~@21", L: "~@10 x!2", M: "~ x!2 ~@9",
N: "~@8 x ~@8 x ~@6", O: "~@3 x ~@9 x ~@9 x", P: "~@5 x ~@5 x", Q: "~@11 x ~@12",
})).gain(0.44)
// drums · open hat
const open_hat = s("oh").struct(`<
~@4 A B@11 A B@7 A B@10 C A B@2 C ~@5 A B@11 A B@7 A B@15 ~@10 D B@3 E ~@30 F@3 G F@4 H F@3 H F@2 I F@3 J ~@25
>`.pickRestart({
A: "~@2 x!2", B: "x!4", C: "x!3 ~", D: "~@3 x", E: "x", F: "~@5 x ~@5 x ~@5 x ~@5 x", G: "~@5 x ~@5 x ~@5 x ~@6",
H: "~@11 x ~@5 x ~@5 x", I: "~@5 x ~@18", J: "~@5 x ~@5 x ~@12",
})).gain(0.49)
// drums · high tom
const high_tom = s("ht").struct(`<
~@4 A ~@3 B ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 B ~@12 A ~@3 B ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B ~@3 B ~@3 B ~@12 C ~@34 D
~@7 E ~@3 E ~@33
>`.pickRestart({
A: "~ x!2 ~@5", B: "~ x ~@6", C: "~@2 x!2 ~ x!2 ~ x ~@15", D: "~@20 x ~@2 x", E: "~@7 x",
})).gain(0.49)
// drums · crash
const crash = s("cr").struct(`<
A@3 ~@32 B C ~@3 A@3 ~@38 A@3 ~@3 A D A ~ A ~@3 A ~@3 E ~ F G ~@9 H@2 I@2 C@2 J@2 K@2 D L M N H ~@7 H ~@3 H ~@2 O ~@4
H@3 ~ P@7 ~@6 B Q R S T U J ~
>`.pickRestart({
A: "~ x", B: "~@3 x", C: "~ x ~@6", D: "x", E: "~@2 x ~@18 x ~@2", F: "~ x ~", G: "~@17 x ~@6", H: "~@5 x ~@18",
I: "~ x ~@4", J: "~ x ~@10", K: "~ x ~@22", L: "~@23 x", M: "~@13 x ~@10", N: "~@3 x ~@6 x ~@13",
O: "~@11 x ~@9 x ~@2", P: "~@11 x ~@12", Q: "~@3 x ~@4", R: "x ~@2 x", S: "~@2 x ~@4 x ~@3 x ~@4 x ~@3 x ~@3",
T: "~ x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x", U: "~@4 x ~@3 x ~@4 x ~@3 x ~@4 x ~",
})).gain(0.44)
stack(bass, reed_organ, rock_organ, kick, snare, low_tom, mid_tom, open_hat, high_tom, crash)
More by Queen
We Are The Champions1978 · F major · 95 bpmRadio Ga GaF major · 110 bpmWho Wants to Live ForeverG major · 72 bpmAnother One Bites The DustG major · 115 bpmBohemian RhapsodyB♭ major · 70 bpmUnder PressureD major · 113 bpmCrazy Little Thing Called LoveD major · 233 bpmFriends Will Be FriendsG major · 74 bpm
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.