Rulez Noobs and MT 1.5 How-To

jplewis01

2006-08-23 22:22:48

I've read a couple of threads on this but have no been able to get this to work properly. Here is the setup
I have a Behringer BCR2000 and I want to do ranges on one of the knobs, in short to solve the same problem Dave in Winterpeg asked about earlier in the year.

My thought was to create 4 translators with rules that would allow me to carve up the range into 4 seperate ranges 0-1f, 20-3f, 40-5f and 60-7f

I setup a translator to experiment, which just has a single cut off point (20h) to see when the Translator did and did not execute. For this test there is only one Translator present and active in MT

The Behringer knob is setup for CC 01, channel 1 and Absolute output. Range is 0 - 127

In MT My incoming trigger is set to:
B0 01 ga <== Assigning the value from the Control Change Message to variable ga.

The single rule I created for testing is a Conditiional Action:
If ga <= 20 THEN "execute translator"

The Outgoing midi message is:
BE 11 7F

Stop Processing with this translator is checked.
Midi Thru is off as is translator pass through


The expectation is that if the incoming message value is less or equal to 20 hex, then the Translator will fire with each message received, where the value assigned to ga is less than or equal to 20h. If the value is greater then the translator will not output anything.

When MT is oupled to Traktor, it receives the translated value no matter what value is being received by MT.

The Same test was run with conditional:
If ga <= 0 THEN "execute translator"
The same result was obtained.

The actual output is the BE 11 7F message regardles of the CC value input. It appears the rule is not evaluated or always evaluates to true regardless.

I'm sure I've missed something but I cannot see what. Any help would be appreciated.

Thanks
Phil

florian

2006-08-29 18:20:27

Hi Phil,

first of all, sorry for the late reply -- vacation time in Europe 8)

You applied the correct principle, but I'll clarify what I guess went wrong:

"execute translator" means:
If the expression evaluates to true, skip any following rules and execute the translator directly.
If the expression evaluates to false, the next rule (if exists) will be evaluated. If there is no rule left, processing continuous as normal, i.e. the translator is executed (that's the default action, also if there are no rules at all).
So, "execute translator" is merely a "jump" command. To correct your example, do any of the following:
  • negate the condition and use "skip this translator", i.e.
    IF ga>20 THEN "skip this translator"
  • add a last rule (which is always executed) to change the default action to not execute:
    IF ga <= 20 THEN "execute translator"
    IF 1=1 THEN "skip this translator"
The latter way is better if you want to add more rules before, which would be difficult to negate.

Hope this is it...

Last but not least, you may encounter a bug in MT -- especially since you're running a preview version.

Regards,
Florian
[/list]

jplewis01

2006-08-29 19:06:38

Thank You Florian, I Figured the lack of comment was due to you taking a breather (holiday), not a problem at all. We all have and need to take them ;)

Your explanation makes complete sense. I'll try out your proposed solution and see how it works and will let you know.

Might I suggest something for future feature consideration?... The ability to bracket rules so as to evaluate ranges, step increments or multiple values as part of a single condition. For example:

(IF ga >= 0
AND ga <= 20)
THEN "execute translator"

or this
(IF ga = 0
OR ga = 10
OR ga= 20
or ga =40)
THEN "execute translator"

Such a structure would make simple rule construction much easier and more logical for less experienced users.
=========================

A final question. Is it possible today to use a relative mode 1 encoder like on the BCR2000 and have it translate only at every 16 or 32? For example setup a knob that does nothing except on when the message value hits say 0x1f 0x2f 0x3f etc., where MT emits a single message. I've been trying but it seems the value of the variable is lost as it goes out of scope as the translator executes...

Phil

florian

2006-08-29 19:23:39

That's a good proposal, but currently it would make the GUI unusable. For the next version I'll add GOTO support, which will make some things easier. And for the over-next version, a major GUI overhaul will allow much more complex rules without loosing usability.

Regarding the other problem, you can use counter variables, e.g.
- everytime the message comes in, increment "gb"
- when gb reaches 16, set it to 0 and execute the translator

But I don't know what you mean with relative mode 1 encoder -- can you provide a specific example what the BCR2000 sends and what you want it to get translated?

Thanks,
Florian