Note that LADSPA support is experimental currently so this page is intended mainly for developers.
A GSoC '2010 Project is using LADSPA as a backend for an EffectsUnit Project. Check it out!
Required packages: ladspa-sdk
Compiling Mixxx with LADSPA support:
scons ladspa=1
If you're updating from a previous version of Mixxx, you'll need to reinstall the skins (as root):
rm -Rf /usr/local/share/mixxx/skins
scons install
(the directory can be different, e.g. /usr/share/mixxx)
Presets are now in Trunk
You'll also need some presets. Just download ladspa_presets.tar.bz2 and extract the directory ladspa_presets to your Mixxx share directory (as root):
<code>tar -C /usr/local/share/mixxx/ -xjf ladspa_presets.tar.bz2</code>
I'm not sure if Debian package names are correct.
The LADSPA window is hidden by default. You can enable it by activating LADSPA > Show LADSPA window from the menu.
Currently the following skins are supported: outlineSmall, outline, outlineClose, traditional, hercules, nCut, Collusion (1280), Collusion (1280-WS).
All the LADSPA code is already in trunk, it just needs to be enabled by default. In order for us to do this “right”, here's the stuff that needs to be done:
Make LADSPA pane use QGridLayout (?)
Pick the default LADSPA plugins:
Make sure we have preset
XML files for all of these.
Build them on
OS X, recommend them on Linux, repack Audacity plugin build on Windows or have installer fetch them from Audacity's site.
-
Add LADSPA presets and plugins to trunk
Modify SConscript to install them on
OS X, Linux (and move to dist dir on Win32)
Modify mixxx.nsi to install/uninstall them on Windows
Update src/debian/rules file (might not need editing, but doublecheck)
the pane with the slots should have a scrollbar (ie. put it in a QScrollArea or whatever it's called). The 3 slots don't currently show up right on all OSes, so putting it in a scoll area will fix this plus maybe let us make more slots or something later.
the little “x” to remove an effect from a slot needs to be right-aligned, instead of just pasted where-ever.
someone should re-evaluate how the effects are layed out inside each slot, because all of that code was done before Qt 4 (and before QLayouts existed). We don't have to change it, but I think the “x” button is probably just hardcoded to be in some position. Would be good to know what work will be need to be done later.
Fix the text getting cut off. Some of the QLabels in the slots get cut off. Needs to word wrap or something smart.
Fix the duplicate wet/dry knobs for some plugins.
and/or either remove our non-working wet/dry knob or make it work. :)
The delay time knob in the delay plugin is hard to use because it's not tempo synced. There is a reasonable solution to this, which is to add some sort of “tempo synced control” declaration in the LADSPA xml format, and gives a conversion ratio from BPM to whatever the knob is in (millisec probably). Then our LADSPA code would see this, and make the knob increment/decrements dependent on the detected BPM of whatever's playing.
At the very least, all the GUI problems and knobs-not-working need to be resolved before LADSPA is ready.
Has all the LADSPAInstances, configurations, knobs, connections, everything.
Will update the value for every control port (ControlObject → LADSPAControl)
Will process the samples.
Given a file, load every plugin this file has.
LADSPA plugins may be bundled inside one library (small variations of each other, usually)
Holds the descriptor, has few operations to interface with the descriptor.
Has the instantiate method, to create a LADSPAInstance.
Has the process method to process samples.
Has the connect method to bind the ports of the plugins to LADSPAControl variables.
Creates ConfigKeys and ControlObjects for Enable/Disable and for the Wet&Dry.
LADSPAInstanceStereo/Mono: If a Plugin is Mono, Mixxx makes 2 instances to process Right/Left signals separetely.
Load
XML into LADSPAPresets, instantiates LADSPALoader. An example of a LADSPA preset xml for DJFlanger:
<DJFlanger>
<Plugin ID="0">djFlanger</Plugin>
<Knob>
<Label>LFO sync</Label>
<Min>-1.0</Min>
<Max>1.0</Max>
<Default>0.0</Default>
<Connection>
<Plugin>0</Plugin>
<Port>0</Port>
</Connection>
</Knob>
<Knob>
<Label>LFO period</Label>
<Min>0.1</Min>
<Max>32.0</Max>
<Default>1.0</Default>
<Connection>
<Plugin>0</Plugin>
<Port>1</Port>
</Connection>
</Knob>
<Knob>
<Label>LFO depth</Label>
<Min>1.0</Min>
<Max>5.0</Max>
<Default>4.0</Default>
<Connection>
<Plugin>0</Plugin>
<Port>2</Port>
</Connection>
</Knob>
<Knob>
<Label>Feedback</Label>
<Min>-100.0</Min>
<Max>100.0</Max>
<Default>0.0</Default>
<Connection>
<Plugin>0</Plugin>
<Port>3</Port>
</Connection>
</Knob>
</DJFlanger>
Has the port names, knobs much like LADSPAPlugin.
Has the instantiate method that will
LADSPAPlugin::instantiate() → LADSPAInstance
LADSPAPreset::instantiate() → LADSPAPresetInstance
Instantiates the LADSPAPlugin into LADSPAInstance
Run the connect method for every control port
Adds everything to the EngineLADSPA