I am using perform to trigger multiple translators. Are these initiated in translator order?
I have assumed once initiated they run entirely in parallel.
Also I have some common usage translators (e.g. for bulk creation of CCs), triggered using perform. However this is causing me a bit of a headache as I need to be able to switch the output ports as required. I am trying to do this by changing a port alias dynamically as required, but I need to be careful about timing the alias changes. Any suggestions on the best way to manage this without duplicating the translators in to dedicated presets?
See page 113 of the user manual which describes the normal order of translators. You can also get to the user manual in the help menu or pressing F1 within Bome MIDI Translator Pro .
With that said, things like timers and perform action can certainly happen out of order and some things can even be in parallel. The translator engine is very fast.
For instance, a timer once started can run additional iterations completely asyncronously.
Using a perform action can immediately trigger a translator later (or earlier) in the sequence (if the preset is active).
As far as switching ports, I find it is easier to organize my presets by device and then set thier input and output destinations at the preset level, putting associated translators within the same preset.
For more information about device selection, see this tutorial.
Steve Caldwell
Bome Customer Care
Also available for paid consulting services: bome@sniz.biz
Well I guessed I asked for it. For me this is quite complex to read and follow. With that said, I put “Log” entries in the rules of several translators. If you filter the log window on the word “Log” and then enableTimestamped, then you should get an idea on how the timing is working for your translators.
As you said, there is no “blocking” occurring when you do a perform call, so you would need to pay close attention to the timing and then add delays when necessary if the timing is off.
I noticed there is nothing to change the value of sn which I assume is “sequence number”. It is always 0. This is another way of controlling a given sequence of events even though there is still no blocking.
Of course if you have delays in the outoing action, the Log message timestamps might be invalid but they should also be useful in giving you a feel whether things are happening in the order you want.
I have never used changing aliases to redirect output, so I’m not sure how quickly and alias assignment change occurs.
As I said earlier, I usually enable and disable a preset with different routing to direct my outgoing traffic. So I would have multiple presets each with different routing and then enable the ones that I want.
Anyway, hopefully this will help you in your development efforts.
When the full project is done I’ll share it, plus and some files for Ableton so you can see the the monster piece of coding it has become. I’m truly awestruck at how fast BoME Midi Translator Pro runs and how it copes with my deeply nested programming!
Yes sn is a serial variable, I’ve hacked this example so that the tests are always satisfied.
I tried creating 20 odd copies of the same translator calling the performs in the Ableton Switches preset, which cascade through to call my Control change perform 20 x 3 x 8 = 480 times. These all logged as completed and logged as CCs, on the midi output on the Ableton Port, before the preset activated the Board Switches Preset and deactivated itself. The port changed happened after this to allow messages to the board, everything was routed correctly.
I guess it’s no guarantee, but I’m never going to send this many cascading performs to generate control changes (normally a max of about 40), and as they all seem to complete in a timely manner I’ll stick with it as it works. If it breaks later I’ll let you know! Here’s the same thing with a stupid number of repeated calls…