Pitch shifter beating?

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS

Post

Hi 8D
I am pottering around with pitch shifters.
Gemini suggested I should use a Hanning window,
not my trapezoid
in a pitch shifter that re-samples an array of audio
I implemented a Hanning/sine array
but the beating/vibrato is worse.
This window is multiplied with the grain's array,
to fade the overlaid grains

many edits later :
it told me now that Hanning windows only work for multiples of 2 overlaid grains.
I have 3 for the trapezoid
What do you think would help improve the beating?
Do you think the Hanning window will help?
I am attempting to change my architecture to have 2 grains

best wishes
I wonder what I want in here
-my site is gone and music a mess

Post

This is better than most poems I've read recently.
My audio programming blog: https://audiodev.blog

Post

teehee

The sine window(2 grains/lines) is sounding pretty similar to the trapezoid(3 grains/lines) now
-there is some beating
I wonder what I want in here
-my site is gone and music a mess

Post

I would suggest using an oscilloscope plugin to view the output waveform, then feed your plugin with a simple waveform and zero pitch shift to see if you still get beats. If you do, then the chances are something's wrong with your windowing, or the timing of the addition of grains causing signal cancellation because of phase differences.

Otherwise if the simple case sounds/looks ok, then systematically change things to see when problems first start to appear.

But bear in mind that if you mix a grain with another grain having similar but delayed content then you will naturally get beats when the delay approaches an odd number of half-cycles of whatever frequency is in the grain.

Post

I think you were using the multiple delayline resample grain method? The beating effect can't simply reduce using window and number of grains. You should make a phase Correlate detector to find the best jump step.
The whole step like:
you have two delayline read pointers, when unfade state, just read only one(called main pointer), then when the pointer is going into crossfade bound(1), using a method to find the best phase correlation point to set the second read pointer, eg: using fft to calculate the maximum correlation between crossfade bound(1) and the whole delay buffer, then set the second read pointer and begin crossfade state, after crossfade update the main pointer to second pointer.

Post Reply

Return to “DSP and Plugin Development”