Dear list, long ago I made a live sampler where you can start recording
into an array and right away start phase vocoding on the fly - based on the
"I07" example, so I was using a regular buffer/array. So I wanted to make
it run with a circular buffer, and once in january 2012, someone here on
the list told me to try using [vd~]. Well, I never really could do it, and
it's only these days that I was able to sit down and finally nail it. I
made it happen, but I can't really understand it and I hope you can help me.
I have patches attached so it'll help point out what I say. In the same
file I have a regular granular pitch shift + time stretch and the same
patch adapted to use the phase vocoder "phase accumulation" procedure.
I know there are issues that come up with the way overlapping works in Pd.
For example, if you are doing a pitch shifting with a granular engine using
[vline~] to read the grains, you'll have to increase the reading speed of
[vline~] times the overlapping. So, in an overlap of "4", time will have to
be 4 times faster (so divide time in ms by 4).
Other issues related to overlapping besides this "oversampling" is that
some objects won't make it right, they'll chop the blocks with
discontinuities, such as the case with [osc~]. But as it turns out, unlike
[osc~], [vd~] will get the continuities between blocks right!
So I'm reading grains out of a delay line with [vd~] using [vline~]. For a
regular buffer/array I know I have to get the time of [vlaine~] faster, but
with vd~] 'm having to divide EVERYTHING by the overlap number, that
includes the starting point, the end point, and the difference in ms
between the front and back FFT window...
It might have something to do with the way I described [vd~] works in an
overlapping subpatch, but I just can't get it - it makes no sense to me.
And even more weirdly, in the Pvoc patch I have to multiply the difference
between the front and back windows to the ratio of transposition. This is
even crazier than the last issue, and I have no idea why that has to be
this way...
So I have these two adaptations I had to make, divide by overlap and
multiply by the ratio, they're marked with "*" in the phase vocoder
subpatch, hopefully it'll be quite clear. Besides this, both patches I have
attached are about the exact same.
cheers