Pitch shifter beating?
- KVRAF
- 5379 posts since 22 Jul, 2006 from Tasmania, Australia
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 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
-my site is gone and music a mess
- KVRist
- 113 posts since 2 Jul, 2021 from Netherlands
- KVRAF
- Topic Starter
- 5379 posts since 22 Jul, 2006 from Tasmania, Australia
teehee
The sine window(2 grains/lines) is sounding pretty similar to the trapezoid(3 grains/lines) now
-there is some beating
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
-my site is gone and music a mess
- KVRian
- 804 posts since 25 Apr, 2011
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.
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.
-
- KVRer
- 14 posts since 16 Jan, 2026
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.
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.
