Denon MC7000 Mapping

Hello guys,
finally I have decided to go the bumpy road and get that Denon MC7000 controller running with MIXXX on Linux.

I don’t attach the mappings here anymore but moved it to GitHub. Please see the WIKI for download of the latest version.
https://www.mixxx.org/wiki/doku.php/denon_mc7000#mapping

Edit: This is no longer valid:

instead the Linux Kernel is patched supporting the USB audio device. See details in this post:
https://www.mixxx.org/forums/viewtopic.php?f=7&t=13126&p=43959#p43959

As Denon does not provide any MIDI Documentation this is what I did as first. Please find attached a zipped .ods document. A lot of trials but the MC8000 MIDI specs were helpful alreday.

I started to create .xml and .js file so a very basic functionality is done. I continue with that and will come back with questions as I already found some hurdles that I cannot solve myself. I trust on your help for getting this task done with me.

have a few great days…
Cheers! OsZ
Denon MC7000 - MIDI Spec.ods.zip (349 KB)

1 Like

Hi again - here I upload the first drafts of a very basic MC7000 mapping.
There are many things to do yet but I would like to already ask a few questions here.

  1. How to get the current status of the controller submitted to MIXXX? The GUI always starts all knobs and faders at Zero Position, even though the controller is somewhere else.
    EDIT: This is not so important as the “Soft-takeover” option prevents the worst but would still be nice to understand how to send current status to MIXXX

  2. Denon typically increases the tempo by moving the Pitch Fader down. While doing so the sliders in the software are moving up. I tried to reverse in the script line 38 without any effect.

  3. The Jog wheels are working but sensitivity need tuning still. The issue is - I couldn’t get the Vinyl Button mapped in order to activate or deactivate the wheel touch. Knowing that in MC7000.wheelTouch function still a dependency to the knob is missing but first of all I would like to see the knobs working which they don’t. Even with < this.isVinylMode = true; > the LEDs should light up but they only do for Deck 2 and 3 - not for Deck 1 and 4. See lines 40 - 48 in the script.

Enough for the first place.
Thanks a lot for your attention and help.
OsZ

Hey there - I almost finished a version which now can be tested with the MC7000 controller for MIXXX 2.2.x.
Most important functions are working incl LED’s for buttons, Deck level meter, Platter Ring LED’s.

What is not working yet and where I need your support and guidance:

1) How to get the current status of the controller submitted to MIXXX? “Soft-takeover” option prevents the worst but is not ideal for initializing
------working now
2) Orientation of Channel to Crossfader
------finished mapping

3) Pitch Fader orientation (when reversing in the GUI still the GUI faders move up when hardware faders move down)
------now correct orientation is set using script instead of xml
4) Pitch Fader Range not mapped yet, uses the GUI setting
------range set now to 4%, 6%, 10%, 16% customizable
5) Vinyl Button not mapped
------done, mapped to toggle platter surface in- / active
------when active the Jog LEDs are spinny, else they show track position
6) “STOP TIME” not mapped. Does waveform zoom make sense or engine.softStop?
------backspin mapped on “CENSOR” button
------“STOP TIME” regulates how quickly the backspin comes to stop
7) FX Beats and TAP not mapped
------is mapped now:
------“Beats” rotary to adjust Dry/Wet relation
------“TAP” to toggle FX on Master
------“SHIFT”+“TAP” to toggle FX on Headphone

8) Needle Search not mapped
------LSB + MSB signal mapped
------ hold shift to search through a playing track
9) Program 1/2 not mapped (easy to fix - I just didn’t see a valuable function yet)
------is mapped to jump 8 beats back and forth
------hold “Shift” to jump 32 beats[/i]
10) Pads “hard” mapped to HotCue but the whole Cue/Roll/Slicer/Sampler section needs some thoughts
11) Key select is mapped but needs a few ticks until the key actually changes
------this is solved now using script

Library:
“Back” switches panels
Push “Select/Load” knob loads into deck (see below)
“L.Prep” loads track into Preview deck (hold shift and press “L.Prep” to start the track)
“Files” maximizes the Library

As there are no Load buttons for the single Decks I have mapped it as following:
Deck 1 / 3: choose either deck and push the left hand side “Select/Load” knob to load
Deck 2 / 4: choose either deck and push the right hand side “Select/Load” knob to load

Future Functions: The section to sort by BPM, Key, Title, Artist will be mapped at MIXXX 2.3 beta release

Thanks a lot for hints or concrete help to fix the remaining open points.

Cheers!
OsZ

You can find the MIDI message you need to send to the controller for this by intercepting the MIDI messages Serato sends on Windows or macOS. The wiki lists some tools that can help with that.

[ChannelX], orientation Control. As documented on the wiki, 0=left, 1=center (unassigned), 2=right

If you’re using XML, use the option. In JS just multiply the value by -1.

You could use this knob for the “factor” parameter for engine.brake… although I don’t know if that’s really useful.

Use the Components EffectUnit.

Map this to [ChannelX], pitch_adjust (not pitch) and change it by +1/-1 depending on which direction the encoder is turned.

Thank you very much Be by checking. Let’s go topic by topic as I don’t get it.

  1. I need to find one who has got Win or Mac running with Serato then. Do you think that Serato runs under Linux using WINE ? Well must not run smoothly - only start to get the MIDI commands…

  2. about the Channel assignment. I found the “orientation” command before but did not get it to work - tried with JS instead but still no luck. Just for the first channel here my example:

On first channel I use: 0x90

Then the second byte would always be: 0x1E

and the third byte:
0x00 for center position
0x01 for left position
0x02 for right position

The signals can be only distinguished using the channel number and 3rd byte value.

That’s how I assigned it in xml file now:

<control> <group>[Channel1]</group> <key>MC7000.crossfaderAssignCenter</key> <description>Ch1 THRU</description> <status>0x90</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control> <control> <group>[Channel1]</group> <key>MC7000.crossfaderAssignLeft</key> <description>Ch1 on DeckA</description> <status>0x90</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control> <control> <group>[Channel1]</group> <key>MC7000.crossfaderAssignRight</key> <description>Ch1 on DeckB</description> <status>0x90</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control>

and the corresponding script lines:

/* Assign Channel to Crossfader */
// Center (THRU)
MC7000.crossfaderAssignCenter = function(channel, control, value, status, group) {
    var deckNumber = script.deckFromGroup(group);
	if (value = 0) {
        engine.setValue(deckNumber, "orientation", 1);
    }
};
// Left (A)
MC7000.crossfaderAssignLeft = function(channel, control, value, status, group) {
    var deckNumber = script.deckFromGroup(group);
	if (value = 1) {
        engine.setValue(deckNumber, "orientation", 0);
    }
};
// Right (B)
MC7000.crossfaderAssignRight = function(channel, control, value, status, group) {
    var deckNumber = script.deckFromGroup(group);
	if (value = 2) {
        engine.setValue(deckNumber, "orientation", 2);
    }
};[/code]

I always get an error that the value returns 0 for the channel - this example for channel 3

[code]Warning [Controller]: ControlDoublePrivate::getControl returning NULL for ( "3" , "orientation" )

Thanks a lot for any suggestion to get that working.

First, I do not understand why you have 3 XML mappings and 3 JS functions for one function. Maybe by chance this could work, but it’s strange and makes the code confusing.

script.deckFromGroup returns a number, then you are passing that to engine.setValue as the first parameter, but that expects a string like “[Channel1]”.

OK - to have it 3 times on the xml is strange indeed.
Then the xml file must link to a script function in 4 blocks mentioning the 4 channels but the midi signal is always the same.

<control> <group>[Channel1]</group> <key>MC7000.crossfaderAssign</key> <description>Ch1 THRU</description> <status>0x90</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control> <control> <group>[Channel2]</group> <key>MC7000.crossfaderAssign</key> <description>Ch2 THRU</description> <status>0x91</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control> <control> <group>[Channel3]</group> <key>MC7000.crossfaderAssign</key> <description>Ch3 THRU</description> <status>0x92</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control> <control> <group>[Channel4]</group> <key>MC7000.crossfaderAssign</key> <description>Ch4 THRU</description> <status>0x93</status> <midino>0x1E</midino> <options> <script-binding/> </options> </control>

But how would the Midi Script look like then to get the position of the switch?
here what doe not work either:

[code]MC7000.crossfaderAssign = function(channel, control, value, status, group) {
var deckNumber = script.deckFromGroup(group);
if (value = 0) {
engine.setValue(deckNumber, “orientation”, 1);
}

    else if (value = 1) {
        engine.setValue(deckNumber, "orientation", 0);
    }

    else if (value = 2) {
        engine.setValue(deckNumber, "orientation", 2);
    }
};[/code]

Thank you

Do not use script.deckFromGroup for this. Just use group for the first parameter to engine.setValue

Just tried but that does not assign anything. No warning or error messages though.
The console output while moving the switch on the controller for Channel 1 and 3 is following:

Debug [Controller]: DENON DJ MC7000 MIDI 1: t:10344 ms status 0x90 (ch 1, opcode 0x9), ctrl 0x1E, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: t:10563 ms status 0x90 (ch 1, opcode 0x9), ctrl 0x1E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: t:10929 ms status 0x90 (ch 1, opcode 0x9), ctrl 0x1E, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: t:13533 ms status 0x92 (ch 3, opcode 0x9), ctrl 0x1E, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: t:13825 ms status 0x92 (ch 3, opcode 0x9), ctrl 0x1E, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: t:13843 ms status 0x92 (ch 3, opcode 0x9), ctrl 0x1E, val 0x01

Any other idea ?

Good Morning -
I got that channel assign to work by changing the “=” to “===”. Yes - as newbee - I learned the difference it makes.

So what works now is:

[code] // Assign Channel to Crossfader
MC7000.crossfaderAssign = function(channel, control, value, status, group) {
if (value === 0x00) {
engine.setValue(group, “orientation”, 1);
}

    else if (value === 0x01) {
        engine.setValue(group, "orientation", 0);
    }

    else if (value === 0x02) {
        engine.setValue(group, "orientation", 2);
    }
};[/code]

Next item to be solved…

  1. Pitch Fader orientation - Hardware vs. GUI

I try to explain what happens:
A) The GUI is set without inverse the orientation, so to say standard. Increasing tempo is up, lower the tempo is on the bottom side. Moving the Hardware Pitch Fader down (for Denon down is positive, increases the tempo) then the result is increased tempo and the GUI slider moves up. So far the result is as expected just a bit confusing visually.

B) Selecting “Down increases tempo” within the GUI Settings will give following result: The GUI now flips up and down as expected with having positive (increased tempo) at the bottom and negative at the top. The strange thing is when I move the Hardware Pitch Fader then no inverse can be seen, means still when I move the Hardware down then the GUI slider moves up to the negative side. That is even a worst impact as I expect with moving the Hardware down to increase the tempo but in fact the GUI slider moves up to negative and hence reduces the tempo.

Both, option in the .xml file nor the following line in .js helped to change it.

engine.setParameter(group, "rate_dir", -1);

The slider within the GUI always moves up.

For channel 1:
LSB is at 0x90 0x09 and then going from 0x00 for most negative (hardware up) to 0x7F for most positive (hardware down) values
MSB is at 0x90 0x77 and fits nicely in between

The total Hardware range is LSB: 0x00 / MSB: 0x00 at most up (most negative) position to LSB: 0x7F / MSB: 0x7F at the most down (most positive) position

Any chance to solve that is appreciated. But honestly this would be more cosmetic and not really a functional issue.

It’s not the rate_dir control that you need to invert the values for; it’s the values of rate.

Thank you for the hint, Be!
Anyhow it doesn’t work.

Where and how would I need to place the function then ? Possibly I do sth. wrong there.

Thank you!

Finally I solved the Pitch Fader direction using script:

[code] // Pitch Fader (LSB)
MC7000.pitchFaderLSB = function(channel, control, value, status, group) {
MC7000.pitchLSB = value; // just defining rough position
};

// Pitch Fader Position (LSB + MSB)
MC7000.pitchFaderPosition = function(channel, control, value, status, group) {
    var fullValue = (MC7000.pitchLSB << 7) + value;
    var position = 1 - (fullValue / 0x3FFF); // 1 - () to turn around the direction
    engine.setParameter(group, "rate" , position);
};[/code]

Now I think the most difficult part for me comes to solve… PAD Mode.

Currently all PADs are linked to HotCue without taking note of the actual PAD Mode. I have made a sketch attached here to show the MIDI signals for Channel one (obviously “94” counts up for the next channels). The controller sends different signals for the PAD MODE but the PAD buttons sending always the same signal. The function needs to be implemented based on what PAD mode signal was received before.

PADs.jpg

Please can one write some example code in order to distinguish between CUE and SAMPLER ?

I did read the WIKI and some other JS files, especially for the Pioneer SX as it looks very similar layout, hence it doesn’t help if you guide me there. I am still clueless, unfortunately.

If I would get some code sample to get the point then I can work out the rest.

Thanks a lot for help again.
Cheers! OsZ

Hello again - unfortunately no one could help me yet with the PAD Modes (see post before).

Therefore I am now asking a different topic - about SysEx message to get the controller status.

In the JS file I got following lines to obtain the current controller status:

var ControllerStatusSysex = [0xF0, 0x00, 0x20, 0x7F, 0x03, 0x01, 0xF7];
midi.sendSysexMsg(ControllerStatusSysex, ControllerStatusSysex.length);

but only the FX section and the Channel - X-Fader Adjust values are setting the MIXXX GUI.

I did check with MIDI-OX by sending SYSEX msg and got following reply in the monitor input section:

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 0023894C  Den --     F0  Buffer:    10 Bytes   System Exclusive      
 SYSX: F0 00 20 7F 19 00 00 03 00 F7
 0023894D  Den --     90    1E    01    1  F# 1 Note On               
 0023894E  Den --     B0    16    48    1  ---  CC: 22 (E-MU)         
 0023894F  Den --     B0    17    00    1  ---  CC: 23 (E-MU)         
 00238950  Den --     B0    18    7F    1  ---  CC: 24 (E-MU)         
 00238951  Den --     B0    19    00    1  ---  Control Change        
 00238952  Den --     B0    1A    7F    1  ---  Control Change        
 00238953  Den --     B0    1C    53    1  ---  Control Change        
 00238954  Den --     9F    58    00   16  E  6 Note Off              
 00238955  Den --     94    00    7F    5  C -1 Note On               
 00238955  Den --     B0    13    00    1  ---  Control Change        
 00238957  Den --     B0    09    62    1  ---  Control Change        
 00238958  Den --     B0    77    75    1  ---  Control Change        
 002389AF  Den --     91    1E    00    2  F# 1 Note Off              
 002389B0  Den --     B1    16    4D    2  ---  CC: 22 (E-MU)         
 002389B1  Den --     B1    17    5D    2  ---  CC: 23 (E-MU)         
 002389B2  Den --     B1    18    40    2  ---  CC: 24 (E-MU)         
 002389B2  Den --     B1    19    40    2  ---  Control Change        
 002389B3  Den --     B1    1A    7E    2  ---  Control Change        
 002389B5  Den --     B1    1C    00    2  ---  Control Change        
 002389B6  Den --     9F    59    00   16  F  6 Note Off              
 002389B7  Den --     95    00    7F    6  C -1 Note On               
 002389B8  Den --     B1    13    00    2  ---  Control Change        
 002389B9  Den --     B1    09    14    2  ---  Control Change        
 002389B9  Den --     B1    77    49    2  ---  Control Change        
 00238A12  Den --     92    1E    00    3  F# 1 Note Off              
 00238A13  Den --     B2    16    4B    3  ---  CC: 22 (E-MU)         
 00238A15  Den --     B2    17    40    3  ---  CC: 23 (E-MU)         
 00238A16  Den --     B2    18    40    3  ---  CC: 24 (E-MU)         
 00238A17  Den --     B2    19    40    3  ---  Control Change        
 00238A18  Den --     B2    1A    40    3  ---  Control Change        
 00238A19  Den --     B2    1C    00    3  ---  Control Change        
 00238A1A  Den --     9F    57    00   16  Eb 6 Note Off              
 00238A1B  Den --     96    00    7F    7  C -1 Note On               
 00238A1C  Den --     B2    13    00    3  ---  Control Change        
 00238A1D  Den --     B2    09    5F    3  ---  Control Change        
 00238A1E  Den --     B2    77    6F    3  ---  Control Change        
 00238A77  Den --     93    1E    01    4  F# 1 Note On               
 00238A78  Den --     B3    16    4B    4  ---  CC: 22 (E-MU)         
 00238A79  Den --     B3    17    40    4  ---  CC: 23 (E-MU)         
 00238A7A  Den --     B3    18    78    4  ---  CC: 24 (E-MU)         
 00238A7C  Den --     B3    19    17    4  ---  Control Change        
 00238A7C  Den --     B3    1A    40    4  ---  Control Change        
 00238A7F  Den --     B3    1C    00    4  ---  Control Change        
 00238A7F  Den --     9F    60    00   16  C  7 Note Off              
 00238A7F  Den --     97    00    7F    8  C -1 Note On               
 00238A80  Den --     B3    13    00    4  ---  Control Change        
 00238A82  Den --     B3    09    14    4  ---  Control Change        
 00238A82  Den --     B3    77    49    4  ---  Control Change        
 00238ADA  Den --     B8    00    31    9  ---  CC: Bank MSB          
 00238ADC  Den --     B9    00    28   10  ---  CC: Bank MSB          
 00238ADD  Den --     B8    01    3D    9  ---  CC: Modulation        
 00238ADE  Den --     B9    01    5C   10  ---  CC: Modulation        
 00238ADF  Den --     B8    02    45    9  ---  CC: Breath            
 00238AE0  Den --     B9    02    52   10  ---  CC: Breath            
 00238AE1  Den --     BF    08    40   16  ---  CC: Balance           
 00238AE2  Den --     BF    1A    35   16  ---  Control Change        
 00238AE3  Den --     BF    09    66   16  ---  Control Change        
 00238AE4  Den --     BF    3C    7F   16  ---  Control Change        
 00238AE5  Den --     BF    3D    7F   16  ---  Control Change        

Just checking the first lines you see an answer SysEx msg to be:

SYSX: F0 00 20 7F 19 00 00 03 00 F7

next are following items for Channel 1 with my comments :

Channel 1 to X-fader    90    1E    01    1  F# 1 Note On               
Channel 1 LEVEL         B0    16    48    1  ---  CC: 22 (E-MU)         
Channel 1 HI            B0    17    00    1  ---  CC: 23 (E-MU)         
Channel 1 MID           B0    18    7F    1  ---  CC: 24 (E-MU)         
Channel 1 LOW           B0    19    00    1  ---  Control Change        
Channel 1 Filter        B0    1A    7F    1  ---  Control Change        
Channel 1 Fader         B0    1C    53    1  ---  Control Change     

Also looking at the console output when starting
mixxx --controllerdebug

Debug [Controller]: DENON DJ MC7000 MIDI 1: t:111 ms 10 byte sysex: [F0 00 20 7F 19 00 00 03 00 F7]
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:112 ms status 0x90 (ch 1, opcode 0x9), ctrl 0x1E, val 0x01
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:113 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x16, val 0x48
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:114 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x17, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:115 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x18, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:116 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x19, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:117 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x1A, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:118 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x1C, val 0x53
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:119 ms status 0x9F (ch 16, opcode 0x9), ctrl 0x58, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:120 ms status 0x94 (ch 5, opcode 0x9), ctrl 0x00, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:121 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x13, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:122 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x09, val 0x62
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:123 ms status 0xB0 (ch 1, opcode 0xB), ctrl 0x77, val 0x75
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:211 ms status 0x91 (ch 2, opcode 0x9), ctrl 0x1E, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:212 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x16, val 0x4D
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:213 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x17, val 0x5D
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:214 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x18, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:215 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x19, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:216 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x1A, val 0x7E
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:217 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x1C, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:218 ms status 0x9F (ch 16, opcode 0x9), ctrl 0x59, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:219 ms status 0x95 (ch 6, opcode 0x9), ctrl 0x00, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:220 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x13, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:221 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x09, val 0x14
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:222 ms status 0xB1 (ch 2, opcode 0xB), ctrl 0x77, val 0x49
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:310 ms status 0x92 (ch 3, opcode 0x9), ctrl 0x1E, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:311 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x16, val 0x4B
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:312 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x17, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:313 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x18, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:314 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x19, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:315 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x1A, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:316 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x1C, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:317 ms status 0x9F (ch 16, opcode 0x9), ctrl 0x57, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:318 ms status 0x96 (ch 7, opcode 0x9), ctrl 0x00, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:319 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x13, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:320 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x09, val 0x5F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:321 ms status 0xB2 (ch 3, opcode 0xB), ctrl 0x77, val 0x6F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:411 ms status 0x93 (ch 4, opcode 0x9), ctrl 0x1E, val 0x01
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:412 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x16, val 0x4B
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:413 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x17, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:414 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x18, val 0x78
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:415 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x19, val 0x17
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:416 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x1A, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:417 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x1C, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:418 ms status 0x9F (ch 16, opcode 0x9), ctrl 0x60, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:419 ms status 0x97 (ch 8, opcode 0x9), ctrl 0x00, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:420 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x13, val 0x00
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:421 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x09, val 0x14
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:422 ms status 0xB3 (ch 4, opcode 0xB), ctrl 0x77, val 0x49
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:511 ms status 0xB8 (ch 9, opcode 0xB), ctrl 0x00, val 0x31
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:512 ms status 0xB9 (ch 10, opcode 0xB), ctrl 0x00, val 0x28
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:513 ms status 0xB8 (ch 9, opcode 0xB), ctrl 0x01, val 0x3D
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:514 ms status 0xB9 (ch 10, opcode 0xB), ctrl 0x01, val 0x5C
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:515 ms status 0xB8 (ch 9, opcode 0xB), ctrl 0x02, val 0x45
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:515 ms status 0xB9 (ch 10, opcode 0xB), ctrl 0x02, val 0x52
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:517 ms status 0xBF (ch 16, opcode 0xB), ctrl 0x08, val 0x40
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:518 ms status 0xBF (ch 16, opcode 0xB), ctrl 0x1A, val 0x35
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:519 ms status 0xBF (ch 16, opcode 0xB), ctrl 0x09, val 0x66
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:520 ms status 0xBF (ch 16, opcode 0xB), ctrl 0x3C, val 0x7F
Debug [Controller]: DENON DJ MC7000 MIDI 1: t:520 ms status 0xBF (ch 16, opcode 0xB), ctrl 0x3D, val 0x7F

it is obvious that MIXXX receives the data. STill the GUI shows all knobs to be centred and I can only pick them up when I turn the knobs towards the centre position.

So how can I make MIXXX adjust the GUI and especially the values accordingly ?

Thanks a lot

I am assuming that your problem is the soft takeover.

You should enable soft takeover only after you’ve received the response to the sysex message.

Here you have an example with the Hercules DJ console mapping:

This sends the message to the controller
github.com/mixxxdj/mixxx/blob/6 … ts.js#L285

And this delays the setup of softtakeover
github.com/mixxxdj/mixxx/blob/6 … ts.js#L346

Indeed that did the trick. replaced all options in the xml file with and it works now. Thanks for the hint.
Updated .xml and .js files in first post.

Hello again - currently I am working on the shut down function so that all LEDs switching off. My code looks like:

[code]/* CONTROLLER SHUTDOWN */
MC7000.shutdown = function () {

for (var i = 0x00; i <= 0x7F; i++) {
	// Switch off all LEDs
    midi.sendShortMsg(0x90, i, 0x01);
    midi.sendShortMsg(0x91, i, 0x01);
    midi.sendShortMsg(0x92, i, 0x01);
    midi.sendShortMsg(0x93, i, 0x01);
    midi.sendShortMsg(0x94, i, 0x01);
    midi.sendShortMsg(0x95, i, 0x01);
    midi.sendShortMsg(0x96, i, 0x01);
    midi.sendShortMsg(0x97, i, 0x01);
    midi.sendShortMsg(0x98, i, 0x01);
    midi.sendShortMsg(0x99, i, 0x01);
    midi.sendShortMsg(0x9F, i, 0x01);
    midi.sendShortMsg(0xBF, i, 0x01);
};
for (var i = 0; i <= 3; i++) {
    // Switch off Level Meters
    midi.sendShortMsg(0xB0 + i, 0x1F, 0x00);
    // Platter Ring: Reset Play Position LED to Zero
    midi.sendShortMsg(0x90 + i, 0x06, 0x00);
    // Platter Ring: Switch all LEDs off
    midi.sendShortMsg(0x90 + i, 0x63, 0x00);
};
for (var i = 0x14; i <= 0x1B; i++) {
    // switch all PADs to HotCue mode LED
    midi.sendShortMsg(0x94, i, 0x02);
    midi.sendShortMsg(0x95, i, 0x02);
    midi.sendShortMsg(0x96, i, 0x02);
    midi.sendShortMsg(0x97, i, 0x02);
};

};[/code]

Interesting enough sometimes it works and sometimes only a few LEDs are switching off.

Also that for PADs the default LED colour when switching the controller on is 0x02 witch I wanna reset during shut down of MIXXX. So the first message shall switch off all LEDs with 0x01 and then only the PADs shall be switched on again using 0x02. Some of the PADs are then illuminated according 0x02 and some are off.

It looks from the console Debug, that all messages are sent correctly in the right time order but the controller just does not want to take all the requests.

... ... ... Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x91 (ch 2, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x92 (ch 3, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x93 (ch 4, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x98 (ch 9, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x99 (ch 10, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x9F (ch 16, opcode 0x9), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xBF (ch 16, opcode 0xB), ctrl 0x7D, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x90 (ch 1, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x91 (ch 2, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x92 (ch 3, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x93 (ch 4, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x98 (ch 9, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x99 (ch 10, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x9F (ch 16, opcode 0x9), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xBF (ch 16, opcode 0xB), ctrl 0x7E, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x90 (ch 1, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x91 (ch 2, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x92 (ch 3, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x93 (ch 4, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x98 (ch 9, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x99 (ch 10, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x9F (ch 16, opcode 0x9), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xBF (ch 16, opcode 0xB), ctrl 0x7F, val 0x01 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xB0 (ch 1, opcode 0xB), ctrl 0x1F, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x90 (ch 1, opcode 0x9), ctrl 0x06, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x90 (ch 1, opcode 0x9), ctrl 0x63, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xB1 (ch 2, opcode 0xB), ctrl 0x1F, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x91 (ch 2, opcode 0x9), ctrl 0x06, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x91 (ch 2, opcode 0x9), ctrl 0x63, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xB2 (ch 3, opcode 0xB), ctrl 0x1F, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x92 (ch 3, opcode 0x9), ctrl 0x06, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x92 (ch 3, opcode 0x9), ctrl 0x63, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0xB3 (ch 4, opcode 0xB), ctrl 0x1F, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x93 (ch 4, opcode 0x9), ctrl 0x06, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x93 (ch 4, opcode 0x9), ctrl 0x63, val 0x00 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x14, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x14, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x14, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x14, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x15, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x15, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x15, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x15, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x16, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x16, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x16, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x16, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x17, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x17, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x17, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x17, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x18, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x18, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x18, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x18, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x19, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x19, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x19, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x19, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x1A, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x1A, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x1A, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x1A, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x94 (ch 5, opcode 0x9), ctrl 0x1B, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x95 (ch 6, opcode 0x9), ctrl 0x1B, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x96 (ch 7, opcode 0x9), ctrl 0x1B, val 0x02 Debug [Controller]: DENON DJ MC7000 MIDI 1: outgoing: status 0x97 (ch 8, opcode 0x9), ctrl 0x1B, val 0x02 ... ... ...

Anyone got any idea?

PS: I already tried to use different USB cable so I guess this is not the source of trouble.

Thanks a lot

Sometimes controllers cannot handle that many MIDI messages coming in simultaneously. Unfortunately you can’t work around this with timers because of a bug in the scripting engine that doesn’t wait for timers to complete before shutting down the script.