0:00/0:00
// Come On Eileen — Save Ferris
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar, guitar.
setcpm(120/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 · electric bass finger · "bass"
const bass = note(`<
A B C D E F G D H I J K H I J K H I J K H I J K H F G L@2 M N O P M N O Q@2 R S T U V W X Y V W X Y V W X Y Z S T AA@2
AB AC AD AE AB AC AD AF AB AC AD AG@2 AH AI AJ AK AL@4 AM AN AO AP AQ AR AS AT@2 AU@2 AV AW AX AY AZ BA BB BC BD BE@3
>`.pickRestart({
A: "c2 ~@7", B: "e1 ~@7", C: "f1 ~@7", D: "c2@2 c2!6 g1@2 g1!6", E: "c2@2 c2!6 c2@2 c2!6", F: "e1@2 e1!6 e1@2 e1!6",
G: "f1@2 f1!6 f1@2 f1!6", H: "c2!2 e2!2 g2!2 e2!2 c2!2 e2!2 f2!2 g2!2", I: "e2!2 g2!2 b2!2 g2!2 e2!2 g2!2 a2!2 c3!2",
J: "f1!2 a1!2 c2!2 a1!2 f1!2 a1!2 a#1!2 c2!2", K: "c2!2 e2!2 g2!2 e2!2 g1!2 b1!2 d2!2 b1!2",
L: "[c2@2 c2!6 g1@4 g1@20]/2", M: "d2!2 a1 b1 d2 a1 b1 d2", N: "a2!2 e2 f#2 a2 e2 f#2 a2",
O: "e2!2 a1 b1 e2 a1 b1 e2", P: "g1!2 d2 g1 a1!2 e2 a1", Q: "[g1@2 g1@2 d2@2 g1@2 a1@16 c2@2 c2!6]/2",
R: "c2@2 c2!6 e1@2 e1!6", S: "e1@2 e1!6 f1@2 f1!6", T: "f1@2 f1!6 c2@2 c2!6", U: "g1@2 g1!6 c2!2 e2!2 g2!2 e2!2",
V: "c2!2 e2!2 f2!2 g2!2 e2!2 g2!2 b2!2 g2!2", W: "e2!2 g2!2 a2!2 c3!2 f1!2 a1!2 c2!2 a1!2",
X: "f1!2 a1!2 a#1!2 c2!4 e2!2 g2!2 e2!2", Y: "g1!2 b1!2 d2!2 b1!2 c2!2 e2!2 g2!2 e2!2",
Z: "c2!2 e2!2 f2!2 g2!2 e1@2 e1!6", AA: "[g1@2 g1@10 d2!2 a1 b1]/2", AB: "d2 a1 b1 d2 a2!2 e2 f#2",
AC: "a2 e2 f#2 a2 e2!2 a1 b1", AD: "e2 a1 b1 e2 g1!2 d2 g1", AE: "a1!2 e2 a1 d2!2 a1 b1", AF: "a1!2 e2@2 d2!2 a1 b1",
AG: "[a1!2 e2 a1 d2@12]/2", AH: "d2@2 d2 f#2@2 f#2 ~ a2@2 a2 f#2@2 f#2 d2@2 d2",
AI: "f#2@2 ~ f#2 g2@2 g2 a2@2 a2 f#1@2 f#1 a1@2 ~", AJ: "a1 c#2@2 c#2 a1@3 f#1@2 f#1 ~ a1@2 a1 b1@2",
AK: "b1 c#2@2 c#2 g1@2 ~ g1 b1@2 b1 c2@2 c2 c#2@2",
AL: "[c#2 d2@2 ~ d2 c2@2 c2 b1@2 b1 c2@2 b1 ~ d2@2 d2 f#1@2 f#1 g1@2 g1 g#1@2 ~ g#1 a1@2 a1 b1@2 b1 c2@2 c2 c#2@2 ~ c#2 d2@2 d2 f#2@2 f#2 a2@2 a2 ~ f#2@2 f#2 d2@2 d2 f#2@2 f#2 g2@2 ~ g2]/4",
AM: "a2@2 a2 f#1@2 f#1 a1@2 a1 c#2@2 ~ c#2 a1@3", AN: "f#1@2 f#1 a1@2 a1 ~ b1@2 b1 c#2@2 c#2 g1@2 g1",
AO: "b1@2 ~ b1 c2@2 c2 c#2@2 c#2 d2@2 d2 c2@2 ~", AP: "c2 b1@2 b1 c2@2 b1 d2@2 d2 ~ f#1@2 f#1 g1@2",
AQ: "g1 g#1@2 g#1 a1@2 ~ a1 b1@2 b1 c2@2 c2 c#2@2", AR: "c#2 d2@2 d2 f#2@2 f#2 a2@2 ~ a2 f#2@2 f#2 d2@2",
AS: "d2 f#2@2 f#2 g2@2 g2 a2@2 a2 f#1@2 f#1 a1@2 a1",
AT: "[c#2@2 c#2 a1@3 f#1@2 f#1 a1@2 a1 b1@2 b1 c#2@2 c#2 g1@2 g1 b1@2 b1 c2@2 c2 c#2@2 c#2 d2@2]/2",
AU: "[d2 c2@2 b1@2 b1 c2@2 b1 d2@2 d2 f#1@2 f#1 g1@2 g#1@2 g#1 a1@2 a1 b1!2 c2@2 c2 c#2@2 c#2 d2, ~@3 c2 ~@13 g1 ~@14]/2",
AV: "~@9 a1 ~@6", AW: "~@3 e1 ~@10 g1!2", AX: "g1 ~ g1 a1!2 ~ a1!2 d2@3 d2@3 d2@2",
AY: "d2@3 a1@3 a1@2 a1@3 a1@3 e2@2", AZ: "e2@3 e2@3 e2@2 g1@3 g1@3 a1@2", BA: "a1@3 d2@3 d2@2 d2@3 d2@3 a1@2",
BB: "a1@3 a1@3 a1@2 e2@3 e2@3 e2@2", BC: "e2@3 g1@3 g1@2 a1@3 a1@3 d2@2", BD: "d2@3 d2@3 d2@2 a1@3 a1@3 a1@2",
BE: "[a1@3 e2@3 e2@2 e2@3 e2@3 g1@10 a1@21 ~@3]/3",
})).s("gm_electric_bass_finger").gain(0.64)
// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
A B C D E F G D H I J K H I J K H I J K H I J K H F G L@2 M N O P M N O Q@2 R S T U V W X Y V W X Y V W X Y Z S T AA@2
AB AC AD AE AB AC AD AE AB AC AD AF@2 AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG
BH BI@3
>`.pickRestart({
A: "[c3,g3,c4] ~@7", B: "[e2,b2,e3] ~@7", C: "[f2,c3,f3] ~@7",
D: "[c3,g3,c4]@2 [c3,g3,c4]!6 [g2,d3,g3]@2 [g2,d3,g3]!6", E: "[c3,g3,c4]@2 [c3,g3,c4]!6 [c3,g3,c4]@2 [c3,g3,c4]!6",
F: "[e2,b2,e3]@2 [e2,b2,e3]!6 [e2,b2,e3]@2 [e2,b2,e3]!6", G: "[f2,c3,f3]@2 [f2,c3,f3]!6 [f2,c3,f3]@2 [f2,c3,f3]!6",
H: "[e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]", // C
I: "[e4,g4,b4]!2 ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4]", // Em
J: "[f4,a4,c5]!2 ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5]", // F
K: "[e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] [g4,b4,d5]!2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]", // C G
L: "[[c3,g3,c4]@2 [c3,g3,c4]!6 [g2,d3,g3]@4 [g2,d3,g3]@20]/2", // C5 G5
M: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // D
N: "~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~", // A
O: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", // Em
P: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~", // G A
Q: "[~@2 [b3,d4,g4] ~@3 [b3,d4,g4]@2 [c#4,e4,a4]@16 [c3,g3,c4]@2 [c3,g3,c4]!6]/2", // G A C5
R: "[c3,g3,c4]@2 [c3,g3,c4]!6 [e2,b2,e3]@2 [e2,b2,e3]!6", S: "[e2,b2,e3]@2 [e2,b2,e3]!6 [f2,c3,f3]@2 [f2,c3,f3]!6",
T: "[f2,c3,f3]@2 [f2,c3,f3]!6 [c3,g3,c4]@2 [c3,g3,c4]!6", // F5 C5
U: "[g2,d3,g3]@2 [g2,d3,g3]!6 [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]", // G5 C
V: "~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] [e4,g4,b4]!2 ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4]", // C Em
W: "~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] [f4,a4,c5]!2 ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5]", // Em F
X: "~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]", // F C
Y: "[g4,b4,d5]!2 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]", // G C
Z: "~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] [e2,b2,e3]@2 [e2,b2,e3]!6", // C E5
AA: "[[g2,d3,g3]@4 [g2,d3,g3]@20 ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~]/2", // G5 D
AB: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~", // D A
AC: "~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", // A Em
AD: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // Em G
AE: "~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // A D
AF: "[~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~ [d3,a3,d4]@24]/2", // A D5
AG: "~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4]", // D
AH: "~@3 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [a3,c#4,f#4] ~@3", // D F#m
AI: "[a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@2", // F#m
AJ: "[a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // F#m G
AK: "[b3,d4,g4] ~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // G
AL: "~ [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@2 [c#4,e4,a4] ~", // D A
AM: "~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~", // A D
AN: "~ [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4]", // D
AO: "~@2 [d4,f#4,a4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@2 [a3,c#4,f#4]", // D F#m
AP: "~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [b3,d4,g4]", // F#m G
AQ: "~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@3", // G
AR: "[b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@2", // G D
AS: "[d4,f#4,a4] ~@2 [d4,f#4,a4] ~@3 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2", // D A
AT: "[c#4,e4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2", // A D
AU: "[d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4]", // D F#m
AV: "~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~@2 [a3,c#4,f#4] ~", // F#m
AW: "~ [a3,c#4,f#4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // F#m G
AX: "[b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~", // G D
AY: "~ [d4,f#4,a4] ~ [d4,f#4,a4] ~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] [d3,a3,d4]", // D A D5
AZ: "~@9 [a2,e3,a3] ~@6", BA: "~@3 [e2,e3,b3,e4] ~@10 [g2,d3,g3]!2",
BB: "[g2,d3,g3] ~ [g2,d3,g3] [a2,e3,a3]!2 ~ [a2,e3,a3]!2 [d3,a3,d4] ~ [d3,a3,d4]!3 ~ [d3,a3,d4]!2", // G5 A5 D5
BC: "[d3,a3,d4] ~ [d3,a3,d4] [a2,e3,a3]!2 ~ [a2,e3,a3]!3 ~ [a2,e3,a3]!3 ~ [e2,b2,e3]!2", // D5 A5 E5
BD: "[e2,b2,e3] ~ [e2,b2,e3]!3 ~ [e2,b2,e3]!2 [g2,d3,g3] ~ [g2,d3,g3]!3 ~ [a2,e3,a3]!2", // E5 G5 A5
BE: "[a2,e3,a3] ~ [a2,e3,a3] [d3,a3,d4]!2 ~ [d3,a3,d4]!3 ~ [d3,a3,d4]!3 ~ [a2,e3,a3]!2", // A5 D5 A5
BF: "[a2,e3,a3] ~ [a2,e3,a3]!3 ~ [a2,e3,a3]!2 [e2,b2,e3] ~ [e2,b2,e3]!3 ~ [e2,b2,e3]!2", // A5 E5
BG: "[e2,b2,e3] ~ [e2,b2,e3] [g2,d3,g3]!2 ~ [g2,d3,g3]!2 [a2,e3,a3] ~ [a2,e3,a3]!3 ~ [d3,a3,d4]!2", // E5 G5 A5 D5
BH: "[d3,a3,d4] ~ [d3,a3,d4]!3 ~ [d3,a3,d4]!2 [a2,e3,a3] ~ [a2,e3,a3]!3 ~ [a2,e3,a3]!2", // D5 A5
BI: "[[a2,e3,a3] ~ [a2,e3,a3] [e2,b2,e3]!2 ~ [e2,b2,e3]!3 ~ [e2,b2,e3]!3 ~ [g2,d3,g3]@10 [a2,e3,a3]@21 ~@3]/3", // A5 E5 G5 A5
})).s("gm_overdriven_guitar").gain(0.45).pan(0.3)
// other · trumpet
const trumpet = note(`<
A@2 B C D E F C D E F C ~@7 G H@2 ~ I ~@4 J ~@8 K L M N O ~@6 P@2 ~@3 Q ~@3 R@2 ~@18 S@5 T U ~ V@2 W@4 ~@12
>`.pickRestart({
A: "g4@2 a4@2 g4@2 a4 g4@2 g4 a4@2 g4@2 a4@2", B: "g4@2 a4@2 g4@2 a4 g4@2 g4 a4@2 g4@2 e4 f4",
C: "g4 g4@2 g4@3 e4 f4 g4 g4@2 g4@5", D: "c4 ~ a4@2 g4 ~@2 c4", E: "e4 ~ a4@2 g4 ~@2 c4",
F: "f4@2 ~@2 a4@4 g4@2 ~@4 e4 f4", G: "~@2 g4@2 e4 d4@2 g3@9", H: "~@10 a4@2 g4 a4@2 ~",
I: "~@2 g4@2 e4 d4@2 g3@2 e4 g4 a4 c5@2 a4@2", J: "d4@2 e4@2 d4@2 e4 d4@2 d4 e4@2 d4@2 e4@2", K: "~@4 c4 ~ a4@2",
L: "g4 ~@2 c4 e4 ~ a4@2", M: "g4 ~@2 c4 f4 ~ a4@2", N: "g4@2 ~@4 e4 f4 g4 g4@2 g4@3 e4 f4", O: "g4 g4@2 g4@5 ~@8",
P: "[~@10 g4@2 e4 d4@2 g3@9 ~@8]/2", Q: "~@3 a4 c5@2 a4@2 ~@8",
R: "[~@8 d4@2 e4@2 d4@2 e4 d4@2 d4 e4@2 d4@2 e4@2 ~@8]/2",
S: "[~ f#4@3 g4 f#4@2 d4 f#4@5 ~ e4@11 f#4@2 e4@2 d4 a4@21 f#4@2 e4@2 d4 a4@21 g4@3]/5",
T: "f#4@3 ~ e4@3 d4@3 g4@3 f#4@3", U: "~ e4@3 d4@3 ~@9", V: "[~ d4@6 e4@6 ~ f#4@6 g4@6 a4@6]/2",
W: "[b4@6 c#5@6 d5@6 b4@23 a4@21 ~@2]/4",
})).s("gm_trumpet").gain(0.61).pan(0.3)
// other · trombone
const trombone = note(`<
A@2 B C D E F C D E F C ~@7 G H@2 ~ I ~@4 J ~@8 K L M N O ~@6 P@2 ~@3 Q ~@3 R@2 ~@18 S@5 T U ~ V@2 W@4 ~@12
>`.pickRestart({
A: "g3@2 a3@2 g3@2 a3 g3@2 g3 a3@2 g3@2 a3@2", B: "g3@2 a3@2 g3@2 a3 g3@2 g3 a3@2 g3@2 e3 f3",
C: "g3 g3@2 g3@3 e3 f3 g3 g3@2 g3@5", D: "c3 ~ a3@2 g3 ~@2 c3", E: "e3 ~ a3@2 g3 ~@2 c3",
F: "f3@2 ~@2 a3@4 g3@2 ~@4 e3 f3", G: "~@2 g3@2 e3 d3@2 g2@9", H: "~@10 a3@2 g3 a3@2 ~",
I: "~@2 g3@2 e3 d3@2 g2@2 e3 g3 a3 c4@2 a3@2", J: "d3@2 e3@2 d3@2 e3 d3@2 d3 e3@2 d3@2 e3@2", K: "~@4 c3 ~ a3@2",
L: "g3 ~@2 c3 e3 ~ a3@2", M: "g3 ~@2 c3 f3 ~ a3@2", N: "g3@2 ~@4 e3 f3 g3 g3@2 g3@3 e3 f3", O: "g3 g3@2 g3@5 ~@8",
P: "[~@10 g3@2 e3 d3@2 g2@9 ~@8]/2", Q: "~@3 a3 c4@2 a3@2 ~@8",
R: "[~@8 d3@2 e3@2 d3@2 e3 d3@2 d3 e3@2 d3@2 e3@2 ~@8]/2",
S: "[~ f#3@3 g3 f#3@2 d3 f#3@5 ~ e3@11 f#3@2 e3@2 d3 a3@21 f#3@2 e3@2 d3 a3@21 g3@3]/5",
T: "f#3@3 ~ e3@3 d3@3 g3@3 f#3@3", U: "~ e3@3 d3@3 ~@9", V: "[~ d3@6 e3@6 ~ f#3@6 g3@6 a3@6]/2",
W: "[b3@6 c#4@6 d4@6 b3@23 a3@21 ~@2]/4",
})).s("gm_trombone").gain(0.61).pan(0.7)
// drums · kick
const kick = s("bd").struct(`<
A@3 ~ B@24 C D@7 E F B@20 G H@7 G H@3 I ~ J K L M N O P Q R J K L M L K S T U V W X Y Z@5 AA AB ~@2
>`.pickRestart({
A: "x", B: "x!4", C: "x!3 ~", D: "x ~ x ~@6 x!2 ~@3 x ~", E: "x!2 ~@2 x ~@3", F: "x!2 ~@2 x ~ x ~",
G: "x ~@3 x!2 ~@2", H: "~ x!2 ~@3 x ~ x ~ x ~@5", I: "~ x!2 ~@3 x ~ x ~@7", J: "x ~@6 x ~@5 x ~@2",
K: "~@2 x ~@2 x ~@2", L: "~ x ~@5 x ~@6 x ~", M: "~@4 x ~@6 x ~@4", N: "~ x ~@6 x ~@6 x", O: "~@5 x ~@6 x ~@3",
P: "~@2 x ~@6 x ~@5 x", Q: "~@3 x ~@2 x ~", R: "~@3 x ~@5 x ~@6", S: "x ~@2 x ~@2 x ~", T: "~ x ~@2 x ~@2 x",
U: "~@3 x ~@5 x ~@5 x", V: "~@15 x", W: "~@9 x ~@6", X: "~@3 x ~@12", Y: "~@8 x ~@2 x ~@2 x ~",
Z: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", AA: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2", AB: "x ~@2 x ~@12",
})).gain(0.56)
// drums · snare
const snare = s("sd").struct(`<
A@3 B C@3 D@3 C E D@2 C D C@3 D F C@2 D@4 C G H@7 I J K C K@4 C L K C K@3 M K@2 C K@2 C N H@7 O H@3 I P Q R S T U V W
X Y Q R S T Z AA AB AC AD AE AF AG AH AI@4 AJ AI AK ~@2
>`.pickRestart({
A: "x", B: "x!16", C: "~ x ~ x ~ x ~ x", D: "~@2 x ~@3 x ~@3 x ~@3 x!2", E: "~@2 x ~@3 x ~@3 x!2 ~@2 x!2",
F: "~@2 x ~@3 x ~@3 x ~@4 x", G: "~@2 x ~@3 x ~@4 x ~@2 x!2", H: "~ x ~ x", I: "~ x!2 ~",
J: "x ~ x ~ x!4 ~@2 x ~@3 x ~", K: "~@2 x ~@3 x!2 ~@2 x ~@3 x ~", L: "~@2 x ~@4 x ~@2 x ~@3 x ~",
M: "~@2 x ~@2 x!3 ~@2 x ~@3 x ~", N: "~@3 x ~@2 x!2 ~@4 x ~@3", O: "~ x ~ x!2 ~ x!2 ~@4 x ~@3",
P: "~@3 x!2 ~ x ~@2 x!2 ~ x!2 ~ x", Q: "~@3 x ~@6 x ~@5", R: "x ~@6 x ~@5 x ~@2", S: "~@4 x ~@6 x ~@4",
T: "~ x ~@6 x ~@5 x ~", U: "~@5 x ~@5 x ~@4", V: "~@2 x ~@5 x ~@6 x", W: "~@5 x ~@6 x ~@3", X: "~@2 x ~@6 x ~@6",
Y: "x ~@5 x ~@6 x ~@2", Z: "~@2 x ~@2 x ~@2", AA: "~ x ~@5 x ~@5 x ~@2", AB: "~@3 x ~@5 x ~@5 x",
AC: "~@5 x ~@5 x ~ x ~@2", AD: "~ x ~@4 x ~ x ~@3 x ~@3", AE: "~ x ~@2 x!12", AF: "~@9 x ~@6", AG: "~@3 x ~@10 x!2",
AH: "x ~ x!3 ~ x!3 ~@2 x ~@2 x ~", AI: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", AJ: "x ~@2 x ~@2 x ~ x ~@2 x!4 ~",
AK: "x ~@2 x ~@12",
})).gain(0.56)
// drums · low tom
const low_tom = s("lt").struct("<x!3 ~@34 [x!2 ~@6] ~@65>").gain(0.56)
// drums · hihat
const hihat = s("hh").struct(`<
~@4 A B@20 ~@4 B@7 C D ~@3 E C@2 B C B@3 C@5 D ~@3 F B@7 G B@3 D ~@19 H I J K ~@9
>`.pickRestart({
A: "~ x!7", B: "x!8", C: "x!4 ~ x!3", D: "x!4 ~@4", E: "~@5 x!3", F: "~@4 x!4", G: "x ~@3 x!4", H: "~@15 x",
I: "~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~", J: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", K: "x ~@2 x ~@2 x ~@9",
})).gain(0.56)
// drums · open hat
const open_hat = s("oh").struct(`<
~@4 A ~@20 B@4 ~@7 C D B@3 E C@2 ~ C ~@3 C@5 D B@3 F ~@11 C ~@19 G H I J K@6 I ~@2
>`.pickRestart({
A: "x", B: "x!8", C: "~ x", D: "~@4 x!4", E: "x!5 ~@3", F: "x!4 ~@4", G: "~@15 x", H: "~@9 x ~@6", I: "~@3 x ~@12",
J: "~@8 x ~@2 x ~@2 x ~", K: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~",
})).gain(0.56)
// drums · china
const china = s("cr").struct("<~@100 [~@14 x!2] [x ~@7 x!8] ~>").gain(0.08)
// drums · ride bell
const ride_bell = s("rd").struct("<~@72 A B C D E F G H I A B C D C J K L M N ~@12>".pickRestart({
A: "x ~@4 x ~ x ~@4 x!2 ~@2", B: "~@2 x ~ x ~@4 x!2 ~@5", C: "x!2 ~@4 x!2 ~@5 x!2 ~", D: "~@3 x!2 ~@5 x!2 ~@4",
E: "x!2 ~@5 x!2 ~@4 x ~ x", F: "~@4 x!2 ~@5 x!2 ~@3", G: "~ x!2 ~@5 x!2 ~@4 x!2", H: "~@5 x!2 ~@4 x!2 ~@3",
I: "~@2 x!2 ~@4 x!2 ~@5 x", J: "~@3 x!2 ~@4 x!2 ~@4 x", K: "x ~@4 x!2 ~@4 x!2 ~@3", L: "~ x!2 ~@4 x!2 ~@4 x!2 ~",
M: "~@2 x!2 ~@4 x!2 ~@4 x!2", N: "~@3 x!2 ~@3 x!2 ~@4 x ~",
})).gain(0.56)
// drums · shaker
const shaker = s("sh").struct("<~@29 [x!16]!7 [x!9 ~@7] ~@21 [~@8 x!8] [x!16]!11 [x!9 ~@7] ~@32>").gain(0.56)
stack(bass, overdriven_guitar, trumpet, trombone, kick, snare, low_tom, hihat, open_hat, china, ride_bell, shaker)
More by
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.