Objectives
- Learn to use JUCE, the cross-platform C++ framework
- Create one (or more) working audio plug-in for use in Logic Pro X and Audacity
- Creating valid Audio Units (AU) and Virtual Studio Technology 3 (VST3) with JUCE
- One of the audio plug-ins used the built-in DSP modules in JUCE daVerb
- And the other one created a circular buffer daFlange.
Project Design
daFlange
has a circular buffer that is read at variable speeds via a low frequency oscillator to achieve a flanger effect.daVerb
takes advantage of the relatively recent release of the JUCE DSP module. TheDSP::Reverb
andDSP::Gain
can be chained together by using theDSP::ProcessorChain
. This allows any number of classes (including custom filters, convolutions, etc.) to be linked together.
- Backgrounds are by elum3a and byrawpixel on instagram, and, are free to use from pixabay.com.
Challenges
- JUCE can be hard to work with at times:
- Compiling the application with no errors, and testing it in the Audio Plug-in Host does not mean it will create a valid Audio Units file for Logic Pro X to use. A solution I have found that sometimes fixed this issue was to select any different target plug-in type (MIDI Processor instead of Audio Effects for example) in Projucer, compile the application, switch back to the original target type, recompile, and suddenly the AU will pass the Mac Validation check. I have not yet discovered why this works.
- A Wealth of tools exist that make developing Audio Plug-ins much easier and faster if you know they exist. For example the
auval
tool that tests/validates AU’s, JUCE’sAudio Plug-In Host
that lets you use your plug-ins outside of a Digital Audio Workstation, theAudioFilePlayer
that can feed input to your plug-ins while in the Plug-In Host. - The size of the framework, the classes, the idioms, the Projucer app, it can be very overwhelming, but the
Class Index
is very helpful. - Following the tutorials on the JUCE website helps to get a new user started but as the tutorials get more advanced there is less information and less clarity. Tutorial examples also do not always resemble Projects created with JUCE.