Inconsistant output due to delay / latency ?

Hi guys!

I' struggling with the keystrokes not being translated/sent in a stable way.

See attached screenshots of the output panel and settings, as you can see the values are all over the place.

Is there something I can do to get this clean and stable/smooth?

The slider (in fact, all sliders) that is used with this translator is behaving unstable.

I'm using:

  • Capture One
  • Arturia Beatstep
  • Midi Translator Pro

See my project page on this: https://controller-one.site/

Thanks a lot in advance for any helpful info!


Attachments:
![](upload://rV5DNkyhCKkPFjmgxy3tvlC8KXJ.png)
![](upload://x9ozPRLHLZCkluGblOaJR4aDOB8.png)
![](upload://yaLLbzbWauLTLU9J8QyhsYikO1e.png)

Hi,

Is the problem that you are missing some outgoing keystrokes because the controller is sometimes sending greater than 0x41? If so, this can be fixed with a timer where you count the difference between 0x40 and the incoming to determine the keystroke count. You then use the keystroke count to send successive keystrokes with a set repeat delay to make it smooth keystrokes at a rate that your application can handle.

You would set incoming to a local variable like pp then in rules:

qq=pp-0x41

Outgoing timer "Increment" repeat qq times initial delay 0 repeat delay 10 ms

(You may need to play with the increment value until you get the smoothness that you want)

Then a translator with incoming timer "Increment" and outgoing action of keystroke Shift(Ctrl(Y))

Also in incoming action, you might want to set a busy flag as a global variable so the timer doesn't re-trigger if it currently in process. Maybe the busy flag would be the ga=pp.

Then on each successive timer iteration you would decrement ga. You would look at the value of ga in your incoming trigger and only re-trigger the timer once the value of ga reaches 0.

 

Let me know if this makes sense or you need further assistance.

 

Steve Caldwell

Bome Q and A Moderator and

Independent Bome Consultant/Specialist

bome@sniz.biz

 

 

 

Hello Steve,

Thanks a lot for your explanation and example. I must admit I get the point in some bit but I am not familiar with programming as you are. Do you think you want to have a look at my file and change one of the translators as an example? I am having problems with
> Always Active > Saturation

Thanks a lot in advance!
(but don't feel forced or obligated! :-) )


Attachments:
1588695481769_File_without_timer.bmtp

Sure,

I copied original translators 1-1 and 1-2 (Exposure) and added rules. Instead of keystroke outgoing action I trigger a repeating for each. Only one of the translators will fire depending on the direction of the knob. I subtract to figure out the count.

I use the global variable gw for a counter. If it is not 0, then it means one of the timers is busy and to ignore incoming messages.

Translator 1-3 and 1-4 actually just decrement the counter and output the appropriate keystroke.

You can experiment with the delay of the repeating timers until if feels smooth and natural to you.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

 

 


Attachments:
1588699030900_File_with_timer-exposure.bmtp

Hello Steve,
Thanks a lot again for your help! It seems indeed to be getting the rotaries under control. :slight_smile:
How do I work with the next rotary, can I duplicate the four rules, change the channel and translation or can I re-use the first two rules with the variables (I apologize for possible misusage of terms)

Yes, you can copy translators, however each one will require a different timer name to trigger the outgoing message and of course you are going to need to adjust for your incoming CC’s. If you want to move more than one knob at a time you will also need to create different global variables for each as they act as counters and if you try and move more than one knob at once, the counter will get all off.

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

Hello Steve, thanks a lot for your help! I’ve created the other translators but used the same variable (lazy?), the sliders are reacting much more responsive and less “strange”, this is a big improvement! :slight_smile:

Glad to have been of help!