0:00/0:00
// Heartbreaker — Grand Funk Railroad
// 140 bpm, 3/4, key B 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 (3/4 at bar 1, 4/4 at bar 248, 9/8 at bar 296, 4/4 at bar 298, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 4 "Guitar" Elec Gtr 2 -> overdriven guitar
// note: ch 5 "Guitar (dbl track)" named as a guitar, played on electric guitar clean (its harpsichord patch is not one)
// note: duplicate parts dropped: ch 3 "Vocal (dbl track)" synth choir (copy of ch 2 "Vocal" bandoneon); ch 4 "Guitar" overdriven guitar (copy of ch 5 "Guitar (dbl track)" electric guitar clean)
// note: Full arrangement: all 314 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/3)
// 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 · electric guitar clean · "Guitar (dbl track)"
const electric_guitar_clean = note(`<
~@2 A@2 B@2 C D C D E F E F G H G H I@2 J@2 K L K L M N M N O P O P I@2 Q@2 R S R S T U T U V W V W I@2 Q@2 C D C D E
F E F G H G H I@2 Q@2 C D C D E F E F G H G H I@2 J@2 K L K L M N M N O P O P I@2 Q@2 C D C D E F E F G H G H I@2 Q@2
C D C D E F E F G H G H I@2 J@2 K L K L M N M N O P O P I@2 Q@2 C D C D E F E F G H G H I@2 J@2 X@4 Y@4 Z@4 AA@4 AB@2
AC AD C D C D E F E F G H G H I@2 Q@2 C D C D E F E F G H G H I@2 J@2 AE@4 AF@4 AG@4 I@4 Q@3 AH AI AJ AK@2 AL@4 AM AN
~@38 AO@2 AP AQ AR@2 AS AT AU@2 AV AW AX AY@3 AZ@2 BA BB BC@3 BD BE@4
>`.pickRestart({
A: "[~@27 b3@5, c#3 c#3, ~@5 e3@16 e3@11, ~@11 b3@16 ~@5]/2",
B: "[~@27 e3@5, c#3, ~@5 e3@21 ~@6, ~@11 a#3@10 a#3@11, ~ c#4]/2",
C: "b2@4 [b2,f#3,b3,d4] ~@4 [b2,f#3,b3,d4] ~ [b2,f#3,b3,d4]@4 [b2,f#3,b3,d4]", // Bm
D: "d4 e4@4 [b2,f#3,b3,d4]@5 ~ [b2,f#3,b3]@5, [b2,f#3,b3]@5 ~@11", // Bm B5
E: "a2@4 [a2,e3,a3,c#4] ~@4 [a2,e3,a3,c#4] ~ [a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]", // A
F: "c#4 d4@4 [a2,e3,a3,c#4]@5 ~ [a2,e3,a3]@5, [a2,e3,a3]@5 ~@11", // A A5
G: "g2@4 [g2,d3,g3,b3] ~@4 [g2,d3,g3,b3] ~ [g2,d3,g3,b3]@4 [g2,d3,g3,b3]", // G
H: "b3 c4@4 [g2,d3,f3,b3]@5 ~ [g2,d3,g3]@5, [g2,d3,f3]@5 ~@11", // G7 G5 G7
I: "[f#2,c#3,e3,b3]@5 [f#2,c#3,e3,b3]@5 ~ [f#2,c#3,e3,b3]@5", J: "[f#2,c#3,e3,a#3]/2", K: "[b2,f#3,b3]",
L: "[d4,f#4,b4] ~@15", M: "[a2,e3,a3]", N: "[c#4,e4,a4] ~@15", O: "[g2,d3,g3]", P: "[b3,d4,g4] ~@15",
Q: "[f#2,c#3,e3,a#3]@5 [f#2,c#3,e3,a#3]@5 ~ [f#2,c#3,e3,a#3]@5", R: "~@11 b3@5, b2, ~@5 f#3@11",
S: "d4@2 e4@2 ~@7 f#3@5, ~@2 d4 ~@5, ~@5 b3@11", T: "~@11 a3@5, a2, ~@5 e3@11",
U: "c#4@2 d4@2 ~@7 e3@5, ~@2 c#4 ~@5, ~@5 a3@11", V: "~@11 g3@5, g2, ~@5 d3@11",
W: "b3@2 c4@2 ~@7 d3@5, ~@2 b3 ~@5, ~@5 g3@11",
X: "[~@61 d4@3, b4!2 b4!2 b4!2 b4!2, ~@3 f#4@8 f#4@8 f#4@8 f#4@8 f#4@8 f#4@8 f#4@8 f#4@5, ~@5 d4@8 d4@8 d4@8 d4@8 d4@8 d4@8 d4@8 ~@3]/4",
Y: "[~@61 c#4@3, a4!2 a4!2 a4!2 a4!2, ~@3 e4@8 e4@8 e4@8 e4@8 e4@8 e4@8 e4@8 e4@5, ~@5 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 ~@3]/4",
Z: "[~@61 b3@3, g4!2 g4!2 g4!2 g4!2, ~@3 d4@8 d4@8 d4@8 d4@8 d4@8 d4@8 d4@8 d4@5, ~@5 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 ~@3]/4",
AA: "[~@61 b3@3, f#4!2 f#4!2 f#4!2 f#4!2, ~@3 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@8 c#4@5, ~@5 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 b3@8 ~@3]/4",
AB: "[~@29 a#3@3, f#4!2 f#4!2, ~@3 c#4@8 c#4@8 c#4@8 c#4@5, ~@5 a#3@8 a#3@8 a#3@8 ~@3]/2", AC: "[a#3,c#4,f#4]",
AD: "[f#2,c#3,e3]@5 [f#2,c#3,e3]@5 ~ [f#2,c#3,e3]@5", // F#7
AE: "[b2,f#3,b3,d4]@3 [b2,f#3,b3,d4]@2 [b2,f#3,b3,d4]@3 [b2,f#3,b3,d4]@3 [b2,f#3,b3,d4]@2 [b2,f#3,b3,d4]@3", // Bm
AF: "[a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@3 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@3", // A
AG: "[g2,d3,g3,b3]@3 [g2,d3,g3,b3]@2 [g2,d3,g3,b3]@3 [g2,d3,g3,b3]@3 [g2,d3,g3,b3]@2 [g2,d3,g3,b3]@3", // G
AH: "[f#2,c#3,e3,a#3]", AI: "b3@2 c#4@2 ~ c#4@2 d4@2 e4@2 ~ e4@2 f#4@2, ~@4 d4@2 ~@5 d4@2 ~@3",
AJ: "e4@2 f#4@2 ~ f#4@11, ~@2 g4 ~@5", AK: "[a#4@11 b4@21]/2",
AL: "[b2,f#3,b3,d4,f#4,b4]!2 ~ [b2,f#3,b3,d4,f#4,b4]!3 ~ [b2,f#3,b3,d4,f#4,b4]!3 ~ [b2,f#3,b3,d4,f#4,b4]!3 ~ [b2,f#3,b3,d4,f#4,b4]", // Bm
AM: "[b2,f#3,b3,d4,f#4,b4]!3 ~ [b2,f#3,b3,d4,f#4,b4]!5 ~ [b2,f#3,b3,d4,f#4,b4]!5 ~", // Bm
AN: "[b2,f#3,b3,d4,f#4,b4]!5 ~ [b2,f#3,b3,d4,f#4,b4]!5 ~ [b2,f#3,b3,d4,f#4,b4] ~@3", // Bm
AO: "[~@6 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4]@2]/2", // Bm
AP: "~@2 [e3,b3,e4,g4]@2 ~ [e3,b3,e4,g4]@2 [e3,b3,e4,g4]@5 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2", // Em Bm
AQ: "~@3 [f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~", // Bm
AR: "[~@2 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [e3,b3,e4,g4]@2 [e3,b3,e4,g4]@2 ~ [e3,b3,e4,g4]@5 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@2]/2", // Bm Em Bm
AS: "~ [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4]@2 ~@3", // Bm
AT: "[e3,b3,e4,g4]@2 [e3,b3,e4,g4]@2 [e3,b3,e4,g4]@5 [f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4]@2 ~@2", // Em Bm
AU: "[[f#3,b3,d4,f#4]@2 ~ [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [f#3,b3,d4,f#4]@2 [f#3,b3,d4,f#4]@2 ~@3 [e3,b3,e4,g4]@2 [e3,b3,e4,g4]@2 ~ [e3,b3,e4,g4]@5]/2", // Bm Em
AV: "[b2,f#3,b3,d4,f#4,b4]@3 ~@6 [c#3,g#3,c#4,e4,g#4,c#5]@3 ~@4", // Bm C#m
AW: "~@2 [d3,a3,d4,f4,a4,d5]@3 ~@7 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]", // Dm Em
AX: "[e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2", // Em
AY: "[[e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5]]/3", // Em
AZ: "[[e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@2 [e3,b3,e4,g4,b4,e5] [e3,b3,e4,g4,b4,e5]@19 ~@7]/2", // Em
BA: "~@5 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]", // Bm
BB: "[b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2", // Bm
BC: "[[b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]]/3", // Bm
BD: "[b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2", // Bm
BE: "[[b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4] [b2,f#3,b3,d4,f#4,b4]@2 [b2,f#3,b3,d4,f#4,b4]@50 ~@5]/4", // Bm
})).s("gm_electric_guitar_clean").gain(0.48)
// chords · distortion guitar · "Guiter3"
const distortion_guitar = note("<~@247 A@8 B@7 C@5 D@7 E@5 F@8 ~@18 G H I J K@5>".pickRestart({
A: "[~@13 [b2,f#3]@38 [a2,e3]@39 [g2,d3]@38]/8", B: "[~ [f#2,c#3]@38 [b2,f#3]@39 [a2,e3]@34]/7",
C: "[~@4 [g2,d3]@39 [f#2,c#3]@37]/5", D: "[~ [b2,f#3]@39 [a2,e3]@38 [g2,d3]@34]/7",
E: "[~@5 [f#2,c#3]@38 [b2,f#3]@37]/5", F: "[~@2 [a2,e3]@38 [g2,d3]@39 [f#2,c#3]@39 ~@10]/8", G: "~@7 b3",
H: "~ c#4@3 ~ d4@3 c#4@3 d4@3 e4@2", I: "~ d4@3 c#4@3 d4@3 c#4@3 b3@3", J: "~ a3@3 f#3@3 e3@3 d3@3 c#3@3",
K: "[b2@15 ~]/5",
})).s("gm_distortion_guitar").gain(0.64).pan(0.4)
// bass · electric bass pick · "Bass"
const bass = note(`<
~@6 A@3 B C@3 D E@4 F@2 G@2 A H A I C I C J E J E ~ K@4 L M N O P Q R S T U T@2 K@3 V A@2 W X C@2 Y Z E@2 T AA K@2 AB
V A@2 W X C@2 Y Z E@2 T AA K@3 F A H A I C I C J E J E ~ K@3 V A@2 W X C@2 Y Z E@2 T AA K@2 AB V A@2 W X C@2 Y Z E@2 T
AA K@3 F A H A I C I C J E J E ~ K@3 V A@2 W X C@2 Y Z E@2 T AA K@3 F AC@2 AD@2 AE@2 AF@2 AG@2 AH@2 K@8 A@2 W X C@2 Y
Z E@2 T AA K@2 AB V A@2 W X C@2 Y Z E@2 T AA K@4 AI@4 AJ@4 AK@4 K@7 F ~@4 AL@2 AM@2 AN AO@2 AP@3 AQ AR AS AT@2 AU AV
AW@2 AX@5 AY@3 AZ@2 BA@3 BB BC@3 BD@4 BE BF@2 BG BH@2 BI BJ BK@2 BL BM BN@2 BO BP BQ BR@3 BS@2 BT BU BV@3 BW BX@4
>`.pickRestart({
A: "b1", B: "e2@5 d2@5 ~ b1@5", C: "a1", D: "d2@5 c#2@5 ~ a1@5", E: "g1", F: "f#1", G: "f#1/2", H: "~@15 f#1",
I: "~@15 e1", J: "~@15 g1", K: "f#1@5 f#1@5 ~ f#1@5", L: "b1@15 f#1", M: "f#2@5 e2@5 ~ d2@5", N: "b1@5 f#1@5 ~ b1@5",
O: "b2@5 f#2@5 ~ b2@5", P: "a1@5 a1@5 ~ a1@5", Q: "c#2@5 d2@5 ~ e2@5", R: "a1@5 e1@5 ~ a1@5",
S: "a1@4 a3 ~@4 a3 ~ a3@5", T: "g1@15 g1", U: "f#2@2 g2@2 ~ f#2@2 g2@2 g2@2 ~ g2@2 g2@2, ~@4 g2@2 ~@5 f#2@2 ~@3",
V: "f#2@3 f#1@2 f#2@3 f#1@3 f#2@2 f#1@3", W: "b1@15 b1", X: "b2@5 f#2@5 ~ b1@5", Y: "a1@15 a1",
Z: "g2@2 a2@2 ~ g2@2 a2@2 a2@2 ~ a2@2 a2@2, ~@4 a2@2 ~@5 g2@2 ~@3", AA: "g2@5 d2@5 ~ g1@5", AB: "f#2@5 f#2@5 ~ f#2@5",
AC: "b1/2", AD: "b2/2", AE: "a1/2", AF: "a2/2", AG: "g1/2", AH: "g2/2", AI: "b1@3 b1@2 b1@3 b1@3 b1@2 b1@3",
AJ: "a1@3 a1@2 a1@3 a1@3 a1@2 a1@3", AK: "g1@3 g1@2 g1@3 g1@3 g1@2 g1@3", AL: "b1!2 ~ b1!3 ~ b1!3 ~ b1!3 ~ b1",
AM: "b2!2 ~ b2!3 ~ b2!3 ~ b2!3 ~ b2", AN: "b2!3 ~ b2!5 ~ b2!5 ~", AO: "[b2!5 ~ b2!5 ~ b2 b1@7 b1@2 ~ b1@7 b1@2]/2",
AP: "[~@3 b1@2 ~@2 b1@2 ~ b1@2 f#1@2 ~ b1@4 a1@7 ~ a1@2 a1@7 a1@2 ~@3 a1@2 ~@3 a1@2]/3", AQ: "a1@2 ~ e1@2 a1@5 g1@6",
AR: "~ g1@2 ~ g1@7 g1@2 ~@3", AS: "g1@2 ~@2 g1@2 ~ g1@2 g1@2 ~ g1@2 g1@2",
AT: "[~ f#1@2 f#1@2 f#1@2 ~ f#1@2 f#1@2 ~ f#1@2 f#1@2 f#1@2 ~@3 f#2@2 ~@3 f#2@2 f#2@2 ~]/2",
AU: "e2@2 d2@2 ~ f#1@2 b1@7 b1@2", AV: "~ b1@7 b1@2 ~@3 b1@2 ~",
AW: "[~@2 b1@2 b1@2 f#1@2 ~ b1@5 a1@7 a1@2 a1@7 a1@2]/2",
AX: "[~@3 a1@2 ~@3 a1@2 ~ a1@2 e1@2 a1@5 g1@7 g1@2 ~ g1@7 g1@2 ~@3 g1@2 ~@3 g1@2 g1@2 g1@2 ~ g1@2 g1@2 ~ f#1@2 f#1@2 f#1@2 ~ f#1@2 f#1@2 ~ f#1@2 f#1@2 ~ f#1@2 ~@2]/5",
AY: "[f#2@2 ~@3 f#2@2 ~ f#2@2 e2@2 d2@2 ~ f#1@2 b1@7 b1@2 ~ b1@7 b1@2 ~@3 b1@2 ~@3 b1@2 b1@2]/3",
AZ: "[~ f#1@2 b1@5 a1@7 a1@2 a1@7 ~ a1@2 ~@2 a1@2 ~]/2",
BA: "[~@2 a1@2 ~ a1@2 e1@2 a1@5 g1@7 ~ g1@2 g1@7 g1@2 ~@3 g1@2 ~@3 g1@2 g1@2 ~ g1@2]/3",
BB: "g1@2 g1@2 ~ f#1@2 f#1@2 ~ f#1@2 f#1@2 f#1@2",
BC: "[~ f#1@2 f#1@2 ~ f#1@2 ~@3 f#2@2 ~@2 f#2@2 ~ f#2@2 e2@2 ~ d2@2 f#1@2 b1@7 ~ b1@2 b1@7 b1@2 ~@2]/3",
BD: "[~ b1@2 ~@3 b1@2 b1@2 ~ f#1@2 b1@5 a1@7 a1@2 ~ a1@7 a1@2 ~@3 a1@2 ~@2 a1@2 ~ a1@2 e1@2 ~ a1@4 g1@7 ~]/4",
BE: "g1@2 g1@7 g1@2 ~@3 g1@2",
BF: "[~@3 g1@2 g1@2 ~ g1@2 g1@2 ~ g1@2 f#1@2 f#1@2 ~ f#1@2 f#1@2 ~ f#1@2 f#1@2 f#1@2 ~]/2",
BG: "f#1@2 ~@3 f#2@2 ~@2 f#2@2 ~ f#2@2 e2@2",
BH: "[~ d2@2 f#1@2 ~ b1@2 b1@2 ~@3 b1@2 b1@2 ~@3 b1@2 b1@2 ~@3 b1@2 ~ b1@2]/2", BI: "~@2 e2@2 ~ e2@2 e2@5 b1@2 b1@2",
BJ: "~@3 b1@2 ~ b1@2 ~@3 b1@2 b1@2 ~", BK: "[~@2 b1@2 b1@2 ~@3 e2@2 e2@2 ~ e2@5 b1@2 b1@2 ~@3 b1@2 b1@2 ~@2]/2",
BL: "~ b1@2 b1@2 ~@3 b1@2 ~ b1@2 ~@3", BM: "e2@2 e2@2 e2@5 b1@2 ~ b1@2 ~@2",
BN: "[b1@2 ~ b1@2 ~@3 b1@2 b1@2 ~@3 b1@2 b1@2 ~@3 e2@2 e2@2 ~ e2@5]/2", BO: "b1@3 ~@6 c#2@3 ~@4",
BP: "~@2 d2@3 ~@7 e2 e2@2 e2", BQ: "e2@2 e2 e2@2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2",
BR: "[e2 e2@2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2 e2@2 e2@2 e2]/3",
BS: "[e2@2 e2 e2@2 e2 e2@22 ~@4]/2", BT: "~@5 b1@2 b1@2 b1 b1@2 b1 b1@2 b1",
BU: "b1@2 b1 b1@2 b1@2 b1 b1@2 b1 b1@2 b1 b1@2",
BV: "[b1 b1@2 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1@2 b1]/3",
BW: "b1@2 b1 b1@2 b1 b1@2 b1 b1@2 b1@2 b1 b1@2", BX: "[b1 b1@2 b1 b1@2 b1 b1@2 b1@50 ~@5]/4",
})).s("gm_electric_bass_pick").gain(0.64)
// drums · kick
const kick = s("bd").struct(`<
~@6 A@3 B A@3 C A@4 ~@4 D E D E D E D E D E D ~ F@3 G A E A E A E A C A E A E F@3 H I@15 J I@12 ~@4 D E D E D E D E D
E D ~ F@3 H I@15 J I@12 ~@4 D E D E D E D E D E D E F@2 K ~ A E A ~ A E A K A E A ~@17 F@6 L M I@15 J I@16 L@12 F@7 N
~@9 O P Q R S T U V W X Y Z AA AB AC AD AE AF AG ~ AH AI AJ AK AL AM AN AO AJ AP AQ AR AS AT AJ AU AV AW AX ~@17 AY
~@9 AZ
>`.pickRestart({
A: "x ~@14 x", B: "x ~@8 x ~@6", C: "~@4 x ~@4 x ~@4 x ~", D: "x", E: "~@15 x", F: "x ~@4 x ~@5 x ~@4", G: "x!2",
H: "~@3 x ~@4 x ~@7", I: "x!2 ~@2", J: "~@4 x ~@4 x ~@5 x", K: "~@3 x ~@4 x ~@4 x ~@2",
L: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", M: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", N: "x ~@10 x ~@4", O: "~@6 x!2 ~@5 x ~@2",
P: "~@7 x ~ x ~@6", Q: "x ~@6 x ~@4 x ~@3", R: "~@3 x ~@9 x ~ x", S: "~@7 x ~@6 x ~", T: "~@3 x ~@6 x ~@5",
U: "~@4 x ~ x ~@6 x ~@2", V: "~@4 x ~@4 x ~@6", W: "~ x ~@8 x ~@2 x ~@2", X: "~ x ~@2", Y: "~@7 x ~@8",
Z: "~ x ~ x ~@6 x ~@5", AA: "~ x ~ x ~@3 x", AB: "~@7 x ~@2 x ~@5", AC: "~ x ~@6 x ~@4 x ~@2", AD: "~@2 x ~@4 x",
AE: "x ~@6 x ~@7 x", AF: "~@3 x ~@7 x ~@4", AG: "~@4 x ~@2 x ~@6 x ~", AH: "~ x ~@9 x ~ x ~@2", AI: "~ x ~ x",
AJ: "~ x ~@6 x ~@7", AK: "~ x ~@2 x ~@6 x ~@4", AL: "~@2 x ~@4 x ~@6 x ~", AM: "~@4 x!2 ~@2",
AN: "~@2 x ~@6 x ~@4 x ~", AO: "~@5 x ~@8 x ~", AP: "~@11 x ~@4", AQ: "~@5 x ~ x ~@7 x", AR: "~@6 x ~@4 x ~@4",
AS: "~ x ~@4 x!2", AT: "~@5 x ~@6 x ~@3", AU: "~@2 x ~@2 x ~@6 x ~@3", AV: "~@3 x ~@4 x ~@6 x", AW: "~@9 x ~ x ~@4",
AX: "~ x ~@6", AY: "~@3 x", AZ: "~@9 x ~@6",
})).gain(0.6).pan(0.4)
// drums · rim
const rim = s("rim").struct("<[~@5 x ~@10] [x ~@10 x ~@4] ~@312>").gain(0.53).pan(0.4)
// drums · snare
const snare = s("sd").struct(`<
~@4 A B C@3 D C@3 E C@4 F@3 ~@2 G ~ G ~ G ~ G ~ G ~ G ~@3 H ~ G ~ G ~ G ~ E ~ G ~ G ~@3 F H@15 F H@12 F@3 ~@2 G ~ G ~
G ~ G ~ G ~ G ~@3 F H@15 F H@12 F@3 ~@2 G ~ G ~ G ~ G ~ G ~ G ~@2 F I ~ G ~ I ~ G ~ G ~ G ~ F@4 ~@13 F@6 B J H@15 F
H@28 ~@7 K ~@9 L M N L O N L O N P Q R S O R S T R S U V W X Y W X Y Z AA AB Z X AC Z AD AC AE AD AF AG AH AI AJ AK AL
AM AN AO AP W AQ ~@5 AR ~@9 AS
>`.pickRestart({
A: "~@5 x ~@2 x ~@2 x ~ x ~@2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", C: "~@5 x ~@10", D: "~@5 x ~ x ~@3 x ~@4",
E: "x!2 ~@6", F: "x ~@4 x ~@5 x ~@4", G: "x", H: "~@5 x ~@5 x ~@4", I: "x!3 ~@5", J: "x ~@2 x ~ x ~@2 x ~@2 x ~@4",
K: "~@5 x ~@2 x ~@7", L: "~ x", M: "~@2 x ~@8 x ~@4", N: "~@5 x ~@9 x", O: "~ x ~@4 x ~", P: "~@6 x ~@2 x!2 ~ x ~@3",
Q: "~@3 x", R: "~@6 x ~@8 x", S: "~@9 x ~@6", T: "~@3 x ~@8 x ~@3", U: "x ~@2 x!2 ~ x ~ x!5 ~ x!2", V: "x ~@2 x ~@4",
W: "x ~@8 x ~@6", X: "~@3 x ~@9 x ~@2", Y: "~@3 x ~@4", Z: "x ~@4 x ~@2", AA: "~@3 x ~@7 x ~ x!3", AB: "~ x ~@14",
AC: "~@7 x ~@8", AD: "~@4 x ~@8 x ~@2", AE: "~ x ~@8 x ~@5", AF: "~@5 x ~ x!2 ~@2 x ~@4", AG: "~@6 x ~ x ~@4 x ~ x",
AH: "~@4 x ~ x ~@4 x ~@2 x ~", AI: "~@2 x ~@2 x ~ x ~@4 x ~ x ~", AJ: "~@3 x ~@2 x ~@4 x ~ x ~@2",
AK: "~@2 x ~ x ~@4 x ~ x ~@2 x ~", AL: "~@3 x ~ x ~@4 x ~ x ~@3", AM: "~ x ~ x ~@4 x ~@2 x ~@4",
AN: "x ~ x ~ x ~@4 x ~@2 x ~@3", AO: "x ~@2 x ~@4 x ~ x ~@4 x", AP: "~ x ~@4 x ~ x ~@2 x ~@4", AQ: "~ x ~@6",
AR: "~@9 x ~ x ~@4", AS: "~@3 x!2 ~@3",
})).gain(0.6).pan(0.4)
// drums · low tom
const low_tom = s("lt").struct(`<
~@4 A B ~@7 C ~@4 D@3 ~@24 C ~@36 D@3 ~@45 D@3 ~@16 E ~@3 E ~@3 F ~@4 D@3 ~@17 D@2 B G ~@71 H ~@18 I ~@9 J K L M N O P
Q R S ~@18
>`.pickRestart({
A: "~@5 x ~@2 x ~@2 x ~ x ~@2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", C: "~@11 x!2 ~@3", D: "x ~@4 x ~@5 x ~@4",
E: "~@11 x!2 ~ x ~", F: "~@11 x ~@4", G: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", H: "~@2 x!2 ~ x!2 ~@9", I: "~@7 x!4 ~@5",
J: "~ x!4 ~ x ~ x ~@4 x ~ x", K: "~@4 x ~ x ~@4 x ~@2 x ~", L: "~@6 x!2", M: "~@3 x ~@2 x ~@4 x ~ x ~@2",
N: "~ x!2 ~@5", O: "~@3 x ~ x ~@4 x ~ x ~@3", P: "~ x ~ x ~@4 x ~@2 x ~@4", Q: "~@9 x ~@2 x ~@3",
R: "x ~@2 x ~@4 x ~ x ~@4 x", S: "~ x ~@14",
})).gain(0.53).pan(0.4)
// drums · hihat
const hihat = s("hh").struct(`<
~@22 A B C B C B C B C B C B ~@52 A B C B C B C B C B C B ~@36 C B C B C B C B C B C B ~@168
>`.pickRestart({
A: "~@5 x ~@10", B: "x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@10",
})).gain(0.53).pan(0.4)
// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A ~@31 A ~@103 B ~@3 B ~@3 C ~@98 D E ~@18 F ~@8 G H ~@27>".pickRestart({
A: "~@5 x ~ x ~@8", B: "~@5 x ~ x ~ x ~@6", C: "~@5 x!2 ~@9", D: "~@13 x ~ x", E: "x!2 ~@14", F: "~@2 x!4 ~@10",
G: "~@12 x!3 ~", H: "x",
})).gain(0.53).pan(0.4)
// drums · open hat
const open_hat = s("oh").struct(`<
~@22 A ~ A ~ A ~ A ~ A ~ A ~ B@4 ~@12 B@4 ~@32 A ~ A ~ A ~ A ~ A ~ A ~ B@4 ~@32 A ~ A ~ A ~ A ~ A ~ A ~ B@3 ~@98 C D E
F G E H G I J K L M G N M O N M ~ P Q F P R F S T U A E F G E H G I V W ~@28
>`.pickRestart({
A: "~@11 x ~@4", B: "x ~@4 x ~@5 x ~@4", C: "~@13 x ~@2", D: "~@2 x ~@4 x ~@3 x ~@4", E: "x ~@4 x ~@4 x ~@4 x",
F: "~@3 x ~@4 x ~@4 x ~@2", G: "~@2 x ~@4 x ~@4 x ~@3", H: "~@4 x ~@3 x ~@4 x ~@2", I: "~ x ~@3 x ~@4 x ~@4 x",
J: "~ x ~@2", K: "~@7 x ~@4 x ~@3", L: "~ x ~@4 x ~@3 x ~@4 x", M: "~@4 x ~@4 x ~@4 x ~", N: "~ x ~@4 x ~@4 x ~@3 x",
O: "~@3 x ~@3 x ~@4 x ~@3", P: "~ x ~@4 x ~@4 x ~@4", Q: "x ~@3 x ~@4 x ~@4 x ~", R: "x ~@4 x ~@3 x ~@4 x ~",
S: "~@2 x ~@3 x ~@4 x ~@4", T: "x ~@4 x ~@4 x ~@3 x ~", U: "~@3 x ~@4 x ~@7", V: "~@4 x ~@4 x ~@3 x ~@2",
W: "~ x ~@6",
// … 15 more lines
More by Grand Funk Railroad
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.