I've been researching pitch-shifting algorithms both in the time and frequency domains with the aim of implementing a real-time polyphonic pitch shifter with minimal artifacts and latency (the goal is to make my own pitch shifting guitar pedal).
In parallel I've been experimenting with RFFT and its inverse on the STM32F4 whilst trying to figure out which domain to go for. I've tried this basic time-domain algorithm and it's fine except that I would like to reduce the trem-like output and improve the sound as it sounds a bit 'metallic'. After this I went back to the RFFT on the STM32F4 and for the time being I've tried converting the time-domain to frequency domain and back to time-domain. This works except for the fact that increasing the buffer size is causing audible latency. For example at 48kHz for 2048 samples ~43ms of latency is expected.
At this stage I'm looking for guidance or opinion from experience. For example should I pursue the frequency domain further but limit the buffer to 512 samples (I'm not sure that I will get good frequency resolution with this). Or should I look into time-domain methods like the WSOLA/PSOLA?
Thanks!