Reloop Beatmix 2/4 mapping

Here is my mapping for the Reloop Beatmix 2 / Reloop Beatmix 4

mixxx.org/wiki/doku.php/reloop_beatmix_2
mixxx.org/wiki/doku.php/reloop_beatmix_4

Just download the zip file, put the two files in your Mixxx/controllers directory and select Reloop Beatmix 2/4 as your mapping.

Edit 2016-08-15: Updated to version 1.2 with:

  • Improved sampler mapping
  • Improved Jog Wheel leds while playing and scratching
  • Numerous small bug fixes

Edit 2016-08-18: Updated to version 1.3 with:

  • sync each item on the controller with Mixxx at launch

Edit 2016-08-19: Updated to version 1.3.1 with :

  • fix nex/prev effect button release
  • improve superknob responsiveness

Edit 2016-08-22: This mapping has been included in Mixxx source code so it will be installed with mixxx 2.1 when release. I leave it here for users of older Mixxx versions, up to 2.0.
Reloop Beatmix 2-4 v1.3.1.zip (12 KB)

ok I have been trying this, and noticed the sampler LED buttons colors are a bit random.
I noticed in the script code it says, changing to Violet to Red has weird problems ? But doesnt
really attempt to solve it.

So ive tried some test code where it would store the previous color and check against the new color and add an OFF command first, and sent the color twice (seams more succesfull than once)

Will do some more testing / tweaking then post the diff mod here, and then later to the correct dev area I guess… So far it looks better, will test more combinations.

Pitty someone didnt do a complete test/dump of Sorato doing this thing properly… to copy their logic.

Stay Tuned.

Hi rauls,

I didn’t have Serato at hand when developping this mapping so I had no mean to dump Serato’s interaction with the controller.

As you can see here, there is already an off command before changing led colors : mixxx/Reloop-Beatmix-2-4-scripts.js at main · mixxxdj/mixxx · GitHub

With this off before the setcolor, I was successful at changing led colors.

Did you still notice weird led behaviour with actual code shipped within Mixxx?

Yes original shipped default was inconsistent.

What I mean with my code change, is, only send OFF if previous was VIOLET and new is RED, else never send OFF before a COLOR.
I also had to send the correct color twice in a row, else the behaviour is quite erratic.

ie…
Originally :
I press, 1 2 3 4 and not all pads go VIOLET, and after the sample is finished
not all pads return to RED, but half are blank or red, randomly. (even after my mod)
Also DECK 2 - lights up differently to DECK 1

eg. after 1,2,3,4
its
R R R off, and off R off R

sometimes its also stuck on VOILET and wont go off or red after the sample completes.

Basically, it doesnt revert to RED all the time, sometimes goes off, sometimes stays VIOLET.

Sending the color twice is more succesfull, but still I end up with a random pads being off or red, or sometimes stuck on violet, even when sample stops.

ReloopBeatmix24.PadLED = function(deck,samplerChan,color) {
	var key = deck+'_'+samplerChan;
    if( last_Color[ key ] == VIOLET && color == RED ) 
    {
	    midi.sendShortMsg(deck, 0x08 - 1 + samplerChan, OFF);
    }
	midi.sendShortMsg(deck, 0x08 - 1 + samplerChan, color);
	midi.sendShortMsg(deck, 0x08 - 1 + samplerChan, color);
    last_Color[ key ] = color;
};

With this change every key goes VIOLET when I hit it, but its a random chance if it stays VIOLET, or goes RED, or ends up OFF in 10% of times. Deck 2 is also 90% different to Deck 1 after sample completes.

Btw OFF is not really OFF, its just really dark dim red, like the other cue buttons, not pure off.

Also in V2.3.0

BEAT LOOP Problems.

Sometimes it can get stuck on setting the out time and never can set the in time, and can never make it loop, its just loses its state, it really needs to ‘reset to default’ as it was prior to any state changes. No matter what pads I hit 5-8 or shift 5-8 nothing removes the rolling OUT marker so the GREEN area gets bigger and bigger.

Prob 2. If I change the beat loop length to 1/2 and hit pad 5 to loop, it resets it back to 1. Where in the UI with mouse clicking on RELOOP, activates the loop to the current size which is the right behaviour. Pitty the mapped pads dont behave like the UI.

If this can be fixed in the script great. I know the default is to play 1/2/4/8 length beats, but whats the point of changing the length before hitting the pad, if it gets reset? It should really be relative to my settings, so if I change it to 1/4, the pad buttons should start at that, and double each one, which is more logical/predictable and useful.

Whats the best way to fix the bugs, is it all 100% in the script? Can I just look at other better implemented scripts and copy part of their logic? If the core of MIXXX is fine, but its the button pad logic in the script, then it should be easy to fix.

Maybe some extra behaviour is needed, like hitting Shift-5 , 3 times in one second to reset Beat Loop markers and clear it all, if it gets out of whack and cannot be controlled when it looses its states, and is stuck with a big giant green growing mark that just flashes on all pad keys and cannot be stopped/started/set to anything.

I worked out how to stuff it up, SHIFT-5 to set a custom loop, let it repeat, then hit SHIFT-5 again inside the loop, and it stuffs up settings OUT before IN and goes bonkers after that, cannot reset, only with MOUSE, which sucks. Code needs to check and auto reset.

Well I fixed the beat loop feature SHIFT-PAD5 to set in/out to mark the loop.

This time it correctly sets it , even if you set it again inside the existing one it changes and plays nicely without stuffing up being dead and ignoring all future sets.

I think the code was very old 2016 based or earlier and has been ignored since then. So what I did was check how the Hercules DJ 4 worked and it was significantly different in code, and behaviour, and more complete code too I might add.

So heres my 1 function fix for the Beatmix-2-4 script.

ReloopBeatmix24.LoopSet = function(channel, control, value, status, group) {
	if (engine.getValue(group, "loop_enabled") === 0) 
	{
	    if (value === DOWN) {
	        engine.setValue(group, "loop_in", 1);
	    } else {
	        engine.setValue(group, "loop_out", 1);
	    }
	} else {
		engine.setValue(group, "reloop_exit", 1);
	}
};