Developing a pitch shifter plugin | Algorithm Design | Forum


Please consider registering

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —

— Match —

— Forum Options —

Minimum search word length is 3 characters - maximum search word length is 84 characters

sp_Feed Topic RSS sp_TopicIcon
Developing a pitch shifter plugin
November 14, 2021 - 4:24 pm
Member Since: November 10, 2021
Forum Posts: 10
sp_UserOfflineSmall Offline

Hi everyone. I have started in this forum because I want to create a plugin as an autotune for my final degree project (I am studying Telecommunications Engineering at the University of Granada, Spain). 

In a communications system, digital signal processing is a key part for its correct operation, I have no problem understanding the DSP algorithms because I have worked on it a lot during the degree. What I am new to is plugin development, I have programmed in C but not in C ++. To orient myself I am going to follow Will's book "Designing audio effect plugins in C ++". The chapters that I have decided to study are:

- Chapter 2: Anatomy of an Audio Plugin

- Chapter 6: ASPiK Program Guide

- Chapter 7: Using RackAFX to Create ASPiK Projects

- Chapter 8: C++ Conventions and How to Use This Book

- Chapter 20: FFT Processing: The Phase Vocoder 

I would like that with the objective of developing a plugin like autotune if you could tell me if these chapters are the ones I need to learn or what other material can be useful to understand plugin development in C ++. My final degree project is delivered in July 2022, I have never programmed in C ++ and I don't know if the time I have is too short to be able to present a decent work (that is, a plugin that works correctly on a DAW).

If you have read this far, thank you very much and I hope you have a good day. Regards, David.

November 25, 2021 - 2:53 am
Member Since: January 1, 2020
Forum Posts: 107
sp_UserOfflineSmall Offline

Hi David,

Your plan sounds very good and achievable in that time-frame, following the book and the provided example.

Will's Pitchshifter project, does half of what you'll need for this project if use that as a basis. 

You can take that part further with the Laroche technique mentioned in the homework section if you wanted. But I haven't actually tried that or played much with FFT's except for convolution sometimes. I usually prefer pitch-shifting in the time domain (+ that other one) but also haven't wanted to mess with FFTW's licence.

The other topic you'll need to research though is a method of pitch-tracking which must be very accurate with respect to both pitch and time.

Since you're dealing with monophonic signals you may get away with parabolic interpolation over the adjacent loudest bins of your FFT output. Else you could investigate cepstrum analysis or some other method based from taking a modified iFFT of your FFT.

Think I've seen claims that time methods can work better anyway for pitch-tracking depending on the application. So you could simply count zero crossings of the waveform for a simple solution and then try more advanced cross-correlation techniques if needed.

I've had acceptable results with the Yin detection method in the past. There is a pure C example on github that you can check out.

Phase Locked Loops are another good approach but may not behave stably enough.

You might want to hunt down the old Antares patents. They used time based auto-correlation and an awesome WSSNONANK (Wavelength Synchronized Splicing, No Overlap, No Add, No kidding) technique.


November 25, 2021 - 12:02 pm
Member Since: November 10, 2021
Forum Posts: 10
sp_UserOfflineSmall Offline

Hi James!

First of all, I thank you for all the information you have given me, it has been quite useful. I've been looking for patents for antares or some commercial pitch-shifting plugin. However, I have not found any patent or any document in which the techniques used for both pitch-tracking and pitch shift are explained at a theoretical level.

Does it appear in a chapter of Will's book explanations about pitch-tracking and the C ++ objects that are used? If so, and you can provide me with which ones, it would be useful to me.


again, thanks for everything!




November 29, 2021 - 10:49 am
Member Since: January 1, 2020
Forum Posts: 107
sp_UserOfflineSmall Offline

Happy to help David, cheers.

I am not aware of other writings on this topic but you should keep looking.

Autotune is more akin to an artful combination of two different and specialized processes. One being an effect, one being the detector.

Verfaille, Zolzer and Arfib wrote a classic paper on Adaptive Audio Effects (A-DAFx) which provides a theoretical basis on this broader field and may be worth reading. Also expounded upon in Zolzer's excellent book, 'DAFX'. (Autotune is only referenced however)

Regarding Antares and patents generally, you'll find that a lot of key info is kept purposefully hidden as a 'trade secret'. Nowhere is the WSSNONANK method explained for instance but I doubt they still it with their latest product line.

I just found a python implementation of the Anatares Auto-Correlation method from their patent here, seems extremely slow (10s to compute 1s) and the pitch-shifting is again unexplained but it's performed there by offline resampling. 

Here's the C code I mentioned which performs the Yin pitch tracking detection algorithm. 

It might be worthwhile investigating methods of extracting pitch directly from the FFT however since you'll already have that calculated.When I've attempted pitch detection in the past, it was primarily in the context of guitar signals, so I can't properly suggest which approach would work best here with vox.

November 30, 2021 - 10:56 am
Member Since: November 10, 2021
Forum Posts: 10
sp_UserOfflineSmall Offline

Thank you very much for everything James!

The information you have provided is very useful. I will start working and if I have any other questions again, I will write in the forum.
Regards, David

Forum Timezone: America/New_York

Most Users Ever Online: 152

Currently Online:
9 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

Chaes: 56

Skyler: 48

StevieD: 46

Derek: 46

Frodson: 45

Peter: 43

TheSmile: 43

Nickolai: 43

clau_ste: 39

jeanlecode: 37

Member Stats:

Guest Posters: 2

Members: 786

Moderators: 1

Admins: 6

Forum Stats:

Groups: 13

Forums: 42

Topics: 853

Posts: 3385

Moderators: W Pirkle: 698