0:00/0:00
// Puff — Peter, Paul & Mary
// 145 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Strings (BB)" named as a string part, played on string ensemble 1 (its acoustic guitar steel patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(145/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.
// bass · acoustic bass · "Bass (BB)"
const bass = note(`<
~@2 A B C D C E F G A H C A I J K L D H I D C M F G A H C A C M N L A B I D C M F O D B I A I P N Q A B I D C M F G A
H C D I J K R D B C D I M S O A H C A C M K Q D B C D I M S O A H C A C M K Q A B I D C M T O A H C D C P N L S U V D
L W
>`.pickRestart({
A: "g2 d3", B: "b1@3 b1 f#2@3 f#2", C: "c2 g2", D: "g2@3 g2 d2@3 d2", E: "g2@3 g2 e2@3 e2", F: "a1 e2",
G: "d2@6 d2@2 e2@3 ~ f#2@4", H: "b1 f#2", I: "c2@3 c2 g2@3 g2", J: "g2@4 e2@3 e2", K: "a1 d2", L: "g2 d2", M: "g2 e2",
N: "a1@3 a1 d2@4", O: "d2 a2", P: "g2@3 g2 e2@4", Q: "g2@4 d2@3 d2", R: "g2@3 g2 d2@4", S: "a1@3 a1 e2@3 e2",
T: "a1@3 a1 e2@2 c#2@2", U: "a1@6 a1@2 b1@3 ~ c#2@4", V: "d2@3 d2 d2@3 d2", W: "g2@2 g2 ~ d2@4 g2@8",
})).s("gm_acoustic_bass").gain(0.48)
// chords · epiano1 · "Piano (BB)"
const epiano1 = note(`<
~@2 A B C A C D E F ~@3 A C D G H A I C A C D E F ~@3 A C D J ~ A B C A C D E F A B C A C D J H A B C A C D E F A B C
A C D J H A B C A C D E F ~@3 A C D J H A B C A C D E F ~@3 A C D J H A B C A C D E F ~@3 A C D J ~ E@2 K A L@2
>`.pickRestart({
A: "[g3,b3,d4]", B: "[f#3,b3,d4]", C: "[g3,c4,e4]", D: "[g3,b3,d4] [g3,b3,e4]", E: "[c#4,e4,g4,a4]", F: "[a3,d4,f#4]",
G: "[c#4,e4,g4,a4] [f#3,a3,d4]", H: "[g3,b3,d4] [c4,d4,f#4,a4]", I: "[b3,d4,f#4]", J: "[c#4,e4,g4,a4] [a3,d4,f#4]",
K: "[a3,d4,f#4] [a3,c4,d4,f#4]", L: "[[g3,b3,d4]@7 ~]/2",
})).s("gm_epiano1").gain(0.32)
// chords · acoustic guitar nylon · "Guitar (BB)"
const acoustic_guitar_nylon = note(`<
~@2 A B C D E F G H I J C A C K L M I B E D E F N H O J P I C K L Q D B C A E R S H A T C D U F V W I X U I C R S Y D
T U Z U AA V W D X U A C K G H AB AC C A E K V AD D X U A C K G H AB AC C A E K V AD A B C D E AA N Y AE J AF I E F L
AG N@2 AH AI@3
>`.pickRestart({
A: "~@12 b3@3 b4, [g2,b4] d2, ~@4 b3@7 g4@5", // G
B: "~@7 f#3, b2@5 ~@3, f#4@3 ~ f#4@3 ~, ~ f#3@2 f#3@2 f#3@2 ~, ~ b3 ~ b3",
C: "~@7 g3, c3@5 ~@3, g4@3 ~ g4@3 ~, ~ g3@2 g3@2 g3@2 ~, ~ c4 ~ c4",
D: "~@7 b3, g2@5 ~@3, b4@3 ~ b4@3 ~, ~ b3@2 b3@2 b3@2 ~, ~ d4 ~ d4", E: "~@12 g3@3 g4, [c3,g4] g2, ~@4 g3@7 e4@5",
F: "~@2 b3@2 ~@3 g3, [g2,b4] e2, ~@4 g4@3 ~, ~@5 g3@2 ~, ~@3 b3", // G
G: "~@7 e3, a2@3 ~@3 a3@2, ~ c#4@2 a3@2 e3@2 ~, ~ e3 c#3@2",
H: "~@7 a3, d3@5 ~@3, a4@3 ~ a4@3 ~, ~ a3@2 a3@2 a3@2 ~, ~ d4 ~ d4",
I: "~@2 b4 ~@2 b4 b4@2, b3 ~, d5@3 b4@2 ~@3, ~ g4@3 g4@4", J: "~@3 d4, b2, ~@3 d4@3 ~@2, ~ f#3, ~@5 f#4@3",
K: "~@3 b3 ~@3 g3, g2 e2, b4@3 ~ g4@3 ~, ~ b3@2 ~@2 g3@2 ~, ~ d4 ~ b3",
L: "~@3 e3 ~@2 a3@2, a2 ~, c#4@3 ~@5, ~ e3@2 ~ [d3,a4]@4, ~ g3 ~@2", M: "~ b3 ~ a3, [g2,b4] [d3,f#4]",
N: "~@12 e3@3 c#4, [a2,c#4] e2, ~@4 e3@7 a3@5", O: "~@7 b4, [g2,b4]@2 b3!2, ~@2 g4@3 g4@2 ~",
P: "~@7 g4, [c3,g4]@2 g3!2, ~@2 e4@3 e4@2 ~", Q: "~@3 g4 ~@3 d4, g2 d3, ~@2 b4@2 ~ f#4@2 ~, ~@3 a3",
R: "~@3 b3 ~@2 g3@2, g2 [e2,g4], b4@3 ~@5, ~ b3@2 ~@5, ~ d4 ~@2", // Em
S: "~@7 e3, a2@5 ~@3, c#4@3 ~ e4@3 ~, ~ e3@2 e3@2 e3@2 ~, ~ g3 ~ g3",
T: "~@7 f#3, b2@3 ~ d3@4, ~ d4@2 d4@2 ~ d4@2, ~@2 f#3@2 ~ f#3@2 ~",
U: "~@7 g3, c3@3 ~@2 g3@2 ~, ~ e4@2 e4@2 ~ e4@2, ~ g3 e3@2",
V: "~@3 e3 ~@3 a3, a2@2 ~ d4, c#4@3 ~ a4@3 ~, ~ e3@2 ~ d3@4, ~@2 g3@2 ~ a3@2 ~",
W: "~@3 b3 ~@2 a3@2, g2 [d3,f#4], b4@3 ~@5, ~ b3@2 ~@5, ~ d4 ~@2", X: "~@12 f#3@3 f#4, [b2,f#4] f#2, ~@4 f#3@7 d4@5",
Y: "~@12 a3@3 a4, [d3,a4] a2, ~@4 a3@7 f#4@5", Z: "~@7 b3, g2@3 ~@3 g4@2, ~ g4@2 g4@2 b3@2 ~, ~ b3 g3@2",
AA: "~ b3 ~ g3, [g2,b4] [e2,g4]", AB: "~@3 g4, g2, ~@3 g4@3 ~@2, ~ b3, ~@5 b4@3",
AC: "~@7 f#4, [b2,f#4]@2 f#3!2, ~@2 d4@3 d4@2 ~", // B5
AD: "~@3 b3 ~@3 a3, g2 d3, b4@3 ~@3 c4@2, ~ b3@2 ~@2 a3@2 ~, ~@2 d4@2 f#4@3 ~",
AE: "~@7 b3, g2@4 ~ b3@2 ~, ~ g4@2 g4@3 g4@2, ~ b3 g3@2", AF: "~@3 e4, c3, ~@3 e4@3 ~@2, ~ g3, ~@5 g4@3",
AG: "~@2 g4@2 ~@3 d4, [g2,b4] d3, ~@3 a4", AH: "~@3 a3 ~@2 a3@2, d3 [d3,f#4], a4@3 ~@5, ~ a3@2 ~@5, ~ d4 ~@2",
AI: "[~@2 b4 ~@2 b4 b4@2 ~@7 b3 ~@3 b3 [g2,b3,g4,b4]@4, b3 ~ [g2,b4]!2 [g2,b4] ~, d5@3 b4@2 ~@4 b3@2 b3@2 b3@2 ~@2 b3@2 ~@5, ~ g4@3 g4@6 g4@4 g4@4 g4@2 ~@4]/3", // G
})).s("gm_acoustic_guitar_nylon").gain(0.4)
// chords · string ensemble 1 · "Strings (BB)"
const string_ensemble_1 = note(`<
~@2 A B C A C D E F G H I G I J K L A B C A I D M F G B I G I J N O G B I G I J M F A B C A I J P Q G H C A C R E S G
H C A I R N Q A H I G I J E F G B C A I D K L A H I G I J E F G B C A I D K L A B I A C D M S A H C A C D K O M E T G
U V
>`.pickRestart({
A: "[b3,g4,b4]@2 g4 [b3,g4] [g4,b4] [b3,g4,b4]!3, ~ b4 ~@2", // Em G Em
B: "[f#3,d4,f#4]@2 [f#3,f#4] f#3 [f#3,d4,f#4]!2 [f#3,d4]!2, ~ d4 ~ f#4", // D F# D
C: "[g3,e4,g4]@2 [g3,g4] g3 [g3,e4,g4]!2 [g3,e4]!2, ~ e4 ~ g4", // C G C
D: "[b3,g4,b4]@2 g4 [b3,g4] [g3,e4,g4]@2 [g3,g4] g3, ~ b4 ~ e4", // Em C G
E: "[g3,c#4,e4]@2 [g3,e4] g3 [g3,c#4,e4]!2 [g3,c#4]!2, ~ c#4 ~ e4", // C#dim C C#dim Gdim
F: "[a3,f#4,a4]@2 f#4 [a3,f#4] [f#4,a4] [a3,f#4,a4]!3, ~ a4 ~@2", // D F#m D
G: "[b3,g4,b4]@2 [b3,b4] b3 [b3,g4,b4]!2 [b3,g4]!2, ~ g4 ~ b4", // Em B Em
H: "[f#3,d4,f#4]@2 d4 [f#3,d4] [d4,f#4] [f#3,d4,f#4]!3, ~ f#4 ~@2", // D
I: "[g3,e4,g4]@2 e4 [g3,e4] [e4,g4] [g3,e4,g4]!3, ~ g4 ~@2", // C Em C
J: "[b3,g4,b4]@2 [b3,b4] b3 [g3,e4,g4]@2 [g3,g4] g3, ~ g4 ~ e4", // Em B C G
K: "[g3,c#4,e4]@2 [g3,e4] g3 [a3,f#4,a4]@2 f#4 [a3,f#4], ~ c#4 ~ a4", // C#dim C D
L: "[b3,g4,b4]@2 [b3,b4] b3 [a3,d4,f#4]@2 d4 [a3,d4], ~ g4 ~ f#4", // Em B D D5
M: "[e3,a3,c#4]@2 a3 [e3,a3] [a3,c#4] [e3,a3,c#4]!3, ~ c#4 ~@2", // A A5 A
N: "[e3,a3,c#4]@2 a3 [e3,a3] [a3,f#4,a4]@2 f#4 [a3,f#4], ~ c#4 ~ a4", // A A5 D
O: "[b3,g4,b4]@2 g4 [b3,g4] [c4,f#4,a4]@2 [c4,a4] c4, ~ b4 ~ f#4", // Em F#dim F
P: "[e3,a3,c#4]@2 a3 [e3,a3] [a3,f#4,a4]@2 [a3,a4] a3, ~ c#4 ~ f#4", // A A5 D A
Q: "[b3,g4,b4]@2 g4 [b3,g4] [a3,d4,f#4]@2 d4 [a3,d4], ~ b4 ~ f#4", // Em D D5
R: "[b3,g4,b4]@2 g4 [b3,g4] [g3,e4,g4]@2 e4 [g3,e4], ~ b4 ~ g4", // Em C
S: "[a3,f#4,a4]@2 [a3,a4] a3 [a3,f#4,a4]!2 [a3,f#4]!2, ~ f#4 ~ a4", // D A D
T: "[a3,f#4,a4]@2 f#4 [a3,f#4] [c4,f#4,a4]@2 [c4,a4] c4, ~ a4 ~ f#4", U: "[g2,b3,g4,b4]!3 [b3,g4,b4] [g2,b3,g4,b4]!4",
V: "[g2,b3,g4,b4]@7 ~", // G
})).s("gm_string_ensemble_1").gain(0.16)
// chords · string ensemble 1 · "Strings (BB)" · soft notes
const string_ensemble_1_soft = note(`<
~@2 A B C A C D E F G H I G I J K L A B C A I D M F G B I G I J N O G B I G I J M F A B C A I J P Q G H C A C R E S G
H C A I R N Q A H I G I J E F G B C A I D K L A H I G I J E F G B C A I D K L A B I A C D M S A H C A C D K O M E T G
U ~
>`.pickRestart({
A: "~@2 b3 ~ b3 ~@3", B: "~@3 f#4 ~@4", C: "~@3 g4 ~@4", D: "~@2 b3 ~@4 g4", E: "~@3 e4 ~@4", F: "~@2 a3 ~ a3 ~@3",
G: "~@3 b4 ~@4", H: "~@2 f#3 ~ f#3 ~@3", I: "~@2 g3 ~ g3 ~@3", J: "~@3 b4 ~@3 g4", K: "~@3 e4 ~@2 a3 ~",
L: "~@3 b4 ~@2 a3 ~", M: "~@2 e3 ~ e3 ~@3", N: "~@2 e3 ~@3 a3 ~", O: "~@2 b3 ~@4 a4", P: "~@2 e3 ~@4 a4",
Q: "~@2 b3 ~@3 a3 ~", R: "~@2 b3 ~@3 g3 ~", S: "~@3 a4 ~@4", T: "~@2 a3 ~@4 a4", U: "~@3 g2 ~@4",
})).s("gm_string_ensemble_1").gain(0.04)
// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@118>").gain(0.28)
// drums · congas
const congas = s("conga:13").struct(`<
~@2 A@2 B A@4 B A@5 B A B A@2 B A@4 B A@5 B@2 A@3 B A@4 B A@2 B A@2 B A B A@2 B A@4 B A@2 B A@2 B@3 A@2 B A@4 B A@5 B
A B A@2 B A@4 B A@5 B A B A@2 B A@4 B A@5 B@2 A B@2 A@3 C
>`.pickRestart({
A: "~ x", B: "~@2 x!2", C: "~ x!2 ~",
})).gain(0.39)
// drums · congas
const congas_2 = s("conga:18").struct(`<
~@2 A@2 B A@4 B A@5 B A B A@2 B A@4 B A@5 B@2 A@3 B A@4 B A@2 B A@2 B A B A@2 B A@4 B A@2 B A@2 B@3 A@2 B A@4 B A@5 B
A B A@2 B A@4 B A@5 B A B A@2 B A@4 B A@5 B@2 A B@2 A@3 C
>`.pickRestart({
A: "x!4 ~ x!3", B: "x!4 ~ x ~ x", C: "x!2 ~ x!2 ~@3",
})).gain(0.39)
stack(bass, epiano1, acoustic_guitar_nylon, string_ensemble_1, string_ensemble_1_soft, rim, congas, congas_2)
More by Peter, Paul & Mary
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.