FR - Access to a "raw" parameter interface


#1

I know there’s been a lot of discussion about parameters over the past few years, so I don’t really want to rehash any of that. This is mostly about some of the changes related to AudioProcessoParameterGroup, but it applies to the rest of the parameter situation. In a nutshell I don’t want to discuss the Parameter classes themselves, just request a way to implement my own.

Motivation

The current parameter system deeply couples developers to the use of AudioProcessorParameter and associated classes/interfaces. This does not always reflect how some developers want to design their parameter/state handling, and goes against the philosophy of “pay for what you use.” It would be awesome if JUCE had an optional way to interact with the “raw” parameter interface seen by the hosts, rather than hiding behind the Parameter classes and AudioProcessorValueTreeState.

Current State of Affairs

The majority of the parameter interface can be accessed by a developer who doesn’t want to use the Parameter/ValueTree classes, but it requires silencing some deprecation warnings. The only thing missing is access to the group interface that is hidden by AudioProcessorParameterGroup and the plugin wrappers.

Solutions

I’m not sure the best way to go about this, because it’s definitely a point of friction between the plugin APIs. What I think could work is one of three approaches:

  • Un-deprecate the old parameter interface in AudioProcessor and add virtual methods for the AU/VST3 parameter group interfaces.

  • Provide an AudioProcessorBase or AudioParameterInterface base class that we can derive from in order to provide our own parameter abstractions

  • Provide an abstract base class for the Parameter Group interface so we can wrap our own parameter handling and live with the deprecated methods.

I know a few JUCE users have their own parameter classes/abstractions, and I’m curious as to what those folks think about exposing a more “raw” interface that reflects how the hosts interact with the plugin, what everyone else is doing to get around some of these issues, and if you have any better ideas as to how to write a JUCE plugin without using the parameter classes.