Set individual steps in Chaser to "default" fade time

Request a feature that you would like to see in QLC+.
Explain in details why you would need it and which is your usage case.
Post Reply
mdmayfield
Posts: 71
Joined: Wed Jun 15, 2016 8:51 am
Real Name: Matt Mayfield

In the show I'm building, I'm using a lot of Cue Lists with Scenes, RGBMatrices, Sequences, and Chasers nested inside them.

Often, I like to re-use Scenes and have the fade-in/out times be different depending on the situation. For example, "Red Scene" might fade in over 5 seconds one place, but pop in instantly in 0ms in another place.

By setting the Cue List's Chaser to Fade In and Fade Out times "Per Step," this is easy to achieve. But there is a problem / limitation.

When I choose an RGBMatrix, Chaser, or Sequence as a step in the main Cue List, the fade times are wrong. I can't make an individual step "default" as it would need to be, to allow the nested steps to fade as they are supposed to. The outer Chaser's "Per Step" fade time takes over the fade times for all the individual steps of the nested function.

Is there any way to implement a "special" duration which would make only that one step act as "Default" - yet still allow other steps to have explicitly stated times?
mdmayfield
Posts: 71
Joined: Wed Jun 15, 2016 8:51 am
Real Name: Matt Mayfield

It looks as if defaultSpeed() returns -1, similar to how infiniteSpeed() returns -2. So maybe if a chaser step has its fade time set to -1, it won't send a speed override to the nested function. Maybe all that is needed is to allow speedToString() and stringToSpeed() to work with something like "d" for default and treat that as defaultSpeed() == -1, similar to how it works with "∞" meaning infinite and treating it as infiniteSpeed() == -2.
mdmayfield
Posts: 71
Joined: Wed Jun 15, 2016 8:51 am
Real Name: Matt Mayfield

Yup, that seems to do the trick. I'll continue to test in more detail. If anyone wants to try this, here's what I did. In engine/src/function.cpp, I added the final four lines here:

Code: Select all

QString Function::speedToString(uint ms)
{
    QString str;
    if (ms == infiniteSpeed())
    {
        str = QChar(0x221E); // Infinity symbol
    }
    else if (ms == defaultSpeed())
    {
        str = QChar('d'); // Default speed
    }
And the final two lines here:

Code: Select all

uint Function::stringToSpeed(QString speed)
{
    uint value = 0;

    if (speed == QChar(0x221E)) // Infinity symbol
        return infiniteSpeed();

    if (speed == QChar('d')) // Default
        return defaultSpeed();
At least in preliminary testing, that appears to allow a Chaser to be in Per Step mode, with overrides on some of the steps, but non-overriding Default timing on steps where the fade time is set to "d".
mdmayfield
Posts: 71
Joined: Wed Jun 15, 2016 8:51 am
Real Name: Matt Mayfield

XML seems to save properly with this modification; so far all is well when used carefully. But the total duration times seem to behave a bit unpredictably, requiring re-setting the Hold time sometimes, and it is possible to put in "d" for the Hold time, which doesn't exactly make sense.

For now this seems like a bit of a messy kludge. I think I will continue using it in testing for future shows, but not yet in current production.
mlohrey
Posts: 243
Joined: Mon Apr 20, 2015 5:07 am
Real Name: Mark Lohrey

Hi Matt,

This problem seems to have been around for a long time now.

To my limited understanding, the order in which QLC+ handles fading seems to be the cause. It must be difficult to fix otherwise I suspect it would have been done by now.

https://github.com/mcallegari/qlcplus/issues/193
https://github.com/mcallegari/qlcplus/issues/445

It would great if you could find a solution especially for us 'theatre guys'. :D

Cheers
Mark
plugz
Posts: 637
Joined: Sun Apr 12, 2015 6:30 pm
Real Name: David

Hello,

Yes, this issue is known and is being worked on.
Post Reply