0:00/0:00
// Cherish — Kool & The Gang
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 121 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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.
// chords · acoustic guitar nylon · "Entmischt"
const acoustic_guitar_nylon = note("<A@2 B@5 C@4 ~@110>".pickRestart({
A: "[~@59 b4@5, ~@29 a2@25 e4@10, ~@29 c5@10 b4@5 e4@5 c5@15, ~@17 e3@15, ~@34 e4@5 c4@25]/2",
B: "[~@8 g4 ~@7 c4 ~@7 e4 f4 a3 ~@4 e4, e4@10 e3@15 c5@5 b4@5 a4@8 ~@2 a4@10 g4@5 c4@5 a4@5 c4@5 g4@9 ~ a4@10 g4@5 c4@5 a4@5 g4@5 f4@10 ~@10 e4@5 a3@5 f4@5 a3@10, ~@5 a2@38 ~@2 f2@39 ~ f2@40 d2@35, ~ c5@2 b4 e4@5 ~ c4 a3@7 c4 a3@6 ~@2 f3@5, ~@10 e4@5 c4@28 ~@7 c3@35 ~@5 c3@35 ~@5 a2@30]/5",
C: "[a3@5 f4@5 ~@30 c4@4 ~@66 g3@10 ~@8, ~@5 d2@20 f4@5 e4@5 d4@8 ~@17 a3@35 b3@5 a3@20 ~@8, ~@10 a2@34 ~ [f2,c4]@25 f4@5 a4@5 c5@40 ~@8, ~@10 a3@5 e4@5 a3@24 ~@11 g3@28 ~@7 d3@30 ~@8, ~@15 f3@29 ~@6 c3@33 ~@2 [g2,b4]@35 ~@8]/4", // F5 G
})).s("gm_acoustic_guitar_nylon").gain(0.56)
// chords · epiano1 · "Entmischt"
const epiano1 = note(`<
~@30 A B@2 C@4 D@4 E@2 F@7 G ~@19 H I@2 J@4 K@3 L M@2 N@4 O@3 P@2 Q@5 R S@8 T U@3 V@7 W@4
>`.pickRestart({
A: "~@29 [g4,b4,d5]@3", // G
B: "[~@2 [g4,c5,e5]@4 ~ [g4,c5,e5] ~@4 [g4,c5]@14 ~ [g4,b4,d5]@4 ~ [c5,e5]@23 ~@2 [g4,b4,d5]@7, ~@11 e5@13 ~@7 g4@24 ~@9]/2", // C C5 G C G
C: "[~@3 [g4,e5]@8 ~ [g4,c5,e5]@4 ~@2 [a4,c5,f5]@4 ~ [a4,c5,f5] ~@4 [a4,c5,f5]@13 ~@2 [g4,c5,e5]@5 [a4,c5,f5]@35 ~@10 [a4,c5]@4 ~ [a4,c5]@4 [a4,c5,f5]@2 ~@4 [a4,c5]@20, ~@2 c5@8 ~@83 f5@9 ~@5 f5@21]/4", // C F C F Am F Am
D: "[~@5 [a4,c5,f5]@4 [a4,c5,f5]@4 ~ [c5,f5] a4@2 ~@3 [a4,c5,f5]@23 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@4 e5 c5@2 ~@3 [g4,c5,e5]@23 ~@2 d5@4 ~ [g#4,d5,e5]@4 ~ [g#4,e5] ~@4 [g#4,d5,e5]@19 ~@6 [g4,b4,d5]@3, ~@55 g4 ~@28 g#4@3 ~@8 d5@2 ~@31]/4", // F F5 F G C E7 C#m E7 …
E: "[~@2 [g4,c5,e5]@4 ~ [g4,c5]@2 ~@2 [g4,c5,e5]@14 ~@2 d5@4 [g4,c5,e5]@24 ~@2 [g4,b4,d5]@7, ~@3 e5 ~@9 [g4,b4]@2 ~@17]/2", // C C5 C G
F: "[~@3 [g4,c5]@8 ~@2 [g4,c5,e5]@4 [a4,c5,f5]@4 ~@2 [a4,c5,f5]@2 ~@3 [a4,c5]@14 ~ [g4,c5]@4 [a4,c5,f5]@42 ~@3 [a4,c5]@5 ~ c5@4 ~ a4@2 ~@2 [a4,c5,f5]@24 ~@2 [a4,c5]@4 [a4,c5,f5]@4 ~@2 [a4,c5] ~@3 [a4,c5,f5]@23 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@4 ~ [g4,c5,e5]@2 ~@4 c5@23 ~ [g#4,d5]@4 ~@2 [g#4,d5,e5]@4 [d5,e5]@2, ~@2 e5@7 ~@18 f5@13 ~@2 e5@4 ~@46 f5@9 ~ f5@2 ~@28 f5@4 ~@6 f5@2 ~@80, ~@97 a4@4 ~@2 c5 ~@83 [g4,e5]@23 ~@12 g#4 ~]/7", // C5 C F Am C5 F Am F …
G: "~@4 e5@21 ~@7, ~@3 [g#4,d5]@21 ~@8", H: "~@29 b4@3, ~@7 [g4,d5]",
I: "[~ [g4,c5,e5]@4 ~ [g4,c5,e5] ~@4 [g4,c5,e5]@13 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@23 ~@2 [g4,b4,d5]@8]/2", // C G C G
J: "[~@2 [g4,c5,e5]@8 ~@2 [g4,c5,e5]@4 ~ [a4,c5,f5]@4 ~ [a4,c5] ~@4 [a4,c5,f5]@14 ~ [g4,c5,e5]@5 [a4,c5,f5]@35 ~@10 [a4,c5]@4 ~ [a4,c5]@4 ~ [a4,c5,f5]@2 ~@3 [a4,c5,f5]@21, ~@11 f5 ~@34 f5@4 ~@14]/4", // C F Am F C F Am F
K: "[~@4 [a4,c5,f5]@4 ~ [a4,c5,f5]@4 ~ [a4,c5,f5]@2 ~@3 [a4,c5,f5]@23 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@4 ~ [g4,c5,e5] ~@4 [g4,c5,e5]@23 ~@2 [g#4,d5]@4 ~ [g#4,d5,e5]@4 ~ [g#4,d5,e5] ~]/3", // F G C G#dim E7
L: "~@3 [g#4,d5,e5]@19 ~@6 [g4,b4,d5]@4", // E7 G
M: "[~ [g4,c5,e5]@4 ~ [g4,c5,e5]@2 ~@3 [g4,c5,e5]@13 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@23 ~@2 [g4,b4,d5]@8]/2", // C G C G
N: "[~@2 [g4,c5,e5]@8 ~@2 [g4,c5,e5]@4 ~ [a4,c5,f5]@4 ~ [a4,c5,f5]@2 ~@3 [a4,c5,f5]@14 ~ [g4,c5,e5]@4 ~ [a4,c5,f5]@42 ~@3 [a4,c5]@5 [a4,c5]@4 ~ [a4,c5,f5]@2 ~@3 [a4,c5,f5]@21, ~@92 f5@9 ~@27]/4", // C F C F Am F
O: "[~@4 [a4,c5,f5]@4 ~ [a4,c5,f5]@4 ~ [a4,f5]@2 ~@3 [a4,c5,f5]@23 ~@2 [g4,b4,d5]@4 ~ [g4,c5,e5]@4 ~ [g4,c5,e5]@2 ~@3 [g4,c5,e5]@23 ~@2 [g#4,d5]@4 ~ [g#4,d5,e5]@4 ~ [g#4,e5] ~, ~@14 c5 ~@79 d5@2]/3", // F Dm F G C G#dim E7 C#m
P: "[~@3 [g#4,d5,e5]@21 ~@34 b4@5 e4, ~@28 a2@25 e4@10 ~, ~@28 c5@10 b4@5 e4@5 c5@16, ~@33 e3@31, ~@33 e4@5 c4@26]/2", // E7
Q: "[~@39 g4@5 ~@35 c4@5 ~@35 e4@5 f4@5 a3@5 ~@20 e4@5 a3, ~@4 a2@20 c5@5 b4@5 a4@8 ~@2 a4@10 g4@5 c4@5 a4@5 c4@5 g4@9 ~ a4@10 g4@5 c4@5 a4@5 g4@5 f4@10 ~@10 e4@5 a3@5 f4@5 a3@10 ~, ~@4 c5@10 b4@5 e4@25 ~@5 c4@5 a3@35 c4@5 a3@30 ~@10 f3@26, ~@9 e3@33 ~@2 f2@39 ~ f2@40 d2@36, ~@9 e4@5 c4@28 ~@7 c3@35 ~@5 c3@35 ~@5 a2@31]/5",
R: "~@4 f4@5 ~@20 e4@3, ~ d2@5 f4@2, ~@9 a2@23, ~@9 a3@5 e4@5 a3@13, ~@7 f3@9",
S: "[~@7 c4@5 ~@35 c5@5 ~@40 g4@5 [g4,c5,e5]@5 [g4,c5,e5]@5 g4@15 g4@5 g4@25 g4@10 [g4,c5,e5]@10 c5@5 [a4,c5,f5]@5 [a4,c5,f5]@5 c5@15 c5@5 [a4,c5,f5]@45 [a4,c5,f5]@4, ~@2 d4@8 ~@2 [f2,c4]@25 f4@5 a4@8 ~@2 b4@15 a3@64 ~@56 [a4,f5]@20 ~@49, ~@17 c3@33 ~@2 g2@25 g3@64 ~@115, ~@22 g3@28 ~@7 d3@35 [b4,d5]@15 [c5,e5]@20 [c5,e5]@35 ~@10 [g4,e5]@30 [g4,e5]@54, ~@27 a3@35 b3@60 [b4,d5]@30 [b4,d5]@64 ~@40]/8", // C F F5 Dm Bm C Bm
T: "~ [a4,c5]@5 [a4,c5,f5]@5 [a4,c5,f5]@21", // Am F
U: "[~@4 [a4,c5,f5]@5 [a4,c5,f5]@5 [a4,c5,f5]@5 ~@25 g4@5 [g4,c5,e5]@5 [g4,c5,e5]@5 ~@25 [g#4,d5]@5 [g#4,d5,e5]@5 [g#4,d5,e5]@2, ~@19 [a4,f5]@40 e5@30 ~@7, ~@19 c5@30 ~@10 [g4,c5]@37, ~@11 b4@13, ~@11 d5@10 ~@3]/3", // F C G#dim E7 Dm C5
V: "[~@3 d5@25 g4@5 [g4,c5,e5]@5 [g4,c5,e5]@5 g4@15 g4@5 g4@25 g4@10 [g4,c5,e5]@10 c5@5 [a4,c5,f5]@5 [a4,c5,f5]@5 c5@15 c5@5 [a4,c5,f5]@45 [a4,c5]@5 [a4,c5]@5 [a4,c5,f5]@5 [a4,c5,f5]@21, ~@3 g#4@64 ~@41 [g4,e5]@30 [g4,e5]@64 ~@22, ~@3 e5@30 ~@10 [c5,e5]@20 [c5,e5]@35 ~@25 [a4,f5]@20 ~@81, ~@14 [b4,d5]@15 [b4,d5]@15 [b4,d5]@32 ~@18 f5@5 ~@13]/7", // C F Am F C Dm Bm
W: "[~@4 [a4,c5,f5]@5 [a4,c5,f5]@5 [a4,c5,f5]@5 ~@25 g4@5 [g4,c5,e5]@5 [g4,c5,e5]@5 ~@26 [g#4,d5]@4 [g#4,d5,e5]@5 ~ e5@4 [g#4,d5,e5]@21 ~@8, ~@19 [a4,f5]@41 e5@29 ~@39, ~@19 c5@30 ~@11 [g4,c5]@55 ~@13, ~@11 b4@16 ~@5, ~@44 d5@41 ~@9 [g#4,d5]@4 ~@30]/4", // F C G#dim E7 Dm C5 G#dim
})).s("gm_epiano1").gain(0.64)
// bass · acoustic bass · "Entmischt"
const bass = note(`<
A@5 B@8 C@8 D E F G H@2 I J K L ~@19 M@2 N@2 O P@2 Q R S T@2 U V W X@2 Y@2 Z AA ~@19 AB@2 AC AD AE AF@2 AG@2 AH AI
~@20
>`.pickRestart({
A: "[~@29 a2@79 ~ f2@51]/5", B: "[~@9 f2@9 ~ e2@10 d2@80 f2@40 g2@37 ~@3 a1@67]/8",
C: "[~@13 f1@80 a1@80 f1@80 d1@3]/8", D: "~@12 d1 ~@4 d1@15", E: "~@4 d1@12 ~@4 d1 ~@4 d1@7",
F: "~@3 d2@10 e1@12 ~@3 e1 ~@3", G: "~ e1@16 ~@4 e1@11", H: "[~@4 e1 ~@4 e1@18 ~@2 f1@11 ~@4 f1 ~@4 f1@15]/2",
I: "~@4 f1@12 ~@4 f1 ~@4 f1@7", J: "~@3 a1@9 ~ g1@11 ~@4 g1 ~@3", K: "g1@17 ~@4 g1@11", L: "~@4 g1 ~@4 g1@10 ~@13",
M: "[~@29 a1@12 ~@2 a1 ~@4 a1@16]/2", N: "[~@4 a1@13 ~@2 a1@2 ~@3 a1@14 ~@2 g1@4 f1@13 ~@2 f1 ~@4]/2",
O: "f1@15 ~@5 f1@12", P: "[~@3 f1@2 ~@3 f1@17 ~@3 a1@12 ~@3 a1 ~@4 a1@16]/2", Q: "~@4 a1@13 ~@2 a1 ~@4 a1@4 ~ b1@3",
R: "~@2 c2@5 g1@5 f1@12 ~@3 f1@2 ~@3", S: "f1@4 ~ f1@3",
T: "[~@3 f1@2 ~@3 f1@6 ~@7 f1@2 c2@5 d2@11 ~@4 d2@2 ~@3 d2@15 ~]/2", U: "~@4 d2@11 ~@4 d2@2 ~@3 d2@4 ~@4",
V: "c2@6 ~ a1@4 ~ e1@13 ~@2 e1@2 ~@3", W: "e1@16 ~@4 e1@11 ~",
X: "[~@3 e1@2 ~@3 e1@18 ~@2 f1@12 ~@3 f1@2 ~@3 f1@14 ~@2]/2",
Y: "[~@4 f1@13 ~@2 f1@2 ~@3 f1@12 ~@3 g1@2 ~ a1@2 g1@11 ~@4 g1 ~@4]/2", Z: "g1@4 ~ g1@3",
AA: "~@3 g1@2 ~@3 g1@6 ~@18", AB: "[~@28 a1@11 ~@4 a1 ~@4 a1@16]/2", AC: "~@4 a1@10 ~@5 a1 ~@4 a1@8",
AD: "~@2 g1@10 f1@10 ~@5 f1@2 ~@3", AE: "f1@16 ~@4 f1@11 ~",
AF: "[~@3 f1@2 ~@3 f1@9 ~ e1@10 d2@11 ~@4 d2@2 ~@3 d2@15 ~]/2",
AG: "[~@4 d2@11 ~@4 d2 ~@4 d2@19 ~ f1@11 ~@4 f1@2 ~@3]/2", AH: "f1@18 ~@2 g1@11 ~", AI: "~@3 g1 ~@4 g1@4 ~@20",
})).s("gm_acoustic_bass").gain(0.55)
// bass · electric bass finger · "Entmischt"
const bass_2 = note(`<
~@30 A@3 B@3 C D@3 E F@2 G@3 H@4 I ~@19 J K@2 L@3 M N@3 O P@2 Q@3 R@4 S ~@9 T K@2 L@3 M N@3 O P@2 U@3 V@4 ~
>`.pickRestart({
A: "[~@21 g1 ~@2 d2@2 e2@2 ~ g1@5 a1@4 ~ a1 ~@4 a1@15 g1@4 a1@25 ~ g1@7]/3",
B: "[~@3 a1@9 c2@5 ~ d2@4 ~ d2 ~@4 d2@14 ~ c2@4 ~ d2@24 c2@10 ~ d2@9 ~ g1@3]/3", C: "~@2 g1@4 ~ g1 ~@4 g1@20",
D: "[~@5 g1@4 g1@4 ~@2 g1 ~@4 g1@22 ~@3 c2@4 ~ c2@4 ~ c2 ~@4 c2@18 ~@2 d2@2 e2@2 ~ e1@4 ~ e1@4 e1@2]/3",
E: "~@4 e1@6 ~ e1 ~ e2@2 ~ e1 ~ d2@2 ~ e2@2 e1@6 g1@3", F: "[~@2 a1@4 a1 ~@4 a1@14 ~@2 g1@4 a1@23 ~@3 g1@7]/2",
G: "[~@2 a1@10 ~ c2@4 d2@4 ~@2 d2 ~@4 d2@13 ~@2 c2@4 d2@23 ~@2 c2@9 ~ d2@9 ~ g1@4]/3",
H: "[~ g1@2 ~@3 g1 ~@4 g1@11 ~@4 a2@4 ~ g2@8 ~@2 e2@4 ~@2 b1 ~@3 g1@22 ~@3 c2@4 ~ c2@4 ~ c2 ~@4 c2@19 ~ d2@2 ~ e2@2 e1@4 ~@2 e1@4 e1 ~, ~@11 f1 ~@14 g#2 ~@101]/4",
I: "~@3 e1@6 ~@2 e1@2 e2@2 ~ e1@2 d2@3 e2@2 e1@5 ~@4", J: "~@18 d2@2 ~ e2@2 g1@4 ~ g1@4",
K: "[~ a1@4 ~ a1 ~@4 a1@15 g1@4 ~ a1@25 g1@8]/2",
L: "[~@2 a1@9 ~ c2@5 d2@4 ~ d2 ~@4 d2@14 ~ c2@4 ~ d2@24 ~ c2@10 d2@9 ~ g1@4]/3", M: "~ g1@4 ~ g1 ~@4 g1@21",
N: "[~@4 g1@4 ~ g1@4 ~ g1 ~@4 g1@22 ~@3 c2@4 ~ c2@4 ~ c2 ~@4 c2@18 ~@2 d2@2 ~ e2@2 e1@4 ~ e1@4 ~ e1 ~]/3",
O: "~@3 e1@6 ~@2 e1 ~ e2@2 ~ e1 ~ d2@2 ~ e2@2 e1@5 g1@4", P: "[~ a1@5 a1 ~@4 a1@14 ~ g1@5 a1@23 ~@2 g1@8]/2",
Q: "[~@2 a1@10 c2@4 ~ d2@4 ~ d2@2 ~@3 d2@14 ~ c2@4 ~ d2@23 ~@2 c2@9 ~ d2@9 ~ g1@4]/3",
R: "[~ g1@2 ~@3 g1 ~@4 g1@11 ~@4 a2@4 ~ g2@8 ~@2 e2@4 ~ b1 ~@4 g1@22 ~@3 c2@4 ~ c2@4 ~ c2 ~@4 c2@19 ~ d2@2 ~ e2@2 e1@4 ~ e1@4 ~ e1 ~, ~@11 f1 ~@14 g#2 ~@101]/4",
S: "~@3 e1@6 ~@2 e1@2 e2@2 ~ e1@2 d2@2 ~ e2@2 e1@5 ~@4", T: "~@13 e2 ~ d2 ~@2 f2@2 g2@2 ~ f2 ~ g1@2 ~ g1@4",
U: "[~@2 a1@10 c2@4 ~ d2@4 ~ d2 ~@4 d2@13 ~@2 c2@4 ~ d2@23 ~@2 c2@9 ~ d2@9 ~ g1@4]/3",
V: "[~ g1@3 ~@2 g1@2 ~@3 g1@11 ~@4 a2@4 ~ g2@8 ~@2 e2@3 ~@2 b1 ~@4 g1@22 ~@3 c2@4 ~ c2@5 c2 ~@5 c2@19 d2@2 ~ e2@2 e1@4 ~ e1@3 ~@3 e1, ~@11 f1 ~@14 g#2 ~@101]/4",
})).s("gm_electric_bass_finger").gain(0.55)
// other · pad poly · "Entmischt"
const pad_poly = note("<~@32 A@6 ~@4 B C@5 ~@24 D E@5 ~@4 F G@5 ~@14 F H@5 ~@4 F I@5 ~@3>".pickRestart({
A: "[~@5 g4@9 ~ a4@9 ~ b4@10 c5@9 ~ a4@48 ~ b4@9 ~ c5@9 ~@2 f5@9 ~ c5@39 ~@28, ~@5 f#4 ~@186]/6",
B: "~@4 f#4 g4@9 ~ a4@9 b4@8", C: "[~@2 c5@9 ~ a4@48 ~@2 b4@9 ~ c5@9 ~ f5@9 ~ c5@41 ~@27]/5",
D: "~@4 f#4 g4@9 a4@9 ~ b4@8", E: "[~@3 c5@9 ~ a4@48 ~ b4@9 ~ c5@9 ~ f5@9 ~@2 c5@39 ~@28]/5",
F: "~@4 g4@9 ~ a4@9 ~ b4@8, ~@4 f#4 ~@27", G: "[~@2 c5@9 ~ a4@48 ~@2 b4@9 ~ c5@9 ~ f5@9 ~ c5@40 ~@28]/5",
H: "[~@2 c5@9 ~ a4@48 ~@2 b4@9 ~ c5@9 ~ f5@9 ~ c5@39 ~@29]/5",
I: "[~@2 c5@9 ~ a4@49 b4@9 ~@2 c5@9 ~ f5@9 ~ c5@41 ~@27]/5",
})).s("gm_pad_poly").gain(0.62).pan(0.2)
// chords · pad warm · "Entmischt"
const pad_warm = note("<A@8 B@3 ~@79 C@8 D@3 ~@20>".pickRestart({
A: "[~@89 g4@17 f2@80 d4@40 c4@30, ~@29 a3@227, ~@29 c4@159 ~@68, ~@29 a2@79 ~@78 [d2,f4]@70, ~@29 e4@63 ~@14 e4@78 ~@72]/8", // Dm
B: "[~@5 f2@20 [g2,g3,b3,d4]@21 ~@2, ~@10 f3@37 ~@49]/3", // G
C: "[~@88 g4@18 e4@78 ~ d4@40 c4@31, ~@7 a3@57, ~@28 c4@159 ~@69, ~@28 a2@79 ~@78 [d2,f4]@71, ~@28 e4@63 ~@15 f2@82 ~@68]/8", // Dm
D: "[~@10 f2@39 ~ [b3,d4]@42 ~@4, ~@10 f3@37 ~@2 [g2,g3]@43 ~@4]/3", // Bm G
})).s("gm_pad_warm").gain(0.37).pan(0.7)
// chords · epiano2 · "Entmischt"
const epiano2 = note("<~@10 A@7 B C@7 D@2 E F@8 ~@14 G@6 H@7 I@8 ~@50>".pickRestart({
A: "[~@94 e3@13 ~@26 g4@12 ~@74 e3@5, ~@29 a2@38 ~@2 a2@38 ~@11 f4@28 ~@3 e4@14 g4 c5@60, ~@34 e3@29 e3@10 ~ e3@9 c5@40 c5@23 ~@3 c5@5 c4@20 a4@13 ~@6 e3@10 e4@21, ~@39 c4@42 c4@26 ~ f3@16 a4@22 ~@3 a4@10 f4@28 ~ a2@36, ~@44 g4@70 c4@32 ~@2 f3@35 e4@15 c4@26]/7",
B: "~@6 [b3,b4]@6 [c4,e4,c5]@7 ~ [d4,b4]@5 [b3,d4,g4,b4]@7, ~@5 d4@5 ~@9 b3@4 ~@9, ~@6 g4@19 ~@7", // B C G
C: "[~@68 f4@10 ~@5 a3@5 a4@3 g4@2 ~@35 a3@5 ~@25 a4@14 ~@25 b4@10 b3@5 ~ [d4,b4]@7 [c4,a4]@4, c5@20 ~@3 a3@29 ~ f2@36 ~@19 f4@35 c4@29 e3@52, c4@11 ~ f2@28 a4@18 c3@31 ~@4 d3@38 ~@2 d3@40 ~@14 g4@20 ~@17, ~ e4@16 c3@25 f4@21 a3@15 g4@8 ~@12 a3@20 a4@30 f4@25 ~@10 d4@26 ~@15, ~@28 [g4,c5]@37 ~@3 c5@18 ~@2 c5@5 ~@10 c4@35 a3@35 ~@5 b3@28 ~@18]/7", // G F C5
D: "[~@4 g4@25 [f4,a4]@11 ~@14 c5@10, ~@3 b3@25 ~ [f3,c4]@35, ~@53 g4@10 ~]/2", // F F5
E: "a4@4 ~@15 f4@11 a4@2, ~@4 f4@9 ~@19, ~@5 f3@27, ~@5 c4@11",
F: "[~@8 c4@2 ~@3 f4@9 ~@15 a4@15 ~@6 f4 ~@9 [f4,a4,c5]@3 ~@7 [g4,b4,d5]@12 ~@166, ~@12 c4@9 ~ c4@31 ~@203, ~@13 g3@32 ~@7 g3@204, ~@13 a4@17 ~@226, ~@27 f4@26 ~@203]/8", // F G
G: "[~@43 c5@6 ~@49 e4@8 ~@73 c4@9 ~ a3@3, ~@29 [a3,b4]@34 e4@5 a3@25 e5@13 f4@2 c5@20 g4@10 c5@49 ~@5, ~@29 e5@20 ~@10 e5@24 b4@24 g4@11 c4@35 c4@20 f4@14 ~@5, ~@29 c5@10 a4@10 [a4,c5,e5]@10 c5@19 a4@29 a4@16 f4@10 a4@9 f4@16 ~ f4@4 g4@24 ~@5, ~@29 a4@4 e4@20 e4@6 a4@14 e4@15 c5@19 ~ f3@38 ~@2 f3@39 ~@5]/6", // Asus2 Am
H: "[~@27 e4@4 ~@31 e4@10 ~@9 c4@4 ~@61 c5@10 ~@30 a3@10 ~@25 a4@3, ~@2 e4@25 ~@4 e4@5 a3@36 c5@49 c4@36 d3@38 ~ d3@28, ~@7 g4@44 c5@10 g4@13 ~ f3@33 a4@19 c5@4 g4@26 a4@14 d4@10 a4@30 [d4,f4]@13, ~@12 a4@34 e5@29 g4 f4@9 c4@26 f4@5 f3@25 a4@16 c5@64 ~@3, ~@21 c5@20 e4@15 a4@18 a4@17 f4@10 g4@25 f4@30 ~ f4@45 a3@22]/7", // Dm
I: "[~@3 d4@9 ~@35 g4@5 ~@8 [c4,a4]@6 ~ b3@10 ~@10 d4@6 ~@74 f4@4 ~@26 d4@6 d4@4 d4@5 ~@25 d5@15 ~@4, ~@2 c5@10 ~ [e3,d4]@39 ~ e3@40 f3@38 ~ f3@10 [a4,c5]@28 ~@17 c5@64 ~@5, ~@13 b4@24 d5@15 ~@55 g4@63 ~@2 [f4,a4,c5]@15 a4@35 f4@29 ~@5, ~@13 g4@14 g4@15 b4@10 ~@15 g4@25 ~@10 f4@60 c4@11 ~@9 d4@5 f4@30 d4@34 ~@5, ~@22 b3@29 ~ [d4,b4]@7 ~@8 c4 ~@14 b3@10 ~@5 c4@21 a4@19 c4@16 f3@18 ~ g3@55 a4@25 ~@4]/8", // F E7 Am F G
})).s("gm_epiano2").gain(0.37).pan(0.7)
// chords · string ensemble 1 · "Entmischt"
const string_ensemble_1 = note(`<
~@5 A@6 ~@19 B C@2 D@3 E F@3 G@2 H I@3 J K@3 L ~@19 M N@2 O@3 P Q@3 R@3 S@3 T U@3 V ~@4 W@6 X@2 Y@3 Z AA@3 AB@3 AC@3
AD AE@3 AF
>`.pickRestart({
A: "[~@5 c6@69 d6@20 ~@2]/6", B: "~@29 [b4,d5,g5]@3",
C: "[~@2 [c5,g5]@3 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@13 ~@3 [d5,g5]@4 ~ g5@22 ~@2 [b4,d5,g5]@8, ~ e5@4 ~@21 b4@4 ~ [c5,e5]@23 ~@10]/2", // C5 C G5 G C
D: "[~@3 e5@5 ~@5 [c5,e5,g5]@4 [c5,f5,a5]@4 ~@2 [c5,f5,a5]@2 ~@3 f5@13 ~ [c5,e5,g5]@4 ~@2 a5@22 ~@2 [c5,e5,g5]@9 ~ [c5,f5,a5]@9 ~@2 a5@3, ~@2 [c5,g5]@7 ~@18 [c5,a5]@13 ~@7 [c5,f5]@24 ~@21 [c5,f5]@4]/3", // C F C F C5 F F5
E: "~ [c5,f5,a5]@2 ~@3 [c5,f5,a5]@2 ~@3 [c5,f5,a5]@21", // F
F: "[~@5 a5@3 ~ [f5,a5]@4 ~ [c5,f5,a5]@2 ~@3 [c5,f5,a5]@21 ~@5 d5@4 [c5,e5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@18 ~@7 [g#5,d6]@4 ~ [g#5,d6,e6]@2 ~@3 [d6,e6]@2, ~@4 c5@8 ~@32 b4@3 ~@49, ~@4 f5@4 ~@36 g5@9 ~@41 g#5 ~]/3", // F C G#dim E7 Dsus2
G: "[~@3 [g#5,d6,e6]@16 ~@9 [b4,d5]@4 ~ [c5,e5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@13 ~@3 [b4,d5,g5]@4 ~, ~@28 g5@9 ~@27]/2", // E7 Bm C G
H: "[c5,e5,g5]@11 ~ [b4,d5,g5]@4", // C G
I: "[~@2 [c5,e5,g5]@6 ~@4 [c5,e5,g5]@4 ~@2 a5@3 ~@2 [c5,f5,a5]@2 ~@3 a5@12 ~@3 [e5,g5]@4 ~ [c5,f5,a5]@24 ~ [c5,e5]@8 ~ [c5,f5,a5]@9 ~ [c5,f5,a5]@4, ~@17 [c5,f5]@4 ~@6 [c5,f5]@14 ~ c5@4 ~@26 g5@9 ~@15]/3", // C F Em F C F F5
J: "~@2 [f5,a5]@2 ~@3 [c5,f5,a5]@2 ~@3 f5@20, ~ c5@3 ~@7 [c5,a5]@21", // F
K: "[~@5 a5@4 ~ [f5,a5]@2 ~@3 a5@2 ~@3 [c5,f5]@23 ~@2 [b4,d5]@4 ~ [c5,e5]@2 ~@2 [c5,g5]@2 ~@3 [c5,e5,g5]@17 ~@8 [g#5,d6]@4 ~ [g#5,d6,e6]@2 ~@3 [d6,e6]@2, ~@4 [c5,f5]@4 ~ c5@2 ~@3 [c5,f5]@2 ~@4 a5@20 ~@5 g5@5 ~@4 e5 ~@39 g#5 ~]/3", // F F5 Bm C C5 C G#dim E7 …
L: "~ [g#5,e6]@4 ~@3, ~@3 d6@16 ~@13", M: "~@28 [d4,g4] g5@3, ~@7 [b4,d5]",
N: "[~ [c5,e5,g5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@13 ~@2 [b4,d5,g5]@4 ~ [c5,e5,g5]@23 ~@2 [b4,d5,g5]@8]/2", // C G C G
O: "[~@2 [c5,e5,g5]@7 ~@4 [c5,e5,g5]@3 ~ [c5,f5,a5]@4 ~@2 [f5,a5] ~@3 [c5,f5,a5]@13 ~@2 [c5,e5,g5]@4 ~ [c5,f5,a5]@23 ~@2 [c5,e5,g5]@9 ~ [c5,f5]@9 ~ [c5,f5,a5]@4, ~@22 c5@2 ~@57 a5@9 ~@6]/3", // C F C F C F5 F
P: "~ [c5,f5,a5]@3 ~@2 [c5,f5,a5]@2 ~@3 [c5,f5,a5]@21", // F
Q: "[~@4 [f5,a5]@4 ~ [f5,a5]@4 ~ [c5,f5,a5]@2 ~@3 [c5,f5,a5]@21 ~@4 [b4,d5]@4 ~ [c5,e5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@18 ~@7 g#5@4 ~ e6@2 ~@3 e6@2, ~@4 c5@8 ~@32 g5@9 ~@30 d6@4 ~ d6@2 ~@3 d6@2 ~, ~@89 g#5 ~@4 g#5 ~]/3", // F Bm C
R: "[~@3 [g#5,d6,e6]@16 ~@9 [b4,d5]@4 ~ [c5,e5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@14 ~@2 [d5,g5]@4 ~ [c5,e5]@22 ~@2 [b4,d5,g5]@8, ~@28 g5@9 ~@21 b4@3 ~@2 g5@22 ~@11]/3", // E7 Bm C G5 C G
S: "[~@2 [c5,e5,g5]@6 ~@4 [c5,e5,g5]@4 ~ [c5,f5,a5]@4 ~ [c5,f5,a5]@2 ~@3 [c5,f5,a5]@14 ~ [c5,e5,g5]@4 ~ [c5,f5,a5]@24 ~ [c5,e5,g5]@9 ~ [c5,f5,a5]@9 ~ [c5,f5,a5]@4]/3", // C F C F C F
T: "~ [c5,f5,a5]@3 ~@3 a5 ~@3 [c5,f5,a5]@21, ~@3 [c5,f5] ~@12", // F F5
U: "[~@4 [c5,f5,a5]@4 ~ [c5,f5,a5]@3 ~@2 [c5,f5,a5]@2 ~@3 [c5,f5,a5]@23 ~@2 [b4,d5]@4 ~ [c5,e5]@2 ~@3 [e5,g5] ~@4 [c5,e5,g5]@17 ~@8 [g#5,d6]@4 ~ [g#5,d6,e6]@2 ~@3 [d6,e6]@2, ~@44 g5@5 ~@5 c5@2 ~@38 g#5 ~]/3", // F Bm C Em C G#dim E7 Dsus2
V: "~ g#5@4 ~@3, ~@3 [d6,e6]@17 ~@12", W: "[~@9 c6@139 d6@40 [b4,d5,g5]@4]/6",
X: "[~ [c5,e5,g5]@4 ~ [e5,g5]@2 ~@3 [c5,e5,g5]@13 ~@2 [b4,d5,g5]@4 ~ [c5,e5,g5]@23 ~@2 [b4,d5,g5]@8, ~@5 c5@2 ~@57]/2", // C Em C G C G
Y: "[~@2 [c5,e5,g5]@7 ~@3 [c5,e5,g5]@3 ~@2 [c5,f5,a5]@4 ~ [f5,a5] ~@4 [c5,f5,a5]@13 ~@2 [e5,g5]@4 ~ [c5,f5,a5]@24 ~ [c5,g5]@9 ~ f5@9 ~ [c5,f5,a5]@4, ~@22 c5@2 ~@17 c5@4 ~@26 e5@9 ~ [c5,a5]@9 ~@6]/3", // C F Em F C5 F
Z: "~ [c5,f5,a5]@3 ~@2 [f5,a5]@2 ~@3 [c5,f5,a5]@21, ~@5 c5@2 ~@25", // F
AA: "[~@4 [f5,a5]@4 ~ [f5,a5]@3 ~ [c5,f5,a5]@2 ~@4 f5@21 ~@4 [b4,d5]@4 ~ [c5,e5]@4 ~ [e5,g5]@2 ~@3 [c5,e5,g5]@18 ~@6 [g#5,d6]@4 ~@2 g#5 ~@4 g#5 ~, ~@4 c5@8 ~@6 [c5,a5]@21 ~@5 g5@9 c5@2 ~@33 [d6,e6]@2 ~@3 [d6,e6]@2 ~]/3", // F Bm C Em C G#dim F Dsus2
AB: "[~@3 [g#5,e6]@16 ~@9 d5@4 ~ [c5,e5]@4 ~ [c5,e5,g5]@2 ~@3 [c5,e5,g5]@13 ~@3 d5@3 ~ [c5,e5,g5]@22 ~@3 [b4,d5,g5]@8, ~@2 d6@16 ~@9 b4@4 ~@27 [b4,g5]@3 ~@35, ~@28 g5@9 ~@59]/3", // C#m C G Em
AC: "[~@2 [c5,e5]@6 ~@4 [c5,e5,g5]@4 ~ [c5,f5,a5]@4 ~ [c5,f5,a5]@2 ~@3 [c5,f5,a5]@13 ~@2 [c5,e5,g5]@4 ~ [c5,f5,a5]@24 ~ [c5,e5,g5]@9 ~ [c5,f5,a5]@9 ~ [c5,f5,a5]@4, ~ g5@6 ~@89]/3", // C F C F C F
AD: "~ [c5,f5,a5]@3 ~@2 [c5,f5,a5]@3 ~@3 f5@20, ~@11 [c5,a5]@21", // F
AE: "[~@4 [c5,f5,a5]@5 [c5,f5,a5]@3 ~@2 [c5,f5,a5]@3 ~@2 [c5,f5,a5]@23 ~@3 d5@3 ~ [c5,e5]@3 ~@2 [c5,g5]@2 ~@4 e5@17 ~@8 g#5@3 ~ e6 [g#5,d6] ~@3 e6@2, ~@44 b4@3 ~@12 [c5,g5]@16 ~@19 g#5 ~, ~@45 g5@7 ~@2 e5 ~@29 d6@3 ~@6 d6@2 ~]/3", // F C C5 G#dim C5
AF: "~@3 [g#5,d6,e6]@16 ~@13", // E7
})).s("gm_string_ensemble_1").gain(0.37).pan(0.7)
// chords · string ensemble 2 · "Entmischt"
const string_ensemble_2 = note("<~@23 A@8 ~@8 B C ~@8 D E@3 F@2 G@8 H@8 ~@8 I J ~@8 K L ~@18 K J ~@10>".pickRestart({
A: "[~@13 [d4,g4]@40 d5@7 [a4,c5]@8 b4@25 c4@79 ~ c5@60 g4@20 ~@3, ~@93 a4@141 ~@22, ~@173 b4 ~@82]/8", // G5 Am
B: "~@21 [g#4,d5]@4 ~ [g#4,d5,e5]@4 ~ [g#4,d5,e5]", C: "~@2 [g#4,d5,e5]@11 ~@3",
D: "~@20 [g#4,d5]@4 ~@2 [g#4,d5,e5]@4 [g#4,d5] e5", // G#dim E7 G#dim
E: "[~@4 e5@19 ~@45 a4@20 e4@8, ~@3 [g#4,d5]@19 ~@7 c4@67, ~@29 e4@58 ~@9]/3", F: "[~@3 [a3,c4,e4]@13]/2",
G: "[~@28 c4@40 b3@20 ~@20 f3@39 ~@2 e4@39 [a3,c4,f4]@68, ~@14 a3@79 ~@35, ~@14 e4@41 ~@73, ~@88 c4@99 ~@69]/8", // F
H: "[~@12 [b3,g4]@75 ~@5 [a3,c4,f4]@80 ~ f3@37 ~@2 [g3,b3,d4]@40 ~@4, ~@12 d4@79 ~@81 [a3,c4]@41 ~@43]/8", // Em F G Am
I: "~@20 [g#4,d5]@4 ~ [g#4,d5,e5]@3 ~@2 [g#4,d5,e5] ~", J: "~@3 [g#4,d5,e5]@22 ~@7",
K: "~@20 [g#4,d5]@4 ~ [g#4,d5,e5]@4 ~ [g#4,d5,e5] ~", L: "~@3 [g#4,d5,e5]@19 ~@10",
})).s("gm_string_ensemble_2").gain(0.32).pan(0.7)
// chords · string ensemble 2 · "Entmischt" · soft notes
const string_ensemble_2_soft = note("<~@10 A@8 B@7 C@6 ~@19 D@4 ~@67>".pickRestart({
A: "[~@29 [b3,c4,e4]@76 ~@4 d4@80 [b3,e4]@67, ~@29 a3@227, ~@109 c4@147, ~@109 f4@76 ~@71]/8", // Cmaj7 E5
B: "[~@13 [d4,f4]@80 [f4,a4]@80 b4@48 ~@3, ~@13 c4@157 ~@54]/7", C: "[~@4 g4@21 ~@4 f4@137 ~@3 [b4,d5]@20 ~@3]/6",
D: "[~@29 a3@78 ~@21]/4",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.7)
// drums · kick
const kick = s("bd").struct(`<
~@20 A B C D E F B C D G H B I J K L M N D G O M P D K Q M P R K L S P T U V S P T U V W P T U V W P T U L S P X K Y S
P X K Y S P X K Y S P X K Y S P X K Y S P X K Z S P X K Y S P X K Y S P X K Y S P J G ~
>`.pickRestart({
A: "~@29 x ~@2", B: "~@12 x ~@4 x ~@14", C: "~@5 x ~@14 x ~@4 x ~@6", D: "~@13 x ~@14 x ~@3", E: "~ x ~@19 x ~@10",
F: "~@4 x ~@4 x ~@19 x ~@2", G: "x ~@20 x ~@10", H: "~@4 x ~@4 x ~@9 x ~@9 x ~@2", I: "~@4 x ~@14 x ~@5 x ~@6",
J: "~@3 x ~@3 x", K: "x ~@4 x ~@2", L: "~@3 x ~@4 x ~@20 x ~@2", M: "~@3 x!2 ~@3", N: "~@5 x ~@14 x ~@3 x ~@7",
O: "~@4 x ~@3 x ~@20 x ~@2", P: "~@4 x ~@14 x ~@4 x ~@7", Q: "~@3 x ~@5 x ~@18 x ~@3", R: "~@13 x ~@13 x ~@4",
S: "~@11 x ~@4 x ~@15", T: "~@7 x ~@4 x ~@14 x ~@4", U: "x ~@14 x ~@4 x ~@11", V: "~@3 x ~@4 x ~@14 x ~@4 x ~@3",
W: "~@11 x ~@4 x ~@14 x", X: "~@12 x ~@14 x ~@4", Y: "~@3 x ~@4 x ~@19 x ~@3", Z: "~@5 x ~@22 x ~@3",
})).gain(0.62)
// drums · rim
const rim = s("rim").struct("<~@91 A ~ B C D A ~ B E ~@21>".pickRestart({
A: "~@13 x ~@2", B: "~ x ~@14", C: "~@5 x ~@10", D: "~@9 x ~@6", E: "~@5 x ~@9 x",
})).gain(0.69)
// drums · snare
const snare = s("sd").struct(`<
~@30 A B C D E A F G D E H B C D I H J G K L H J C K L H J C K L H J C K L H J C K L M J C K L H J C K L H J C K L H J
C K L H ~@10 J C K L H J C K L H J C K L H J C K E ~
>`.pickRestart({
A: "~@19 x ~@12", B: "~@7 x ~@19 x ~@4", C: "~@7 x ~@8", D: "~@3 x ~@19 x ~@8", E: "~@10 x ~@20 x",
// … 65 more lines
More by Kool & The Gang
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.