No internet connection
  1. Home
  2. How to

Putting this Multi-Click function on StreamDeck Knob click

By Owen Granich-Young @Owen_Granich_Young
    2023-09-20 00:28:30.438Z

    Hey @raphaelsepulveda Some sort of interaction with Stream Deck Knob click breaks this script. It will work on the streamdeck+ but not on the knob press aspect of it... any idea if it could be salvage?

    /** Counts the amount of times this function is called during a fixed amount of time 
     * and passes that value to a callback from which different actions can take place.
     * @param {object} args
     * @param {string} args.name - Name for this instance.
     * @param {number} args.waitTime - Amount of time to wait in milliseconds. 
     * @param {function} args.action - Callback to execute when the waitTime is over. Counter value will be passed as an argument.
     */
    function actionCounter({ name, waitTime, action }) {
        let actionCounter;
    
        if (!globalState.actionCounter) globalState.actionCounter = {};
        actionCounter = globalState.actionCounter;
    
        if (!actionCounter[name]) {
            actionCounter[name] = { i: 1 };
        } else {
            actionCounter[name].i++
            return;
        }
    
        sf.engine.runInBackground(() => {
            sf.wait({ intervalMs: waitTime, executionMode: "Background" });
            try {
                action(actionCounter[name].i);
            } finally {
                delete globalState.actionCounter
            }
        });
    }
    
    actionCounter({
        name: 'actionCounterInstance',
        waitTime: 500
        action: i => {
            switch (i) {
                case 1:
                   log("1")
                    break;
                case 2:
                    log("2")
                    break;
                case 3:
                    log("3")
                    break;
            }
        }
    });
    
    
    • 4 replies
    1. @Owen_Granich_Young, unfortunately, I have yet to snatch a Streamdeck+ and I'm not familiar with the inner workings of its integration with SoundFlow, so I'm going to ping @chrscheuer to see if he can provide some insight.
      I have a feeling it may have to do with the way background processes are handled when using a knob click.

      1. I would have to see some log files and get some more info about how exactly it breaks.

        Please use the https://soundflow.org/docs/help#script-help workflow if you need help with it, so we have these details, potential error messages etc.

        1. Chad Wahlbrink @Chad2023-09-20 21:22:08.002Z2023-09-20 21:46:24.167Z

          @Owen_Granich_Young

          Hey, I troubleshooted this idea a bit. This script will not run as the "click action" of a Generic Knob Command. When I put this script on a knob that is not using a Generic Knob Command, the script runs as expected.

          I believe this is because Generic Knob Commands can't access the "global state" like a normal script.

          @chrscheuer - can you confirm that the global state isn't accessible this way?

          1. I can't tell for sure, as I said, I would need to look at log files and example code. Theoretically, they should have access to everything a script could do normally.