0:00/0:00
// Crazy Train — Ozzy Osbourne
// 67 bpm, 4/8, key A major. 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: duplicate parts dropped: ch 3 fretless bass (copy of ch 2 electric bass pick); ch 6 overdriven guitar (copy of ch 5 distortion guitar)
// note: Full arrangement: all 169 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/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 · electric bass pick
const bass = note(`<
A B A C A B A D E F G H G I J K L M N@4 O P Q R S@4 T U V W X Y@3 Z AA AB AC AD AE AF AG AH@2 AI@2 AJ AK@4 AL AM AN AO
AP AQ@4 AR AS AT AU AV@4 AW AX AW AY AZ BA@2 BB@3 BC BD BE BF BG BH BI BJ BK BL BM@5 BN BO BP BQ BR BS@3 BN BT BU BV
BW BX BY BZ CA CB CC CD@2 AK@4 AL AM AN AO AP AQ@4 AR AS AT AU AV@4 AW AX AW AY AZ BA@2 BB@3 BC BD BE BF BG BH BI BJ
BK BL CE BL CF@2 CG CH CI CJ CK CL
>`.pickRestart({
A: "f#1!2 ~@6", B: "a1!2 ~@2 e1!2 ~@2", C: "d2!2 ~@2 c#2!2 ~@2", D: "d2@3 d2@3 ~@7 c#2@3 c#2@3 ~@5",
E: "~ f#1@3 f#1@3 ~@17", F: "~ a1@3 a1@3 ~@6 e1@3 e1@3 ~@5", G: "~@2 f#1@3 f#1@3 ~@16",
H: "~@2 d2@3 d2@3 ~@6 c#2@3 c#2@3 ~@4", I: "~ a1!2 ~@2 e1!2 ~", J: "~ f#1!2 ~@5",
K: "~@3 d2@3 d2@3 ~@7 e2@3 e2@3 ~@2", L: "~@4 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
M: "~ a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@2",
N: "[~ e2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3]/4",
O: "a1 e2 a1 a2 a1 a2 a1 a2", P: "a1 a2 a1 a2 a1 g#2 a1 f#2", Q: "~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@2",
R: "~ a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@2",
S: "[~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 g#2@3 a1@3]/4",
T: "f#2 a1 e2 a1 a2 a1 a2 a1", U: "a2 a1 a2 a1 a2 a1 g#2 a1", V: "f#2@3 a1@3 e2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@2",
W: "~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@2", X: "~ f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
Y: "[~ a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 [f#1,f#2]@6 [f#1,f#2]@6 [e1,e2]@6 [e1,e2]@6 [d1,d2]@12 ~]/3", // F# E D
Z: "~@2 [f#1,f#2]!2", AA: "[e1,e2]!2 [d1,d2]@2", AB: "~@12 [a1,a2]@6 ~ [a1,a2]@5",
AC: "~ [a1,a2]@6 [a1,a2]@6 [e1,e2]@6 [e1,e2]@5", AD: "~ [e1,e2]@6 [e1,e2]@6 [f#1,f#2]@6 [f#1,f#2]@5",
AE: "~ [f#1,f#2]@6 [f#1,f#2]@6 ~ [f#1,f#2]@6 [f#1,f#2]@4", AF: "~ [f#1,f#2]@3 [f#1,f#2]@3 [a1,a2]@3 [a1,a2]@2",
AG: "~ [a1,a2]@3 [a1,a2]@3 [e1,e2]@3 [e1,e2]@2", // A E
AH: "[~@2 [e1,e2]@6 ~ [e1,e2]@6 f#2@6 f#2@6 f#2@3 ~@3 e2@3 d2@3 d2@3 d2@3 d2@3, ~@5 f#2 ~@2]/2", // E
AI: "[e2@3 e2@3 e2@3 e2@3 e2@3 f#2@6 f#2@6 ~ f#2@3 ~@3 e2@3 d2@3 d2@3 d2@3 d2@2, ~@31 f#2@6 ~@11]/2",
AJ: "~ e2@3 e2@3 e2@3 e2@3 e2@3 a1@3 a2@3 a1@2",
AK: "[~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 ~ a1@3 a2@3]/4",
AL: "a1 a2 a1 a2 a1 a2 a1 a2", AM: "a1 g#2 a1 f#2 a1 e2 a1 a2", AN: "a1@3 a2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@2",
AO: "~ a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@2", AP: "~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@2",
AQ: "[~ a1@3 g#2@3 ~ a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@3 a2@3 ~ a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3]/4",
AR: "a2 a1 g#2 a1 f#2 a1 e2 a1", AS: "a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 ~ a1@2",
AT: "~ a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 a1@2", AU: "~ a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@2",
AV: "[~ a2@3 a1@3 g#2@3 a1@3 f#2@3 ~ a1@3 e2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 a2@3 a1@3 g#2@3 a1@3 f#2@3 a1@3 e2@3 [f#1,f#2]@6 [f#1,f#2]@6 ~ [e1,e2]@6 [e1,e2]@6]/4", // F# E
AW: "[d1,d2] ~", AX: "[f#1,f#2]!2 [e1,e2]!2", AY: "~ [a1,a2]@6 [a1,a2]@6 [a1,a2]@6 [a1,a2]@5",
AZ: "~ [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@5", BA: "~ [f#1,f#2]@3 [f#1,f#2]@3 [f#1,f#2]@3 [f#1,f#2]@2",
BB: "[~@2 [a1,a2]@6 [a1,a2]@6 [a1,a2]@6 ~ [a1,a2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 f#2@6 f#2@6 f#2@3 ~@3 e2@3, ~@11 f#2]/3", // A E
BC: "d2@3 d2@3 d2@3 d2@3 e2@3 ~ e2@3 e2@3 e2@2", BD: "~ e2@3 f#2@6 f#2@6 f#2@3 ~@3 e2@2, ~@19 f#2@5",
BE: "~ d2@3 d2@3 d2@3 d2@3 e2@3 e2@3 e2@3 e2@2", BF: "~ e2@3 f#1@3 f#1@3 ~@14", BG: "~@5 a1@3 a1@3 ~@6 e1@3 e1@3 ~",
BH: "~@5 f#1@3 f#1@3 ~@13", BI: "~@2 d2!2 ~@2 e2!2", BJ: "~@2 f#1!2 ~@4", BK: "~@2 a1!2 ~@2 e1!2",
BL: "~@7 f#1@3 f#1@3 ~@11",
BM: "[~@7 d2@12 e2@12 f#1@3 f#1@3 f#1@3 f#1@3 ~ f#1@3 f#1@3 e1@3 e1@3 d1@3 d1@3 d1@3 d1@3 d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 ~ f#1@3 f#1@3 f#1@3]/5", // B
BN: "f#1!8", BO: "f#1 e1!2 d1!5", BP: "d1@3 c#1@3 c#1@3 ~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@2",
BQ: "~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@2", // B
BR: "~ f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@3 f#1@2",
BS: "[~ f#1@3 ~ e1@3 e1@3 d1@3 d1@3 d1@3 d1@3 d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 f#1@3 f#1@3 f#1@3 f#1@3 ~]/3", // B
BT: "f#1!2 e1!2 d1!4", BU: "d1@3 d1@3 c#1@3 c#1@3 [b0,b1]@3 [b0,b1]@3 ~ [b0,b1]@3 [b0,b1]@2",
BV: "~ [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [b0,b1]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@2", // B C#
BW: "~ [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 [c#1,c#2]@3 f#1@3 f#1@3 ~@5", BX: "~@14 a1@3 a1@3 ~@4",
BY: "~@2 e1@3 e1@3 ~@6 f#1@3 f#1@3 ~@4", BZ: "~@14 d2@3 d2@3 ~@4", CA: "~@2 c#2@3 c#2@3 ~@7 f#1@3 f#1@3 ~@3",
CB: "~@5 a1!2 ~", CC: "~ e1!2 ~@2 f#1!2 ~", CD: "[~@16 d2@12 e2@12 a1@3 a2@3 a1@2]/2",
CE: "~@7 d2@3 d2@3 ~@6 e2@3 e2@2", CF: "[~@8 a1@3 a1@3 ~@6 e1@3 e1@3 ~@6 f#1@3 f#1@3 ~@10]/2",
CG: "~@8 d2@3 d2@3 ~@7 e2@3", CH: "e2 ~@2 f#1!2 ~@3", CI: "~@3 a1!2 ~@2 e1", CJ: "e1@3 ~@7 f#1@3 f#1@3 ~@8",
CK: "~@10 d2@3 d2@3 ~@6 e2@2", CL: "~ e2@3 ~@20",
})).s("gm_electric_bass_pick").gain(0.8)
// other · lead 1 square
const lead_1_square = note(`<
~@20 A B@2 ~ C@2 D@2 E F@2 ~ G H@3 I J@2 K@3 L@2 M@4 ~@6 N@2 O@2 P Q R@2 S@2 T U V W X Y Z@3 AA@2 AB@3 AC@3 AD ~@3
AE@3 ~ AF AG AH@3 ~@27 AI@2 AJ ~ P AK AL@2 AM@2 AN@2 AO AP AQ ~ AR@3 AA@2 AS@3 AT@4 ~@20
>`.pickRestart({
A: "~@5 e4@3 c#4@4 ~@12", B: "[~@15 c#4@2 b3@3 a3@3 g#3@3 a3@4 ~@2 c#4@7 ~@9, ~@31 b3@2 ~@15]/2",
C: "[~@6 a4@2 ~ a4@2 ~ a4@2 ~@3 f#4@4 e4@12 ~@7 f#4@6 e4@2, ~@8 e4 ~@15]/2",
D: "[~ e4@2 ~ d4@6 e4@3 d4@3 c#4@3 a3@10 ~@19]/2", E: "~@8 e4@3 c#4@5 ~@8",
F: "[~@17 c#4@3 b3@3 a3@3 g#3@3 a3@5 ~@2 c#4@5 ~@7, ~@35 b3@2 ~@11]/2", G: "~@6 a4@2 ~@2 a4@2 ~ a4 ~ a4@3 e4@2 f#4@4",
H: "[e4@9 ~@6 e4@3 ~ e4@3 f#4@3 e4@2 ~ [e4,f4]@3 d4@6 e4@3 d4@3 c#4@3 a3@8 ~@18]/3", I: "~@11 f#4@3 e4@3 f#4@7",
J: "[~@2 g#4@5 ~@2 a4@14 f#4@11 ~ f#4@3 e4@3 f#4@7, ~@4 g#4 ~@19]/2",
K: "[~@3 g#4@4 ~ g#4@2 ~ a4@22 e4@3 [a4,c#5]@3 a4@5 ~@2 [a4,c#5]@4 ~@2 c#5@3 ~@4 g#4@7 ~ [g#4,b4]@3 [g#4,b4]@2, ~@39 c#5@3 ~@9 a4@7 b4@9 ~@5, ~@29 f#4 ~@6]/3", // A G#m
L: "[~ [g#4,b4]@3 g#4@5 ~@2 g#4@2 f#4@18 ~@17, ~@4 b4@3 ~@2 f#4@2 ~@37, ~@5 a4@12 ~@7]/2", // G#m
M: "[~@11 e4@3 [a4,c#5]@3 [a4,c#5]@4 ~@2 [a4,c#5]@4 ~@2 a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@5 ~@2 g#4@3 f#4@17 ~@16, ~@29 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@4 a4@24 ~@12, ~@35 f#4@2 ~@22 f#4@2 ~@35]/4", // A G#m
N: "[~@15 a4@2 ~ a4@2 ~ a4@2 a4@3 ~ f#4@6 e4@9 ~@6, ~@13 e4 ~@10]/2",
O: "[~@2 e4@3 f#4@4 e4@2 ~ e4@3 d4@6 e4@6 ~@21]/2", P: "~@16 a4@2 ~ a4@2 ~ a4@2",
Q: "~ a4@3 ~ f#4@5 e4@12 ~@2, ~@2 e4 ~@9", R: "[~@4 e4@3 f#4@3 e4@2 ~ e4@2 ~ d4@6 ~ e4@2 ~ d4@3 c#4@3 a3@9 ~@7]/2",
S: "[~@17 a4@2 ~ a4@2 ~ a4@2 ~ a4@3 e4@2 f#4@4 e4@12 ~]/2", T: "~@6 e4@3 f#4@3 e4@2 ~ e4@3 d4@6", U: "e4 ~@5",
V: "~@9 a4 ~ a4", W: "~ a4@2 ~ a4@3 e4@2 f#4@4 e4@11", X: "~@7 e4@3 f#4@3 e4@2 ~ e4@3 d4@5",
Y: "~ e4@2 ~ d4@3 c#4@3 ~ a3@10 ~@3", Z: "[~@23 f#4@3 e4@3 f#4@8 ~@2 g#4@4 ~ g#4@2 a4@14 f#4@12]/3",
AA: "[f#4@3 e4@3 f#4@9 g#4@5 ~ g#4@2 a4@23 e4@2]/2",
AB: "[~ c#5@3 [a4,c#5]@4 ~@2 a4@5 ~ a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@6 ~ g#4@2 f#4@23, a4@3 ~@7 c#5@3 ~@3 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@3 a4@24 ~@2, ~@11 f#4 ~@11 f#4 ~@12]/3", // A G#m
AC: "[~@23 e4@3 [a4,c#5]@3 [a4,c#5]@4 ~@2 a4@5 ~@2 a4@5 ~ [g#4,b4]@8 ~ b4@2 ~ b4@2 ~ b4@3 g#4@5 f#4, ~@35 c#5@3 ~@3 c#5@3 ~@3 f#4@2 ~@7 g#4@2 ~ g#4@2 ~ g#4@3 ~ b4@3 ~@3]/3", // A G#m
AD: "g#4@3 f#4@17 ~@4, a4", AE: "[~@10 f#4@6 e4@6 d4@6 c#4@6 ~ b3@6 a3@6 b3@3 a3@3 c#4@6 e4@3 c#4@9 ~]/3",
AF: "~@12 f#4@5 ~ f#4@5 ~", AG: "f#4 a4 g#4 f#4",
AH: "[g#4@5 ~@2 a4@8 g#4@3 f#4@11 ~ f#4@13 g#4@10 ~@2 a4@17, ~@3 g#4 ~@23 g#4 ~@8]/3",
AI: "[~@18 a4@3 a4@2 a4@3 ~ f#4@5 e4@13 ~@3, ~@27 e4 ~@20]/2", AJ: "~@2 e4@4 f#4@2 e4@2 ~@2 e4@3 d4@6 e4@3",
AK: "~ a4@2 ~@2 f#4@4 e4@12 ~@3, ~@2 e4 ~@9", AL: "[~@4 e4@3 f#4@3 e4@2 ~ e4@3 d4@7 e4@3 d4@3 c#4@3 a3@10 ~@6]/2",
AM: "[~@20 e4@3 c#4@7 ~@18]/2", AN: "[~@5 c#4@3 e4@2 ~@2 e4@2 ~ e4@2 ~ c#4@5 b3@2 a3@6 ~@17]/2",
AO: "~@19 a4@2 ~ a4@2", AP: "~ a4@2 ~ a4@2 ~ a4@6 ~ e4@7 ~@3, ~@13 f#4@2 ~@9", AQ: "~@7 e4@3 f#4@3 a4@3 f#4 ~@2 a4@5",
AR: "[~@23 f#4@3 e4@3 f#4@9 g#4@5 ~ g#4@2 a4@14 f#4@11 ~]/3",
AS: "[~ c#5@3 a4@5 ~ a4@5 ~ a4@6 ~ g#4@7 ~ [g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@3 g#4@5 ~ f#4 g#4@2 f#4@23, a4@3 ~ c#5@3 ~@3 c#5@3 ~@3 c#5@3 ~@3 b4@9 ~@9 b4@3 ~@3 a4@24 ~@2, ~@11 f#4 ~@24]/3", // G#m
AT: "[~@23 e4@3 [a4,c#5]@3 a4@5 ~ a4@5 ~ a4@6 ~ [g#4,b4]@8 ~ b4@2 ~ b4@2 ~ b4@2 ~ b4@3 ~@3 g#4@3 f#4@20 ~, ~@29 c#5@3 ~@3 c#5@3 ~@3 c#5@3 ~@3 f#4@2 ~@7 g#4@2 ~ g#4@2 ~ g#4@2 ~ g#4@6 f#4@2 ~@23, ~@3 a4]/4", // A G#m
})).s("gm_lead_1_square").gain(0.72)
// drums · kick
const kick = s("bd").struct(`<
~@8 A B C D E F G H I J K L M N@3 O@2 P Q@2 R S@2 T@3 U V W X@3 Y@2 Z AA AB AC AD@2 AE AF J M@2 AG N@2 AH O@2 Q@3 S@2
H T@2 AI U@2 AJ X@2 AK Y@2 AL AM AB AD@2 AN J@2 AO AP@2 AQ AR@2 B AS AT AU@2 AV AW S T@2 AX AY AZ BA BB BC BD BE BF
~@6 BG AF J M@2 BH N@2 AH O@2 Q@3 S@2 H T@2 AI U@2 AJ X@2 AK Y@2 BI BJ AB AD@2 AN J@2 BK AP@2 AQ AR@2 B@2 BL D@2 BM
F@2 BN BO BP
>`.pickRestart({
A: "~ x ~@2 x ~@2 x ~@5 x ~@5 x ~@4", B: "~ x ~@5 x ~@5 x ~@5 x ~@4", C: "~@2 x ~@2 x ~@2 x ~@5 x ~@5 x ~@3",
D: "~ x ~@2 x ~@2 x ~@2 x ~", E: "~@2 x ~@2 x ~@2 x ~@5 x ~@6 x ~@2", F: "~ x ~ x ~ x ~ x", G: "~ x!3 ~ x ~ x",
H: "~@9 x ~@12 x ~", I: "~@2 x", J: "~ x ~@2 x ~", K: "~@4 x ~@12 x ~@6", L: "~@5 x ~@11 x ~@5 x",
M: "~@5 x ~@11 x ~@6", N: "~ x ~ x", O: "~@7 x ~@11 x ~@4", P: "~@7 x ~@12 x ~@3", Q: "~@2 x ~@2 x",
R: "~@8 x ~@12 x ~@2", S: "~@3 x ~@3 x", T: "~@5 x ~@5 x", U: "~@11 x ~@11 x", V: "~@11 x ~@2 x ~@8 x",
W: "~@11 x ~@12", X: "x!2", Y: "~ x ~@11 x ~@10", Z: "~ x ~@12 x ~@9", AA: "~@2 x ~@2 x ~@8 x ~@9",
AB: "~ x ~@5 x ~@4", AC: "~@2 x ~@12 x ~@8", AD: "~ x ~@3 x ~@2", AE: "~@2 x ~@8 x", AF: "~@5 x ~@6",
AG: "~@5 x ~@12 x ~@5", AH: "~@6 x ~@12 x ~@4", AI: "~@10 x ~@12 x", AJ: "~ x ~@4 x ~@5", AK: "x ~@12 x ~@10",
AL: "~@5 x ~@5 x ~@2 x ~@2 x ~@6", AM: "~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x", AN: "~@3 x ~@12 x ~@7",
AO: "~ x ~@2 x ~@6 x ~@5 x ~@5 x", AP: "~@5 x ~@5 x ~@5 x ~@5 x", AQ: "~ x!3", AR: "x!4", AS: "~ x ~@5 x ~@5 x ~@10",
AT: "~ x ~@5 x ~@2 x ~@5 x ~@3 x ~@2 x", AU: "~@8 x ~@2 x ~@5 x ~@2 x ~@2 x", AV: "~@5 x ~@2 x ~@2 x ~@6 x ~@2 x ~@2",
AW: "~ x!3 ~@3 x", AX: "~@10 x ~@2 x ~@5 x ~@2 x ~", AY: "~ x ~@9 x ~@2 x ~@5 x ~@2 x",
AZ: "~@2 x ~@8 x ~@2 x ~@5 x ~@2 x", BA: "~@2 x ~@8 x ~@2 x ~@5 x ~@3", BB: "x!2 ~@2 x!2 ~ x", BC: "x!2 ~ x!3 ~ x",
BD: "x ~@2 x ~@5 x ~@2 x ~@2 x ~@6 x ~", BE: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~", BF: "~ x ~@2 x ~@5 x ~@13",
BG: "~@11 x", BH: "~@5 x ~@5 x ~@6 x ~@5", BI: "~ x!7", BJ: "x ~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x",
BK: "~@4 x ~@6 x ~@5 x ~@5 x", BL: "~ x ~@5 x ~@5 x ~@6 x ~@3", BM: "~@2 x ~@5 x ~@6 x ~@5 x ~@2",
BN: "~@3 x ~@6 x ~@5 x ~@5 x ~", BO: "~@2 x ~@2 x ~@2 x ~@2 x", BP: "~ x ~@4",
})).gain(0.66)
// drums · snare
const snare = s("sd").struct(`<
~@8 A ~ B ~ B ~ C D E F G H I J K L M N@2 O P Q R@2 S T@2 U V U W@2 X Y@2 Z AA AB AC@3 AD AE AF G@2 AG K@2 AH AI N AJ
O AK R@3 AL T AM U AN AO W@2 Y@3 AP AQ AR AC@2 AS F@2 AT ~@3 AU ~@2 AV N AW@2 Q AX R AY T@2 AZ@3 BA W X Y BB ~@6 BC AE
AF BD G AG K@2 AH AI N AJ O AK R@3 AL T AM U AN AO W@2 Y@3 BE BF AR AC@2 AS F@2 ~@17
>`.pickRestart({
A: "~ x ~@2 x ~@19", B: "~@2 x ~@2 x ~@18", C: "~ x!2 ~@5", D: "~@3 x ~@5 x ~@6 x ~@5 x ~", E: "~@2 x ~@2 x ~@5 x",
F: "~@5 x ~@5 x", G: "~@11 x ~@11 x", H: "~@11 x ~@10 x!2", I: "~ x!2 ~ x ~@6 x ~@11 x", J: "~ x", K: "x!2",
L: "x ~@11 x ~@10 x", M: "~ x!2 ~ x!2 ~@7 x ~@10", N: "~ x ~@11 x ~@10", O: "~ x ~@5 x ~@4",
P: "x ~ x!2 ~ x ~ x ~@6 x ~@9", Q: "~@2 x ~@12 x ~@8", R: "~ x ~@3 x ~@2", S: "~@2 x!2 ~ x!2 ~ x ~@7 x ~@7",
T: "~ x ~@2 x ~", U: "~@5 x ~@11 x ~@6", V: "~@5 x!2 ~ x!2 ~@7 x ~@6", W: "~ x ~ x", X: "~@6 x ~@12 x ~@4",
Y: "~@7 x ~@11 x ~@4", Z: "~@7 x ~@12 x ~@3", AA: "~@2 x ~@5 x ~@2 x ~@8 x ~@3", AB: "~@2 x ~@2 x", AC: "~@3 x ~@3 x",
AD: "~@5 x ~@2 x ~@2 x", AE: "~@2 x ~@2 x ~@2 x ~@2 x", AF: "~@10 x ~@12 x", AG: "~@10 x!2 ~ x!2 ~ x ~@7",
AH: "x ~@12 x ~@10", AI: "~ x ~@9 x ~ x!2 ~ x!2 ~@6", AJ: "~ x ~@12 x ~@9", AK: "~@2 x ~@10 x!2 ~ x!2 ~ x ~@4",
AL: "~@4 x ~@9 x ~ x!2 ~ x!2 ~@3", AM: "~@4 x ~@12 x ~@6", AN: "~@5 x ~@11 x ~ x!2 ~ x ~", AO: "~@5 x ~@12 x ~@5",
AP: "~ x ~@2 x ~@2 x ~@2 x ~", AQ: "~ x ~@2 x ~@2 x!2 ~ x ~", AR: "~@8 x ~@12 x ~@2", AS: "~@9 x ~@12 x ~",
AT: "~@4 x ~@2 x ~@16", AU: "~@2 x!2 ~@4", AV: "~@7 x ~@5 x ~@5 x ~@4", AW: "~@2 x ~@2 x ~@8 x ~@9",
AX: "x ~@4 x ~@2", AY: "~@3 x ~@12 x ~@7", AZ: "~@5 x ~@2 x ~@8 x ~@6", BA: "~@2 x!2 ~@2 x ~", BB: "~@7 x ~@16",
BC: "~@8 x ~@2 x", BD: "~@11 x ~@2 x!2 ~@7 x", BE: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
BF: "~@2 x ~@3 x ~ x!2 ~ x ~ x!2 ~ x ~@2 x!2 ~ x ~",
})).gain(0.66)
// drums · low tom
const low_tom = s("lt").struct(`<
~@15 A B ~@32 C D ~@34 E F@2 G H@2 I J K ~@22 C D ~@27 L ~@6 E F@2 G H@2 I@2 M N@2 O P@2 Q R S
>`.pickRestart({
A: "~@8 x!2 ~@2 x ~@3 x!2 ~@2 x ~ x!2", B: "~ x!2 ~@21", C: "~@10 x!2", D: "~ x ~@2 x!2 ~@2 x ~ x!2 ~ x ~ x ~@8",
E: "~@7 x ~@6 x ~@5 x ~@3", F: "~ x ~@2 x ~@2 x ~@2 x ~", G: "~@2 x ~@6 x ~@5 x ~@5 x ~@2", H: "~ x ~ x ~ x ~ x",
I: "~@2 x ~@2 x ~@2 x ~@2 x", J: "~@4 x ~@7 x!2 ~@2 x ~@2 x ~ x ~@2", K: "x!2 ~ x!2 ~ x ~@17",
L: "~@2 x!2 ~ x ~@5 x ~ x ~@2 x!2 ~ x ~@4", M: "~@4 x ~@5 x ~@5 x ~@6 x", N: "~@5 x ~@5 x ~@5 x ~@5 x",
O: "~@5 x ~@5 x ~@6 x ~@5", P: "x!4", Q: "x ~@5 x ~@6 x ~@5 x ~@4", R: "~ x ~@5 x ~@5 x ~@5 x ~@4",
S: "~ x ~@5 x ~@16",
})).gain(0.66)
// drums · hihat
const hihat = s("hh").struct(`<
A@7 B ~@7 C D E F G H I J K L M N O P Q R S T U V W X Y Z@2 AA AB@2 AC AD@2 AE Z@2 AF AG AH AI AJ AK AL AM AN AO AP AQ
AR AS AT AU AV AW AX AY AZ BA BB Z@2 BC AB@2 AD@2 BD Z@2 BE AB@2 BF BG@2 BH BI@2 BJ@2 BK ~@15 BL BM BN@2 BO@3 BP AG AH
AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB Z@2 BC AB@2 AD@2 BD Z@2 BE AB@2 BF BG@2 BH BI@2 BJ@3 BQ@2
BR BS@2 BT BU BV
>`.pickRestart({
A: "~ x ~ x", B: "~@7 x ~@11 x ~@4", C: "~@9 x ~@12 x ~", D: "~@5 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@3",
E: "~ x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@2", F: "~ x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~@4 x!2 ~@2",
G: "~@2 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x ~ x ~", H: "~@7 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~",
I: "~@2 x ~ x ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~", J: "~@3 x!2 ~@2 x ~ x!2 ~ x ~@2 x ~ x ~@3 x ~ x",
K: "~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x", L: "~@8 x ~ x!2 ~ x ~@2 x!2 ~@4 x!2",
M: "~@4 x!2 ~@2 x ~ x ~ x!2 ~@2 x ~ x ~@3 x ~", N: "x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@4 x",
O: "x ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4 x", P: "~@10 x!2 ~ x!2 ~@2 x ~ x ~@3 x",
Q: "~ x ~@3 x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~@4", R: "x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@4",
S: "x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@3", T: "x ~ x ~@5 x ~@2 x ~ x!2 ~ x ~@2 x!2 ~@3",
U: "~ x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x ~ x ~@2", V: "~ x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@2",
W: "~ x ~ x ~@4 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@2", X: "~@2 x!2 ~@7 x ~@2 x ~@2 x ~@2 x ~@2 x",
Y: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", Z: "x!8", AA: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~",
AB: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", AC: "~ x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x",
AD: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", AE: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
AF: "x ~@3 x ~@2 x ~@2 x ~@2 x ~@8 x ~", AG: "~@10 x ~@7 x!2 ~ x!2 ~",
AH: "~ x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~ x ~ x", AI: "~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~ x!2 ~ x",
AJ: "~@2 x!2 ~@4 x ~ x ~@3 x ~ x ~@2 x!2 ~ x!2", AK: "~@2 x ~ x ~@3 x ~ x ~@8 x ~ x!2 ~",
AL: "x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~ x!2 ~", AM: "x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~ x",
AN: "x ~@2 x ~ x ~@3 x ~ x ~@4 x!2 ~@2 x ~ x!2", AO: "~ x ~@2 x!2 ~@4 x!2 ~@8 x ~ x ~",
AP: "x!2 ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x!2 ~", AQ: "x!2 ~@2 x ~ x ~@4 x!2 ~@4 x!2 ~@2 x ~ x",
AR: "x ~ x ~@2 x!2 ~@4 x!2 ~@4 x ~ x ~@2 x!2", AS: "~ x!2 ~@2 x ~ x ~@3 x ~@10 x!2",
AT: "~ x ~ x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2 x ~", AU: "x!2 ~ x ~@2 x!2 ~@4 x ~ x ~@3 x ~ x ~@2 x",
AV: "x ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x", AW: "~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@5 x ~@2 x",
AX: "~ x!2 ~ x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2", AY: "x!2 ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@4 x!2 ~@2",
AZ: "x ~ x!2 ~ x ~@2 x!2 ~@4 x!2 ~@4 x!2 ~@2", BA: "x ~ x ~ x!2 ~@2 x ~ x ~@3 x ~ x ~@6 x",
BB: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", BC: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
BD: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2", BE: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~",
BF: "~ x ~@9 x ~@11 x", BG: "~@11 x ~@11 x", BH: "~ x", BI: "x!2", BJ: "~ x ~@11 x ~@10", BK: "~ x ~@22",
BL: "~@19 x ~@4", BM: "~@7 x ~@12 x ~@3", BN: "~@2 x ~@2 x", BO: "~@3 x ~@3 x", BP: "~@2 x ~@2 x ~@5 x",
BQ: "~ x ~@5 x ~@4", BR: "~@2 x ~@12 x ~@8", BS: "~ x ~@3 x ~@2", BT: "~@3 x ~@12 x ~@7", BU: "~ x ~@2 x ~",
BV: "~ x ~@4",
// … 43 more lines
More by Ozzy Osbourne
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.