Posts by hepi


    Krzysztof Korzeniowski
    Yeah, that's the way to get the associated sequence.

    I personally don't like a solution that involves polling (sending the fader values every 0.5 second).

    So if you are going into resolving each exec's sequence, then you don't need polling to get the faders' values.
    You simply need to listen for the outgoing OSC messages of the sequences's MasterFader. )Oh, but what if the exec is a Temp fader.... you need to listen for a TempFader as well? I need to chan that)

    But in my opinion, if you go for resolving sequence, then you need to listen for changes in the assigned sequence of an executor.
    Or you can use your polling solution to resolve the exec=>seq mapping every 0.5 a second. Or maybe eve every 5 seconds. Or even, just make a plugin/macro that the user needs to run whenever they change the exec's target object (exec's sequence)


    Well the issues with sending Exec active state are:

    1) You need to resolve the Sequence to which an executor is assigned to.
    2) You need to hook the Executor for changes, in case the user assigned a different sequence to that exec.
    3) Although a Seq object has a "CURRENTCUE" property, when you hook the seq for change, the callback is NOT trigger when the current cue changes )-:
    4) So the only way I found to get notified when a sequence active state is changed, is to add commands to all the cues and to the OffCue. And use these commands to do whatever you want.

    So for conclusion.
    Too complicated for the value you'll get from all this.

    Storing State/Config in global variables

    Well, in some cases it is needed.
    I thought of a solution for the Show load issue.
    And my current solution is this:

    - When I install the plugin, I generate a uuid (unique identifier).
    - When I create my global variable (a table), I set the uuid on that table as a property.
    - I store this uuid in the AddonVars (which are within the ShowData)
    - Whenever I access the global table, I compare the uuid from AddonVars to the one in the global table. If they differ, it means that a new show was loaded. So I destroy the current global table, and create a new one.

    Does that sound reasonable?

    I didn't want to start risk trying to Hook the Show Load event. Especially since we don't have a proper StartUp macro yet.

    (Oh, BTW, I found a nice hack for having a StartUp macro, but it's not so easy to Install it for other people, it's good locally for your own system)

    Ok, Solved it.

    All I had to do was run "ReloadUI" after adding a menu (-:

    So to summarise, if you add somewhere under:

    These files:

    - my_menu.xml

    - my_menu.uixml

    - my_menu.lua

    And run "ReloadUI"

    Then you can load you menu using command: "Menu [You Menu Name]"

    Using it in a Plugin

    So I guess you plugin would have to "Install" the menu files in the menus folder
    which is not in the user library, it's part of the version.
    You need to make sure there is no collisions yeah !!!

    This means, your plugin should handle a case where the files are not there (if someone loaded an old show file with a newer version)

    Dialog Initial Focus

    Has anyone been able to set the focus to the popup dialog when it is opened?

    I tried messing with the global functions:



    but without success.

    Tried adding Focus attribute (with "InitialFocus" or "CanHaveFocus") to some objects,
    but still no luck.

    Any ideas?

    When you say "We will resolve this at some point",
    Does that mean that you work for MA Lighting?

    And it certainly IS a bug IMHO,
    The selectors values property should be an array not a table.

    Great !
    Bare in mind that this "grandma3-ts-types" is constantly changing,
    and I consider it still unofficial, so I allow myself to make breaking changes.
    When it will become more stable, I start versioning it properly.
    I hope the version 1.0.x doesn't mislead.
    Maybe I should have stuck with 0.1.x ...

    At least If I make breaking changes, I will try to remember to increase the minor version. (e.g, 1.0.0, 1.1.0)
    And if it's just additions, then only the last digit (1.0.1)

    You can also take a look at my build tool:

    I in the progress of extracting it to a standalone package, it's not done yet.


    I researching the proper way to have custom dialogs.

    This useful post shows how to build custom dialogs directly with the Object API.
    RE: LUA: UI

    I am wondering if we can build menus and overlays the same way MA does it, as you can see in:

    Each Menu have these files:
    - menu.xml

    - menu.uixml

    - menu.lua

    The menu.xml file defines a menu name, for example

    <Menu Lock="Yes"  Name="AtFilterOverlay".../>

    These Menus are like Plugins, just instead of calling them with the "Plugin" keyword, we can call them with the "Menu" keyword.

    This command will open the "AtFilterOverlay":

    Menu AtFilterOverlay

    So what now?

    I can't seem to be able to add my own menu, that could be called with the "Menu" keyword.
    I tried putting the menu files under ".../MALightingTechnology/gma3_[version]/shared/resource/lib_menus" but with no success.

    Anyone wants to try and research this?


    Has anyone encountered multi-threading issues?

    1) Is there a simple Mutex implementation that is possible with ma3 LUA engine?
    1.a) Is it worth to try this socket based mutex suggestion?
    2) Is it possible to schedule a task (a simple function) to run in the MainTask thread?

    Specifically I am tackling with consequtive MIDI events that are handled in different threads.


    Oh, and it might be coroutines I am talking about, not necessarily real thread.



    The only solution i found to make a temp fader behave as you (and i) want, is a bit complicated.

    I have a plugin I wrote for it, but i will release it only in about a month or two.

    Its called True Temp Fader.

    In the meantime you can check my website for other plugins (currently just one).

    MA3 Pro Plugins
    Professional plugins for grandMA3 lighting console.

    Oh, BTW, the solution involves crossfading between 2 clones of the original sequence.

    1) A little hack in MIDI Remotes to call a specific MACRO for a specific MIDI value.
    2) Call A Plugin that finds the encoder UI component
    3) The plugin uses the Touch() API function to simulate a 'press', 'move' 'release sequence.

    Good news. I just made it work !
    I hope to finish the plugin in about a month.

    External Content
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.


    I am trying to write a plugin for controlling the encoders with MIDI.

    The console does not support Relative MIDI messages,
    for example one of the relative standards specifies that midi value 65 means +1, and midi value 63 means -1.

    I wish I could get the raw MIDI value straight to my Plugin, any way of doing that?

    I thought to try using the MIDI remotes to add a line for each value , that will call a different macro.
    So one line for the value 63, and another for the value 65 of the same MIDI channel & index.

    It seems impossible.

    The In & Out ranges are only for mapping range values to a fader.
    The Trigger On/Off is not suitable since if I put Trigger ON at 63 it catch both 63 and 65.

    Any ideas?

    Other Solutions

    1) I could use an external MIDI adapter app to change the MIDI controller's messages to they use different MIDI index. Or even convert them to different OSC messages.

    2) I can think of a devilish HACK, using Trigger ON, and assuming that ALL matching macro lines are called before the next MIDI massage is handled. But I'd rather have a proper solution.


    1) I didn't know aboutReloadUI, thanks.
    2)I guess If I add a hook to the ShowData object, I could get notified when a show is loaded. I didn't try it. I wish there was an explicit API for a load-show event. (And I wish there was a StartMacro, or some event when the system starts (or a show is loaded)
    3) Do you work for MA Lighting? How do you know all this stuff?