0:00/0:00
// Jacob's Ladder — Rush
// 110 bpm, 4/4, key F# minor. 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 (5/4 at bar 1, 6/4 at bar 2, 5/4 at bar 4, 6/4 at bar 5, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 132 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.
// chords · pad poly · "Synth"
const pad_poly = note(`<
A B@5 C@4 D@7 E@3 F@4 G H I J K L M@2 N O@2 P@8 Q@4 R@2 S@8 T@5 U@8 ~ V@3 W@7 X@3 Y@3 Z AA@6 AB@2 AC AD@2 ~@18 AE@4
AF@7 ~@4
>`.pickRestart({
A: "~@4 [c2,c4] [c2,e4] [c2,g3] [c2,c4]", // C C5 C
B: "[[c2,e4]@2 [c2,c4]@2 [c2,g3]@2 ~@2 [g#2,g#3] [g#2,c4] [g#2,g#4]@2 [g#2,d#4]@2 [g#2,c4]@2 [g#2,g#3]@2 ~@2 [f2,f3] [f2,a3] [f2,f4]@2 [f2,c4]@2 [f2,a3]@2 ~@2 [g2,g3] [g2,b3] [g2,g4]@2 [g2,d4]@2 [g2,b3]@2 [g2,g3]@2, ~@3 g#2 ~@5 f2 ~@4 g2 ~@5, ~@7 d#3@11 ~ c3@9 ~ d3@11]/5", // C C5 G# G#5 G# F F5 F …
C: "[~@2 [g#2,g#3] [g#2,c4] [g#2,g#4]@2 [g#2,d#4]@2 [g#2,c4]@2 ~@2 [e2,e3] [e2,g#3] [e2,e4]@2 [e2,b3]@2 [e2,g#3]@2 [e2,e3]@2 ~@2 [c2,c4] [c2,e4] [c2,c5]@2 [c2,g4]@2 [c2,e4]@2, g#2 ~@4 e2 ~@5 c2 ~@4, ~ c3@9 ~ b2@11 ~ g2@9]/4", // G# G#5 G# E E5 E C C5 …
D: "[~@2 [g#2,g#3] [g#2,c4] [g#2,g#4]@2 [g#2,d#4]@2 [g#2,c4]@2 [g#2,g#3]@2 ~@2 [f2,f3] [f2,a3] [f2,f4]@2 [f2,c4]@2 [f2,f3]@2 ~@2 [g2,g3] [g2,b3] [g2,g4]@2 [g2,d4]@2 [g2,b3]@2 [g2,g3]@2 ~@2 [g#2,g#3] [g#2,c4] [g#2,g#4]@2 [g#2,d#4]@2 [g#2,c4]@2 ~@2 [e2,e3] [e2,g#3] [e2,e4]@2 [e2,b3]@2 [e2,g#3]@2 [e2,e3]@2, g#2 ~@5 f2 ~@4 g2 ~@5 g#2 ~@4 e2 ~@5, ~ d#3@11 ~ c3@9 ~ d3@11 ~ c3@9 ~ b2@11]/7", // G# G#5 G# F F5 F G G5 …
E: "[c2!4 c2@2 c2@2 c2@2 c2!4 c2@2 c2@2 c2@2 ~ e4 c2!2, [c5,c6]@10 c2 [c4,e4,g4]]/3", // C
F: "[[c2,c4,e4,g4] c2!2 ~ [c4,e4,g4]@2 [c2,g#3,c4,d#4] ~ c2!4 d#4 [c2,d#4] f4@2 f4@2 g4@2 c2!2 [c2,f3,a3,c4] c2 c2 ~ c2 ~ c2 ~ c2!2, ~ [c4,e4,g4]@3 c2 ~@2 [g#3,c4,d#4]@5 ~@2 [a#3,d4]@8 ~ [f3,a3,c4]@7 ~@2, ~@14 c2 ~ c2 ~ c2 ~ f4@2 ~@8 [c#4,f4,g#4]@2]/4", // C G# Cm F C G# A# F …
G: "c2!2 [c2,c#4,f4,g#4] ~ c2 ~ [d#4,g4,a#4]@2, [c#4,f4,g#4]@2 ~ [c#4,f4,g#4]@3 c2 ~", // C#maj7 D# C#
H: "c2 ~ c2!4 [c4,e4,g4]@2, [d#4,g4,a#4]@6 c2 ~", // C D#
I: "[c4,e4,g4]@2 [c4,e4,g#4]@2 c2!4, c2 ~ c2 ~ [c4,e4,g#4]@2 [c4,e4,g4]@2", // C Caug C
J: "[c4,e4,g4]@2 c2 ~ c2 ~ [d#4,g4,a#4]@2, c2 ~ [e4,g4,c5]@4 c2 ~", // C D# C
K: "c2!4 [d#4,g4,a#4]@2 [c#4,f4,g#4]@2, [d#4,g4,a#4]@2 [d#4,g4,a#4]@2 c2 ~ c2 ~", // D# C# D#
L: "[c2,g#4] ~ c2!3 [c2,c4] [f4,a4,c5]@2, ~ [c#4,f4,g#4]@3 ~@2 c2 ~", // Fm C F C#
M: "[[f4,a4,c5]@2 [f4,a4,c5]@2 [c2,a4] ~ c2!2 c2!3 ~ c2 ~ [c#4,f4,g#4]@2, c2 ~ c2 ~@2 [d#4,g4,a#4,c5]@2 [d#4,g4,a#4]@7 c2 ~]/2", // F C# Cm7 D#
N: "c2!4 [c#4,f4,g#4]@2 [c4,e4,g4]@2, [c#4,f4,g#4]@2 [c#4,f4,a#4]@2 c2 ~ c2 ~", // C# C C# A#m
O: "[[c4,e4,g4]@2 [c2,g4] ~ c2 ~ [a3,c4,f4] [a3,c4,f4]@3 [b3,d4,g4] [b3,d4,g4]@3 ~@2, c2 ~@2 [c4,e4,g4]@3 [f1,f2]@4 [g1,g2]@4 ~@2]/2", // C C5 F G C F G
P: "[~@10 [c4,c5,c6]@8 ~@8 [g3,g4,g5]@8 ~ d3 a3 d4 f#4@2 e4 d4 f#4@2 e4@2 d4 f#4@3 [c#4,c#5]@2 [b3,b4]@2 [a#3,a#4] [b3,b4] [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5] [b3,b4] [c#4,c#5] [d4,d5], ~ [b3,b4,b5]@8 [f#3,f#4,f#5]@8 b5@8 f#5@7, ~@21 c6@4 ~@4 g5@3]/8", // C G C# B A# B C# D …
Q: "[[e4,e5]@2 ~ d3 a3 d4 f#4@2 e4 d4 f#4@2 e4@2 d4 f#4@3 [c#4,c#5]@2 [b3,b4]@2 [a#3,a#4] [b3,b4] [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5] [b3,b4] [c#4,c#5] [d4,d5], ~ b5@8 f#5@7, ~@5 c6@4 ~@7]/4", // E C# B A# B C# D C# …
R: "[[e4,e5] ~ b3 [f#3,b3,e4]@2 ~ b3 [e3,b3,e4]]/2", S: "[~ [f#5,c#6]@10 [b4,f#5]@11 [f#5,c#6]@10]/8",
T: "[[b4,f#5]@11 [f#5,c#6]@9]/5", U: "[~ [d4,d5]@31]/8", V: "[f#4,c#5,f#5]/3",
W: "[[g#4,g#5] [f#4,f#5] [e4,e5]@2 [d4,a4,d5]@24 [d4,a4,d5]@8 [f#4,c#5,f#5]@20]/7", // G# F# E D5 F#5
X: "[~@4 [f#4,c#5,f#5]@16 [g#2,g#4,g#5] [f#2,f#4,f#5] [e2,e4,e5]@2]/3", Y: "[d5, d4 ~@5]/3", Z: "d5", AA: "f#5/3",
AB: "[~ d6@3]/2", AC: "e6", AD: "[f#6@5 ~@3]/2",
AE: "[~@5 [c#4,e4,a4,c#5]@2 [c#4,e4,a4,c#5]@5 [c#4,e4,a4,c#5]@8 [c#4,e4,a4,c#5]@5 [d4,d5]@5 [c#4,c#5]@5 [b3,f#4,b4]@5 [b3,f#4,b4]@5 c#5@3 [b3,f#4,b4]@13 ~@2 f#5@3 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [e4,g4,b4,e5]@5 [e4,g4,b4,e5]@5, ~@5 [a1,e2,a2]@30 [b1,f#2,b2]@30 ~ [f#2,c#3,f#3]@20 [e2,b2,e3]@10]/4", // A D C# B5 F# Em A5 B5 …
AF: "[[f#2,c#3]@3 [e2,b2]@2 [d2,a2,e4,e5]@5 [c#4,a4,c#5]@5 [c#4,a4,c#5]@5 ~ [d2,a2]@2 c#2@3 [b1,d4,a4,d5]@5 [a1,e2,a2,c#4,e4,a4]@122 ~@15, [f#4,f#5]@5 ~@5 [c#2,a2]@10 ~ [d4,a4,d5]@5 ~@5 a3@61 ~@76]/7", // F#5 E5 Dsus2 F#m D5 Bm7 A F# …
})).s("gm_pad_poly").gain(0.25).pan(1)
// other · pad poly · "Synth"
const pad_poly_2 = note(`<
~@67 A B@2 C D E@2 F@2 G@2 H I@3 J@2 K L M N D E@2 D O P Q@2 R S@4 T@7 U@5 ~@10 V@5 ~@4
>`.pickRestart({
A: "~ d4", B: "[a4@3 e4 f#4@12]/2", C: "f#4@2 g#4 b4", D: "a#4!2 d#5 b4", E: "c#5/2",
F: "[g#4 f#4 e4@2 d4@8 a4@3 e4]/2", G: "[f#4@3 f#4]/2", H: "g#4 b4 a#4!2", I: "[d#5 b4 c#5@8 a#4!2]/3",
J: "[d#5@2 b4@2 c#5@8 g#4 f#4 e4@2]/2", K: "d4@3 d4", L: "a4@3 e4 f#4@2 g4@2", M: "f#4 e4@3", N: "f#4!2 g#4 b4",
O: "c#5 d#5 c#5 d#5", P: "c#5", Q: "[g#4 f#4 e4@2 d4@12]/2", R: "e4",
S: "[f#4@15 a4@15 e4@3 f#4@28 g#4@2 b4@3 a#4@15 d#5@15]/4",
T: "[b4@3 c#5@25 a#4@3 g#4@2 f#4@3 f#4@15 a4@15 e4@3 f#4@28 g#4@2 b4@3 a#4@15 d#5@15 b4@3 c#5@25 a#4@3 g#4@2 f#4@3]/7",
U: "[[a3,d4]@5 [b3,e4]@6 [c#4,f#4]@11 [a3,d4]@5 [b3,e4]@6 ~@7]/5", V: "[~@3 a4@10 e5@5 b4@5 c#5@81 ~@16]/5",
})).s("gm_pad_poly").gain(0.25).pan(1)
// other · pad poly · "Synth Bass"
const pad_poly_3 = note("<~@67 A@3 B C@3 D@7 E@3 F@3 B C@6 G@2 H I@4 J@7 ~@24>".pickRestart({
A: "[~ [d2,a2,d3]@5]/3", B: "[d2,a2,d3]", C: "[f#2,c#3,f#3]/3",
D: "[g#2 f#2 e2@2 [d2,a2,d3]@24 [d2,a2,d3]@8 [f#2,c#3,f#3]@20]/7", E: "[~@4 [f#2,c#3,f#3]@16 g#2 f#2 e2@2]/3",
F: "[d2,a2,d3]/3", G: "[g#2 f#2 e2@2 [d2,a2,d3]@12]/2", H: "[e2,e3]",
I: "[[f#2,f#3]@15 [a2,a3]@15 e3@3 [f#2,f#3]@28 g#3@2 b3@3 [a#2,a#3]@15 [d#3,d#4]@15]/4", // F# A F# A# D#
J: "[[b2,b3]@3 [c#3,c#4]@25 a#3@3 g#3@2 f#3@3 [f#2,f#3]@15 [a2,a3]@15 e3@3 [f#2,f#3]@28 g#3@2 b3@3 [a#2,a#3]@15 [d#3,d#4]@15 [b2,b3]@3 [c#3,c#4]@25 a#3@3 g#3@2 f#3@3]/7", // B C# F# A F# A# D# B …
})).s("gm_pad_poly").gain(0.25).pan(1)
// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
A B C D E F G H I J G K L M N O P Q@7 R S T U V W X@2 Y Z@3 ~@3 AA AB@2 AC AD AB@2 AC AE@3 AF AG AH AI AJ AK AL AM AN
AO AL AP AQ AR AS AT AU AV ~@29 AW@2 AX@2 AY@2 AZ BA BB BC@2 BD@2 BE@2 BF ~@4 BG BH BI@2 BJ@3 ~@8
>`.pickRestart({
A: "~@4 c4 e4 g3 c4", B: "e4 c4 g3 ~", C: "g#3 c4 g#4@2 d#4@2 c4@2", D: "g#3@2 ~@2 f3 a3 f4@2",
E: "c4@2 a3@2 ~@2 g3 b3", F: "g4 d4 b3 g3", G: "~@2 g#3 c4 g#4@2 d#4@2", H: "c4@2 ~@2 e3 g#3 e4@2", I: "b3 g#3 e3 ~",
J: "c4 e4 c5@2 g4@2 e4@2", K: "c4@2 g#3@2 ~@2 f3 a3", L: "f4 c4 f3 ~", M: "g3 b3 g4@2 d4@2 b3@2",
N: "g3@2 ~@2 g#3 c4 g#4@2", O: "d#4@2 c4@2 ~@2 e3 g#3", P: "e4 b3 g#3 e3",
Q: "[~@21 e4 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@3 [c4,e4,g4]@2 [g#3,c4,d#4] [g#3,c4,d#4]@5 d#4!2 f4@2 f4@2 g4@2 f4@2 [f3,a3,c4] [f3,a3,c4]@7 [c#4,f4,g#4]@2, [c5,c6]@5 ~@2, ~@19 [a#3,d4]@4 ~@5]/7", // C G# F C# C A#
R: "[c#4,f4,g#4]@2 [c#4,f4,g#4] [c#4,f4,g#4]@3 [d#4,g4,a#4]@2", S: "[d#4,g4,a#4]@3 [c4,e4,g4]",
T: "[c4,e4,g4] [c4,e4,g#4]!2 [c4,e4,g4]", U: "[c4,e4,g4] [e4,g4,c5]@2 [d#4,g4,a#4]", V: "[d#4,g4,a#4]!3 [c#4,f4,g#4]",
W: "g#4 [c#4,f4,g#4]@3 ~ c4 [f4,a4,c5]@2", // C# F
X: "[[f4,a4,c5]@2 [f4,a4,c5]@2 a4 [d#4,g4,a#4,c5]@2 [d#4,g4,a#4]@7 [c#4,f4,g#4]@2]/2", // F Cm7 D# C#
Y: "[c#4,f4,g#4] [c#4,f4,a#4] [c#4,f4,g#4] [c4,e4,g4]", // C# A#m C# C
Z: "[[c4,e4,g4]@2 g4 [c4,e4,g4]@3 [a3,c4,f4] [a3,c4,f4]@3 [b3,d4,g4] [b3,d4,g4]@3 [g#3,c4,d#4,g#4]@4 ~@6]/3", // C F G G#
AA: "~@3 d3 a3 d4 f#4@2", AB: "[e4 d4 f#4@2 e4@2 d4 f#4@3 [c#4,c#5]@2 [b3,b4]@2 [a#3,a#4] [b3,b4]]/2",
AC: "[c#4,c#5]@2 [d4,d5]@2 [c#4,c#5] [b3,b4] [c#4,c#5] [d4,d5]", AD: "[e4,e5]@2 ~ d3 a3 d4 f#4@2",
AE: "[[e4,e5]@2 ~@2 b3@2 [f#3,b3,e4]@4 ~@2 b3@2 [e3,b3,e4]@4 a#3!5 ~]/3", AF: "b3@2 g#3@2 a#3!4",
AG: "a#3 ~ b3@2 g#3@2 [f#3,b3]!2", AH: "[f#3,b3]!3 ~ [g3,c4]@2 [e3,a3]@2", AI: "[f#3,b3]!5 ~ c4@2",
AJ: "a3@2 [g3,b3]@2 a#3!4", AK: "a#3 ~ b3@2 g#3@2 a#3!2", AL: "a#3!3 ~ b3@2 g#3@2", AM: "[f#3,b3]!5 ~ [g3,c4]@2",
AN: "[e3,a3]@2 [f#3,b3]!5 ~", AO: "c4@2 a3@2 [g3,b3]@2 a#3!2", AP: "a#3!5 ~ b3@2", AQ: "g#3@2 [a3,d4]!4 [a3,d4]@2",
AR: "[a3,d4]@2 [a3,d4]@2 [a3,d4]!4", AS: "[a3,d4]@2 [a3,d4]@2 [a3,d4]@2 [a3,d4]!2", AT: "[a3,d4]!3 ~ [a3,d4]!4",
AU: "[a3,d4] ~ [a3,d4]!5 ~", AV: "[a3,d4]!5 ~@3",
AW: "[d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 a4@3 d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2]/2",
AX: "[d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 a4@3 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2]/2",
AY: "[c#4@3 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 c#4@3 d4@3 a4@2 b4@3 g4@2 f#4@2]/2",
AZ: "~ d5@2 d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 a4@3 d4@3", BA: "a4@2 b4@3 g4@2 f#4@3 d5@2 d4@3 a4@2 b4@3 g4@2 f#4@2",
BB: "~ d5@2 a4@3 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 f#3@3",
BC: "[c#4@2 d#4@3 b3@2 a#3@3 f#4@2 c#4@3 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 f#3@3 c#4@2 d#4@3 b3@2 a#3@3 f#4@2 c#4@3]/2",
BD: "[d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 e4@3 b4@2 c#5@3 a4@2 g#4@3 e5@2 b4@3 f#4@3 c#5@2 d#5@3 b4@2 a#4@3 f#5@2]/2",
BE: "[f#4@3 c#5@2 d#5@3 b4@2 a#4@3 f#5@2 c#5@3 d4@3 a4@2 b4@3 g4@2 f#4@3 d5@2 e4@3 b4@2 c#5@3 a4@2 g#4@3 e5@2]/2",
BF: "b4 ~@7", BG: "~@5 [c#4,e4,a4,c#5]@2 [c#4,e4,a4,c#5]@5 [c#4,e4,a4,c#5]@8 [c#4,e4,a4,c#5]@4",
BH: "~ [d4,d5]@5 [c#4,c#5]@5 [b3,f#4,b4]@5 [b3,f#4,b4]@5 c#5@3", // D C# B5
BI: "[[b3,f#4,b4]@13 ~@2 f#5@3 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [f#4,a#4,c#5,f#5]@5 [e4,g4,b4,e5]@5 [e4,g4,b4,e5]@5]/2", // B5 F# Em
BJ: "[[f#4,f#5]@5 [e4,e5]@5 [c#4,a4,c#5]@5 [c#4,a4,c#5]@5 ~ [d4,a4,d5]@5 [d4,a4,d5]@5 [a3,c#4,e4,a4]@20 ~@21]/3", // F# E F#m D5 A
})).s("gm_distortion_guitar").gain(0.22).pan(0.3)
// bass · distortion guitar · "Guitar Bass"
const bass = note(`<
~@17 A B C D E F G D H F I J H G D J K ~ L@4 M@8 N@2 ~@48 O@2 P@2 Q@2 R S T U@2 V@2 W@2 X@2 Y Z AA AB ~@14
>`.pickRestart({
A: "c3!4 c3@2 c3@2", B: "c3@2 c3!4 c3@2", C: "c3@2 c3@2 c3@2 c3!2", D: "c3!3 ~ c3 ~ c3 ~", E: "c3!4 ~ c3!2 ~",
F: "c3 ~ c3 ~ c3!4", G: "c3 ~ c3 ~ c3 ~ c3!2", H: "c3 ~ c3!5 ~", I: "c3 ~ c3 ~ c3 ~ c3 ~", J: "c3!5 ~ c3 ~",
K: "c3 ~ c3 ~ c3 ~@3", L: "[~@2 b2@2 b2@2 b2@3 b2 c3@2 c3@2 c3@3 g2 f#2@2 f#2@2 f#2@3 f#2 g2@2 g2@2 a2 g2]/4",
M: "[a2@2 b2@2 b2@2 b2@3 b2 c3@2 c3@2 c3@3 g2 f#2@2 f#2@2 f#2@3 f#2 g2@2 g2@2 a2 g2]/4",
N: "[a2@2 b2@2 b2@2 b2@3 b2 ~@6]/2",
O: "[d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 a2@3 d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2]/2",
P: "[d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 a2@3 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2]/2",
Q: "[c#2@3 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 c#2@3 d2@3 a2@2 b2@3 g2@2 f#2@2]/2",
R: "~ d3@2 d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 a2@3 d2@3", S: "a2@2 b2@3 g2@2 f#2@3 d3@2 d2@3 a2@2 b2@3 g2@2 f#2@2",
T: "~ d3@2 a2@3 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 f#1@3",
U: "[c#2@2 d#2@3 b1@2 a#1@3 f#2@2 c#2@3 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 f#1@3 c#2@2 d#2@3 b1@2 a#1@3 f#2@2 c#2@3]/2",
V: "[d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 e2@3 b2@2 c#3@3 a2@2 g#2@3 e3@2 b2@3 f#2@3 c#3@2 d#3@3 b2@2 a#2@3 f#3@2]/2",
W: "[f#2@3 c#3@2 d#3@3 b2@2 a#2@3 f#3@2 c#3@3 d2@3 a2@2 b2@3 g2@2 f#2@3 d3@2 e2@3 b2@2 c#3@3 a2@2 g#2@3 e3@2]/2",
X: "[b2@3 [c#3,f#3,a#3]@3 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@3 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@3 ~@3 [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]!2 ~@2]/2", // F#
Y: "~ [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@3 [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@3", // F#
Z: "~@2 [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]@3 ~@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 ~@8", // F#
AA: "[c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@3 ~@4 [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2 [c#3,f#3,a#3] [c#3,f#3,a#3]@2 [c#3,f#3,a#3]@2", // F#
AB: "[c#3,f#3,a#3]!3 ~ [c#3,f#3,a#3] ~@19", // F#
})).s("gm_distortion_guitar").gain(0.22).pan(0)
// bass · electric bass finger · "Bass"
const bass_2 = note(`<
A B@5 C@4 D@7 E F G H I J K H L J M N L K H N O@6 P@8 Q@3 R S T U V W X U Y Z X AA AB AC AD AE AF AG ~@44 AH@2 AI AJ
AK AL@4 AM@3 ~@3 AN AO AP@3
>`.pickRestart({
A: "~@4 c2!4",
B: "[c2@2 c2@2 c2@2 ~@2 g#2!2 g#2@2 g#2@2 g#2@2 g#2@2 ~@2 f2!2 f2@2 f2@2 f2@2 ~@2 g2!2 g2@2 g2@2 g2@2 g2@2, ~@3 g#2 ~@5 f2 ~@4 g2 ~@5, ~@7 d#3@11 ~ c3@9 ~ d3@11]/5",
C: "[~@2 g#2!2 g#2@2 g#2@2 g#2@2 ~@2 e2!2 e2@2 e2@2 e2@2 e2@2 ~@2 c2!2 c2@2 c2@2 c2@2, g#2 ~@4 e2 ~@5 c2 ~@4, ~ c3@9 ~ b2@11 ~ g2@9]/4",
D: "[~@2 g#2!2 g#2@2 g#2@2 g#2@2 g#2@2 ~@2 f2!2 f2@2 f2@2 f2@2 ~@2 g2!2 g2@2 g2@2 g2@2 g2@2 ~@2 g#2!2 g#2@2 g#2@2 g#2@2 ~@2 e2!2 e2@2 e2@2 e2@2 e2@2, g#2 ~@5 f2 ~@4 g2 ~@5 g#2 ~@4 e2 ~@5, ~ d#3@11 ~ c3@9 ~ d3@11 ~ c3@9 ~ b2@11]/7",
E: "c2!4 c2@2 c2@2", F: "c2@2 c2!4 c2@2", G: "c2@2 c2@2 c2@2 c2!2", H: "c2!3 ~ c2 ~ c2 ~", I: "c2!4 ~ c2!2 ~",
J: "c2 ~ c2 ~ c2!4", K: "c2 ~ c2 ~ c2 ~ c2!2", L: "c2 ~ c2!5 ~", M: "c2 ~ c2 ~ c2 ~ c2 ~", N: "c2!5 ~ c2 ~",
O: "[c2 ~ c2 ~ c2 ~ [f1,f2]@4 [g1,g2]@4 [g#1,g#2]@4 [b1,b2]@2 [b1,b2]@2 [b1,b2]@3 [b1,b2] [c2,c3]@2 [c2,c3]@2 [c2,c3]@3 g2 [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2]@3 [f#1,f#2] [g1,g2]@2 [g1,g2]@2 [a1,a2] [g1,g2]]/6", // F G G# B C F# G A …
P: "[[a1,a2]@2 [b1,b2]@2 [b1,b2]@2 [b1,b2]@3 [b1,b2] [c2,c3]@2 [c2,c3]@2 [c2,c3]@3 g2 [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2]@3 [f#1,f#2] [g1,g2]@2 [g1,g2]@2 [a1,a2] [g1,g2]]/4", // A B C F# G A G
Q: "[[a1,a2]@2 [b1,b2]@2 [b1,b2]@2 [b1,b2]@3 [b1,b2] [c2,c3]@2 [c2,c3]@2 [c2,c3]@3 g2 [f#2,c#3]!5 ~]/3", // A B C F#5
R: "[g2,d3]@2 [e2,b2]@2 [f#2,c#3]!4", S: "[f#2,c#3] ~ [g2,d3]@2 [e2,b2]@2 [b1,f#2]!2",
T: "[b1,f#2]!3 ~ [c2,g2]@2 [a1,e2]@2", U: "[b1,f#2]!5 ~ [c2,g2]@2", V: "[a1,e2]@2 [g1,d2]@2 [f#2,c#3]!4",
W: "[f#2,c#3] ~ [g2,d3]@2 [e2,b2]@2 [f#2,c#3]!2", X: "[f#2,c#3]!3 ~ [g2,d3]@2 [e2,b2]@2", Y: "[a1,e2]@2 [b1,f#2]!5 ~",
Z: "[c2,g2]@2 [a1,e2]@2 [g1,d2]@2 [f#2,c#3]!2", AA: "[f#2,c#3]!5 ~ [g2,d3]@2", AB: "[e2,b2]@2 [d2,a2]!4 [d2,a2]@2",
AC: "[d2,a2]@2 [d2,a2]@2 [d2,a2]!4", AD: "[d2,a2]@2 [d2,a2]@2 [d2,a2]@2 [d2,a2]!2", AE: "[d2,a2]!3 ~ [d2,a2]!4",
AF: "[d2,a2] ~ [d2,a2]!5 ~", AG: "[d2,a2]!5 ~@3",
AH: "[~@3 [f#1,f#2]@3 [f#1,f#2]@2 [f#1,f#2]@3 [f#1,f#2]@2 [f#1,f#2]@3 ~@2 [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@3 ~@2 [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@3 ~@3 [f#1,f#2]@3 ~@2 [f#1,f#2]!2 ~@2]/2", // F#
AI: "~ [f#1,f#2]@2 [f#1,f#2]@3 [f#1,f#2]@3 ~@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@2 [f#1,f#2]@3", // F#
AJ: "~@2 [f#1,f#2]@3 ~@2 [f#1,f#2]@3 ~@2 [f#1,f#2]@2 [f#1,f#2]@2 ~@8", // F#
AK: "[f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@3 ~@4 [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@2 [f#1,f#2]@2 [f#1,f#2] [f#1,f#2]@2 [f#1,f#2]@2", // F#
AL: "[[f#1,f#2]!3 ~ [f#1,f#2] [a1,e2,a2]@30 [b1,f#2,b2]@30 ~ [f#2,c#3,f#3]@20 [e2,b2,e3]@10]/4", // F# A5 B5 F#5 E5
AM: "[[f#2,c#3]@3 [e2,b2]@2 [d2,a2]@5 [c#2,a2]@10 ~ [d2,a2]@2 c#2@3 b1@5 [a1,e2,a2]@20 ~@21]/3", // F#5 E5 D5 F#m D5 A5
AN: "~@9 c2@2 c2@3 c2@2 c2@3 c2@5", AO: "c2@5 c2@5 c2@2 c2@3 c2@3 c2@2 c2@4",
AP: "[~ c2@5 c2@5 c2@3 c2@2 c2@3 c2@2 c2@5 ~ c2@5 c2@5 c2@2 c2@3 c2@2 c2@3 c2@5 c2@5 c2@5 ~@10]/3",
})).s("gm_electric_bass_finger").gain(0.64).pan(0.6)
// drums · kick
const kick = s("bd").struct("<~@35 A@12 ~@55 B C D E F G H I J K ~@20>".pickRestart({
A: "~ x!2 ~", B: "~@4 x!2 ~@2", C: "~ x ~ x ~@9 x ~@2 x ~@7", D: "~@2 x ~@2 x ~@9 x ~ x ~@6",
E: "~@3 x ~@2 x ~@9 x ~@2 x ~@4", F: "~@2 x ~@2 x ~@9 x ~@2 x ~@5", G: "~@4 x ~ x ~@9 x ~@2 x ~@4",
H: "~@8 x ~ x ~@9 x ~@2 x", I: "~@9 x ~@2 x ~@9 x ~", J: "x ~@9 x ~@2 x ~@9 x", K: "x!3 ~@21",
})).gain(0.8)
// drums · snare
const snare = s("sd").struct(`<
A B C D E F G H I J K L M N O P Q R S T U V W T U S W X R S T U R X Y Z@12 AA@2 AB W T AC R W T AC R S AD U R S W AE
AF S AG ~@34 AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ Z BA ~@4 BB BC BD BE ~
>`.pickRestart({
A: "~@4 x!4", B: "x ~@5 x!7 ~@5 x ~@5", C: "x ~@2 x ~@2 x ~@5 x ~@5 x!6", D: "x ~ x ~ x!3 ~",
E: "x!7 ~@5 x ~@5 x ~@2 x ~@2", F: "x ~@5 x ~@5 x!7 ~@5", G: "x!7 ~ x!2 ~ x!2 ~ x!2 ~ x!7",
H: "x!7 ~@5 x ~ x!2 ~ x!2 ~ x!2 ~ x", I: "x!7 ~ x!2 ~ x!5 ~ x!2 ~@2 x ~@2",
J: "x ~ x!2 ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@5", K: "x!10 ~ x!2 ~@2 x ~@2 x ~@2 x ~@2",
L: "x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x!6", M: "x!5 ~ x!2", N: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!3",
O: "x!7 ~ x!2 ~ x!8 ~@5", P: "x ~@2 x!4 ~@2 x ~@2 x!7 ~@2 x ~@2", Q: "x!7 ~@2 x ~@2 x!7 ~@2 x ~@2", R: "x!5 ~ x ~",
S: "x ~ x!5 ~", T: "x ~ x ~ x ~ x!2", U: "x!3 ~ x ~ x ~", V: "x!4 ~ x!2 ~", W: "x ~ x ~ x!4", X: "x!4", Y: "~ x ~ x",
Z: "~@3 x", AA: "~ x!3", AB: "~@2 x!5 ~", AC: "x ~@2 x ~@2 x ~@5 x ~@5 x ~@2 x!3",
AD: "x ~@5 x ~@5 x ~@2 x!4 ~@2 x ~@2", AE: "x ~@5 x ~@2 x!4 ~@5 x ~@2 x ~@2", AF: "x!3 ~ x!4", AG: "x!5 ~@3",
AH: "~@5 x", AI: "~@8 x ~@12 x ~@2", AJ: "~@5 x ~@5 x", AK: "~ x ~@9 x ~@9 x ~@2", AL: "~@10 x ~@12 x",
AM: "~@11 x ~@2 x ~@9", AN: "~ x ~@3 x ~@2", AO: "~@4 x ~ x ~@10 x ~@6", AP: "~@5 x ~@12 x ~@5",
AQ: "~@7 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~", AR: "x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@4 x ~ x ~ x!2",
AS: "~@4 x ~ x ~ x!2 ~@5 x ~@4 x!2 ~@2", AT: "~ x ~ x ~@2 x ~@4 x ~ x!2 ~ x ~ x!2 ~ x ~@2",
AU: "~@2 x ~@4 x ~@4 x ~ x ~@9", AV: "x ~ x!2 ~@6 x ~ x ~ x!2 ~ x ~ x!2 ~ x ~", AW: "x!3 ~ x!2 ~ x ~@4 x ~@7 x ~@3",
AX: "~ x ~@4 x ~@4 x ~@4 x ~@4 x ~@2", AY: "x", AZ: "~@3 x ~@4", BA: "~@7 x ~@16",
BB: "~@9 x ~ x ~@2 x ~ x ~@2 x ~@4", BC: "x ~@4 x ~@4 x ~ x ~@2 x ~@2 x ~ x ~@3",
BD: "~ x ~@4 x ~@4 x ~@2 x ~ x ~@2 x ~ x ~@2", BE: "~@3 x ~@4 x ~@4 x ~ x ~@2 x ~@5",
})).gain(0.8)
// drums · low tom
const low_tom = s("lt").struct("<~@35 [~ x ~@2] ~@83 [~@23 x] [~ x ~@4] [~@5 x ~ x!2 ~@15] [~@5 x ~@18] ~@9>").gain(0.8)
// drums · hihat
const hihat = s("hh").struct("<~@102 A B C D E F G H I J ~@10 K ~@9>".pickRestart({
A: "~@12 x ~@2 x ~ x ~@2 x ~ x ~", B: "~ x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2",
C: "x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~", D: "~ x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2",
E: "x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x", F: "~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@2",
G: "x ~@2 x ~ x ~@2 x ~ x ~@2 x ~ x ~@4 x ~@3", H: "~ x ~@4 x ~@2 x ~@4 x ~@4 x ~@4",
I: "x ~@4 x ~@4 x ~@4 x ~@5 x ~@2", J: "~@2 x ~@4 x ~@16", K: "~@7 x ~@16",
})).gain(0.8)
// … 51 more lines
More by Rush
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.