« App Sales: Black Monday 2020 | App News | iVCS3 Update »

JAX - Pitch Shifter by Jens Guell

Jens Guell released JAX P2 - Pitch Shifter II an AUv3 effect that uses a time domain approach to pitch shifting.

JAX P2 - Pitch Shifter II

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.

On the very same day, Jens Guell also released JAX P3 - Pitch Shifter III, which sounds like the fastest forced obsolescence in the history of apps. It is actually just a different take on Pitch Shifting. The P3 uses Fast Fourier Transform (FFT) instead of the time approach in P2.

JAX P3 - Pitch Shifter III

Our frequency domain approach for pitch shifting will use the “phase vocoder” method, that effectively is an FFT/inverse FFT. The term “vocoder” is somewhat misleading here, because it has nothing to do with a real “vocoder”.

FFT will introduce latency too, but the buffers can be kept relatively small and the input can be shifted by exactly this fixed amount of latency for the final mix internally.

Complex mathematical formulas will be used to extract the frequency components from the signal and their corresponding magnitudes. After the frequency is known, it can be modified in controlled manner, thus making pitch and frequency shifting possible in realtime.

If the frequency was modified across all magnitudes equally, the inverse FFT is applied, leaving the audio with a changed pitch. Like the time domain approach of JAX ESSENTIAL SERIES P2, this will produce “chipmonkeyfication” effects, because all transients and formants will be shifted this way too, proportional with the fundamental frequency.

The frequency domain approach has some side effects too. The audio will be smeared slightly but equally across the entire range. Grainy results are less audible than with the time domain approach. It is not well situated for using with strong transient audio material. Excellent results can be achieved with ambient audio material.

Reader Comments 1

Very impressive app, especially P3. P2 is maybe more useful for finetuning between +/- 0.5
November 24, 2020  | person_outline Hg

  Post a New Comment

You are not currently logged in. Would you like to login or register?
Enter your information below to add a new comment anonymously.

I'm not a racist, but...
Usernames need to be at least 2 characters!
I'm not a racist, but...
Please don't use weird characters in usernames!
{[ Ctrl.useravailable[Ctrl.userselector] ]}
{[ Ctrl.useravailabletext[Ctrl.userselector] ]}
Wow, that's a short email address!


Do not use HTML in your comments. Tags: [b] Bold Text [/b] [i] Italic Text [/i]
Links will be generated if you include http:// or https:// at the beginning of a URL.

Contact | Privacy Policy | Developer Services | Advertise
discchord.com is a service of Gnubesoft