Maximum processing speed of actors [Isadora 2.05]

  • I seem to have an issue with an isadora plugin that does not run often enough to process all his incoming messages. Let me try to explain..

    I have made two Isadora plugins:

    Plugin1: OSC receive plugin that receives OSC messages on a specified port and sends them as a string to a text output
    Plugin2: A plugin with a text input that receives the OSC messages from Plugin1 and processes them making input or outputs where necessary.
    I use a application that receives data from the MYO and sends this data via OSC to the Isadora Plugin1 as far as I can tell this plugins receives all the messages and sends them to his output.
    The second plugin acts on these messages using the: HandlePropertyChangeValue function. But on sending the message from one plugin to the other some messages are not processed. The reason why I am using two plugins has to do with the way the used OSC data protocol is being set-up, so it is not an option to do it in one plugin.
    So it seems the processing speed of the first plugin is adequate but with sending the message through to the second plugin some messages are discarded. When measuring the timestamps it seems that Plugin2 process a message each 33 Mili seconds. Changing the "General Service" option form 1x per frame to 30x per frame dos not make a difference.
    I attach a part of the debug log. Every line that says "StatemachineRecieve" originates from Plugin1 the other messages originate from Plugin2.
    The structure of the OSC message may seem a bit strange to you but it is part of a OSC data protocol which we use.
    As reference I will also attach a screenshot.
    I am testing on OSX 10.9.5 with Isadora 2.0.5 debugging using Xcode 6.1
    I hope anybody can shed some light on this.

    e321ed-screen-shot-2015-03-16-at-16.14.38.png 35296f-debuglog.txt

  • Tech Staff

    Try setting your 'general service tasks" setting in the Preferences General tab. 
    This controls the processing of data between video frames. Useful for increased resolution of data in cases of Audio analysis etc..

    It may be that it will allow your second plugin to handle the data being delivered from outside.

  • Dear @machiel_v,

    I'm tied up with some other stuff, but probably I'm the only who can answer this. 
    Without digging in to the code right now, I'm am going to hazard an educated guess. (Well, quite an educated one since I wrote the code that handles this. ;-) )
    I think the problem is that there is no buffering of your output. Isadora buffers all of the OSC input in a large buffer, in an attempt to prevent overruns when loads of data is coming in.
    Because of that buffering, it is possible that you will receive _two_ or more input messages during a single cycle. If you don't buffer your output, then only the last of those messages will be received by the next actor.
    Does that make sense?
    Best Wishes,

  • Hi Mark,

    Your answer makes sense, that means that I need to implement some sort of buffering in my Plugin1\. That gives some food for though... I might return here with some questions later.. 
    Thanks! Oh.. and by the way I am really happy with Isadora 2.0 and quite curious how the new SDK is going to be ;)

  • @machiel_v,

    Yes, the SDK is coming. I'm still weeding through various bug reports trying make what we have as stable as humanly possible. But the SDK will come as I can manage it.
    Best Wishes,