0:00/0:00
// Woodstock — Crosby, Stills, Nash & Young
// 108 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 55 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/4)
// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.
// other · distortion guitar
const distortion_guitar = note(`<
A B C D E F G H I J K L M N O P Q R S T U V W X Y@2 ~ Z@2 ~ AA AB AC AD ~ M AE AF AG AH AI AJ AK AL AM M AN AO AP AQ@2
AR ~@2 AS
>`.pickRestart({
A: "~@2 g3@3 ~ g3 ~@5 g3 ~@3", B: "g3 ~@3 g3@3 ~@3 g3@3 ~@3", C: "g3 ~ g3 ~@3 g3@3 ~@3 g3@3 ~", D: "g3@3 ~@13",
E: "g3 ~@7 g3 ~@7", F: "~@2 [d5,g5] ~@3 [c5,g5] ~@3 [c5,g5] ~@3 [a#4,d5,g5] ~", G: "~@2 d4 e5 ~ d5 f5 ~@5 e5 ~ a4 ~",
H: "~@2 a3@3 ~ g3 ~@9", I: "~@14 d4 ~", J: "g4 ~@5 g4@3 ~@5 g4 ~", K: "~@2 [c5,e5] ~@5 c5 ~@5 g4@2",
L: "~@10 a#4 ~@3 g4 ~", M: "~@8 g4 ~@3 d4 ~@3", N: "~@8 g4 ~@3 g4 ~@3", O: "~@4 g3 ~ g3 ~@7 f5@2",
P: "~@4 [d5,g5]@3 ~@9", Q: "~@4 [f4,c5,d5]@3 ~@3 f4 ~@3 g4@2", R: "~@6 d4 ~@3 f4 ~@3 g4 ~", S: "~@8 f4 g4 ~@4 g4@2",
T: "~@4 g4 ~@3 a#4 ~@3 a#4 ~@3", U: "~@2 g4 ~@3 f4 ~@3 [a#4,d5] ~@5", V: "~@2 g4 ~@3 f4 ~@3 c5 a#4 ~@4",
W: "~@4 g5@3 ~@3 c5@3 ~@3", X: "~@2 g4@3 ~@11", Y: "[~@14 [d4,g4,b4,d5]@13 ~@5]/2",
Z: "[[g5,c6] ~ d6 ~@11 [d6,f6]@10 ~@8]/2", AA: "g4@3 ~@5 d4 ~@3 d4 ~@3", AB: "~@2 g4!2 ~@12",
AC: "~@10 [a#4,d5] ~@3 [a#4,d5] ~", AD: "~@2 g4 ~@13", AE: "~@2 a4 ~@5 g4 ~@3 d4 ~@3", AF: "c4@3 ~@5 a#4 ~@3 g4 ~@3",
AG: "~@2 [a#4,d5] ~ g4 ~@9 g3 ~", AH: "~@2 g3 ~@3 g3 ~@9", AI: "g3 ~ g3 ~@3 g3 ~@2 g3 ~@2 f4 ~@3",
AJ: "g3 ~@7 f4 ~ a#4@3 ~@3", AK: "g4 ~@5 g4@3 ~@3 d4 ~@3", AL: "c4 ~@3 g4 ~@5 a#4@3 ~@3",
AM: "~@2 f4 ~@5 g4 ~@5 g4 ~", AN: "~@2 g4 ~@3 g4 ~@3 d4 ~@5", AO: "g3 ~@5 g4 ~@3 g4 ~@3 a#4@2", AP: "~@4 a#4 ~@11",
AQ: "[~@7 [g3,g4]@5 ~@4]/2", AR: "~@10 [f5,d6]@3 ~@3", AS: "~@14 g4 ~",
})).s("gm_distortion_guitar").gain(0.41).pan(0.7)
// chords · drawbar organ
const drawbar_organ = note(`<
~@2 A@5 B A C D@2 E F B@3 G E@3 H A I E A E J@2 K D F L M N O P Q R F G B@2 S T U V N I E A D W X@2
>`.pickRestart({
A: "~@4 [g3,d4,g4,b4,d5,g5]@3 ~@5 [g3,d4,g4,b4,d5,g5]@3 ~", // G
B: "~@4 [g3,d4,g4,b4,d5,g5]@3 ~@3 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~", // G
C: "~@4 [g3,d4,g4,b4,d5,g5]@3 ~@5 [g3,d4,g4,b4,d5,g5] ~ [c4,g4,c5,e5,g5] ~", // G C
D: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~@5 [c4,g4,c5,e5,g5]@3 ~", // C
E: "~@4 [c4,g4,c5,e5,g5]@3 ~@3 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~", // C
F: "~@4 [c4,g4,c5,e5,g5]@3 ~@5 [c4,g4,c5,e5,g5]@3 ~", // C
G: "~@2 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~@5 [g3,d4,g4,b4,d5,g5]@3 ~", // G
H: "~@4 [c4,g4,c5,e5,g5]@3 ~@3 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~", // C
I: "~@4 [g3,d4,g4,b4,d5,g5]@3 ~@9", // G
J: "[~@4 [c4,g4,c5,e5,g5]@3 ~@3 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~ [a#3,f4,a#4,d5,f5]@5 ~ [a#3,f4,a#4,d5,f5]@3 ~@3 [a#3,f4,a#4,d5,f5] ~ [a#3,f4,a#4,d5,f5] ~ [f3,c4,f4,a4,c5,f5]@2]/2", // C A# F
K: "~@2 [f3,c4,f4,a4,c5,f5] ~@9 [f3,c4,f4,a4,c5,f5] ~ [f3,c4,f4,a4,c5,f5] ~", // F
L: "~@4 [c4,g4,c5,e5,g5] ~ [g3,d4,g4,b4,d5,g5] ~@3 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~", // C G
M: "~@4 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5] ~@3 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~", // G
N: "~@2 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~@3 [g3,d4,g4,b4,d5,g5] ~ [g3,d4,g4,b4,d5,g5]@3 ~", // G
O: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~@5 [c4,f4,a#4,d5,g5] ~ [c4,f4,a#4,d5,g5] ~", // C Gm7
P: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~@3 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~", // C
Q: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~@5 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~", // C
R: "~@2 [c4,f4,a#4,d5,g5] ~ [c4,f4,a#4,d5,g5] ~ [c4,f4,a#4,d5,g5] ~@3 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~", // Gm7 C
S: "~@4 [c4,g4,c5,e5,g5]@3 ~@3 [c4,f4,a#4,d5,g5] ~ [c4,f4,a#4,d5,g5] ~ [c4,g4,c5,e5,g5] ~", // C Gm7 C
T: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~ [c4,f4,a#4,d5,g5] ~@5 [c4,f4,a#4,d5,g5]@3 ~", // C Gm7
U: "~@2 [c4,f4,a#4,d5,g5] ~ [c4,f4,a#4,d5,g5]@3 ~@5 [c4,f4,a#4,d5,g5]@3 ~", // Gm7
V: "~@4 [c4,f4,a#4,d5,g5]@3 ~@5 [c4,f4,a#4,d5,g5]@3 ~", // Gm7
W: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5]@3 ~@5 [c4,g4,c5,e5,g5] ~ [a#3,f4,a#4,d5,f5]@2", // C A#
X: "[~@2 [a#3,f4,a#4,d5,f5] ~ [a#3,f4,a#4,d5,f5]@3 ~@5 [a#3,f4,a#4,d5,f5] ~ [f3,c4,f4,a4,c5,f5]@5 ~ [f3,c4,f4,a4,c5,f5]@3 ~@5 [f3,c4,f4,a4,c5,f5]@3 ~]/2", // A# F
})).s("gm_drawbar_organ").gain(0.36)
// bass · electric bass pick
const bass = note(`<
~@2 A@3 B@2 C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF N AG AH AI AJ AK N O N AL AM AN AO AP AQ
AR AS@2
>`.pickRestart({
A: "[~@2 g2@3 ~ g2 ~ g2@4 ~@2 g2@5 ~ g2 ~ g2@4 ~@2 g2@7 ~ g2 ~ g2 ~ g2@3 ~ g3@3 ~]/3",
B: "[g2@3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g2 ~ g2@5 ~ g3 ~ g2@4 ~@2 g3 ~ g2 ~]/2", C: "g2@3 ~ g2 ~ g2 ~ g2 ~ g2 ~@3 g2 ~",
D: "g2 ~ g2 ~ g2 ~@3 g2 ~ g2 ~ g2@3 ~", E: "g2 ~ g2@3 ~ g2 ~ g2 ~ g2 ~ g2 ~@3",
F: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~ c3@3 ~", G: "c3@3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@3 ~", H: "c3 ~ c3@4 ~@2 c3 ~ c3 ~ c3@3 ~",
I: "c3 ~ c3@3 ~ c3 ~ c3@3 ~ c3 ~ g2 ~", J: "g2@3 ~@5 g2 ~ g2@3 ~ g2@2", K: "~@2 g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~",
L: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~@3 g2 ~", M: "g2 ~ g2@3 ~ g2 ~ g2 ~ g2 ~@3 g2!2",
N: "c3 ~ c3 ~ c3 ~ a#2 ~ c3 ~ a#2 ~ c3 ~ a#2 ~", O: "c3 ~ c3 ~ c3 ~@3 c3 ~ a#2 ~ c3 ~ a#2 ~",
P: "c3 ~ c3 ~ c3 ~ a#2 ~ c3 ~ a#2 ~ c3 ~ c3 ~", Q: "c3 ~ a#2 ~ c3 ~ a#2 ~ c3 a#2 c3 ~ a#2@3 ~",
R: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g3 ~ g2 ~", S: "~@2 g2 ~ g3 ~@9 a#2 ~", T: "c3 ~ c4 ~ c3!3 ~ c3 ~ f2 ~ e2 ~ g2 ~",
U: "g2 ~ g2 ~ g2 ~ g2 ~@3 g2 ~ f2!2 g2 a#2", V: "c3 ~ c3 ~ c3 ~ a#2 ~ c3 ~ a#2 ~ c3!3 a#2",
W: "c3 ~ c3 ~ c3 ~ c3!3 ~ c3@3 ~ a2 ~", X: "a#2 ~ a#2@3 ~ a#2@3 ~ a#2 ~ a#2!2 f2@2",
Y: "~@2 f2 ~ f2 ~ f2!4 e2 ~ f2 ~ a#2 ~", Z: "c3 ~ g2 ~ c3 ~@3 c3 ~ c3 ~@3 c3 ~",
AA: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", AB: "g2 ~ g2 ~ a#2!2 g2 ~ a#2 c3 g2 e2 f2 ~ f2 ~",
AC: "g2 ~ g2 ~@3 g2 ~@3 g2 ~@3 g2@2", AD: "~@2 g2 ~ g2!3 ~ a#2 ~ a#2 ~ b2 ~ a2 ~",
AE: "c3 ~ c3@3 ~ a#2 ~ c3 ~ a#2 ~ c3 ~ a#2 ~", AF: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ a#2 ~ c3 ~ a#2 ~",
AG: "c3 ~ d#3 ~ a#2 ~ a#2 ~ a#2 ~ e2!2 f2 ~ f2 ~", AH: "g2 ~ g2 ~ g2 ~ f2 ~ g2 ~ g2 ~ g2 ~ f2 ~",
AI: "g2 ~ f2 ~ g2 ~@3 g2 ~ f2 ~ g2 ~ f2 ~", AJ: "g2 ~@5 g2!2 g2@3 ~ g2@3 ~", AK: "g2 ~ g2 ~ g2 ~@3 g2 ~ g2 ~@5",
AL: "c3 ~ a#2 ~ c3 g2 e2 ~ f2 ~ f2 ~ f#2 ~ f#2 ~", AM: "g2 ~ g2 ~@3 g2 ~ g2 ~ g2 ~@3 g2 ~", AN: "g2@3 ~ g3 ~@11",
AO: "c3 ~ c3 ~ c4 ~ c4 ~ c3!2 c3@3 ~ g2@2", AP: "~@2 g2 ~ g3 ~ g2 ~ g3 ~ g2 ~ g2 ~ a#2 ~",
AQ: "c3 ~ c3 ~@3 c3 ~@3 c3 ~ c3 g3 c3!2", AR: "c3!3 ~ c3 ~ f3@3 ~ c3 ~ a2 ~ a2 ~",
AS: "[a#2 ~ f3 ~ f3 d3 a#2 ~ a#2 ~ a#2 ~@3 f2@5 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2@3 ~]/2",
})).s("gm_electric_bass_pick").gain(0.41)
// bass · acoustic bass
const bass_2 = note(`<
~@2 A@3 B@2 C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF N AG AH AI AJ AK N O N AL AM AN AO AP AQ
AR AS@2
>`.pickRestart({
A: "[~@2 g1@3 ~ g1 ~ g1@4 ~@2 g1@5 ~ g1 ~ g1@4 ~@2 g1@7 ~ g1 ~ g1 ~ g1@3 ~ g2@3 ~]/3",
B: "[g1@3 ~ g2 ~ g2 ~ g2 ~ g2 ~ g1 ~ g1@5 ~ g2 ~ g1@4 ~@2 g2 ~ g1 ~]/2", C: "g1@3 ~ g1 ~ g1 ~ g1 ~ g1 ~@3 g1 ~",
D: "g1 ~ g1 ~ g1 ~@3 g1 ~ g1 ~ g1@3 ~", E: "g1 ~ g1@3 ~ g1 ~ g1 ~ g1 ~ g1 ~@3",
F: "c2 ~ c2 ~@3 c2 ~ c2 ~ c2 ~ c2@3 ~", G: "c2@3 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@3 ~", H: "c2 ~ c2@4 ~@2 c2 ~ c2 ~ c2@3 ~",
I: "c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ g1 ~", J: "g1@3 ~@5 g1 ~ g1@3 ~ g1@2", K: "~@2 g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~",
L: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~@3 g1 ~", M: "g1 ~ g1@3 ~ g1 ~ g1 ~ g1 ~@3 g1!2",
N: "c2 ~ c2 ~ c2 ~ a#1 ~ c2 ~ a#1 ~ c2 ~ a#1 ~", O: "c2 ~ c2 ~ c2 ~@3 c2 ~ a#1 ~ c2 ~ a#1 ~",
P: "c2 ~ c2 ~ c2 ~ a#1 ~ c2 ~ a#1 ~ c2 ~ c2 ~", Q: "c2 ~ a#1 ~ c2 ~ a#1 ~ c2 a#1 c2 ~ a#1@3 ~",
R: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g2 ~ g1 ~", S: "~@2 g1 ~ g2 ~@9 a#1 ~", T: "c2 ~ c3 ~ c2!3 ~ c2 ~ f1 ~ e1 ~ g1 ~",
U: "g1 ~ g1 ~ g1 ~ g1 ~@3 g1 ~ f1!2 g1 a#1", V: "c2 ~ c2 ~ c2 ~ a#1 ~ c2 ~ a#1 ~ c2!3 a#1",
W: "c2 ~ c2 ~ c2 ~ c2!3 ~ c2@3 ~ a1 ~", X: "a#1 ~ a#1@3 ~ a#1@3 ~ a#1 ~ a#1!2 f1@2",
Y: "~@2 f1 ~ f1 ~ f1!4 e1 ~ f1 ~ a#1 ~", Z: "c2 ~ g1 ~ c2 ~@3 c2 ~ c2 ~@3 c2 ~",
AA: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", AB: "g1 ~ g1 ~ a#1!2 g1 ~ a#1 c2 g1 e1 f1 ~ f1 ~",
AC: "g1 ~ g1 ~@3 g1 ~@3 g1 ~@3 g1@2", AD: "~@2 g1 ~ g1!3 ~ a#1 ~ a#1 ~ b1 ~ a1 ~",
AE: "c2 ~ c2@3 ~ a#1 ~ c2 ~ a#1 ~ c2 ~ a#1 ~", AF: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ a#1 ~ c2 ~ a#1 ~",
AG: "c2 ~ d#2 ~ a#1 ~ a#1 ~ a#1 ~ e1!2 f1 ~ f1 ~", AH: "g1 ~ g1 ~ g1 ~ f1 ~ g1 ~ g1 ~ g1 ~ f1 ~",
AI: "g1 ~ f1 ~ g1 ~@3 g1 ~ f1 ~ g1 ~ f1 ~", AJ: "g1 ~@5 g1!2 g1@3 ~ g1@3 ~", AK: "g1 ~ g1 ~ g1 ~@3 g1 ~ g1 ~@5",
AL: "c2 ~ a#1 ~ c2 g1 e1 ~ f1 ~ f1 ~ f#1 ~ f#1 ~", AM: "g1 ~ g1 ~@3 g1 ~ g1 ~ g1 ~@3 g1 ~", AN: "g1@3 ~ g2 ~@11",
AO: "c2 ~ c2 ~ c3 ~ c3 ~ c2!2 c2@3 ~ g1@2", AP: "~@2 g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g1 ~ a#1 ~",
AQ: "c2 ~ c2 ~@3 c2 ~@3 c2 ~ c2 g2 c2!2", AR: "c2!3 ~ c2 ~ f2@3 ~ c2 ~ a1 ~ a1 ~",
AS: "[a#1 ~ f2 ~ f2 d2 a#1 ~ a#1 ~ a#1 ~@3 f1@5 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.41)
// drums · kick
const kick = s("bd").struct(`<
~@2 A B C B C D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D F D E D E D E
>`.pickRestart({
A: "~ x ~@3 x!2 ~", B: "~ x!2 ~@2 x!2 ~", C: "x ~ x ~@2 x!2 ~", D: "x!2 ~@2 x!2 ~ x", E: "~ x ~@2 x!2 ~@2",
F: "~ x ~@6",
})).gain(0.41)
// drums · snare
const snare = s("sd").struct(`<
~
[~@12 x!2 ~ x]
[x!2 ~@4 x ~@7 x ~]
[~@3 x ~@3 x]!3
[~@6 x ~@7 x!2]
[~ x ~ x]!41
[~@4 x ~@7 x!2 ~ x]
[~ x ~ x]!6
>`).gain(0.41)
// drums · hihat
const hihat = s("hh").struct("<~@2 A B@2 C B C B@40 D E B@5>".pickRestart({
A: "~@3 x!5", B: "x!8", C: "~ x!7", D: "x!3 ~@5", E: "~@2 x!6",
})).gain(0.41)
// drums · crash
const crash = s("cr").struct("<~@2 [~ x ~@6] ~@46 x ~@5>").gain(0.41)
stack(distortion_guitar, drawbar_organ, bass, bass_2, kick, snare, hihat, crash)
More by Crosby, Stills, Nash & Young
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.