0:00/0:00
// Ohio — Crosby, Stills, Nash & Young
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 60 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · overdriven guitar
const overdriven_guitar = note(`<
~ A@2 B C D E ~@5 F G H I J K L M N O P Q R S@2 T@2 U F G H I J K L M N V W X Y Z AA AB AC AD AE AF AG@2 AH AI AJ AK C
D AL@2
>`.pickRestart({
A: "[~@8 f3 ~ g3 ~ db3 ~ d3@9 ~ f3 ~ g3 ~ db3 ~ db3@2]/2", B: "gb3@2 g3@2 c4@2 e4@2 g4@2 g4@3 ~ g4@2",
C: "a4 ~ g4@2 f4 ~ e4 d4 c4 ~ d4@5 ~", D: "~@2 c5 ~ c5 ~ c5 ~ g4 a4 f4@2 e4@2 f4 e4",
E: "d4 ~ c4 a3 c4@2 f4@2 f4 ~ d4@5 ~", F: "~@2 g3@2 [g3,bb3]@4 f3 ~ bb3 d4@3 f3 g3, g2@8 ~ g3@4 ~@3, ~@4 d4@7 ~@5",
G: "~@4 [g3,c4]@4 ~ a3 c4@2 ~@2 e3 ~, c3@15 ~, ~ e3@2 ~ [g3,c4] g3@3, ~ e4@3, ~@12 e3 c4@2 ~", // C5
H: "~@2 g3@2 [g3,bb3,d4]@3 ~ [f3,bb3]@2 [bb3,d4]@2 [c4,d4] ~ g3 ~, g2@15 ~, ~@7 d4@3 ~@3 d4@2 ~", // Gm Bb5 Bb Csus2
I: "~@4 [g3,c4]@3 ~ e3@2 ~@2 [g3,c4] [ab3,a3,c4] [g3,c4] e3, c3@15 ~, ~@7 c4@4 e3@2 ~@3, ~@5 [d3,g3] ~@2", // C5 Ab C5 G5
J: "~@4 bb3@3 ~ g3@2 ~@4 g3 ~, g2@15 ~, ~@2 g3@6 ~@2 f3@2 [bb3,d4]@3 ~, ~@4 d4@6 ~ g3@2 g4@2 ~", // Bb
K: "~@2 g3@2 [g3,c4]@3 g3!2 a3 ~@2 e3@2 [g3,c4]@2, c3@4 c4 g3@2 ~, ~@11 c4@3 ~@2", // C5
L: "~@4 [g3,bb3,d4]@3 bb3 [f3,bb3]@2 ~@2 [d3,g3]@2 [g3,bb3,d4] ~, g2@15 ~, ~@5 bb3@2 ~", // Gm Bb5 G5 Gm
M: "~@2 [g3,a3] ~ g3@2 e3@2 g3@2 ~@3 e3 ~ c3, c3@15 ~, ~ c4 c4@3 [g3,c4] [d3,g3] g3, ~@11 c4@5", // Gsus2 C5 G5
N: "~ g4@2 d4 g4@2 d4 g4@2 d4 d4@2 d4@2 g4@2", O: "g4 gb4 g4 a4!4 d5, ~@14 eb5 ~",
P: "~@2 eb5@4 c5@2 c5@2 b4@2 a4 ~ a4@2", Q: "b4@2 a4@2 g4@2 g4@2 g4 a4 a4@4 d5!2",
R: "d5@2 c5@2 b4@2 b4@2 a4@2 a4!2 a4@2 a4@2", S: "[a4@2 g4!2 g4@2 f4 ~ f4@2 f4@2 e4 d4 c4 d4@7 ~@8 c4@2]/2",
T: "[f4@2 d4@6 ~@6 d5 c5@2 b4 a4@8 c4@2 f4 d4 ~ a3]/2", U: "c4@2 f4@7 ~@7, ~@2 d4 ~@13", V: "g4 gb4 g4 a4!4 [d5,eb5]",
W: "d5@2 d5@2 c5@2 c5@2 b4@2 b4@2 a4@3 ~", X: "~ f4 [d4,g4] ~ e4@2 f4@2 g4@5 ~@2 d5, [d4,g4] ~@6 [a4,d5]",
Y: "d5@2 e5 ~ c5@2 d5 ~ b4@2 d5 ~ c5@2 b4 ~", Z: "c5 ~ a4@4 a4@2 g4 f4 g4 ~ f4 ~ f4 ~", AA: "e4 ~ d4@6 ~@8",
AB: "c4 ~ d4@6 ~@6 [d4,g4] f4", AC: "d4 c4 d4@6 ~@6 g4 f4", AD: "d4 c4 d4@8 ~@6", AE: "~@2 e4@7 ~@7, ~@2 d4 ~@13",
AF: "~@2 d5@8 ~@2 d5 c5 d5@2, ~@2 c5 ~@13", AG: "[c5@2 b4@5 ~@3 b4 a4 g4 f4 g4@6 ~@5 c4 d4 e4 f4@2 g4@2]/2",
AH: "c5@8 [c5,d5] ~ [b4,d5]@2 c5 bb4 c5@2, a4 ~@15", AI: "a4@2 g4@5 ~@3 g4@2 [a4,c5] a4 c5@2", AJ: "c5 ~",
AK: "~@2 g3@2 c4@2 e4@2 g4@2 g4@3 ~ g4@2", AL: "[d4 ~ c4 a3 c4@2 f4@2 f4 ~ d4@16 ~@6]/2",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.3)
// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@12 A B C@2 D E F G ~@10 A B C@2 D E F G ~@4 H ~@17>".pickRestart({
A: "~@11 bb3@2 g3 ~@2, ~@4 d3@9 ~@3", B: "~@7 g3 ~@8, ~@6 e3@3 ~@7",
C: "[~@9 g3@2 ~@3 bb3 g3@5 e3@4 ~ g3 ~@5 [d3,b3], ~@5 e4@3]/2", D: "~@4 g4@6 bb3@2 ~@2 bb3 ~",
E: "~@6 e3@2 eb3@2 d3@2 ~@3 b3, e3@6 ~@2 c3@7 ~, ~ e4 ~@2", F: "~@2 g3@2 g4 ~@5 d4@4 g4 ~, ~@9 g3@3 ~@4",
G: "~@2 d3@3 ~ g3@2 ~ e3@3 ~@4, ~@4 d3 ~@3", H: "~@10 db5 ~@5",
})).s("gm_overdriven_guitar").gain(0.11).pan(0.3)
// bass · fretless bass
const bass = note(`<
~@2 A B C D E F C@3 G H I J K L K M N O@2 C D E F C@3 G H I J K L K M N O@2 C D E F C@3 G P Q R S T U@2 S T U@2 V
>`.pickRestart({
A: "d2@8 f2@4 c2@3 a1", B: "d2 ~ d2@6 f2@2 g2@2 c2@3 a1", C: "d2 ~ d2@6 f2@4 c2@3 a1", D: "d2 ~ d2@6 f2@4 c2@2 c2 a1",
E: "d2 ~ d2@6 f2@2 f2 ~ c2@3 a1", F: "d2 ~ d2@6 f2@4 a1@2 ~ a1", G: "d2 ~ d2@6 f2@4 c2@4",
H: "g1 ~ g1@6 g2@2 d2@2 g1 bb1 d2@2", I: "c2 ~ c2@4 c2 ~ c2 ~ c2 ~ c2 a1 d2@2",
J: "g1 ~ g1@2 g2 ~ g2 ~ g2 d2 g2@2 g2 f2 d2@2", K: "c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~ c2 a1 d2@2",
L: "g1 ~ g1@2 g2 ~ g2 d2 g1@2 d2@2 g2 bb1 d2@2", M: "g1 ~ g1@2 g2 ~ g2 ~ f2 d2 g2 ~ g2 f2 d2 ~",
N: "c2 ~ c2@4 c2 ~ c2 ~ c2@3 ~ c2 a1", O: "d2 d2@2 d2 d2@2 d2 d2@2 d2 d2@2 d2@2 d2@2",
P: "d2@2 d3@3 c3 a2@2 f2@2 g2@2 c2 d2@2 a1", Q: "d2@2 d3@3 ~ a2 ~ f2@2 g2@2 c2 d2@2 a1, ~@5 c3@2 ~@9",
R: "d2@2 d3@3 c3 a2 ~ f2@2 g2@2 c2 d2@2 a1", S: "d2@2 d3@3 c3 a2@2 f2@2 g2 ~ c2 d2@2 ~",
T: "d2@2 d3@3 c3 a2@2 f2@2 g2 ~ c2 d2@2 a1", U: "d2@2 d3@3 c3 a2@2 f2@2 g2@2 c2@2 ~ a1", V: "d2@3 ~",
})).s("gm_fretless_bass").gain(0.44)
// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
A B C B D E C F G H I J K L K M N O P Q R S D E C F G H I J K L K M N O P Q R S D E C F G H I J G H I J G H I C B D E
T
>`.pickRestart({
A: "d2@2 d4@2 ~@2 g3@2 f3 ~ g3@2 c3 ~ g3@2, ~@2 g3 ~ d3@4 ~@8, ~@5 d4@3 ~@8",
B: "d2@2 d4@2 ~@2 g3@2 f3 ~ g3@2 ~@2 g3@2, ~@2 g3 ~ d3@4 ~@4 c3@4, ~@5 d4@3 ~@8",
C: "d2 ~ d4@2 ~@2 g3@2 f3 ~ g3@2 c3 ~ g3@2, ~@2 g3 ~ d3@4 ~@8, ~@5 d4@3 ~@8",
D: "d2@2 g3 ~@3 a3@2 f3 ~ g3@2 c3 ~ g3@2, ~ d4 d3@2 ~@4, ~@3 a3@2 d4@3 ~@8",
E: "d2@2 d4@2 ~@2 g3@2 f3 ~ g3@2 db3@3 ~, ~@2 g3 ~ d3@4 ~@8, ~@5 d4@3 ~@8",
F: "d2@2 d4@2 ~@2 g3@2 f3 ~ g3@2 c3@2 g3@2, ~@2 g3 ~ d3@4 ~@8, ~@5 d4@3 ~@8",
G: "a3@2 [a3,d4]@4 ~ [d3,a3,d4] a3@2 f3 ~ [c3,e3]@2 g3 [g3,d4], d3@3 ~@5", // D5 C G5
H: "~@2 [a3,d4]@6 [f3,a3]@2 a3 ~ [c3,e3]@2 e3 [a3,d4], d3 ~", // D5 F C D5
I: "a3@2 [a3,d4]@4 ~ a3 [f3,a3]@2 [f3,a3] ~ [c3,e3,g3]@2 g3 [a3,d4], d3@6 ~ d4@3 ~@6", // D5 F C D5
J: "~@2 [a3,d4]@5 [a3,d4] [f3,a3]@2 [f3,a3] ~ [c3,e3,g3]@2 [e3,g3] ~, d3 ~", // D5 F C Em
K: "~@2 [g3,bb3]@2 [g3,bb3]@2 ~@4 [g3,bb3]@2 [g3,bb3,d4]@2 [d3,g3] ~, g2@8 [g2,d3]@7 ~, ~ d4@2 ~, ~@3 [g3,bb3]@2 ~@3", // Gm G5 Gm
L: "~ g3!2 ~ e3 [e3,g3] [e3,g3,c4,e4] [e3,g3], c3@8 c3@7 ~, ~ [c4,e4]@2 ~, ~ e3 ~@2, ~@3 g3@2 ~@3", // Em C Em C
M: "~ g3!2 e3!2 [e3,g3] [e3,g3,c4,e4] [e3,g3], c3@8 c3@7 ~, ~ c4@2 ~, ~@4 e4@4 e2 ~@7, ~@3 g3@2 ~@3", // Em C Em
N: "g3@2 g3@2 g3@2 ~@4 g3@2 [d3,g3,bb3,d4]@2 d3 ~, [g2,d3]@4 g2@3 ~, ~ [bb3,d4]@2 ~, ~@3 g3@2 ~@3, ~@2 d3 ~", // Gm G5 Bb
O: "~ g3 [e3,g3] ~@2 [e3,g3] [e3,g3,c4,e4] g3, c3@8 c3@7 ~, ~ c4@2 ~, ~@3 [e3,g3]@2 ~@3", // Em C Em
P: "~@2 [g3,bb3]@2 [g3,bb3]@2 g3@2 ~@2 g3@2 [g3,bb3,d4]@2 [d3,g3] ~, g2@8 [g2,d3]@7 ~, ~@4 g4@11 ~, ~ d4@2 ~, ~@3 bb3@3 ~@2", // Gm G5
Q: "~@2 g3@2 g3@2 ~@4 e3@2 [e3,g3,c4]@2 e3 ~, c3@3 g3@3 ~@2, ~ c4@2 ~, ~@3 e3@2 ~@3, ~@4 c3@3 ~", // C
R: "[d3,a3] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2", // D5
S: "[d3,d4] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3] [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2, ~@9 a2@3 ~@4", // D D5
T: "[d2,a2]@11 ~@5", // D5
})).s("gm_overdriven_guitar").gain(0.24).pan(0.9)
// chords · overdriven guitar · soft notes
const overdriven_guitar_soft_2 = note(`<
A@4 ~ B@3 C D E F G H G I J K ~ L M@2 ~ B@3 C D E F G H G I J K ~ L M@2 ~ B@3 C D E F C D E F C D E N A ~ B ~
>`.pickRestart({
A: "~@3 a3 ~@12", B: "~@3 a3@3 ~@10", C: "~@12 g3@2 e3 d3", D: "[a3,d4]@2 ~@13 d3", E: "~@7 d3 ~@8",
F: "a3@2 ~@7 d4 ~@6", G: "~@5 f4@3 g4@2 ~@2 g4@3 ~, d3 ~", H: "~ e3 ~@6", I: "e3@3 ~@5", J: "bb3 ~@3 g4@6 ~@4 g2 ~",
K: "~@2 e3@2 e4@8 ~@3 b3", L: "~ e3@2 ~@5", M: "[~@6 d4 ~@2 d4 ~@4 e4@5 d4 ~@2 db4 ~@5 e4@2 e4@2]/2",
N: "a3 ~@2 a3 ~@12",
})).s("gm_overdriven_guitar").gain(0.12).pan(0.9)
// chords · recorder
const recorder = note("<~@11 A B C D@2 E F G@2 ~@6 H I J K B C L@2 E F M@2 ~@6 N O P Q R S T U V R W ~@5>".pickRestart({
A: "~ a4 g4 f4 e4 f4@3", B: "~@4 d4@4 f4@5 g4@2 ~", C: "~@2 e4@4 f4@2 e4 d4 c4@6", D: "[~@2 d4@2 f4@3 e4@5 ~@4]/2",
E: "~@2 d4@2 f4@3 g4", F: "~@2 e4@4 f4@2 ~ d4@2 c4@5, ~@4 e4 ~@3", G: "[~@4 d4@4 f4@4 e4@15 ~@5]/2",
H: "~@2 a4@2 ~ f4@3 e4@2 f4@4 e4@2, ~@2 g4 ~@5", I: "~@2 a4@2 g4 ~ f4@2 e4@2 f4@6, ~@5 e4@2 ~@9",
J: "e4 ~ a4@2 g4 a4 f4@2 e4@2 f4@4 e4@2", K: "~@2 a4@2 g4 e4 f4@2 e4@2 f4@6", L: "[~@4 d4@4 f4@6 e4@9 ~@9]/2",
M: "[~@4 d4@4 f4@4 e4@13 ~@7]/2", N: "~@2 d4@2 ~@2 a3@2 g3@2 a3 ~ a3@2 g3 ~, ~@2 d4 ~@5, ~@5 c4@2 ~@9",
O: "~@2 d4@2 d4 c4 a3 ~ g3@2 a3 ~ a3@4", P: "~@2 d4 ~ d4 db4 a3 ~ g3@2 a3 ~ a3@2 g3 ~",
Q: "~@2 [d4,a4]@2 [c4,g4]@2 [a3,f4] ~ [g3,e4]@2 [a3,f4] ~ [a3,f4]@3 ~", // D5 C5 Dm C Dm
R: "~ [db4,ab4] [c4,g4] [a3,f4] [g3,e4] [a3,f4]@3", S: "~ [db4,ab4] [c4,g4] [a3,f4] [g3,e4]@2 [a3,f4]@2",
T: "~ [d4,a4] [c4,g4] [a3,f4] [g3,e4] [a3,f4]@3", // D5 C5 Dm C Dm
U: "~@2 [db4,ab4]@2 [c4,g4]@2 [a3,f4]@2 g3@2 ab3@2 [a3,f4]@3 ~, ~@2 e4 ~", // Db5 C5 Dm
V: "~@2 [d4,a4]@2 [c4,g4]@2 [a3,f4]@2 [g3,e4]@2 ~@2 [a3,f4]@3 ~", // D5 C5 Dm C Dm
W: "~ [db4,ab4] [c4,g4] [a3,f4] [g3,e4] [a3,f4]@2 ~", // Db5 C5 Dm C Dm
})).s("gm_recorder").gain(0.28)
// chords · electric guitar muted
const electric_guitar_muted = note(`<
A B C B C B C B D E@3 F G F H F I J K L M C B C B D E@3 F G F H F I J K L M C B C B D E@3 D E@3 D E@2 C B C N O
>`.pickRestart({
A: "[d2,a2] ~ g3 ~@3 g3 ~ [c3,f3] ~ g3@2 [g2,c3] ~ g3@2, ~@3 a3@2 d4@2 ~@9, ~@4 d3@3 ~@9", // D5 F5 C5
B: "[d2,a2]@2 g3 ~@3 g3@2 [c3,f3] ~ g3@2 c3@3 ~, ~@3 a3@2 d4@2 ~@9, ~@2 d3 ~@5", // D5 F5
C: "[d2,a2] ~ g3 ~@3 g3@2 [c3,f3] ~ g3@2 [g2,c3] ~ g3@2, ~@3 a3@2 d4@2 ~@9, ~@2 d3 ~@5", // D5 F5 C5
D: "~@2 d4@4 [d3,a3] ~ [f3,a3]@2 d4@2 [c3,g3]@2 d4@2, [d3,a3]@3 ~@5", // D5 F C5 D5
E: "~@2 d4@4 [d3,a3] ~ [f3,a3]@2 d4@2 [c3,g3]@2 d4@2, [d3,a3]@5 ~@11", // D5 F C5 D5
F: "~@2 bb3@2 d4@2 bb3@2 ~@2 bb3@2 d4@2 bb3 ~, [d3,g3]@7 ~ [d3,g3]@7 ~", // G5
G: "~ c4 ~ c4 ~ c4@2 e4, [e3,g3]@7 ~ [e3,g3]@7 ~, ~ e4 ~@2", // Em
H: "~@2 c4@2 e4@2 c4@2 ~@2 c4@2 e4@2 c4 ~, [e3,g3]@6 ~@2 [e3,g3]@7 ~", // Em
I: "~@4 e4@2 c4@2 ~@2 c4@2 e4@2 c4 ~, [e3,g3]@7 ~ [e3,g3]@7 ~, ~ c4@2 ~@5", // Em
J: "~@2 [bb3,d4]@2 d4@2 bb3@2 ~@2 bb3@2 d4@2 bb3 ~, [d3,g3]@8 [d3,g3]@7 ~", // Bb G5
K: "~@2 c4@2 e4@2 c4@2 ~@2 c4@2 e4@2 c4 ~, [e3,g3]@8 [e3,g3]@7 ~", // Em
L: "a3 a3@2 a3 [d3,a3]@2 [d3,a3] [d3,a3]@2 a3 a3@2 [d3,a3] ~ [d3,a3]@2, d3@4 ~@5 d3@3 ~@4", // D5
M: "[d3,a3] [d3,a3]@2 [d3,a3] [d3,a3]@2 [d3,a3] [d3,a3]@2 [d3,a3] [d3,a3]@2 [d3,a3]@2 [d3,a3]@2", // D5
N: "[d2,a2]@2 g3 ~@3 g3@2 [c3,f3] ~ g3@2 c3@2 a2@2, ~@3 a3@2 d4@2 ~@9, ~@2 d3 ~@5", O: "[d2,a2]@3 ~",
})).s("gm_electric_guitar_muted").gain(0.24).pan(0.2)
// chords · electric guitar muted
const electric_guitar_muted_2 = note(`<
~@2 A B@5 C D E F G H I J K L M N O@2 E@2 F D E@2 D F P Q R S T U V W O@2 E D F D E X D X F X@4 D Y A B@3 Z
>`.pickRestart({
A: "~@2 d3 ~@3 d3 ~@2 a2 d3 ~@2 a2 ~ a2", B: "d2 ~ d3 ~@2 a2 d3 ~ d2 ~ d3 ~@2 a2 d3 a2",
C: "d2 ~ d3 ~@2 a2 d3 ~@7 d3 a2", D: "d2 ~ d3 ~@3 d3 ~@3 d3 ~@3 d3 ~", E: "~@2 d3 ~@3 d3 ~@3 d3 ~@3 d3 ~",
F: "~@2 d3 ~@3 d3 ~@3 d3 ~@2 a2 d3 ~", G: "[d3,g3,bb3]@4 [d3,g3,bb3] ~@3 [d3,g3,bb3]@3 ~ [d3,g3,bb3] ~@3",
H: "[e3,g3,c4]@4 [e3,g3,c4] ~@3 [e3,g3,c4]@4 [e3,g3,c4] ~@3", // C
I: "[d3,g3,bb3]@3 ~ [g3,bb3] ~@3 [d3,g3,bb3]@3 ~ [d3,g3,bb3] ~@3", // Gm
J: "[e3,g3,c4]@3 ~ [e3,g3,c4] ~ [e3,g3]!2 [e3,g3,c4]@2 g3 [e3,g3] [e3,g3,c4]@2 [e3,g3,c4] ~", // C Em C Em C
K: "[d3,g3,bb3]@3 ~ [d3,g3,bb3] ~@3 [d3,g3,bb3]@4 [g3,bb3] ~@3", // Gm
L: "[e3,g3,c4]@4 [g3,c4] ~@3 [g3,c4]@4 [e3,g3,c4] ~@3", // C C5 C
M: "[d3,g3,bb3]@4 [d3,g3,bb3] ~@3 [d3,g3,bb3]@4 [d3,g3,bb3] ~@3", // Gm
N: "[e3,g3,c4]@3 ~ [e3,g3,c4] ~ g3 [e3,g3,c4] [e3,g3,c4]@2 g3 [e3,g3] [e3,g3,c4]@2 [e3,g3,c4] ~", // C Em C
O: "a2 d3 ~ a2 d3 ~ a2 d3 ~ a2 d3 ~ a2 ~ d3 ~", P: "[d3,g3,bb3]@3 ~ [d3,g3] ~@3 [d3,g3,bb3]@3 ~ [d3,g3] ~@3",
Q: "[e3,g3]@4 g3 ~@3 [g3,c4]@3 ~ [e3,g3,c4] ~@3", R: "[g3,bb3]@3 ~ [g3,bb3] ~@3 [g3,bb3]@3 ~ [d3,g3,bb3] ~@3",
S: "[e3,g3]@3 ~ [e3,g3] ~ [e3,g3] [e3,g3,c4] [e3,g3]@2 [e3,g3,c4] [e3,g3] [e3,g3,c4]@2 [e3,g3] ~", // Em C Em C Em C Em
T: "[d3,g3,bb3]@3 ~@5 [d3,g3,bb3]@3 ~ [d3,g3,bb3] ~@3", U: "g3@3 ~ [e3,g3] ~@3 [e3,g3,c4]@3 ~ [e3,g3] ~@3",
V: "[g3,bb3]@3 ~ [d3,g3] ~@3 [d3,g3,bb3]@3 ~ g3 ~@3", // Gm G5 Gm
W: "[e3,g3,c4]@3 ~ [e3,g3] ~ [e3,g3,c4]!2 g3@2 [g3,c4] [e3,g3,c4] [e3,g3]@2 [e3,g3,c4] ~", // C Em C C5 C Em C
X: "d2 ~ d3 ~@3 d3 ~@3 d3 ~@2 a2 d3 ~", Y: "~@2 d3 ~@13", Z: "d2@13 ~@3",
})).s("gm_electric_guitar_muted").gain(0.2).pan(0.8)
// chords · electric guitar muted · soft notes
const electric_guitar_muted_3 = note(`<
~@2 A ~@11 B C D E ~ F ~@10 G H I J K L M N ~@4 O ~ O ~@3 O ~ P ~ P ~ O A ~@4
>`.pickRestart({
A: "~@14 d3 ~", B: "~@4 d3 ~@11", C: "~@6 c4!2 ~@2 [e3,c4] c4 ~@4", D: "~@12 d3 ~@3", E: "~@2 e3 ~",
F: "~@6 [e3,c4] ~@3 [e3,c4] c4 ~@4", G: "~@4 bb3 ~@7 bb3 ~@3", H: "c4@4 e3 ~@3 e3@3 ~@5", I: "d3@3 ~ d3 ~@3 d3@3 ~@5",
J: "c4@5 ~ c4 ~ c4@2 ~ c4 ~@2 c4 ~", K: "~@4 [d3,g3,bb3] ~@11", L: "[e3,c4]@3 ~ c4 ~@7 c4 ~@3",
M: "d3@3 ~ bb3 ~@7 [d3,bb3] ~@3", N: "~@4 c4 ~@3 [e3,c4]@2 e3 ~ c4@2 ~@2", O: "d2 ~@15", P: "~@15 a2",
})).s("gm_electric_guitar_muted").gain(0.12).pan(0.8)
// drums · kick
const kick = s("bd").struct(`<
~@4 A@8 B C B D@2 E F G H@2 A@2 B A B I A J D C B K F G F L ~ M A B A@2 B J A G N F N@3 F N@2 F N F H
>`.pickRestart({
A: "x!2 ~@2 x ~@3", B: "x!2 ~@2 x!2 ~@2", C: "x ~ x ~@5 x ~ x ~@4 x", D: "x ~ x ~@4 x!2 ~ x ~@5",
E: "x ~ x ~@4 x!2 ~ x ~@4 x", F: "x ~ x ~@4 x!2 ~ x ~@3 x ~", G: "x!2 ~@2 x!2 ~ x", H: "x", I: "x!2 ~@2 x!3 ~",
J: "x!2 ~@2 x ~ x ~", K: "x ~ x ~@5 x ~ x ~@2 x!2 ~", L: "x ~@2 x!3 ~ x", M: "x ~ x!6",
N: "x ~ x ~@4 x!2 ~ x ~@2 x ~ x",
})).gain(0.49)
// drums · snare
const snare = s("sd").struct(`<
~@4 A@3 B A@3 C D E@6 F G H A@3 I A J A K D E@2 L D E@2 M G N A@3 O A P A Q A@10 R ~
>`.pickRestart({
A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@5 x!3 ~@3", D: "~ x!3", E: "x!4", F: "x ~@3 x ~@2 x ~@8", G: "~@13 x!2 ~",
H: "~@2 x ~@5 x!2 ~@6", I: "~@4 x ~@7 x!2 ~@2", J: "~@4 x ~@3 x!2 ~@6", K: "~@4 x ~@3 x ~@3 x!4",
L: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x", M: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2", N: "~ x ~@6", O: "x!3 ~", P: "x!2 ~ x",
Q: "x ~@3 x ~@7 x!4", R: "~@2 x!2 ~@2 x!2 ~@8",
})).gain(0.49)
// drums · hihat
const hihat = s("hh").struct("<~@2 A B C@3 D C@4 ~@10 E C E F E G E D ~@10 E C E H E C E D I@7 J I@2 K ~>".pickRestart({
A: "x!4", B: "x ~@3 x ~@4 x ~@2 x ~@3", C: "x!8", D: "x!7 ~", E: "~ x!7", F: "x!6 ~@2", G: "x!5 ~ x!2",
H: "x!4 ~ x ~@2", I: "x!16", J: "~@2 x!14", K: "x!2 ~@2 x!3 ~@5 x ~@3",
})).gain(0.33)
// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@15 x] ~@3 [~@15 x] ~@16>").gain(0.44)
// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@3 B ~@3 C ~@7 D ~ E ~@11 F ~@5 G ~@3 H ~@14 I ~>".pickRestart({
A: "~@11 x!2 ~ x ~", B: "~@6 x!2", C: "~@13 x!3", D: "~@12 x!4", E: "~@11 x!5", F: "~@9 x!2 ~@2 x!2 ~",
G: "~@5 x ~@2 x!4 ~ x!2 ~", H: "~@10 x!5 ~", I: "~@14 x!2",
})).gain(0.44)
// … 21 more lines
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.