Novation Dicer mapping

EDIT:
Version 1.1 of the full mapping is now attached.

The full mapping has all buttons mapped and mimics the overall layout of the DJ Tech Tools Traktor mapping.

A few notes about the full mapping:
Because Mixxx does not have loop rolls or other effects, I scripted some basic effects myself. They work well enough for me, but I’d be interested to hear any feedback. Once I’ve heard enough positive responses, I’ll submit this mapping for inclusion in Mixxx.

The loop rolls in particular have some hacking to make them work. I try to make it so you can trigger a loop, and when you release the button the track will jump to where it would have been if you hadn’t triggered a loop. I found that Javascript was fairly inaccurate with some of the timing numbers it was giving me. I did a ton of trial and error to come up with a compensation algorithm that works fairly well for me, but it’s possible the timing numbers might be off on other PCs. If so, I’m not sure that there is a good way to do this without implementing it in Mixxx itself rather than a midi map script.

Anyway, enjoy. :slight_smile:
Novation_Dicer_Full_Map_1.1.zip (200 KB)

I’m new to Mixxx (DJing with vinyl for 13 years, using xwax for ~4), working through the process of making a mapping for the Novation Dicer. The Dicer is a very simple midi controller that hooks to the face of your turntable or CDJs, controlling cuepoints and loops. Videos, info, and a programmers reference guide are available here:
novationmusic.com/support/dicer/

I’m about halfway done, but need a bit of help finishing it up. I have cuepoints and beatloops working, including the LEDs. The final Dicer mode allows for “loop rolls” – short loops (1 beat - 1/16th beat) that only run while the button is held, and once released will continue the track at the place where it would be if you hadn’t done a loop (meaning no time is lost or added to the track while doing a loop roll).

So, it needs to do this:

  1. When a loop roll button is pressed, activate a beat loop of 1, 1/2, 1/4, 1/8, or 1/16 of a beat, depending on the button
  2. When the button is released, skip past the amount of time spent in the beat loop and resume playing

I don’t see an easy way to do this offhand. The built-in beatloops resume playing right after the beat loop, no matter how much time was spent in the loop.

How can I do this? I would appreciate any tips, pointers, links to the right documentation, or other help.

A possibly better description of what I’m trying to accomplish is available in the Serato documentation here:
serato.com/manuals/scratchlive/r … .1/looping
It’s about halfway down the page under “Loop roll”.

I’ve spent a few hours now searching and reading the forums, but haven’t found any clues to this yet. It’s such a core feature to Serato and Traktor (and others) that I can’t believe it hasn’t already been done.

In researching what functions were available for me to use to implement this in javascript, I stumbled on to this thread where something similar was done:
viewtopic.php?f=1&t=3017

I just started playing with that code, but it looks like I can make it do what I need.

Tried both of your v.1.0 mappings and would like to give some feedback:
Basic mapping
*Good first impression, works as described in the Dicer manual
*Change the MIDI OUT LED default state for State 1 ( the red ones) from 0x0 to 0x01 so they are visible in the dark as good as the other states which have a light green/orange default color.
*Rename Dicer_Novation_Dicer.midi.xml to Novation Dicer.midi.xml so the mapping will appear at the correct position in the Mixxx “Load Midi preset” drop-down menu which is sorted alphabetically.
*The loop roll does pinch forward if the track is paused.

Full Mapping

  • Same as above, change the MIDI OUT LED default state for State 1
  • Rename Dicer_Novation_Dicer.midi.xml to Novation Dicer Full.midi.xml so we could have both the full and the basic mapping in one folder (and have them sorted alphabetically).
  • State 2 (Green) Shifted Layer: Might be a matter of personal preferences but what about changing the 2 beat loop button with the 4 beat loop button and replacing 4-16 beat loop button with beat halve, beat double and reloop button ? This way you would have quick access to all available loop sizes and could still jump pack to a previous loop, something you cant currently do.
  • State 3 (Orange) Standard Layer: Mixxx lacks effects and while the hacks on the buttons are pretty nice i am unsure how useful they are given the limited number of buttons. Especially the Transform button seems to drop many events if pushed in short intervals. My proposed config looks is Cue/Play/Sync/Censor/Flanger. Censor is basically Reverse playback then resume instead going Fast reverse and resume.
  • State 3 (Orange) Shifted Layer: Again a matter of personal preferences but i found it hard to use only one hand to navigate trough Playlists/tracks. In other layers you follow an ascending arrangement here we have arrangement starting from the middle. For muscle memory and easier one hand operation i propose to change the button order to load track/previous track/next track/previous folder/next folder. Just found out you cant collapse/expand folders via MIDI, probably a Mixxx limitation…

Thanks for the great work on the mappings.
Looking forward to see the them in the upcoming Mixxx 1.11 release.

Edit: Added Novation Dicer mapping page to the Mixxx Wiki. It has the current button assignments and will be listed on the Hardware compatibility page if the mappings has been added to Mixxx.

Thanks for the feedback!

A few items;

  • I agree that the red hotcue buttons should be dimly lit when unset. I was mimicking the stock mappings in Serato and Traktor, which turn them off completely when unset. Not sure why they did it that way. I’ll change it and upload an updated version soon.

  • Filename changes duly noted.

  • Re: green shifted. Hmmm, makes sense. I use 16 beat loops the most, so I like having them handy, but it seems a fair trade to make it so all loop sizes are accessible.

  • Re:orange standard. I haven’t seen dropped events with the transform, but I’m running it on a pretty fast machine. Maybe I’ll have to do something different with that button. I specifically didn’t include things like play or sync because the Dicers are intended for turntable and CDJ DJs. Play/Sync buttons don’t do anything for them. Any other suggestions for those buttons? Also, re:Censor, I originally planned for a reverse/resume button, but the reverse button doesn’t work in Vinyl mode. I tried a few other ways to make it reverse playback, but nothing worked. If there’s a way, let me know.

  • Re:orange shifted. The current order is what makes sense to me. I’m going to keep it this way in my personal configuration, but I can change it in the uploaded mapping if that’s what people want. Maybe let’s see if we can get some more feedback on this.

Feedback has been pretty low unfortunately, i even posted to our mailing list with no response so far.
We are now in the process of getting the new/updated mappings merged into the Mixxx 1.11 branch.

If you have any plans to edit the mapping before inclusion please note that the Controller Script Freeze is near.

Thanks for the mapping! I don’t have a dicer so I can’t test it. One thing you should add is an info section. In Mixxx 1.11 we display both the name and author of
MIDI/HID presets in the GUI.

You can look at other presets bundled with Mixxx for an example but in general add this before the section.

<info>
  <name>Novation Dicer Simple Map</name>
  <author>Your Name, optionally an email address</author>
  <description>a description of the mapping</description>
</info>

OK. I’m swamped with grad school finals this week and next. I see that the controller script freeze is scheduled for May 26. I’ll get the discussed changed wrapped up and posted before then.

Is there value in keeping the basic mapping around? The full mapping does everything the basic mapping does, plus maps all the rest of the buttons.

I’d say not to worry about the basic mapping. People can hack the advanced one to do other stuff if they like anyway.

Due to grad school, work, and a new baby, I ran out of time to implement everything. Also, due to ongoing problems I’m having with Mixxx (viewtopic.php?f=1&t=3604) that resulted in a public disaster when I tried to actually play out with it, I ditched it and moved to Traktor. So, I’ll fully admit I lack motivation to work on this, in addition to the lack of time.

At any rate, I cleaned it up a bit so it can hopefully be included in the next release.

Changes:

  • Red LEDs now dimly lit when unset
  • Found a bug in the transform effect that was likely causing what seemed like missed midi events
  • Updated the filename
  • Added an info section
  • Removed the basic mapping.
    The new version is posted in the original post above.

Sorry, but any future work on this will likely need to come from someone else.

I would really like to add loop rolls into mixxx because they are a fairly straight-forward effect and lots of DJs use them. I’ll try and give it a shot soon.

Thanks for your work Pandemonium – I just included version 1.1 in the trunk branch so it will be part of Mixxx 1.11.

I wrote first-draft support for rolling loops. Here’s the bug, with patch for adventurous types: bugs.launchpad.net/mixxx/+bug/703585

Thanks for the inclusion, rryan.

Owen, your patch looks like exactly what I was trying to accomplish in JavaScript in this mapping, but mine is just a hack that is severely hampered by the resolution of the JavaScript timing accuracy. You’ve got a big +1 vote from me.