So I’ve created a nice pitch shifting plugin using a phase vocoder as described here.
(Pitch Shifting and Time Dilation Using a Phase Vocoder in MATLAB - MATLAB & Simulink)
Audio quality wise, I’m really happy with the results. I’ve used the juce::dsp::fft for this.
CPU usage is quite high though, even in release mode. Compared to commercial plugins I have, this phase vocoder implementation is about 6x the cpu%.
I understand DSP like this is always going to have a significant cost. I’m just looking to reduce this as much as possible to see if it will be a viable approach for a commercial plugin.
Optimisation wise, I could look at using performRealOnlyForwardTransform() & performRealOnlyInverseTransform() Rather than the 2 perform() functions like I have currently.
I’m not very experienced with SIMD intrinsics, would it be worth the effort to try using XSIMD or similar to align some of functions?
Is there any other open source FFT libraries that could help?
Or is there a better approach than phase vocoders that I’m not aware of?
I’m just hoping to open up a conversation about conceptual approaches to pitch/time shifting with FFT.
This is intended for a guitar effect plugin to shift the guitar tuning up and down in semitones for context. Time stretching isn’t required.
Thankyou if you’ve read this far, looking forward to your insights ![]()
