March 28, 2024
Juce – MVC with custom XY Pad component from Trond Lossius on Vimeo.
After two failed attempt, the third attempt succeeded.
This is a fairly simple plugin, and is mostly meant as a study (étude) into a specific programming problem when developing plugins in C++ with the Juce framework. The plugin controls gain and pan. ValueTreeState enables model-view-control separation, and as compared to an earlier study, it expands by implementing a custom component in the form of a two-dimensional control pad that controls gain as well as pan.
In figuring this out, I have drawn extensively on YouTube tutorials by Akash Murthy and Florian Mrugalla, and not least source code for the IEM ambisonic plugins. From the latter, I have in particular studied code for the SpherePanner component and the ProbeDecoder plugin.
This brings me one step further towards implementing DBAP as a VST plugin. That is itself a study towards porting Ambisonic Toolkit higher-order functionalities from SuperCollider to plugins. I hope to be able to embark on that journey later this year.
March 28, 2024
Close, but no cigar from Trond Lossius on Vimeo.
Back to the drawing room again…
March 25, 2024
I am slowly progressing on a Distance-Based Amplitude Panning (DBAP) plugin. I now have parameters set up in AudioProcessor, and in the Editor, the table components for setting the source (input) and destination (output) coordinates work. The next step is implementing the XY pad that visualises and offers interaction with source and destination positions.
March 17, 2024
Juce MVC demo and study from Trond Lossius on Vimeo.
A further test/study of how to use ValueTreeState with child components in Juce, ensuring proper model-view-controller (MVC) separation. Figuring this out is a prerequisite to be able to build plugins of any degree of conplexity.
February 28, 2024
Juce TreeValue test from Trond Lossius on Vimeo.
A small test of using TreeValue in Juce when programming a VST3 plugin. This seems to enable MVC (model-view-controller) separation. In this example two sliders in the editor are associated with, and listens to, the same paramter. It seems to work well when changing the value using one or the other slider, as well as when the parameter value is changed by the host.
February 25, 2024
A bonus of getting to know the source code for the IEM ambisonic plugins is that I can mod them so they can be resized in Reaper.
January 22, 2024
Two Dots Moving from Trond Lossius on Vimeo.
After three days of intensive coding, two dots are moving…
Please listen using headphones.
December 30, 2023
AntiRSI is a handy little macOS app that encourages shorter and longer breaks while at the computer to avoid muscle strain and tension. I first downloaded it over a decade ago and have always copied it when migrating to new laptops. With the latest migration to a computer running Sonoma on an M2 processor, it stopped working.
It appears that the original developer no longer maintains it, but I found a more recent fork on GitHub. I checked out and compiled it, and it instantly works. Nice!
December 28, 2023
After several days of tweeking, I have managed to make a fully functional multichannel reverb VST plugin. The plugin is developed in Juce and make use of frameworks from the IEM Ambisonic plugin suite. The reverb algorithm itself is the open-source freeverb implemented using Faust on a per-channel basis, with no reverb diffusing or leaking between channels.
More than anything else, this is a working proof-of-concept of how Faust can be used to develop VST plugins processing multichannel and ambisonic signals.
December 18, 2023
Over the past few days I have been looking into Faust, a functional programming language for sound synthesis and audio processing created at the GRAME-CNCM Research Department.
Specifically, I am checking out the various built-in reverb modules. They are straight forward to compile as JSFX plugins for Reaper, allowing rapid prototyping. It also seems doable to compile into VST plugins using JUCE.
Looking at the source code for the reverb modules, they appear themselves to be programmed in Faust. As such they should be quite hackable.
For older blog posts, please refer to the monthly archives.