Mixxx has a modular effects system to allow the user to creatively customize the audio produced by Mixxx's engine.
The system aims to accomplish the following:
Mixxx aims to support both user-loaded effect plugins (e.g. LV2, VST, etc.) and “internal” or bundled effects.
An “effect backend” is an abstraction that allows us to support multiple sources of effects that Mixxx can make use of.
The interface is defined here: EffectsBackend.
It's fairly simple. If you stand back and squint, a backend must support a method to get a list of available effects, and a method that instantiates one of those effects.
Today, we only have the “native” backend, which is for built-in effects. These effects can make strong assumptions about Mixxx since they are built-in.
We aim to support effect plugins. Work on an LV2 backend is in progress. Effect plugins cannot make the same assumptions, and therefore may feel less integrated with Mixxx or less efficient.
Mixxx has a suite of core effects implemented in the “native” effects backend. The code for these effects are a set of nice examples of how to write an effect.
Check out the code: src/effects/native
Regardless of which backend an effect came from, Mixxx needs to know various metadata about the effect to make use of it – for example:
The standard way we represent this information is via a “manifest”.
Check out the code: EffectManifest.