Figure53 / QLabKit.objc

An Objective C library for controlling QLab using the OSC API introduced in QLab 3.
MIT License
26 stars 7 forks source link

Feature Request - Fade Levels #15

Closed gwsounddsg closed 7 years ago

gwsounddsg commented 8 years ago

Currenlty there isn't a way to send a message to fade cues to enable/disable the levels. This isn't a problem most of the time becuase if you're sending a level it will enable. But the issue happens when you send a level at, or lower, than the min level set in QLabs preferences.

Basically, you have to send a value of -59.999 to get it to set to -inf. Which is still potentially buggy because you can't find out what the user set the min level to.

It would be great if you could either query what the workspaces min/max levels are, and/or be able to send a level message of -INFINITY or some equivalent message.

balord commented 7 years ago

Hi @gwsounddsg -

The QLab OSC method /level allows for sending the string value "-inf". You can use this to set a Levels slider to negative infinity.

For example, to set the master audio level for Fade cue "1" to -INF:

QSC: /cue/1/level 0 0 "-inf"

QLabKit.objc:

NSArray *properties = @[ @0, @0, @"-inf" ];
[workspace cue:cue updatePropertiesSend:properties forKey:@"level"];

In addition, QLab 4.0 added some additional OSC methods which will make the other operations now possible. These are Fade cue method /willFade and Settings method /settings/audio/minVolume.

For example, to set the "live" state of the master level slider to ON for cue "1":

QSC: /cue/1/willFade 0 0 1

QLabKit.objc:

NSString *address = [workspace addressForCue:cue action:@"willFade"];
NSArray *message = @[ @0, @0, @YES ];
[workspace sendMessage:message toAddress:address];

To fetch the minimum volume decibel level from Workspace Settings > Audio:

QSC: /settings/audio/minVolume

prompts a JSON reply from QLab, such as:

{"status":"ok","address":"\/settings\/audio\/minVolume","data":-60}

QLabKit.objc:

[workspace sendMessage:nil toAddress:@"/settings/audio/minVolume" block:^(id data) {

    if ( [data isKindOfClass:[NSNumber class]] == NO )
        return;

    double minVolume = [(NSNumber *)data doubleValue];

    // do something here with `minVolume`

}];