MIDI Controller Mapping File Format

Current XML file schema revision is: 1

Introduction

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:

  • Windows: C:\Program Files\Mixxx\midi
  • Linux: /usr/share/mixxx/midi (or /usr/local/share/mixxx/midi)
  • OS X: /Applications/Mixxx.app/Contents/Resources/midi

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.

MIDI Crash Course

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):

StatusFunctionData bytes
0x8nNote offNote numberNote velocity
0x9nNote onNote numberNote velocity
0xAnPolyphonic after-touchNote numberAmount
0xBnControl/mode changeControl numberValue
0xCnProgram changeProgram number(n/a)
0xDnChannel after-touchAmount(n/a)
0xEnPitch wheelLSBMSB
0xF0System Exclusive messageVendor ID(data)
0xF1MIDI Time Code Qtr. Frame(see spec)
0xF2Song Position PointerLSBMSB
0xF3Song SelectSong number(n/a)
0xF4Undefined
0xF5Undefined
0xF6Tune request(n/a)
0xF7End of SysEx (EOX)(n/a)
0xF8Timing clock(n/a)
0xF9Undefined(n/a)
0xFAStart(n/a)
0xFBContinue(n/a)
0xFCStop(n/a)
0xFDUndefined(n/a)
0xFEActive Sensing(n/a)
0xFFSystem 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.)

Sniffing your controller

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:

  1. Start Mixxx (1.8.0 and later) from a command prompt using the –midiDebug option like so:
    • Linux:
      user@machine:~$ mixxx --midiDebug
    • Windows: (v1.7.0 and later)
      C:\Program Files\Mixxx>mixxx --midiDebug
    • Mac OSX:
      $ open -a mixxx --args --midiDebug
  2. Look at the output
    • Watch the console output or look at the Mixxx.log file which will contain all of the MIDI messages Mixxx receives. As you manipulate the controller, the MIDI commands it sends will be printed to the screen/logged to the file. Compare the status (first) byte in each line with the table above and note which button/slider/control sends what message.
    • For example, when you move a slider, you might see
      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.

  3. Add the byte values to a <control> block in the XML file
    • Just plug the first two bytes into a <control> XML block for <status> and <midino> respectively. This is detailed in the next section.

Additional tools

Linux

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.

Windows

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.

Mac OSX

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.

File Format

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>

Definitions of the elements:

These define the part of Mixxx that is being controlled:

  • group - The MixxxControl (controlobject) group
  • key - The MixxxControl (controlobject) key, a list of which can be found below.

These tags define the MIDI event that Mixxx will listen for or send out:

  • status - MIDI “Status” byte. See the MIDI crash course above.
  • midino - The MIDI control or note number (leave this out for the Pitch Bend status.) Also see the crash course.

Input tags:

  • options - Further refine the behaviour of the control (e.g. translations, sensitivity, acceleration) Necessary options will have default values, eg a jogwheel might have no acceleration by default. Can only handle one element currently.
    • Normal - No modifications
    • Invert - Subtracts the value from 127, giving an inverted control (-127..0)
    • Rot64inv -
    • Rot64fast -
    • Rot64 -
    • SelectKnob - For relative controls centered on 64 (0x40)
    • Diff - Adds the current value of a relative control to the previous value
    • Button - a button has a Down (non-zero) and an Up (zero) state, these occur together when pressed/released, this switch only triggers on the Down, Up is ignored. (Herc)
    • Switch - a switch has a On (non-zero) and an Off (zero) state, these occur separately. (Herc)
    • Spread64 - Exponential spread either side of 64, aka “relative” controller
    • Script-Binding - Bind to a MIDI script function given in the “key” tag. (See MIDI Scripting for details.)
    • Hercjog - Handle hercules jog wheels (deprecated…please replace with a MIDI script function.)

Output tags:

  • maximum - Send the 'on' value when the Mixxx control drops below this value.
  • minimum - Send the 'on' value when the Mixxx control exceeds this value. Send the 'off' value otherwise.

Old format (before schema versioning, Mixxx 1.6.1 and prior.)

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>

UI/MIDI Controls and Names

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.

List of Controls

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/ControlRangeWhat it doesOn-screen feedback
[Flanger]lfoDepthdefaultAdjusts the intensity of the flange effectDepth knob
[Flanger]lfoDelay50..10000Adjusts the phase delay of the flange effect in microsecondsDelay knob
[Flanger]lfoPeriod50000..2000000Adjusts the wavelength of the flange effect in microsecondsLFO knob
—-—-—-—-—-
[Microphone]enabled4binary1 if a microphone input is enabled, 0 if not.Microphone is enabled.
[Microphone]orientation40-2Set microphone orientation, 0 = left side of crossfader, 1 = center, 2 = right side of crossfader. Default is center.N/A
[Microphone]PeakIndicator4binaryIndicates when the signal is clipping (too loud for the hardware and is being distorted)Microphone Clip light
[Microphone]talkover4binaryHold value at 1 to mix microphone input into the master output.N/A
[Microphone]volume4defaultAdjusts the microphone volume faderMicrophone volume fader changes
[Microphone]VuMeter4defaultOutputs the current instantaneous microphone volumeMicrophone VU meter changes
—-—-—-—-—-
[Master]balance-1.0..1.0Adjusts the left/right channel balance on the Master outputCenter Balance knob
[Master]crossfader-1.0..1.0Adjusts the crossfader between players/decks (-1.0 is all the way left, Deck 1)Crossfader slider
[Master]crossfader_downbinaryMoves the crossfader left by 1/10thCrossfader slider
[Master]crossfader_down_small4binaryMoves the crossfader left by 1/100thCrossfader slider
[Master]crossfader_upbinaryMoves the crossfader right by 1/10thCrossfader slider
[Master]crossfader_up_small4binaryMoves the crossfader right by 1/100thCrossfader slider
[Master]headVolume0.0..1.0..5.0Adjusts the headphone output volumeHead Vol knob
[Master]headMix-1.0..1.0Adjusts the cue/main mix in the headphone outputPre/Main knob
[Master]latencyabsolute valueLatency setting (sound buffer size) in milliseconds (default 64)Latency slider in the prefs
[Master]num_decks2integerThe number of decks currently enabled.N/A
[Master]num_samplers2integerThe number of samplers currently enabled.N/A
[Master]PeakIndicatorbinaryIndicates when the signal is clipping (too loud for the hardware and is being distorted)Clip light
[Master]samplerateabsolute valueThe current output sample rate in Hz (default 44100)(none)
[Master]volume0.0..1.0..5.0Adjusts the Master output volumeCenter Volume knob
[Master]VuMeterdefaultOutputs the current instantaneous master volume (composite)Master meter (mono)
[Master]VuMeterLdefaultOutputs the current instantaneous master volume for the left channelMaster meter L
[Master]VuMeterRdefaultOutputs the current instantaneous master volume for the right channelMaster meter R
—-—-—-—-—-
[Playlist]LoadSelectedIntoFirstStoppedbinaryLoads the currently highlighted song into the first stopped deckWaveform view
[Playlist]SelectNextPlaylistbinarySwitches to the next view (Library, Queue, etc.)Playlist/tracktable display
[Playlist]SelectNextTrackbinaryScrolls to the next track in the Playlist/tracktablePlaylist/tracktable highlight
[Playlist]SelectPrevPlaylistbinarySwitches to the previous view (Library, Queue, etc.)Playlist/tracktable display
[Playlist]SelectPrevTrackbinaryScrolls to the previous track in the Playlist/tracktablePlaylist/tracktable highlight
[Playlist]SelectTrackKnobrelative valueScrolls 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]backbinaryFast rewind (REW)< button
[ChannelN]beat_active4binaryIndicates whether the player is currently positioned within 50 milliseconds of a beat or not.N/A
[ChannelN]beatloop40.0625 - 128Setup a loop over the set number of beats. A loop is shown over the set number of beats.
[ChannelN]beatloop_X4toggle*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_activate4binaryActivates 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_toggle4binaryToggles 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_enabled4binary1 if beatloop X is enabled, 0 if not. Beatloop X button in skin is lit.
[ChannelN]beats_translate_curpos4binaryAdjust beatgrid so closest beat is aligned with the current playposition.Beatgrid moves to align with current playposition.
[ChannelN]beatsyncbinarySyncs the BPM to that of the other track (if BPM is detected on both)SYNC button & Pitch slider snaps to the appropriate value
[ChannelN]beatsync5binarychanged 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_phase4binarySyncs 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_tempo4binarySyncs the BPM to that of the other track (if BPM is detected on both)SYNC button & Pitch slider snaps to the appropriate value
[ChannelN]bpmabsolute valueReads or sets the track's current BPM (changing the pitch)BPM value display
[ChannelN]bpm2real-valuedbpm now only reflects the bpm of the loaded trackN/A
[ChannelN]bpm5real-valuedbpm reflects the perceived (rate-adjusted) BPM of the file loaded in ChannelNBPM value display
[ChannelN]bpm_tap2binaryWhen tapped repeatedly, adjusts the playback rate of ChannelN to match the tapped BPMtrack playback rate shifts after 4 or more taps
[ChannelN]bpm_tap3binaryWhen tapped repeatedly, adjusts the BPM of ChannelN to match the tapped BPMBPM value display (play speed doesn't change)
[ChannelN]cue_defaultbinaryIn 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_pointabsolute valueThe current position of the cue point in samplesCue point marker
[ChannelN]cue_previewbinaryPlays from the current cue pointCUE button lights & waveform moves
[ChannelN]cue_setbinarySets a cue point?Cue mark appears on the waveform?
[ChannelN]cue_simplebinary??
[ChannelN]durationabsolute valueOutputs the length of the current song in seconds(none)
[ChannelN]eject2binaryEject currently loaded tracktrack is ejected from player
[ChannelN]endbinaryJump to end of trackTrack jumps to end
[ChannelN]file_bpmpositive value(Read-only) the detected BPM of the loaded trackN/A
[ChannelN]filterHigh0.0..1.0..4.0Adjusts the gain of the high EQ filterHIGH knob
[ChannelN]filterHighKillbinaryHolds the gain of the high EQ to -inf while activeHIGH knob
[ChannelN]filterLow0.0..1.0..4.0Adjusts the gain of the low EQ filterLOW knob
[ChannelN]filterLowKillbinaryHolds the gain of the low EQ to -inf while activeLOW knob
[ChannelN]filterMid0.0..1.0..4.0Adjusts the gain of the mid EQ filterMID knob
[ChannelN]filterMidKillbinaryHolds the gain of the mid EQ to -inf while activeMID knob
[ChannelN]flangerbinaryToggles the flange effectFLANGER button
[ChannelN]fwdbinaryFast forward (FF)> button
[ChannelN]Hercules1?deprecated?
[ChannelN]Hercules2?deprecated?
[ChannelN]Hercules3?deprecated?
[ChannelN]Hercules4?deprecated?
[ChannelN]hotcue_X_activate1binaryIf 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_clear1binaryIf hotcue X is set, clears its hotcue status.Hotcue X marker changes on waveform.
[ChannelN]hotcue_X_enabled1read-only, binary1 if hotcue X is active, (position is not -1), 0 otherwise.
[ChannelN]hotcue_X_goto1binaryIf hotcue X is set, seeks the player to hotcue X's position.Player may change position.
[ChannelN]hotcue_X_gotoandstop1binaryIf hotcue X is set, seeks the player to hotcue X's position and stops.Player may change position.
[ChannelN]hotcue_X_position1positive integerThe position of hotcue X in samples, -1 if not set.Hotcue X marker changes on waveform.
[ChannelN]hotcue_X_set1binarySet 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.0Affects relative play speed & direction for short instances (additive & is automatically reset to 0)Waveform
[ChannelN]keylock2binaryEnable key-lock for the specified deck (rate changes only affect tempo, not key)key-lock button activates
[ChannelN]LoadSelectedTrackbinaryLoads the currently highlighted track into the deckTrack name & waveform change
[ChannelN]loop_double4binaryDoubles the current loop's length by moving the end marker.Loop length doubles on waveform
[ChannelN]loop_enabled1read-only, binaryIndicates whether or not a loop is enabled. Read-only, do not set.Loop in waveform is active.
[ChannelN]loop_end_position1positive integerThe player loop-out position in samples, -1 if not set.Loop-out marker shows on waveform.
[ChannelN]loop_halve4binaryHalves 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_in1binarySets the player loop in position to the current play position.Loop-in marker changes on waveform.
[ChannelN]loop_out1binarySets the player loop out position to the current play position.Loop-out marker changes on waveform.
[ChannelN]loop_scale40.0 - infinityScale 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_position1positive integerThe player loop-in position in samples, -1 if not set.Loop-in marker changes on waveform.
[ChannelN]NextTask?deprecated?
[ChannelN]NextTrack?deprecated?
[ChannelN]orientation20-2Set channel's mix orientation, 0 = left side of crossfader, 1 = center, 2 = right side of crossfaderN/A
[ChannelN]PeakIndicatorbinaryIndicates when the signal is clipping (too loud for the hardware and is being distorted)Clip light
[ChannelN]pflbinaryToggles headphone cueingHeadphone button
[ChannelN]playbinaryToggles playing or pausing the trackPlay/pause button
[ChannelN]playpositiondefaultSets the absolute position in the track (0=beginning, 1=end)Waveform
[ChannelN]pregain0.0..1.0..4.0Adjusts the pre-fader gain of the track (to avoid clipping)GAIN knob
[ChannelN]PrevTask?deprecated?
[ChannelN]PrevTrack?deprecated?
[ChannelN]quantize4binaryAligns Hot-cues and Loop In & Out to the next beat from the current position. Hot-cues or Loop In/Out markers
[ChannelN]quantize_beat40.0 - infinityHolds the frame offset position of the next beat. Is used internally by CueControl (CUEs & Hotcues) and LoopingControl for quantization.
[ChannelN]rate-1.0..1.0Pitch controlPitch slider
[ChannelN]rate_dir-1 or 1Rate-direction, indicates orientation of rate slider.?
[ChannelN]rate_perm_downbinarySets the pitch 4% lowerPerm down button & Pitch slider
[ChannelN]rate_perm_down_smallbinarySets the pitch 1% lowerPerm down button & Pitch slider
[ChannelN]rate_perm_upbinarySets the pitch 4% higherPerm up button & Pitch slider
[ChannelN]rate_perm_up_smallbinarySets the pitch 1% higherPerm up button & Pitch slider
[ChannelN]rate_temp_downbinaryHolds the pitch 4% lower while activeTemp down button & Pitch slider
[ChannelN]rate_temp_down_smallbinaryHolds the pitch 1% lower while activeTemp down button & Pitch slider
[ChannelN]rate_temp_upbinaryHolds the pitch 4% higher while activeTemp up button & Pitch slider
[ChannelN]rate_temp_up_smallbinaryHolds the pitch 1% higher while activeTemp up button & Pitch slider
[ChannelN]rateRange0.0..3.0Sets the range of the pitch slider (0.08 = 8%)none, until you move the pitch slider
[ChannelN]reloop_exit1binaryToggles the current loop on or off.Loop range in waveform activates or deactivates.
[ChannelN]repeat2binaryEnable repeat-mode for the specified deckwhen track finishes, song loops to beginning
[ChannelN]reversebinaryToggles playing the track backwardsREV button
[ChannelN]scratch-3.0..3.0Affects play speed & direction (differently whether currently playing or not) (multiplicative)Waveform
[ChannelN]scratch21-3.0..3.0Affects absolute play speed & direction whether currently playing or not when scratch2_enabled is active. (multiplicative)Waveform
[ChannelN]scratch2_enable1binaryTakes over play speed & direction for scratch2.Waveform
[ChannelN]startbinaryJump to start of trackTrack jumps to start
[ChannelN]start_play4binaryStart playback from the beginning of the deck.Deck plays from beginning
[ChannelN]start_stop4binarySeeks a player to the start and then stops it.Deck stops at the beginning
[ChannelN]transform?deprecated?
[ChannelN]track_samplerate2absolute value(Read-only) Sample rate of the track loaded on the specified deckn/a
[ChannelN]track_samplesabsolute value(Read-only) Number of sound samples in the track loaded on the specified deckn/a
[ChannelN]volumedefaultAdjusts the channel volume faderVOL fader
[ChannelN]vinylcontrol_enabled4binaryToggles whether a deck is being controlled by digital vinyl When enabled, a vinyl indication should appear onscreen indicating green for Enabled
[ChannelN]vinylcontrol_cueing40.0-2.0Determines 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_mode40.0-2.0Determines 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_status40.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]VuMeterdefaultOutputs the current instantaneous deck volumeDeck VU meter
[ChannelN]VuMeterLdefaultOutputs the current instantaneous deck volume for the left channelDeck VU meter L
[ChannelN]VuMeterRdefaultOutputs the current instantaneous deck volume for the right channelDeck VU meter R
[ChannelN]wheel-3.0..3.0Affects 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]Toggle4binaryMoves 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

Using Controls Inside Mixxx (for developers)

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:

  • ControlObjectThreadMain - GUI (main) thread
  • ControlObject - The audio callback thread (most audio processing happens here)
  • ControlObjectThread - Other threads
midi_controller_mapping_file_format.txt · Last modified: 2012/01/13 03:54 by pegasus
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki