A time domain pitch shifter will virtually modify the speed of audio playback. But there is a certain problem with this. A continuous audio stream (like realtime processing) is usually absolutely constant in its sample rate and buffer size. And also nobody can shift the time in the real world (yet!?).
This is very different when using just a sampler. A sampler will have access to a complete sound sample in memory and can play back at any sample rate, thus making it longer or shorter in time, raising or lowering the pitch this way.
A continuous stream is always fixed in the sample rate and the playback time cannot be modified without discontinuity.
Some tricks can be used, for modifying the playback speed virtually. We use a delay based approach, where 2 slightly time shifted overlapping delay buffers are filled with continuous data streams and then a windowing function is used to merge these two buffers together again without any crackles. The buffers are constant in length and a short variable latency will be introduced, that is pitch dependent.
This way, the speed of the reading pointer can be adjusted in realtime to a fractional part of the current sample rate. This all sounds quite simple, but in reality it is complex coding and also will produce some unavoidable side effects. Extreme values tend to become grainy.
The good news are, this takes polyphonic (in fact any) material and shifts its pitch without a problem. All transients and the formants are shifted equally with the pitch, which produces the typical “chipmonkeyfication”.
The time domain approach is better situated for usage with transient material, because it will not smear so much as the frequency domain approach of JAX ESSENTIAL SERIES P3.
- September 27, 2020 Initial release