On Sat, Nov 30, 2002 at 06:39:40 -0800, Dominic Mazzoni wrote:
> Steve Harris wrote:
> >On Fri, Nov 29, 2002 at 10:01:13 -0800, Dominic Mazzoni wrote:
> >>Interested in helping to compare various pitch and tempo
> >>changing algorithms? I've compared a three free ones
> >>here, and I'd like some feedback:
> >> http://spaghetticode.org/pitchtempotest/
> >Just a quick note, PVOC implementations (like pitchscalehq) can be
> >daramatically improved in sound quality (time smear - the anoying metalic
> >sound) by increasing the window overlap. Unfortunatly this makes the cpu
> >cost go up, so it isn't really practical for realtime, but (IIRC) its the
> >method of choice for very high quality.
> I tried 16 and 32 for the overlap, and it still sounded tinny. The
> samples on the web page used 16. Do you think it would sound better if
> I upped it to 128? (It would take quite a while to process!)
Well the ideal is onw window for each input sample, ie overlap=window
size! Now you see you see why I said it was not practical for realtime ;)
> >I think WSOLA is a better performance/quality trandeoff though. It would
> >pay you to also include some of the simple AM type pitch shifters, they
> >are very simple and are better under some circumstances.
> AM = amplitude modulation? What do you mean by that? Any example
> source code?
Amplitude modulation, yes.
You have two buffers filled from the input signal, but out of phase
with each other. Then you read from them at the right rate to get the output
pitch, and crossfade between them such that as the read pointer crosses the
write pointer the amplitude is 0.0 and when it is 180deg from the write
pointer its 1.0. [I think thats right anyway, its based on my
understnading of how tape based pitch shifters worked]
I think its best to crossfade with a sin function.
There are variations, but I dont know what they are. Its not a very high
quality shift (it doesn't take care of formants or anything, and it
drops/repeats bits of the input) but it is valid as an effect, and works
well for certain unvoiced sounds.
I've been meaning to do a plugin that implements this for ages, but never
got round to it. If I have time I'l take a stab at it later today.