Denon MCX8000 (partly) working on Linux!

Hey, fellow Mixxxers–

So, I got a fancy new toy - a Denon MCX8000 controller - thinking I could get it to work with Mixxx on Linux (yes, I like to live dangerously :wink: ). Fortunately, it seems I was right - with a big caveat.

There is, of course, the question of a MIDI mapping. I don’t have that done yet, but it is in progress. It’s very rudimentary at this point - basically, the mapping consists of what I was able to do with the MIDI learning wizard - i.e., I haven’t written any Javascript yet. But I’m definitely going to finish this in the near future (hopefully in time for my next gig, which is next Wednesday); I didn’t spend $1000 to have a half-working controller. When I finish the mapping, I will of course post it in the mapping section of the forum. Meanwhile, if anyone is interested, visit https://github.com/caelia/mixxx-denon-mcx8000.

Now, I said there was a big caveat. I think this is a Linux-specific problem, so if you use Mixxx on Windows or MacOS, you should be fine once the mapping is done. Anyway, the problem is that initially I was unable to get Mixxx to use the MCX8000 sound card for output. I have gotten it working, but I needed to make a minor modification to the kernel. So, not for the faint of heart. I’m going to get in touch with Denon about this, because it appears that the problem results from incorrect behavior on the part of their sound card. But I don’t imagine they would put much effort into fixing an issue that only affects Linux users. Anyway, for details about the sound problem and the kernel modification, please see this discussion on the ALSA users’ mailing list: https://sourceforge.net/p/alsa/mailman/alsa-user/thread/CAHhBTheZcQAt3HGF3XvaFyxD-9-fRc%2Bzmu1JD7E2KZSRs0EOYQ%40mail.gmail.com/#msg35680694.

Okay, I’m going to go write some Javascript. Happy Friday!

Great! Please read the Contributing Mappings guidelines. Instead of working from a fresh git repository, please fork mixxxdj/mixxx on GitHub and add your mapping files to the res/controllers folder to make it easy to merge into the main Mixxx repository. Keep us updated how it goes with the kernel/firmware issue.

Unfortunately Mixxx does not yet have any way to send waveform images or text to controller screens. That will take a lot of work to implement and probably won’t be happening very soon.

We’re getting close to releasing Mixxx 2.1 beta which will bring substantial improvements to the scripting system for MIDI devices and overhaul the effects UI, so I recommend compiling the master git branch and working with the new Components library.

Hi, Be. Thanks for the feedback!

Done. BTW, I like your coding conventions … most of them, anyway.

Why spaces in the filenames for the XML files, though? That seems a bit perverse to me.

I certainly will.

Unless I make it happen :wink: I actually am learning C++, partly in order to contribute to Mixxx. I’m not sure this would be my top priority though. I have some ideas about improving library management, which is more up my alley anyway …

Good to know. I may have to develop two versions of the mapping, then - because I want to be able to use this controller, like, yesterday - but I don’t want to rely on a not-quite-beta version of Mixxx for gigs. Maybe I’ll just keep the old-style mapping on my own private branch and not submit any pull requests for it. Anyway, I have considerable programming experience, so this will be a challenge, not a hardship.

I agree. It think that’s just because that’s how it has been, it works, and it hasn’t bothered anyone enough to do a batch rename of all the filenames for mappings included in Mixxx. That’s not to say it can’t change.

That would be awesome if you take up that task. If you do decide to take up a major change like that, write a draft for the design on the wiki (on a new page) and write to the mailing list for feedback before you start implementing it. We’d like to eventually move the GUI away from the home baked XML skin system using the old QWidgets framework to the new QML framework. I think using QML for rendering an off-screen window to send to controller screens would be a good way to lay the groundwork for that. After the 2.1 release, we will finally be making the switch from Qt4 to Qt5.

As for the library, there is a major redesign of the GUI in progress that will hopefully be ready for Mixxx 2.2.

The Developer Guide will help you get started working with the code. I strongly recommend using a C++ IDE to work on Mixxx. C++ is an obnoxiously complex language and an IDE can be really helpful for smoothing over the gaps in your knowledge as you learn it. We have guides for setting up KDevelop and Eclipse, or you can use whatever IDE you’re comfortable using.

FWIW, I’ve played a few gigs from the git master branch and it has gone well, but YMMV.

Still no mapping for the mcx 8000?

Alguien sabe si hay algun archivo configuración para el MCX 8000 y el uso del mxxx

Hi - I am working on a MC7000 mapping which seems to be very similar to the MC8000… see here:
viewtopic.php?f=7&t=13126

I am wondering if some points were solved for the MC8000 and if so what was the solution?

As the git repository is no longer available - can somebody share the MC8000 .xml and .js file here for reference?

Thanks a lot.
OsZ

Ive used the MC7000 mapping as basis and apart from some odd behaviour like the sync button needing a longer press to stay activated its all good.
Iam a bit confused with the sound outputs and thaeir correct mappings.
ALso the displays, related knobs and some notification lights (e.g. per channel cue) arent working.

I do want to like Mixxx but so far its my playground to get it to behave and the real work is still done in serato. I hope that changes soon.

P.S: Thank you for making those mappings and to all who contributed to the software.

Hi, Vitas! As the person who started this thread, I may be able to help. I’ve been away from this community for a while, but I happened to notice your message in my inbox, and I happen to have a little time today, and I have been meaning to revisit the MCX8000 mapping I developed.

It’s basically complete in the sense that all, or very nearly all, Mixxx functionality is accessible from the controller, but there was some counterintuitive behavior in a couple of components which could potentially ruin a gig, and I didn’t feel I could in good conscience release the code until I had fixed those problems.

I could let you try out my code, but I want to at least take a look and confirm that it still works with the latest version of Mixxx, and refresh my memory as to what the problems were so I can warn you.

Meanwhile, regarding some of the details in your message:

Can you be more specific? By “longer”, do you mean longer than it takes in Serato? And how much extra time are we talking about?

I think that’s outside the scope of a controller mapping. AFAIK you normally set that in the GUI. Unless I misunderstand what you’re talking about.

The displays are a tough problem, because they rely on undocumented SysEx messages. So unless Denon is willing to share that info, which I doubt (though admittedly I haven’t tried), it would be a matter of reverse engineering, and my rough guess is that that would take at least 10 times as much work as all other aspects of the mapping. So we may never have the displays working. Everything else should be doable.

Oh, that would be cool.
Take your time and when youre ready just reply the dl link to this thread. :slight_smile:

I tried. They didn’t respond to my email.

@Be0 - Me too… Several times asked Denon support for the MIDI documentation for MC7000 but they didn’t even reply.

@caelia - at least I could manage to get the MC7000 sound device supported by the ALSA team. Would be interested, if the MC8000 sound works ootb with recent kernels as well.

@VITAS the sync button should have following behaviour: short press immediately synchronize the track to the other playing track one time. Long press keeps the sync active all time until you disable it.

@Be0 Theres a guy on the Denon Forums who got them into doing open Betas. He might have ways to get what you need. The Virtual DJ People got it working too. So there must be documentation outside of Denon and Seratos symbiosis.

@OsZ Can that be changed? It trips me up all the time that it doesn’t stay on.

Yes sound mapping are out of scope of this. I was thinking that we are both using mixxx with an mcx8000 you might be able to share some insights into how to map the out and inputs.

I did take apart my mcx8000 at some point and made pictures of things. If thats any help:

https://staticweb.52k.de/images/mcx8000/

SInce the MC7000 is basicly an mcx8000 without screens you could try this:

The user on the Denon Forum who conviced Denon to do open Betas is this guy:

That doesn’t necessarily mean there is documentation. Virtual DJ may have reverse engineered it.

However, if the screens require the computer to render graphics, knowing the screen’s communication protocol won’t be enough to get it working with Mixxx. Mixxx does not currently support rendering controller screens. If the information the computer sends to the screen is metadata like how long the track is, that could be partially supported.

Im sure theres more needed than what Mixxx suports out of the box.

What im saying about VirtualDJ is that it seems to be possible to use the displays with other software.

Is there a way to sniff whats transmitted over usb? Can Wireshark do such a thing?

Best have a look into the wiki Reverse Engineering. I added the examples for Denon MC4000 and MC7000. When you have questions, let me know.

BTW: I used the MCX8000 documentation a lot, most but not all is identical to the MC7000.

As for the sync button I don’t know if I even would like to change the behavior but you can have a look into the 2.3 manual where the controls are listed and make a customized xml version.

Cheers!

Oh, thank you for that link. Seems that i need a Linux PC with Windows VM. Ill see what i can come up with.

@VITAS - No, not really. Wireshark is running on Windows as well.

Yes, but i havent found an easy way to sniff USB traffic.