Send Note only once when moving CC Value until re-enabled

Hey steve,

thanks for reply.

Maybe I found something and you can help me here:

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.

regards

b.t

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.

note-off-only-once-2024-04-22.bmtp (1.3 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

hey steve,

Thank you very much for your attachment.

It works !!!

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?

greetings

b.t

Hi, maybe translator 0.1 should be Note-On trigger instead of Note -Off?

Also, it good practice to use note numbers instead of note names because there is no MIDI standard on Note names.

What some vendors call F2 could be F3 with another vendor.

Bome MIDI Translator let you change it how you like but it can often get confusing when working with different vendors’ applications.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

image

hey steve,

holy shxx!!! it is working now fully!!! :scream:
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.

regards

b.t

I don’t understand the question. Could you perhaps rephrase it?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hey Steve,

sure :smile:, 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.

Screenshot 2024-04-24 at 12.13.12

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?

Screenshot 2024-04-24 at 12.24.39

greetings

b.t

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.

The attached shows both methods

delayed-start-2024-04-24.bmtp (3.1 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

hey steve,

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.

Hope could explain it.

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

hey steve,

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.

Regards

B.T

Sure,

  • 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)

Have fun!

Hello Steve,

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

greetings

b.t

Note_CC5-Onetime 2.bmtp (1.1 KB)

So you want to send a note on first movement of the CC but only once until a second , but then always translate the CC without delay?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hey Steve,

No Note sending!
Note sending was solved with above settings.
Only just want to block the CC movement for the first second. Thats all.

greetings

b.t

OK, this was somewhat tricky.

  • 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.

Suspend-CC-temporarily.bmtp (1.8 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hey Steve,

thanks a lot!
now it’s working as expected. :partying_face:

greetings

b.t