The goal of this project was to make a fun GUI display using the JUCE Framework.
The plugin is a drone synthesiser, designed to produce constant sound formed by 2-100 sine oscillators.
I add and remove the oscillators from the plugin in pairs, with each pair oscillating their levels in tandem
like a siren. This way, I can ensure that the level of each pair was capped at a certain level,
which is set according to the total number of pairs.
The user is given control for:
- Num Voices - the number of oscillators active.
- Frequency Range - this determines the range from which an oscillator will choose a new frequency (oscillators reset when their volume reaches 0)
- Lock Range - this button locks the min and max values for the frequency range together so that when you move one the other moves with it.
This allows for quick scanning around.
- LFO Rate - this increases the range of frequencies used to oscillate the volumes of each pair of oscillators. This is a range
rather than a simple scale factor, therefore even at the highest rate values, there will be some oscillators which remain slow.
- Stereo Width - this determines the range from which an oscillator will choose a new pan position from (oscillators reset when their volume reaches 0)
- Light/Dark Mode - the moon/sun icons in the top right corner toggle the UI colour theme.
The visualiser in the centre of the plugin provides a visual representation of the oscillators that are currently playing.
Each oscillator is represented by a circle in the visualiser. The diameter of the circle is determined by the oscillator's level,
the brightness of the circle is determined by the frequency of the oscillator, and the position of the circle is determined by the
stereo position of the oscillator
(the distance from the centre of the visualiser is determined by the absolute stereo
position, therefore the visualiser does not show you whether an oscillator is positioned left or right, but just gives an
idea of how wide the sound is).
You can view the code and fork the repo yourself on my
GitHub.