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.
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.
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!
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.
Most Users Ever Online: 152
Currently Browsing this Page:
Guest Posters: 1
Newest Members:Cameron C., Kaih, davidfernxndez, J.Miguel, 3ddie, Mike, salik, Franklin, TAldhous, Johan
Moderators: W Pirkle: 659