I have completed my VST Audio Effect plugin in preparation for final presentation Monday Dec 8th.

I added an enable/disable button for the pitch-shifting to save on CPU resources if that part is not needed.

I also added a ‘Bass Mix’ slider to mix  un-processed bass frequencies back into the vocal-removed signal.

Depending on the song sometimes the vocal removal works well but also removes the beat.

To do this I created a low-pass filter that takes the original signal from the Host and adds it to the vocal-removed signal with a gain equal to the Bass Mix Slider (0-1.0).

For extra convenience the cutoff frequency of the LP filter is configurable using an additional slider that goes from 50Hz to 500Hz. At 500Hz some vocals start creeping back into the mix.

To expand the versatility of my final project for Digital Audio Programming I decided to explor adding Vocal removal.

The standard technique is relatively simple to implement but can be hit-or-miss. It relies on the assumption that vocals will be mixed ‘center’ meaning equal energy in each channel, left and right. By negating one channel of audio and adding it to the other the vocals in theory will cancel out.

This works near perfectly with some songs and not at all with others. Some songs completely cancel out, indicating that they were not very stereophonic to begin with.

Another issue to deal with is that MP3 is a ‘lossy’ encoding scheme so the audio itself is altered when it is saved. This means that even if a certain segment of the song is supposed to be the same in both channels there may be slight differences. The result is that ‘echoes’ of the vocals can be heard. Sometimes it is barely noticeable, other times it is completely counterproductive and renders the method unusable.

The vocal removal effect is now integrated with the Juce Pitcher, before the pitch shifting. It is important to do it before pitch shifting because the pitch shifting would render any chance of effective vocal removal essentially zero.

An interesting thing to note is that the observable/desired effects of pitch-shift are focused more on the vocals. Removing the vocals and then trying to pitch shift does not always result in a largely discernable change. Nevertheless, it is possible to do both at once.

The CPU usage meter in Ableton Live hits a max of about 30% when using both vocal removal and pitch shifting which is higher than desired but still workable.

I also added enable/disable buttons for the Low-pass and high-pass filters in case it is desired to pitch shift on the entire frequency range.

I am developing a Virtual Studio (VST) Plugin for MAT240A, Digital Audio Programming. VST plugins are used in professional audio software such as Cubase, Sony ACID and Ableton Live. Development is simpler than making a standalone audio application since the details of manipulating sound files are taken care of by the plugin host.

The host gives you a buffer of values corresponding to the audio stream and the plugin operates on the buffer and returns it so it can be passed to the next plugin in the host, or the output.

I am using the JUCE framework to develop my plugin. Though JUCE has many features and benefits I am using it because it greatly simplifies the Graphical User Interface development through a tool called the Jucer.

My project goal is to create a plugin that will shift the pitch of the audio while keeping duration constant (since it is used in a real-time playback situation). To make things more interesting I want to have multiple bands that let me pitch-shift certain segments of the frequency spectrum independently.

Pitch shifting can be accomplished in the time-domain or the frequency-domain. Time-domain involves modifying the sampling rate and discarding samples while frequency-based shifting uses the Fast Fourier Transform (FFT).

I started by reading about the various techniques and decided it would be interesting to try it with the Fourier transform. This article has very good information about the method as well as the FFT in general. The FFT method is effective but computationally intensive.

Many people have written open-source libraries of code that are extremely optimized for this task. As the goal of this class is to explore the creation of audio-processing applications rather than the effects algorithms themselves I decided to incorporate one such library into my code.

SoundTouch is an open-source library that provides pitch-shift, time-stretch and playback-rate effects. It is object-oriented and very easy to use.  It is used in many open source applications and audio plugins.

The JUCE framework has built-in classes for audio filters as part of the audio plugin code which will make splitting the signal into different bands much easier.

Below is the curent user interface for the plugin as it is begin developed: