Current XML file schema revision is: 1
Support for additional MIDI devices can be added to Mixxx by creating a new “MIDI mapping” file. This mapping file tells Mixxx how to translate MIDI commands from a controller into commands that Mixxx will understand.
The MIDI mapping files are located in the following paths:
By far, the easiest way to create a new MIDI mapping is by using the MIDI Learn wizard in the Preferences (available in Mixxx 1.7.0 and higher.) You can then modify the XML file it creates (or any of the ones that ship with Mixxx) using the information on this page if you'd like to fine-tune it or add more mappings. When you've finished creating your MIDI mapping, please send it to us and we'll include it in Mixxx.
Most MIDI messages are three bytes long. The first byte of any MIDI message is called the Status byte. The first nybble (hex digit) is the op-code and the second is the MIDI channel number. So if you have 0x90 the op-code is 0x9 and the channel number is 0x0 (Ch 1.) The full list of MIDI messages is below, where n represents the channel number (0..F inclusive):
| Status | Function | Data bytes | |
|---|---|---|---|
| 0x8n | Note off | Note number | Note velocity |
| 0x9n | Note on | Note number | Note velocity |
| 0xAn | Polyphonic after-touch | Note number | Amount |
| 0xBn | Control/mode change | Control number | Value |
| 0xCn | Program change | Program number | (n/a) |
| 0xDn | Channel after-touch | Amount | (n/a) |
| 0xEn | Pitch wheel | LSB | MSB |
| 0xF0 | System Exclusive message | Vendor ID | (data) |
| 0xF1 | MIDI Time Code Qtr. Frame | (see spec) | |
| 0xF2 | Song Position Pointer | LSB | MSB |
| 0xF3 | Song Select | Song number | (n/a) |
| 0xF4 | Undefined | ||
| 0xF5 | Undefined | ||
| 0xF6 | Tune request | (n/a) | |
| 0xF7 | End of SysEx (EOX) | (n/a) | |
| 0xF8 | Timing clock | (n/a) | |
| 0xF9 | Undefined | (n/a) | |
| 0xFA | Start | (n/a) | |
| 0xFB | Continue | (n/a) | |
| 0xFC | Stop | (n/a) | |
| 0xFD | Undefined | (n/a) | |
| 0xFE | Active Sensing | (n/a) | |
| 0xFF | System Reset | (n/a) | |
The boldface entries in the table above are the messages we are most concerned with since most DJ controllers use only these for all functions. You'll need to consult the MIDI spec for the DJ controller you're working with to determine which messages and note/control numbers correspond to the DJ controller functions & LEDs. If your controller's MIDI spec gives only note names and not numbers, use this table to convert them. To convert from decimal to hex, use this.
(Note that in order to use System Exclusive messages, you will need MIDI Scripting.)
First, try using the MIDI Learn functionality in the Preferences→MIDI Devices window at the bottom (in Mixxx 1.7.0 and higher.) It will help you get many of the essential functions mapped quickly without having to do any hacking.
If you don't have the MIDI spec for your controller, first check the manufacturer's web site under Support. Look for Manuals or User Guides. MIDI specs are usually given in an appendix at the back of the manual. Failing that, you can usually sniff the MIDI data the controller sends with the following procedure:
–midiDebug option like so: user@machine:~$ mixxx --midiDebug
C:\Program Files\Mixxx>mixxx --midiDebug
$ open -a mixxx --args --midiDebug
Debug: [...]: "MIDI ch 1: opcode: B0, ctrl: 2, val: 3D" Debug: [...]: "MIDI ch 1: opcode: B0, ctrl: 2, val: 3A" Debug: [...]: "MIDI ch 1: opcode: B0, ctrl: 2, val: 3D" Debug: [...]: "MIDI ch 1: opcode: B0, ctrl: 2, val: 3B" Debug: [...]: "MIDI ch 1: opcode: B0, ctrl: 2, val: 3C"
In this instance, it's sending 0xB0 (which when we look at the table above, we see that it's a Control Change message on channel 1) We also see that the second byte, 0x02 in this case, is the control number that was moved, and the third is the value or position of that control, which you can ignore for the purposes of mapping.
<control> block in the XML file<control> XML block for <status> and <midino> respectively. This is detailed in the next section.
Open a console and issue amidi -l. This will list the attached MIDI device(s) like so:
Dir Device Name IO hw:1,0,0 SCS.3d MIDI 1
Then, to dump the data, you just issue amidi -p hw:1,0,0 -d (Replace hw:1,0,0 with whatever device ID your controller shows in the list.) You'll get output like this:
B0 02 3D B0 02 3A B0 02 3D B0 02 3B B0 02 3C
See above for how to interpret this data.
You can download tail.exe to watch mixxx.log as new messages are added or build Mixxx with scons msvcdebug=1 and run it with the –midiDebug option. This will cause it to pop up a console window when you run it and the MIDI messages received by your controller will be displayed there.
Download the free MIDI Monitor utility and run it. MIDI Monitor is a utility for Mac OS X which displays MIDI signals in a variety of formats. It can watch both incoming and outgoing MIDI streams, and can filter them by message type and channel.
Download the free MIDISimulator utility and run it. MidiSimulator is a tool to test midi devices like pianos or dj controllers. It allows you to receive and send midi events.
Mixxx uses a well defined XML format to store its MIDI mappings. The format is used for storing and distributing MIDI mappings from multiple scopes.
<?xml version="1.0" encoding="utf-8"?> <MixxxMIDIPreset schemaVersion="1" mixxxVersion="1.7.0+"> <!-- Schema version number to help compatibility, should the MIDI format change --> <info><!-- Optional - information about the preset file --> <name>Example MIDI Preset for Mixxx</name> <author>Tom Care</author> <description>This is an example XML MIDI preset for Mixxx. The scope of the preset could be from a small functionality addition, to a complete mapping for a controller, to a complex personal setup with multiple controllers. This description is intended for distribution and could include comments about the extent of the functionality.</description> </info>
The first part of the file defines the version of the mapping (for future compatibility, as the Mixxx MIDI abilities become more complex) and an optional info tag which contains information about the preset (primarily used for distribution of presets).
<controller id="controller name" port=""> <!-- Many controllers in one file supported. A controller should only appear once -->
The “controller id” is the brand & model of the controller, e.g. “Stanton SCS.3d”. Leave “port” empty.
The core part of the file contains a definition for a single controller. There may be multiple controllers in one file (for more complex setups). Each controller definition contains two sections: input bindings (controls) and output bindings.
<controls> <!-- One control group --> <control> <!-- Several controls --> <group>[Master]</group> <key>crossfader</key>
Group and key define the part of Mixxx that is being controlled. For a list of what these values can be, see below.
<status>0xB0</status> <-- CC on channel 1 --> <midino>0x07</midino>
These tags define the MIDI event that Mixxx will listen for.
<options> <!-- all control specific options should go here - sensitivity etc. Specifics to be decided by spec --> </options>
The options further refine the behavior of the control. The list of generic options may expand as Mixxx development continues, but any controller-specific refinements (translations, sensitivity, acceleration, etc.) belong in a MIDI script. Necessary options will have default values, eg a jogwheel might have no acceleration by default.
</control> </controls> <outputs>
The next section defines outputs that use “short” (3-byte) MIDI messages. (For SYSEX messages, you need to use scripting.)
<output> <group>[Channel1]</group> <key>play</key> <status>0x7F</status> <!-- First byte sent to device --> <midino>0x08</midino> <!-- Second byte --> <on>0x01</on> <!-- Third byte. If not specified, 0x7F is used. --> <off>0x00</off> <!-- Alternate third byte. 0x00 is the default. If set to 0xFF, nothing is sent.--> <maximum>0.99</maximum> <!-- Optional upper value for the Mixxx control, above which the 'off' value is sent. 1.0 is the default. --> <minimum>0.9</minimum> <!-- Lower value for the Mixxx control, below which the 'off' value is sent -->
This allows you to send any three bytes to the MIDI controller in the order Status, Midino, on/off. Minimum and maximum define the range within which the 'on' value is sent. Outside this range, the 'off' value is sent. If 'off' is set to 0xFF, no message will be sent outside the range. (Useful for LED sequences.)
</output> </outputs> </controller> </MixxxMIDIPreset>
These define the part of Mixxx that is being controlled:
These tags define the MIDI event that Mixxx will listen for or send out:
Input tags:
Output tags:
The old midi mapping format is here for reference. The same options apply as above, except use <threshold> for <minimum>, there's no <maximum> (it's always 1.0,) and obviously <Script-Binding> won't work. It looks like this:
<!DOCTYPE controller> <controller> <controls> <control> <group>[[Master]]</group> <key>crossfader</key> <miditype>Ctrl</miditype> <midino>0x31</midino> <options> <hercjog/> </options> </control> ... </controls> <lights> <light> <group>[[Channel1]]</group> <key>VuMeter</key> <status>0xB0</status> <midino>0x16</midino> <threshold>0.5</threshold> </light> ... </lights> </controller>
Each control inside Mixxx is identified by a unique string. These strings are used in the keyboard mappings, the MIDI mappings, and inside Mixxx to gain access to the controls. The following is a list of controls that can be used in any of the above contexts.
The default range is 0.0 to 1.0, unless otherwise noted. Binary means it's either on (non-zero) or off (zero.)
Please keep the controls in alphabetical order by group
| [Group] | Key/Control | Range | What it does | On-screen feedback | |||||
|---|---|---|---|---|---|---|---|---|---|
| [Flanger] | lfoDepth | default | Adjusts the intensity of the flange effect | Depth knob | |||||
| [Flanger] | lfoDelay | 50..10000 | Adjusts the phase delay of the flange effect in microseconds | Delay knob | |||||
| [Flanger] | lfoPeriod | 50000..2000000 | Adjusts the wavelength of the flange effect in microseconds | LFO knob | |||||
| —- | —- | —- | —- | —- | |||||
| [Microphone] | enabled4 | binary | 1 if a microphone input is enabled, 0 if not. | Microphone is enabled. | |||||
| [Microphone] | orientation4 | 0-2 | Set microphone orientation, 0 = left side of crossfader, 1 = center, 2 = right side of crossfader. Default is center. | N/A | |||||
| [Microphone] | PeakIndicator4 | binary | Indicates when the signal is clipping (too loud for the hardware and is being distorted) | Microphone Clip light | |||||
| [Microphone] | talkover4 | binary | Hold value at 1 to mix microphone input into the master output. | N/A | |||||
| [Microphone] | volume4 | default | Adjusts the microphone volume fader | Microphone volume fader changes | |||||
| [Microphone] | VuMeter4 | default | Outputs the current instantaneous microphone volume | Microphone VU meter changes | |||||
| —- | —- | —- | —- | —- | |||||
| [Master] | balance | -1.0..1.0 | Adjusts the left/right channel balance on the Master output | Center Balance knob | |||||
| [Master] | crossfader | -1.0..1.0 | Adjusts the crossfader between players/decks (-1.0 is all the way left, Deck 1) | Crossfader slider | |||||
| [Master] | crossfader_down | binary | Moves the crossfader left by 1/10th | Crossfader slider | |||||
| [Master] | crossfader_down_small4 | binary | Moves the crossfader left by 1/100th | Crossfader slider | |||||
| [Master] | crossfader_up | binary | Moves the crossfader right by 1/10th | Crossfader slider | |||||
| [Master] | crossfader_up_small4 | binary | Moves the crossfader right by 1/100th | Crossfader slider | |||||
| [Master] | headVolume | 0.0..1.0..5.0 | Adjusts the headphone output volume | Head Vol knob | |||||
| [Master] | headMix | -1.0..1.0 | Adjusts the cue/main mix in the headphone output | Pre/Main knob | |||||
| [Master] | latency | absolute value | Latency setting (sound buffer size) in milliseconds (default 64) | Latency slider in the prefs | |||||
| [Master] | num_decks2 | integer | The number of decks currently enabled. | N/A | |||||
| [Master] | num_samplers2 | integer | The number of samplers currently enabled. | N/A | |||||
| [Master] | PeakIndicator | binary | Indicates when the signal is clipping (too loud for the hardware and is being distorted) | Clip light | |||||
| [Master] | samplerate | absolute value | The current output sample rate in Hz (default 44100) | (none) | |||||
| [Master] | volume | 0.0..1.0..5.0 | Adjusts the Master output volume | Center Volume knob | |||||
| [Master] | VuMeter | default | Outputs the current instantaneous master volume (composite) | Master meter (mono) | |||||
| [Master] | VuMeterL | default | Outputs the current instantaneous master volume for the left channel | Master meter L | |||||
| [Master] | VuMeterR | default | Outputs the current instantaneous master volume for the right channel | Master meter R | |||||
| —- | —- | —- | —- | —- | |||||
| [Playlist] | LoadSelectedIntoFirstStopped | binary | Loads the currently highlighted song into the first stopped deck | Waveform view | |||||
| [Playlist] | SelectNextPlaylist | binary | Switches to the next view (Library, Queue, etc.) | Playlist/tracktable display | |||||
| [Playlist] | SelectNextTrack | binary | Scrolls to the next track in the Playlist/tracktable | Playlist/tracktable highlight | |||||
| [Playlist] | SelectPrevPlaylist | binary | Switches to the previous view (Library, Queue, etc.) | Playlist/tracktable display | |||||
| [Playlist] | SelectPrevTrack | binary | Scrolls to the previous track in the Playlist/tracktable | Playlist/tracktable highlight | |||||
| [Playlist] | SelectTrackKnob | relative value | Scrolls the given number of tracks in the Playlist/tracktable (can be negative for reverse direction) | Playlist/tracktable highlight | |||||
| —- | —- | —- | —- | —- | |||||
| Below, N=1 up to the number of active decks/samplers5. | |||||||||
| [ChannelN] | back | binary | Fast rewind (REW) | < button | |||||
| [ChannelN] | beat_active4 | binary | Indicates whether the player is currently positioned within 50 milliseconds of a beat or not. | N/A | |||||
| [ChannelN] | beatloop4 | 0.0625 - 128 | Setup a loop over the set number of beats. | A loop is shown over the set number of beats. | |||||
| [ChannelN] | beatloop_X4 | toggle | *deprecated* Setup a loop over X beats. A control exists for X = 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64 | A loop is shown over X beats. | |||||
| [ChannelN] | beatloop_X_activate4 | binary | Activates a loop over X beats. A control exists for X = 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64 | A loop is shown over X beats. | |||||
| [ChannelN] | beatloop_X_toggle4 | binary | Toggles a loop over X beats. A control exists for X = 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64 | A loop is shown over X beats. | |||||
| [ChannelN] | beatloop_X_enabled4 | binary | 1 if beatloop X is enabled, 0 if not. | Beatloop X button in skin is lit. | |||||
| [ChannelN] | beats_translate_curpos4 | binary | Adjust beatgrid so closest beat is aligned with the current playposition. | Beatgrid moves to align with current playposition. | |||||
| [ChannelN] | beatsync5 | binary | changed behavior Syncs the BPM and phase to that of the other track (if BPM is detected on both) | SYNC button & Pitch slider snaps to the appropriate value | |||||
| [ChannelN] | beatsync_phase4 | binary | Syncs the phase to that of the other track (if BPM is detected on both) | SYNC button & Pitch slider snaps to the appropriate value | |||||
| [ChannelN] | beatsync_tempo4 | binary | Syncs the BPM to that of the other track (if BPM is detected on both) | SYNC button & Pitch slider snaps to the appropriate value | |||||
| N/A | |||||||||
| [ChannelN] | bpm5 | real-valued | bpm reflects the perceived (rate-adjusted) BPM of the file loaded in ChannelN | BPM value display | |||||
| [ChannelN] | bpm_tap3 | binary | When tapped repeatedly, adjusts the BPM of ChannelN to match the tapped BPM | BPM value display (play speed doesn't change) | |||||
| [ChannelN] | cue_default | binary | In CDJ mode, when playing, returns to the cue point & pauses. If stopped, sets a cue point at the current location. If stopped and at a cue point, plays from that point until released (set to 0.) | CUE button | |||||
| [ChannelN] | cue_point | absolute value | The current position of the cue point in samples | Cue point marker | |||||
| [ChannelN] | cue_preview | binary | Plays from the current cue point | CUE button lights & waveform moves | |||||
| [ChannelN] | cue_set | binary | Sets a cue point? | Cue mark appears on the waveform? | |||||
| [ChannelN] | cue_simple | binary | ? | ? | |||||
| [ChannelN] | duration | absolute value | Outputs the length of the current song in seconds | (none) | |||||
| [ChannelN] | eject2 | binary | Eject currently loaded track | track is ejected from player | |||||
| [ChannelN] | end | binary | Jump to end of track | Track jumps to end | |||||
| [ChannelN] | file_bpm | positive value | (Read-only) the detected BPM of the loaded track | N/A | |||||
| [ChannelN] | filterHigh | 0.0..1.0..4.0 | Adjusts the gain of the high EQ filter | HIGH knob | |||||
| [ChannelN] | filterHighKill | binary | Holds the gain of the high EQ to -inf while active | HIGH knob | |||||
| [ChannelN] | filterLow | 0.0..1.0..4.0 | Adjusts the gain of the low EQ filter | LOW knob | |||||
| [ChannelN] | filterLowKill | binary | Holds the gain of the low EQ to -inf while active | LOW knob | |||||
| [ChannelN] | filterMid | 0.0..1.0..4.0 | Adjusts the gain of the mid EQ filter | MID knob | |||||
| [ChannelN] | filterMidKill | binary | Holds the gain of the mid EQ to -inf while active | MID knob | |||||
| [ChannelN] | flanger | binary | Toggles the flange effect | FLANGER button | |||||
| [ChannelN] | fwd | binary | Fast forward (FF) | > button | |||||
| [ChannelN] | Hercules1 | ? | deprecated | ? | |||||
| [ChannelN] | Hercules2 | ? | deprecated | ? | |||||
| [ChannelN] | Hercules3 | ? | deprecated | ? | |||||
| [ChannelN] | Hercules4 | ? | deprecated | ? | |||||
| [ChannelN] | hotcue_X_activate1 | binary | If hotcue X is set, seeks the player to hotcue X's position. If hotcue X is not set, sets hotcue X to the current play position. | Player may change position. Hotcue X marker may change on waveform. | |||||
| [ChannelN] | hotcue_X_clear1 | binary | If hotcue X is set, clears its hotcue status. | Hotcue X marker changes on waveform. | |||||
| [ChannelN] | hotcue_X_enabled1 | read-only, binary | 1 if hotcue X is active, (position is not -1), 0 otherwise. | ||||||
| [ChannelN] | hotcue_X_goto1 | binary | If hotcue X is set, seeks the player to hotcue X's position. | Player may change position. | |||||
| [ChannelN] | hotcue_X_gotoandstop1 | binary | If hotcue X is set, seeks the player to hotcue X's position and stops. | Player may change position. | |||||
| [ChannelN] | hotcue_X_position1 | positive integer | The position of hotcue X in samples, -1 if not set. | Hotcue X marker changes on waveform. | |||||
| [ChannelN] | hotcue_X_set1 | binary | Set hotcue X to the current play position. If hotcue X was previously set, clears its hotcue status. | Hotcue X marker changes on waveform. | |||||
| [ChannelN] | jog | -3.0..3.0 | Affects relative play speed & direction for short instances (additive & is automatically reset to 0) | Waveform | |||||
| [ChannelN] | keylock2 | binary | Enable key-lock for the specified deck (rate changes only affect tempo, not key) | key-lock button activates | |||||
| [ChannelN] | LoadSelectedTrack | binary | Loads the currently highlighted track into the deck | Track name & waveform change | |||||
| [ChannelN] | loop_double4 | binary | Doubles the current loop's length by moving the end marker. | Loop length doubles on waveform | |||||
| [ChannelN] | loop_enabled1 | read-only, binary | Indicates whether or not a loop is enabled. Read-only, do not set. | Loop in waveform is active. | |||||
| [ChannelN] | loop_end_position1 | positive integer | The player loop-out position in samples, -1 if not set. | Loop-out marker shows on waveform. | |||||
| [ChannelN] | loop_halve4 | binary | Halves the current loop's length by moving the end marker. Player immediately loops if past the new endpoint. | Loop length halves on waveform | |||||
| [ChannelN] | loop_in1 | binary | Sets the player loop in position to the current play position. | Loop-in marker changes on waveform. | |||||
| [ChannelN] | loop_out1 | binary | Sets the player loop out position to the current play position. | Loop-out marker changes on waveform. | |||||
| [ChannelN] | loop_scale4 | 0.0 - infinity | Scale the loop length by the value scale is set to by moving the end marker. | Loop length is scaled by given amount on waveform. | |||||
| [ChannelN] | loop_start_position1 | positive integer | The player loop-in position in samples, -1 if not set. | Loop-in marker changes on waveform. | |||||
| [ChannelN] | NextTask | ? | deprecated | ? | |||||
| [ChannelN] | NextTrack | ? | deprecated | ? | |||||
| [ChannelN] | orientation2 | 0-2 | Set channel's mix orientation, 0 = left side of crossfader, 1 = center, 2 = right side of crossfader | N/A | |||||
| [ChannelN] | PeakIndicator | binary | Indicates when the signal is clipping (too loud for the hardware and is being distorted) | Clip light | |||||
| [ChannelN] | pfl | binary | Toggles headphone cueing | Headphone button | |||||
| [ChannelN] | play | binary | Toggles playing or pausing the track | Play/pause button | |||||
| [ChannelN] | playposition | default | Sets the absolute position in the track (0=beginning, 1=end) | Waveform | |||||
| [ChannelN] | pregain | 0.0..1.0..4.0 | Adjusts the pre-fader gain of the track (to avoid clipping) | GAIN knob | |||||
| [ChannelN] | PrevTask | ? | deprecated | ? | |||||
| [ChannelN] | PrevTrack | ? | deprecated | ? | |||||
| [ChannelN] | quantize4 | binary | Aligns Hot-cues and Loop In & Out to the next beat from the current position. | Hot-cues or Loop In/Out markers | |||||
| [ChannelN] | quantize_beat4 | 0.0 - infinity | Holds the frame offset position of the next beat. | Is used internally by CueControl (CUEs & Hotcues) and LoopingControl for quantization. | |||||
| [ChannelN] | rate | -1.0..1.0 | Pitch control | Pitch slider | |||||
| [ChannelN] | rate_dir | -1 or 1 | Rate-direction, indicates orientation of rate slider. | ? | |||||
| [ChannelN] | rate_perm_down | binary | Sets the pitch 4% lower | Perm down button & Pitch slider | |||||
| [ChannelN] | rate_perm_down_small | binary | Sets the pitch 1% lower | Perm down button & Pitch slider | |||||
| [ChannelN] | rate_perm_up | binary | Sets the pitch 4% higher | Perm up button & Pitch slider | |||||
| [ChannelN] | rate_perm_up_small | binary | Sets the pitch 1% higher | Perm up button & Pitch slider | |||||
| [ChannelN] | rate_temp_down | binary | Holds the pitch 4% lower while active | Temp down button & Pitch slider | |||||
| [ChannelN] | rate_temp_down_small | binary | Holds the pitch 1% lower while active | Temp down button & Pitch slider | |||||
| [ChannelN] | rate_temp_up | binary | Holds the pitch 4% higher while active | Temp up button & Pitch slider | |||||
| [ChannelN] | rate_temp_up_small | binary | Holds the pitch 1% higher while active | Temp up button & Pitch slider | |||||
| [ChannelN] | rateRange | 0.0..3.0 | Sets the range of the pitch slider (0.08 = 8%) | none, until you move the pitch slider | |||||
| [ChannelN] | reloop_exit1 | binary | Toggles the current loop on or off. | Loop range in waveform activates or deactivates. | |||||
| [ChannelN] | repeat2 | binary | Enable repeat-mode for the specified deck | when track finishes, song loops to beginning | |||||
| [ChannelN] | reverse | binary | Toggles playing the track backwards | REV button | |||||
| [ChannelN] | scratch | -3.0..3.0 | Affects play speed & direction (differently whether currently playing or not) (multiplicative) | Waveform | |||||
| [ChannelN] | scratch21 | -3.0..3.0 | Affects absolute play speed & direction whether currently playing or not when scratch2_enabled is active. (multiplicative) | Waveform | |||||
| [ChannelN] | scratch2_enable1 | binary | Takes over play speed & direction for scratch2. | Waveform | |||||
| [ChannelN] | start | binary | Jump to start of track | Track jumps to start | |||||
| [ChannelN] | start_play4 | binary | Start playback from the beginning of the deck. | Deck plays from beginning | |||||
| [ChannelN] | start_stop4 | binary | Seeks a player to the start and then stops it. | Deck stops at the beginning | |||||
| [ChannelN] | transform | ? | deprecated | ? | |||||
| [ChannelN] | track_samplerate2 | absolute value | (Read-only) Sample rate of the track loaded on the specified deck | n/a | |||||
| [ChannelN] | track_samples | absolute value | (Read-only) Number of sound samples in the track loaded on the specified deck | n/a | |||||
| [ChannelN] | volume | default | Adjusts the channel volume fader | VOL fader | |||||
| [ChannelN] | vinylcontrol_enabled4 | binary | Toggles whether a deck is being controlled by digital vinyl | When enabled, a vinyl indication should appear onscreen indicating green for Enabled | |||||
| [ChannelN] | vinylcontrol_cueing4 | 0.0-2.0 | Determines how cue points are treated in vinyl control Relative mode | Off - cue points ignored; One Cue - If needle is dropped after the cue point, track will seek to that cue point; hot cue - track will seek to nearest previous hot cue point | |||||
| [ChannelN] | vinylcontrol_mode4 | 0.0-2.0 | Determines how vinyl control interprets needle information: absolute mode - track position equals needle position and speed; relative mode - track speed equals needle speed regardless of needle position; constant mode - track speed equals last known-steady speed regardless of needle input | 3-way button indicates status | |||||
| [ChannelN] | vinylcontrol_status4 | 0.0-3.0 (read-only) | Provides visual feedback with regards to vinyl control status | Off for control disabled, green for control enabled, blinking yellow for when the needle reaches the end of the record, and red for needle skip detected | |||||
| [ChannelN] | VuMeter | default | Outputs the current instantaneous deck volume | Deck VU meter | |||||
| [ChannelN] | VuMeterL | default | Outputs the current instantaneous deck volume for the left channel | Deck VU meter L | |||||
| [ChannelN] | VuMeterR | default | Outputs the current instantaneous deck volume for the right channel | Deck VU meter R | |||||
| [ChannelN] | wheel | -3.0..3.0 | Affects relative play speed & direction persistently (additive offset & must manually be undone) | Waveform | |||||
| —- | —- | —- | —- | —- | |||||
| [SamplerN] | (All Sampler controls are the same as for Channel above. Just replace [ChannelN] with [SamplerN].) |
||||||||
| —- | —- | —- | —- | —- | |||||
| [VinylControl] | Toggle4 | binary | Moves control by a vinyl control signal from one deck to another if using the single deck vinyl control (VC) feature. | If VC isn't enabled on any decks, enable it on the first one we're receiving samples for. If VC is enabled on a single (exclusive) deck, and another deck is setup to receive samples, disable it on the former deck and enable it on the next eligible deck (ordered by deck number). If VC is enabled on multiple decks, don't do anything. | |||||
1 introduced in Mixxx v1.8.0 2 introduced in Mixxx v1.9.0 3 changed in Mixxx v1.9.2 4 introduced in Mixxx v1.10.0 5 changed in Mixxx v1.10.0
This list contains all of the controls that are useful to MIDI mapping and skin developers.
If you were so inclined, the full list (with mixed up [Groups], internal objects and other things you shouldn't touch…be warned!) can be generated by running the following script in your mixxx/src directory:
#!/bin/sh
# set -x
IFS='
'
last_control=
for ck in `grep ConfigKey *.cpp | sed -e 's/ConfigKey(group/ConfigKey("[Master]"/g' | grep 'ConfigKey("' | grep -v "Channel2" | sed -e 's/.*ConfigKey(//g' -e 's/, */,/g' | cut -d\) -f1 | sed -e 's/\[Channel1\]/\[ChannelN\] (where N is a number 1 or 2)/g' | sort -fu`; do
control=`echo $ck|cut -d\" -f2`
if [ "$control" != "$last_control" ]; then
echo
echo $control
last_control=$control
fi
key=`echo $ck|cut -d\" -f4`
if [ ! -z "${key}" ]; then echo "* ${key}"; fi
done
If you want to access one of these controls inside Mixxx, you can do so with something like this:
ControlObjectThreadMain* controlRightPitch = new ControlObjectThreadMain(ControlObject::getControl(ConfigKey("[Channel2]", "rate")));
That line will give you a ControlObject which allows you to read and control the pitch of the right channel in Mixxx. For example, to increase the pitch of the track in the right channel, one could do something like this:
float fRightPitch = controlRightPitch->get(); controlRightPitch->slotSet(fRightPitch + 0.10);
This would increase the pitch of the right channel inside Mixxx, and the GUI controls would automatically reflect this change. Access to ControlObjects is also thread-safe when used this way.
Important note: Different types of ControlObject wrappers must be used depending on what thread your code is running in. This example assumes the code will run in the GUI (ie. main) thread. The ControlObjects wrappers should be used as follows: