0:00/0:00
// Chicago — Crosby, Stills, Nash & Young
// 80 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 14, 4/4 at bar 14, 2/4 at bar 29, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · piano · "rh piano"
const piano = note(`<
A@4 B A@3 B C D E D F G H A@3 I J A@2 I J K L M L N O N O P Q A@4 B A@3 B R D E D F G S G T@4
>`.pickRestart({
A: "~ [a3,c4,e4] ~ [a3,d4,f4] ~ [a3,c4,e4] ~ [a3,d4,f4]", B: "~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4]",
C: "~ [a3,c4,e4] ~ [a3,d4,f4] [a3,c4,e4] [a3,c4,e4]@3", // Am Dm Am
D: "~@2 [g4,b4,d5]!2 ~@2 [g4,b4,d5]@2 ~@2 [f4,a4,c5]!2 ~@2 [f4,a4,c5]@2", // G F
E: "~@2 [e4,g4,b4]!2 ~@2 [e4,g4,b4]@2 ~@2 [e4,g4,b4]!2 ~@2 [e4,g4,b4]@2", // Em
F: "~@2 [e4,g4,b4]!2 ~@2 [e4,g4,b4]@2 [d4,f#4,a4]@4 [d4,f#4,a4]@4", G: "[d4,g4,b4]!2 [d4,a4,c5]!2",
H: "[d4,g4,b4]@2 [d4,g4,b4]@2 ~ [a3,c4,e4] ~ [a3,d4,f4]", I: "~ [a3,c4,e4] ~ [a3,d4,f4] ~ [g3,b3,d4] ~ [g3,b3,d4]",
J: "~ [g3,b3,d4] ~ [g3,b3,d4] ~ [a3,c4,e4] ~ [a3,d4,f4]", // G Am Dm
K: "[a3,c4,e4]@2 [a3,c4,e4]@2 ~@6 [g4,b4,d5]!2 ~@2 [g4,b4,d5]@2", // Am G
L: "~@2 [f4,a4,c5]!2 ~@2 [f4,a4,c5]@2 ~@2 [e4,g4,b4]!2 ~@2 [e4,g4,b4]@2", // F Em
M: "~@2 [e4,g4,b4]!2 ~@2 [e4,g4,b4]@2 ~@2 [g4,b4,d5]!2 ~@2 [g4,b4,d5]@2", N: "[d4,f#4,a4]!2 [d4,g4,b4]!2",
O: "[d4,a4,c5]!2 [d4,g4,b4]!2", P: "[d4,g4,b4]", Q: "[c4,f4,a4]", R: "~ [a3,c4,e4] ~ [a3,d4,f4] [a3,c4,e4]!2 ~@2",
S: "[d4,g4,b4]!2 [d4,f#4,a4]!2", T: "[[d4,g4,b4]@4 [d4,g4,b4]@4 [d4,g4,b4]@16 [c4,f4,a4]@25 ~@15]/4",
})).s("gm_piano").gain(0.51)
// other · piano · "lh piano"
const piano_2 = note(`<
A@4 B A@3 B C D E D F G H A@3 I J A@2 I J K L M L G@4 N O A@4 B A@3 B C D E D F G@3 P@4
>`.pickRestart({
A: "[a1,a2]!4", B: "[g1,g2]!4", C: "[a1,a2]!3 ~", D: "[g1,g2]!2 [f1,f2]!2", E: "[e1,e2]!4", F: "[e1,e2]!2 [d2,d3]!2",
G: "[d2,d3]!4", H: "[d2,d3]!2 [a1,a2]!2", I: "[a1,a2]!2 [g1,g2]!2", J: "[g1,g2]!2 [a1,a2]!2",
K: "[a1,a2] ~ [g1,g2]!2", L: "[f1,f2]!2 [e1,e2]!2", M: "[e1,e2]!2 [g1,g2]!2", N: "g2!4, g3", O: "[f2,c3,f3]",
P: "[[d2,d3]@4 [d2,d3]@4 [g2,g3]@16 [f2,c3,f3]@25 ~@15]/4", // D G F5
})).s("gm_piano").gain(0.51)
// chords · drawbar organ · "rh organ"
const drawbar_organ = note(`<
~@10 A B A C@3 ~ D E F G E@2 F G H I@2 J K L K L M N ~@2 E@2 O E@3 O P A B A Q@8
>`.pickRestart({
A: "[b3,d4] [a3,c4]", B: "[g3,b3]", C: "[[g3,b3] [f#4,a4] [g4,b4] [a4,c5] [g4,b4] ~, ~ d4@2 d4@2 ~]/3",
D: "~@5 [a3,c4,e4] ~ [a3,d4,f4]", E: "~ [a3,c4,e4] ~ [a3,d4,f4] ~ [a3,c4,e4] ~ [a3,d4,f4]",
F: "~ [a3,c4,e4] ~ [a3,d4,f4] ~ [g3,b3,d4] ~ [g3,b3,d4]", G: "~ [g3,b3,d4] ~ [g3,b3,d4] ~ [a3,c4,e4] ~ [a3,d4,f4]",
H: "[a3,c4,e4] [b3,d4]", I: "[[a3,c4] [g3,b3]@2 [b3,d4]]/2", J: "[a3,c4] [g3,b3]", K: "[f#4,a4] [g4,b4], d4",
L: "[a4,c5] [g4,b4], d4", M: "[d4,g4,b4,g5]", N: "[c4,f4,a4,f5]",
O: "~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4]", P: "~ [a3,c4,e4] ~ [a3,d4,f4] [a3,c4,e4]@4",
Q: "[[g3,b3]@8 [f#4,a4]@8 [g4,b4]@8 [a4,c5]@8 [g4,b4]@8 [f#4,a4]@8 [g4,b4]@8 [a4,c5]@8 [g4,b4]@8 [d4,g4,b4,g5]@16 [c4,f4,a4,f5]@25 ~@15, ~ d4@2 d4@2 d4@2 d4@2 ~@7]/8", // G F#m G Am G F#m G Am …
})).s("gm_drawbar_organ").gain(0.14)
// other · drawbar organ · "lh organ"
const drawbar_organ_2 = note(`<
~@10 A B A C@3 ~ D E F G E@2 F G H I@2 J K@4 L M ~@2 E@2 N E@3 N O A B A P@8
>`.pickRestart({
A: "[g2,g3] [f2,f3]", B: "[e2,e3]", C: "[[e2,e3]@2 [d2,d3]@4 [d2,d3]@4 a2 ~]/3", D: "~@2 [a1,a2]!2", E: "[a1,a2]!4",
F: "[a1,a2]!2 [g1,g2]!2", G: "[g1,g2]!2 [a1,a2]!2", H: "a2 [g2,g3]", I: "[[f2,f3] [e2,e3]@2 [g2,g3]]/2",
J: "[f2,f3] [e2,e3]", K: "[d2,d3]", L: "[g2,g3]", M: "[f2,c3,f3]", N: "[g1,g2]!4", O: "[a1,a2]!2 a2@2",
P: "[[e2,e3]@8 [d2,d3]@16 [d2,d3]@16 [d2,d3]@16 [d2,d3]@16 [g2,g3]@16 [f2,c3,f3]@25 ~@15]/8", // E D G F5
})).s("gm_drawbar_organ").gain(0.14)
// bass · acoustic bass · "bass"
const bass = note("<~@10 A B A C D E F@3 G H F@2 G H I J K J D@4 L M N@4 O N@3 O P A B A C D@3 Q R@3>".pickRestart({
A: "g2@3 g2 f2@3 f2", B: "e2@3 e2 e2@3 e2", C: "e2@3 e2 d2@3 d2", D: "d2@3 d2 d2@3 d2", E: "d2@3 d2 a2@3 ~",
F: "a2@3 ~ a2@3 ~", G: "a2@3 ~ g2@3 ~", H: "g2@3 ~ a2@3 ~", I: "a2 a2@3 g2@3 g2", J: "f2@3 f2 e2@3 e2",
K: "e2@3 e2 g2@3 g2", L: "g2@6 g2!2 g2@6 g2!2", M: "f2", N: "a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~",
O: "g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~", P: "a2@3 ~ a2@3 ~ a2@2 a2@3 ~@3", Q: "d2@6 d2@2 g2@6 g2!2",
R: "[g2@6 g2!2 f2@25 ~@15]/3",
})).s("gm_acoustic_bass").gain(0.44)
// chords · acoustic guitar nylon · "guitar"
const acoustic_guitar_nylon = note(`<
~@17 A B C D B@2 C D E F G F H I H I J ~@3 B@2 K B@3 K L M N M O P Q P R@2 ~@2
>`.pickRestart({
A: "~@8 [a3,c4,e4]!3 [a3,c4,e4]@2 ~@3, ~@2 [a2,e3] ~", // Am A5
B: "[a3,c4,e4]!3 [a3,c4,e4]@2 ~@3 [a3,c4,e4]!3 [a3,c4,e4]@2 ~@3, [a2,e3] ~ [a2,e3] ~", // Am A5
C: "[a3,c4,e4]!3 [a3,c4,e4]@2 ~@3 [g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2, [a2,e3] ~@3", // Am G A5
D: "[g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2 [a3,c4,e4]!3 [a3,c4,e4]@2 ~@3, ~@2 [a2,e3] ~", // G Am A5
E: "[a2,e3,a3,c4,e4]@2 [a2,d3,a3,c4,e4]@2 ~@4 [g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2", // Am G
F: "[f2,c3,f3,a3,c4,f4] [f3,a3,c4,f4]!2 [f3,a3,c4,f4]@3 ~@2 [e2,b2,e3,g3,b3,e4] [e3,g3,b3,e4]!2 [e3,g3,b3,e4]@3 ~@2", // F Em
G: "[e2,b2,e3,g3,b3,e4] [e3,g3,b3,e4]!2 [e3,g3,b3,e4]@3 ~@2 [g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2", // Em G
H: "[a3,d4,f#4]@2 [a3,d4,f#4]!2 [g3,b3,g4]@2 [g3,b3,g4]!2, d3!2", // D G
I: "[a3,c4]@2 [a3,c4]!2 [g3,b3,g4]@2 [g3,b3,g4]!2, d3!2", J: "[g2,b2,d3,g3,b3,g4]",
K: "[g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2 [g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2", // G
L: "[a3,c4,e4]!3 [a3,c4,e4]@2 ~@3 [a2,e3,a3,c4,e4]@2 [a2,d3,a3,c4,e4]@2 ~@4, [a2,e3] ~@3", // Am A5
M: "[g2,b2,d3,g3,b3,g4] [d3,g3,b3,g4]!2 [d3,g3,b3,g4]@3 ~@2 [f2,c3,f3,a3,c4,f4] [f3,a3,c4,f4]!2 [f3,a3,c4,f4]@3 ~@2", // G F
N: "[e2,b2,e3,g3,b3,e4] [e3,g3,b3,e4]!2 [e3,g3,b3,e4]@3 ~@2 [e2,b2,e3,g3,b3,e4] [e3,g3,b3,e4]!2 [e3,g3,b3,e4]@3 ~@2", // Em
O: "[e2,b2,e3,g3,b3,e4] [e3,g3,b3,e4]!2 [e3,g3,b3,e4]@3 ~@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [a3,d4,f#4]@2, ~ d3", // Em D
P: "[g3,b3,g4]@2 [g3,b3,g4]!2 [a3,c4]@2 [a3,c4]!2, d3!2", // G Am
Q: "[g3,b3,g4]@2 [g3,b3,g4]!2 [a3,d4,f#4]@2 [a3,d4,f#4]!2, d3!2", // G D
R: "[[g3,b3,g4]@2 [g3,b3,g4]!2 [g2,b2,d3,g3,b3,g4]@8 ~@4, d3 ~@3]/2", // G
})).s("gm_acoustic_guitar_nylon").gain(0.4)
// drums · kick
const kick = s("bd").struct("<~@10 A@19 B@5 ~@3 A@11 C B@4 D ~@2>".pickRestart({
A: "x!2 ~@2 x!2 ~@2", B: "x!2", C: "x!2 ~@2 x ~@3", D: "x",
})).gain(0.48)
// drums · snare
const snare = s("sd").struct(`<
~@9 A B C B@3 D B D B E B D B@3 D B@2 C B@4 C ~@3 B F B C B@3 C B@3 D B@4 ~@3
>`.pickRestart({
A: "~@14 x!2", B: "~ x ~ x", C: "~ x ~@2", D: "~@3 x", E: "~@2 x!2 ~@2 x ~", F: "~@2 x ~@3 x!2",
})).gain(0.48)
// drums · low tom
const low_tom = s("lt").struct(`<
~@11 A B ~ C D ~ E ~@3 F ~@3 G ~@2 H B ~@3 I B ~ I B ~@2 J B ~@2 I B ~@2 K ~@4 G ~@2
>`.pickRestart({
A: "~@8 x ~@6 x", B: "x", C: "~@7 x", D: "~@3 x ~@4", E: "~@3 x!2 ~@3", F: "~@3 x ~@3 x!2 ~@7", G: "~@7 x!2 ~@7",
H: "~@11 x ~@4", I: "~@15 x", J: "~@11 x ~@3 x", K: "~@3 x ~@4 x ~@7",
})).gain(0.48)
// drums · mid tom
const mid_tom = s("mt").struct(`<
~@11 A ~@3 B C D ~@3 E ~@3 F ~@2 G ~@4 H ~@2 H ~@3 A ~@3 I ~@3 J ~@4 K ~@2
>`.pickRestart({
A: "~@13 x!2 ~", B: "~@4 x!2 ~@10", C: "~@15 x", D: "~@5 x ~@10", E: "~@5 x!2 ~@9", F: "~ x!2 ~@3 x ~@9",
G: "~@12 x!2 ~ x", H: "~@11 x ~ x!2 ~", I: "~@9 x!2 ~@3 x ~", J: "~@4 x!2 ~ x ~@8", K: "~@3 x ~ x!2 ~@9",
})).gain(0.48)
// drums · high tom
const high_tom = s("ht").struct(`<
~@11 A ~@3 B ~ C ~@3 D ~@3 E ~@2 F ~@4 G ~@2 G ~@3 G ~@3 H ~@3 I ~@4 D ~@2
>`.pickRestart({
A: "~@5 x!2 ~", B: "x!2 ~@6", C: "x ~ x!3 ~@11", D: "~ x ~@2", E: "~@3 x!3 ~@10", F: "~@7 x", G: "~@3 x",
H: "~@11 x!3 ~@2", I: "~@3 x ~@4",
})).gain(0.48)
// drums · crash
const crash = s("cr").struct(`<
~@12 A ~@2 B ~ B ~@3 B ~@3 B ~@3 A ~@4 A ~@2 A ~@3 A ~@3 A ~@2 B ~@4 B ~@2
>`.pickRestart({
A: "x", B: "~ x",
})).gain(0.48)
// drums · tambourine
const tambourine = s("tb").struct("<~@10 A@15 B C@8 ~@3 A@8 C@8 D ~@2>".pickRestart({
A: "x!4", B: "x ~@3 x ~@3 x!8", C: "x!16", D: "x!8 ~@8",
})).gain(0.48)
// drums · ride
const ride = s("rd").struct("<~@10 [x!8]!24 ~@3 [x!8]!16 [x!4 ~@4] ~@2>").gain(0.48)
stack(
piano, piano_2, drawbar_organ, drawbar_organ_2, bass, acoustic_guitar_nylon, kick, snare, low_tom, mid_tom, high_tom,
crash, tambourine, ride
)
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.