How can I say with local variables in the input, no matter what cc value is received, there should only be a fixed noteoff value once in the output for example noteoff E2 with a velocity 127.
This procedure should not run as a loop but should be triggered once. The reset of the above process takes place until another noteoff in translator chain somewehere else for example noteoff F2, is received as a value.
the reverse process should be done with noteoff F2 to ratio E2.
Hi,
Local variable are not remembered between iterations, however global variables are. I assume that you want to receive a CC with any value and send a note off only once until it is reset by another input.
The attached would do it, if I properly understand what you are saying. I use the global variable ga to set a value to 1 and I suppress the translator from sending a note off. When the incoming note arrives, ga is set to 0, thereby allowing the CC to trigger the note again.
However, I then have the problem that it is no longer reset. he rigidly executes once and sticks with it.
Can you change the rule so that it only blocks when the same incoming note E2 comes in but becomes reactivated functional again when an F2 arrives?
holy shxx!!! it is working now fully!!!
the solution:
i had to define the rule on reset to make it once with the extenstion: if ga==0 then exit rules, skip Outgoing Action ga=0.
My final question would be, how can I tell the input:
Just pay attention to cc 1 until 4. Since now only 1 cc value can be set on input side.
sure , look at this picture. How can I put several CC numbers in one instance? e.g. I would like to enter cc 1 to 4 which should be processed only.
and my second question:
I don’t want the whole process to be constantly delayed by 2 seconds, I just want the start process of the translator to be activated after 2 seconds.
How can I do that?
You would need to specify any value and assign a variable.
Incoming any note set to pp
Rules:
if pp<1 then exit rules skip outgoing action
if pp>4 then exit rules skip outgoing action
The translator would trigger on any incoming CC value but would abort after these to rules if not between 1 and 4.
I assume you don’t want the translator to trigger until 2 seconds have passed. For this you can either add a new translator using ‘Perform’ with an outgoing delay of 2 seconds. The output of perform would then trigger your existing incoming translator. You can pass local parameters to perform.
Alternately you could use a one-shot timer with a delay but if you want the final translator to use variables, they would have to be global variables.
For the most part, I recommend Perform because global variables can be a bit tricky timing wise and consumes more global variables.
Thank you very much, I was able to solve my first question regarding the assignment of several cc numbers with your help.
Could you send me a new copy example regarding my 2nd question?
What you describe is exactly what I need, but I don’t need it for send note but rather cc’s.
I also prefer your second solution.
the following should be implemented. my controller sends fixed cc5 on ch1 any value. This value should translated to work as cc102 on ch5. it should only starts working 2 seconds later.
Please do not use the following variables as they are already working elsewhere:
ga, pp, qq, oo, rr, ss, vv, tt, uu,
The delay should only start once and should reset again as soon it arrives any value on cc102 on ch1.
So for input you want CC5 on MIDI CH 1 with any value. Do you want that going out to anywhere or do you want to suppress it? If sending, where does it go?
Then you want to translator to CC102 on MID CH 5 but with a delay of 2 seconds. Where do you want that sent?
Do you only have one input and one output?
Steve Caldwell
Bome Customer Care
Also available for paid consulting services: bome@sniz.biz
my controller sends any value on fixed cc5 on ch1 because it is a fader. This should first translated to work as cc102 on ch5 any value. After that it should not work at first 2 seconds. no permanent delay but only a one-time delay of 2 seconds, but then work without any delay. Can this be assigned to a rule?
It should basically block the process for the first 2 seconds.
Translator 0.0 handles the incoming message but will only trigger if a note has not been sent (ga=0).
In rules it sends a Perform action to translator 0.1 which sends the note but only if ga=0
Translator 0.1 ouput is a 2 second timer (translator 0.3) which trips after 2000ms (2 seconds) and sets the value of ga back to 0. Note_CC5-Onetime.bmtp (1.4 KB)
thank you for your example. Please take another closer look at my approach. CC values should not go through midi notes. I then modified your example for my purposes. Unfortunately it still doesn’t work on delay side as desired. It now converts from cc5 ch1 to cc102 ch5 as desired, but the fader operation or delay is not what I wanted.
It should work without delay, but not in the first second, so to speak, blocking. Or say in other words: It only starts working after 1 second. Now every movement is transmitted with a time delay, which I didn’t want.
P.S. 2 seconds is too long, so I’m now down to 1 second
0.0 looks to see if the CC is already in action and if it is,t hen gb=1. This is important because we don’t want to suspend output while it is already in progress. It sets a watchdog timer for 500ms so that if you stop moving it it sets gb back to 0
0.1 Looks at the value of gb and ga. Ga controls the state of the CC. Value of 0 means it is a new touch and will set send a perform action (translator 0.3) to trigger Suspend timeout (0.4), but only once. It then increments ga so it doesn’t trigger the timeout again.
The only time you will actually get output is if ga is in a state of 2 or the CC is already moving (gb=1)
If you don’t get it, I understand. As I said, it is somewhat complicated and took me a while to get my head around it.