Xone:4D MIDI Mapping for download

Hello folks, I’d like to share with you a mapping created for Allen & Heath Xone:4D.
Such an incredible mixer shouldn’t be left for death.
This mixer was created with Ableton Live in mind and has plenty of MIDI controls. It is very similar to Xone:3D and Xone:1D on the MIDI side, so it’s quite possible this configuration can at least give you a headstart on those as well.

Alright, so number one thing here is to check the mixer itself for the correct settings to play nice with DJay Pro:

Step 1: Change the mixer to “Ableton” mode. The default mode is “Traktor”. This will fix a problem with the 8 upper rotary knobs:

My example is using MIDI in channel 16 (default) - have that in mind if you use another setting.
Lightpipe settings are left in default and it works.

Step 2: Create a simple MIDI mapping at the "settings → MIDI Devices → MIDI Devices: XONE:4D Midi → Configure. Just map anything to create a mapping file, that we will later overwrite. If you don’t see your controller here, you probably have another problem. Reinstalling the driver and re-flashing the MIDI firmware (both still available at this date on A&H website) may fix that.

Step 3: Close the application and open your MIDI config file. By default, it will be stored within your "Music\djay\MIDI Mappings" folder and the default filename is “XONE.4D Midi.djayMidiMapping”. You can edit this file with Notepad. Delete everything AFTER the following line:

{
    USBID = <*I123456789>;

This is your unique USB device ID, so keep whatever is in there, then paste the contents below starting immediately after that line:

controls = (
	{
	    keyPath = "turntable1.playPause";
	    midiChannel = <*I15>;
	    midiData = <*I38>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable1.cuePositionOrJumpConsideringPlayState1";
	    midiChannel = <*I15>;
	    midiData = <*I23>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable1.turntableIsSyncMaster";
	    midiChannel = <*I15>;
	    midiData = <*I20>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable1.bpmSync";
	    midiChannel = <*I15>;
	    midiData = <*I34>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    flipped = <*BY>;
	    keyPath = "turntable1.speed";
	    midiChannel = <*I15>;
	    midiData = <*I16>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerThreeTrackChannel2Volume";
	    midiChannel = <*I15>;
	    midiData = <*I18>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerThreeTrackChannel1Volume";
	    midiChannel = <*I15>;
	    midiData = <*I19>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerThreeTrackChannel3Volume";
	    midiChannel = <*I15>;
	    midiData = <*I17>;
	    midiMessageType = <*I3>;
	},
	{
	    buttonMode = toggle;
	    keyPath = "turntable1.autoLoopOnOff";
	    midiChannel = <*I15>;
	    midiData = <*I28>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.bounceLoopDrums1BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I14>;
	    midiMessageType = <*I1>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable1.pitchBendMove";
	    midiChannel = <*I15>;
	    midiData = <*I37>;
	    midiMessageType = <*I3>;
	    rotaryAcceleration = <*I150>;
	    rotarySensitivity = <*R172>;
	},
	{
	    keyPath = "turntable1.unmixerFourTrackChannel4VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I14>;
	    midiMessageType = <*I3>;
	    pickupMode = <*BY>;
	},
	{
	    keyPath = "turntable2.playPause";
	    midiChannel = <*I15>;
	    midiData = <*I70>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable2.cuePositionOrJumpConsideringPlayState1";
	    midiChannel = <*I15>;
	    midiData = <*I55>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable2.turntableIsSyncMaster";
	    midiChannel = <*I15>;
	    midiData = <*I52>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    keyPath = "turntable2.bpmSync";
	    midiChannel = <*I15>;
	    midiData = <*I66>;
	    midiMessageType = <*I1>;
	    output = {
	    };
	},
	{
	    flipped = <*BY>;
	    keyPath = "turntable2.speed";
	    midiChannel = <*I15>;
	    midiData = <*I28>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerThreeTrackChannel1Volume";
	    midiChannel = <*I15>;
	    midiData = <*I31>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerThreeTrackChannel2Volume";
	    midiChannel = <*I15>;
	    midiData = <*I30>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerThreeTrackChannel3Volume";
	    midiChannel = <*I15>;
	    midiData = <*I29>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerFourTrackChannel1VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I8>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerFourTrackChannel2VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I10>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.unmixerFourTrackChannel3VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I12>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.skipBackward";
	    midiChannel = <*I15>;
	    midiData = <*I11>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.skipForward";
	    midiChannel = <*I15>;
	    midiData = <*I9>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.skipBackward";
	    midiChannel = <*I15>;
	    midiData = <*I43>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.skipForward";
	    midiChannel = <*I15>;
	    midiData = <*I41>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.unmixerFourTrackChannel1VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I20>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerFourTrackChannel2VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I22>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerFourTrackChannel3VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I24>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.unmixerFourTrackChannel4VolumeEQ";
	    midiChannel = <*I15>;
	    midiData = <*I26>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "musicLibrary.toggleLibrarySource";
	    midiChannel = <*I15>;
	    midiData = <*I24>;
	    midiMessageType = <*I1>;
	},
	{
	    controlType = rotary;
	    flipped = <*BY>;
	    keyPath = "musicLibrary.libraryRotary";
	    midiChannel = <*I15>;
	    midiData = <*I44>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.fx1ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I9>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.fx3ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I13>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable1.pitch";
	    midiChannel = <*I15>;
	    midiData = <*I15>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "musicLibrary.toggleLibraryVisible";
	    midiChannel = <*I15>;
	    midiData = <*I56>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.skipDurationUp";
	    midiChannel = <*I15>;
	    midiData = <*I92>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.skipDurationDown";
	    midiChannel = <*I15>;
	    midiData = <*I91>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.slicerRepeatDurationDouble";
	    midiChannel = <*I15>;
	    midiData = <*I94>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.slicerRepeatDurationHalf";
	    midiChannel = <*I15>;
	    midiData = <*I93>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.bounceLoopDrums05BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I16>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.shiftDownBeatRight";
	    midiChannel = <*I15>;
	    midiData = <*I96>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.shiftDownBeatLeft";
	    midiChannel = <*I15>;
	    midiData = <*I95>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.bounceLoopDrums025BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I26>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.cueOrJumpIfAlreadySet1";
	    midiChannel = <*I15>;
	    midiData = <*I29>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.cueOrJumpIfAlreadySet2";
	    midiChannel = <*I15>;
	    midiData = <*I15>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.cueOrJumpIfAlreadySet3";
	    midiChannel = <*I15>;
	    midiData = <*I17>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.cueOrJumpIfAlreadySet4";
	    midiChannel = <*I15>;
	    midiData = <*I27>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.clearCuePoint1";
	    midiChannel = <*I15>;
	    midiData = <*I36>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.clearCuePoint2";
	    midiChannel = <*I15>;
	    midiData = <*I21>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.clearCuePoint3";
	    midiChannel = <*I15>;
	    midiData = <*I18>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.clearCuePoint4";
	    midiChannel = <*I15>;
	    midiData = <*I32>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable1.fx1Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I37>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable1.fx2Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I22>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable1.fx3Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I19>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.instantFx4";
	    midiChannel = <*I15>;
	    midiData = <*I33>;
	    midiMessageType = <*I1>;
	},
	{
	    controlType = rotary;
	    flipped = <*BY>;
	    keyPath = "musicLibrary.libraryRotary";
	    midiChannel = <*I15>;
	    midiData = <*I36>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "musicLibrary.load1";
	    midiChannel = <*I15>;
	    midiData = <*I10>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "musicLibrary.load2";
	    midiChannel = <*I15>;
	    midiData = <*I42>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable1.fx2ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I11>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable1.autoLoopDurationRotary";
	    midiChannel = <*I15>;
	    midiData = <*I32>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable1.skipDurationRotary";
	    midiChannel = <*I15>;
	    midiData = <*I33>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable1.skipRotary";
	    midiChannel = <*I15>;
	    midiData = <*I34>;
	    midiMessageType = <*I3>;
	    rotarySensitivity = <*R28>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable1.jogSeekMove";
	    midiChannel = <*I15>;
	    midiData = <*I35>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "musicLibrary.libraryDown";
	    midiChannel = <*I15>;
	    midiData = <*I13>;
	    midiMessageType = <*I1>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable2.autoLoopDurationRotary";
	    midiChannel = <*I15>;
	    midiData = <*I40>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable2.skipDurationRotary";
	    midiChannel = <*I15>;
	    midiData = <*I41>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable2.skipRotary";
	    midiChannel = <*I15>;
	    midiData = <*I42>;
	    midiMessageType = <*I3>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable2.jogSeekMove";
	    midiChannel = <*I15>;
	    midiData = <*I43>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.autoLoopOnOff";
	    midiChannel = <*I15>;
	    midiData = <*I60>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.bounceLoop1BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I46>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.bounceLoop05BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I48>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.bounceLoop025BeatInterval";
	    midiChannel = <*I15>;
	    midiData = <*I58>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.fx1ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I21>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.fx2ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I23>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.fx3ParameterValue";
	    midiChannel = <*I15>;
	    midiData = <*I25>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.pitch";
	    midiChannel = <*I15>;
	    midiData = <*I27>;
	    midiMessageType = <*I3>;
	},
	{
	    keyPath = "turntable2.cueOrJumpIfAlreadySet1";
	    midiChannel = <*I15>;
	    midiData = <*I61>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.cueOrJumpIfAlreadySet2";
	    midiChannel = <*I15>;
	    midiData = <*I47>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.cueOrJumpIfAlreadySet3";
	    midiChannel = <*I15>;
	    midiData = <*I49>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.cueOrJumpIfAlreadySet4";
	    midiChannel = <*I15>;
	    midiData = <*I59>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.clearCuePoint1";
	    midiChannel = <*I15>;
	    midiData = <*I68>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.clearCuePoint2";
	    midiChannel = <*I15>;
	    midiData = <*I53>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.clearCuePoint3";
	    midiChannel = <*I15>;
	    midiData = <*I50>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.clearCuePoint4";
	    midiChannel = <*I15>;
	    midiData = <*I64>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable2.fx1Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I69>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable2.fx2Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I54>;
	    midiMessageType = <*I1>;
	},
	{
	    buttonMode = hold;
	    keyPath = "turntable2.fx3Enabled";
	    midiChannel = <*I15>;
	    midiData = <*I51>;
	    midiMessageType = <*I1>;
	},
	{
	    keyPath = "turntable2.instantFx4";
	    midiChannel = <*I15>;
	    midiData = <*I65>;
	    midiMessageType = <*I1>;
	},
	{
	    controlType = rotary;
	    keyPath = "turntable2.pitchBendMove";
	    midiChannel = <*I15>;
	    midiData = <*I45>;
	    midiMessageType = <*I3>;
	    rotarySensitivity = <*R177>;
	},
	{
	    keyPath = turntable2;
	    midiChannel = <*I15>;
	    midiData = <*I1>;
	    midiMessageType = <*I3>;
	}
    );
    editor = "(null)-5.1.7917.0";
    endpointName = "XONE:4D Midi";
    schemeVersion = <*I1>;
    version = <*I0>;
}
1 Like

A brief on how this mapping works:

Top knobs left to right:
-Auto loop size
-Skip size
-Skip
-Scrub (moves the cursor really fast on the track)

Pushing down the knobs:
-Auto loop in/out
-1 bar AI drum loop
-1/2 bar AI drum loop
-1/4 bar AI drum loop

Top row centered knobs:
-FX1 parameter
-FX2 parameter
-FX3 parameter
-Key

Bottom row centered knobs:
-AI drum
-AI bass
-AI harmonics
-AI vocals

Faders:
-AI drums
-AI harmonics
-AI vocals
-Pitch fader (SL1200 style)

First button row:
-Cue 1
-Cue 2
-Cue 3
-Cue 4

Second button row:
-Detete cue 1
-Detete cue 2
-Detete cue 3
-Detete cue 4

Third button row:
-FX1 (hold)
-FX2 (hold)
-FX3 (hold)
-Instant FX4

Jog wheel:
-Jog (a bit buggy, I couldn’t quite figure out. Seems like it sends too many accel values too quickly for the software and it freezes sometimes)

Jog buttons:
Up: load track on deck (left to A, right to B)
Down: select next track
Left and right: skip (once per click)

Side rotary:
Push: jump between navigation panes (left), expand/collapse pane (right)
Turn: move through tracks or folders

Main 4 buttons:
-play/pause
-cue
-synch
-set synch master

Please share any improvements you may have done to it, especially in the track navigation and jog seek functions.

Enjoy!

2 Likes

Thanks for sharing @palestina

Good work. I don’t own one myself but for those who do this will be useful.