14. Advanced Topics¶
14.1. Adding support for your MIDI/HID Controller¶
With several dozens of DJ controllers supported out-of-the-box, Mixxx gives you comprehensive hardware control for your DJ mixes, see Using MIDI/HID Controllers.
Support for additional devices can be added to Mixxx by creating a new preset file. This file tells Mixxx how to translate, or map, MIDI/HID messages from a controller into commands that Mixxx understands.
You can download and share custom controller presets in the Mixxx User customizations forums.
By far, the easiest way to create a new MIDI preset is by using the Controller Wizard.
Connect your controller(s) to your computer
Select your device from the list of available devices on the left, and the right pane will change
Activate the Enabled checkbox
Click on Learning Wizard to open the selection dialog
Click any control in the Mixxx GUI
Alternatively, click the Choose Control button and choose one from the selection list
Push Learn and then move a control or push a button on your controller to map it. You can also move a control without pushing the Learn button if you are learning many controls.
If you are learning a button, just push it once. If you are learning a knob or a slider, try to move it throughout its range.
After Mixxx detects the control, you may click Learn Another or you can click on another button in the Mixxx GUI to learn another control.
When you are finished mapping controls, click Done
There are also some advanced options in the Midi Wizard you may need to use:
Soft Takeover: Use this option for knobs or sliders to avoid sudden jumps in when the knob in the GUI doesn’t match the physical knob. If you select this option, you won’t be able to perform super-fast motions as easily. (Recommended off)
Invert: Use this option for controls that you want to work backwards from how they were detected.
Switch Mode: Use this option on controllers that have controls that act like switches and emit one value on the first press, and a different value on the next press. (Think an actual hardware toggle switch, or a button that lights up on the first press and turns off on the second press).
Jog Wheel / Select Knob: Use this for knobs that don’t have a beginning or an end, but spin continuously.
The Controller wizard saves the new preset to the following file paths:
You can then modify the XML file it creates (or any of the ones that ship with Mixxx) if you’d like to fine-tune it or add more presets. For more information, go to https://github.com/mixxxdj/mixxx/wiki/MIDI-Controller-Mapping-File-Format.
For more information, go to https://github.com/mixxxdj/mixxx/wiki/Midi-Scripting and https://github.com/mixxxdj/mixxx/wiki/hid_mapping_format.
Nearly every knob, button, or fader you see in Mixxx’s interface is controllable via Mixxx’s “control” system. The control system allows skins, MIDI controllers, HID controllers and keyboards to control Mixxx via a single interface.
A control is identified by a “group” (which is used for grouping associated controls) and a “key” (the name of the individual control).
For example, the volume fader for Deck 1 is identified by the group :mixxx:cogroupref:`[Channel1] <[ChannelN]>` and key :mixxx:coref:`volume <[Channel1],volume>`. Similarly, the volume fader for Sampler 1 is identified by the group :mixxx:cogroupref:`[Sampler1] <[SamplerN]>` and key :mixxx:coref:`volume <[Sampler1],volume>`.
The group is used to collect all the controls that affect one component of Mixxx into one collection. Some groups have a high overlap of controls in common (e.g. samplers, decks, and the preview deck all share the same control keys).
In addition to controlling Mixxx, the control system can be used to inspect Mixxx’s state. For example, the sample rate of the track loaded in Deck 1 can be accessed via the :mixxx:coref:`[Channel1],track_samplerate` control. You can read the :mixxx:coref:`[Channel3],play` control to determine whether Deck 3 is playing.
The default value range is 0.0 to 1.0, unless otherwise noted. Binary means that it is either ‘ON’ (non-zero) or ‘OFF’ (zero).
Discovering Controls used in Skins
You can view the control connected to any part of a skin by running
Mixxx with the
--developer command line option and hovering your mouse
cursor over part of the skin. If no tooltip appears, enable tooltips for
the Library and Skin in .
Changing any control from the GUI in Developer Mode
When running Mixxx in Developer Mode (with the
line option), you can view and manually set the state of any control in
Mixxx by going to .
See controlindex for a full list.
The following extensions add some features to
(volume, crossfader, …). Use in conjunction with
[Master], … groups.
Increases the value, e.g. :mixxx:coref:`[ChannelN],rate_perm_up` sets the speed one step higher (4 % default)
Decreases the value, sets the speed one step lower (4 % default)
Increases the value by smaller step, sets the speed one small step higher (1 % default)
Decreases the value by smaller step, sets the speed one small step lower (1 % default)
Sets the value to 1.0, sets the channel volume to full
Sets the value to -1.0, sets the channel volume to zero
Sets the control to its default, return to default waveform zoom level
Sets the value to 0.0, put the crossfader in the middle again
Sets the value to 0.0 if the value was > 0.0, and to 1.0 if the value was 0.0, will cut off/on a track while you’re playing
Sets the value to -1.0 if the value was > -1.0, and to 1.0 if the value was -1.0, can tilt the crossfader from left to right
// This won't work: engine.setValue(group, "pitch_up_small", 1.0); // Use this instead: script.triggerControl(group, "pitch_up_small", 50);
*_toggle the respective shortcut for scripts is:
script.toggleControl(group, "keylock_toggle", 100);
The :mixxx:cogroupref:`[Master]` group generally corresponds to controls that affect the mixing engine. This will bear some similarity to what you will find on a DJ mixer (e.g. crossfader controls, headphone cueing controls, etc.).
Decks, Preview Decks and Samplers¶
Preview decks and Sample decks (“samplers”) in Mixxx are identical to regular decks, they simply have a different purpose (previewing tracks or playing samples, respectively). Any control listed above for :mixxx:cogroupref:`[ChannelN]` will work for a samplers and preview decks, just replace :mixxx:cogroupref:`[ChannelN]` with :mixxx:cogroupref:`[PreviewDeckN]` or :mixxx:cogroupref:`[SamplerN]`.
There are some additional global controls for samplers.
These controls have been deprecated, new controller mappings should use the alternatives.
Global Sampler controls¶
These controls can be used to control all samplers.
Microphones and Auxiliary Channels¶
In contrast to decks, preview decks and samplers, microphones and auxiliary channels are input channels. You can map audio interface’s inputs to mixxx’s auxiliary input channels and connect external audio source to it (cellphone, mp3 player). Then you can use your MIDI controller to control its volume and some other parameters (orientation, gain, volume), apply effects and use the prelisten function.
The controls in the :mixxx:cogroupref:`[Library]` group can be used to navigate the library. Note that :mixxx:coref:`[Library],MoveUp` and other Move and Scroll controls emulate keypresses and therefore require the Mixxx window to be focused.
:mixxx:cogroupref:`[Playlist]` controls allow navigating the sidebar and tracks table directly without considering
the currently focused widget. This is helpful when another application’s window is focused.
This group is going to be deprecated at some point, with its controls added to
See bug #1772184 for the current status.
The :mixxx:cogroupref:`[Controls]` group contains controls that didn’t fit in any other group.
The Effects Framework¶
In the list below,
EffectRack1 leaves room for future expansion to multiple EffectRacks.
N ranges from 1 to
M ranges from 1 to
[EffectRack1_EffectUnitN],num_effectslots, inclusive. (For a given value of N)
K ranges from 1 to
[EffectRack1_EffectUnitN_EffectM],num_parameters, inclusive. (For given values of N and M)
I ranges from 1 to
J ranges from 1 to
New in version 2.0.0.
EQs and Filters¶
Equalizers and filters are special effects units. The EQs are controlled by :mixxx:cogroupref:`[EqualizerRack1_[ChannelI]_Effect1]` and the filter knob is controlled by :mixxx:coref:`[QuickEffectRack1_[ChannelI]],super1` and :mixxx:coref:`[QuickEffectRack1_[ChannelI]_Effect1],enabled`. Users can choose between several options for the effects loaded in these racks in the Equalizers section of the Preferences window.
These controls have been removed from Mixxx. Skins and controller mappings that attempt to use them will not work correctly.
14.2. Making a Custom Keyboard Mapping¶
The default keyboard mappings are defined in a text file which can be found at the following location:
<Mixxx installation directory>\keyboard\en_US.kbd.cfg
Depending on your system’s language settings, Mixxx might use a different
file as default, e.g.
de_DE.kbd.cfg for German or
It is not recommended that you modify the system-wide keyboard mapping file because all your changes may be lost if you uninstall or upgrade Mixxx. Instead, copy the default mapping file to the following location:
Then edit this file and save the changes. On the next startup, Mixxx will check
Custom.kbd.cfg is present and load that file instead of the default
mapping file. This has the advantage that you can always revert back to the
default mapping by deleting
For a list of controls that can be used in a keyboard mapping, see https://github.com/mixxxdj/mixxx/wiki/mixxxcontrols.
You can download and share custom keyboard mappings in the Mixxx User customizations forums.
14.3. Additional Effects via external Mixer Mode¶
The following examples are only intended to encourage experimentation, they are not definitive guidance.
Effects via AU Lab on macOS¶
On macOS there is a simple and free way to give Mixxx access to the collection of AU/VST/MAS plugins that are installed on your system.
Install the free Soundflower, a system extension for inter-application audio routing.
Install the free digital audio mixing application AU Lab.
macOS 10.15 (Catalina) introduces additional restrictions on running non-Apple software. Make sure to grant permission in System Preferences –> Security & Privacy –> Microphone –> AU Lab.
Alternatively, try Blackhole, a modern virtual audio driver that allows applications to pass audio to other applications with zero additional latency, and Hosting AU, a free micro-sized DAW that hosts Audio Unit instruments and effect plugins.
Select for Deck 1 the Soundflower 16 device with Channel 1-2
Select for Deck 2 the Soundflower 16 device with Channel 3-4
Click the Apply button
In AU Lab
Click on the + button to create a new configuration
Add 2 stereo input tracks in the Audio Input Tab
Add 2 stereo output tracks in the Audio Output Tab
Change the audio input device to Soundflower 16
Change the audio output device for example to Built-in Output
Click Create document
In the Output 1 channel, select an effect from the drop-down menu, for example
The effect should now react if you play a track in Mixxx.
Effects via JACK Rack on GNU/Linux¶
Use Jack to route each deck directly through JACK Rack effect racks, or for more control you can use Ardour (or another DAW) using sends for effects. This gives Mixxx access to the extensive collection of LADSPA plugins.
Make sure the correct multichannel audio interface has been selected in Jack (Jack settings visible bottom left). Note that Mixxx possibly labels its Jack ports as Portaudio.
14.4. Deleting Your Library¶
The library file is stored in the following places depending on your operating system:
The Mixxx library is stored in the
%USERPROFILE%\Local Settings\Application Data\Mixxx\folder. To delete your library on Windows, delete the
mixxxdb.sqlitefile in this folder.
The Mixxx library is stored in the
Library/Application Support/Mixxxfolder in your home directory. To delete your library on macOS type the following command into a terminal:
rm ~/Library/Application\ Support/Mixxx/mixxxdb.sqlite
The Mixxx library is stored in the
.mixxxfolder in your home directory. To delete your library on GNU/Linux type the following command into a terminal:
Deleting your library will lose all of your metadata. This includes saved hotcues, loops, comments, ratings, and other library related metadata. Only delete your library if you are fine with losing these.