Thursday, June 18, 2009

It works!!!

Last night I had a go at trying to make a continuous Value-type control like Program Change be interpreted by Reason as a Delta-type control, so it could be used with Remote's Additional Overrides "Target Track (Delta)", "Select Patch for Target Device (Delta)" and "Select Keyboard Shortcut Variation (Delta)".

And it works great :D !!!

This is no "Absolute" substitute unfortunately but it gets the job done.

As an example, if you have your controller's Program Change set at 35 and go to Reason's menu "Options", "Additional Remote Overrides" and set the "Target Track (Delta)" to "Program Change" (don't forget that this only works with my custom Remote codecs right now), then each increment or decrement on Program Change will translate as a +1 or -1 delta to Reason.

So, if you have the 1st track selected and go from 35 to Program Change 34, it'll generate a -1 delta hence doing nothing in relation to the Track selection, because its already at the lowest track "number" possible to select.
But as soon as you go from 34 to 35 again, it'll generate a +1, which will make the Track selection jump to the 2nd track, the next increment to 36 will make it jump to the 3rd track and so on.

If you keep incrementing Program Change beyond the available number of tracks, it'll just keep the last track selected.

So, it may be less confusing if you start with Program Change reset at 1 so it stays in-sync with the track selected, and try not to go over the last track (but if you do, it still works).

If you keep them synced, you can (like someone requested in the forums) make direct jumps to a track. Imagine you have 20 tracks, and you never go "overboard" those limits (1 to 20) with the Program Change. You can jump to the 14th track, then to the 2nd, then to the 9th and so forth, either by using a (usually available in some MIDI controllers) numeric keypad or by pre-programming specific controller buttons to send these fixed Program Changes. If for some reason things get de-synced, simply reset Program Change to 1 and select track 1 with the mouse, for instance.

A different behavior happens with "Select Patch for Target Device (Delta)" where it'll go round-robin, which is another way to deal with delta values :)

In case of patch selection, if you're selecting the 1st patch, and Program Change is at 123 and you decrement it to 122, it'll generate a -1 delta and that translates in a "go to the last Patch available from the current list" jump behavior. The reverse happens, being at the last and trying to increment Program Change, will make it jump to the first Patch available.

I didn't have time to test the "Select Keyboard Shortcut Variation (Delta)", so I still don't know what type of behavior this one has. I can't remember right now if it goes round-robin or stays at the limits even while using proper Delta or Next/Previous controls. I'll test it later :)

Anyway, all this to uncover a little weakness of this solution (but one that I'm perfectly able to accept): Each time the value-type control (in this case, Program Change) gets to the minimum (0/1) or maximum (127/128) limits, your only option is to reverse the direction you where going. So this makes it somewhat important to keep the value as close as the position you're trying to control, be it the track number, the patch or the shortcut variation.

But, for these 3 types of use, 128 positions are usually more than enough, ok... Patch selection may need much more on some cases, but then you're pushing your luck ;) so... just use the mouse or the computer keyboard on those occasions :P

I also did the same tests with a Value-type Knob converted into a Delta-type control using the same codec algorithm and... kinda works :) ...the problem here is that the Knob can generate so many +/-1 MIDI events in such a short amount of time that may generate a "MIDI buffer overrun" warning message, and that's not nice :(
It's also too precise, so it's a pain, depending on your hardware, to get to that one track or patch by generating just a -/+1 delta event. ...but it works :P

So I guess I'll stay away from releasing a proper Remote Codec using the Data Entry slider or alternatively the Knob 8 for Delta-type emulation. I'll stick with the usually stepped Program Change, it has to be enough, 'cause 1 of these is better than nothing, which is the current situation with the standard Remote Codecs.

When I have the time, I'll release for free a M-Audio MidAir pack with both a standard codec that includes the Data Entry slider and also the Program Change but as Value-type controls and also an alternative version, where the Program Change uses the Value-to-Delta convertion algorithm so users have a choice :)
I'll also try to release my version of the M-Audio Axiom Remote Codecs with the added Program Change control as a Delta control.

...'nough talk, must work now -.-'


  1. I want to see demo video XD

    Btw. This is my finished skin for my combinator

    ( not for download )

    Do you want PSD template ?

  2. I thought releasing some of the codecs was better than making a video ;)

    btw, cool Combinator backdrop! :)

  3. Hi

    How did you program the delta values, and did you do it in LUA or in Midicodec?

    How did you pass the delta value to reason, could you please post the

    Item Header Name Type Min Max


    Map Header Pattern Name Value1 Value2 Value3

    lines for passing delta values for the knobs?

    Or just the "pattern" and "value1" "value2" and "value3", that seem to be the most difficult to figure out.


  4. Hi David,

    It was done through the Lua, so the algorithm is in the .lua Codec file.

    You can easily check 2 examples of this by downloading the Remote Codecs I did for the Trust (mini) MIDI Keyboard and QuickShot MIDI Composer Keyboard available here: