How to Change Order of the Stacked Effects

  • How can I change order of effects?.. Something like this....

    Order Stack.gif

  • @DabDab We Had Discussion About Reordering Fx Units Here:

    It's A Hard Task To Get Done.
    And Needs Lots Of Works That Only Can be Done By Our Expert Senior Programmers 👏

    And Here You Can See How It Loos Like:

  • @Natan So I need to become a senior programmer too 😄
    I thought that ScriptNode would be easier for reordering FX.

  • @Natan @thank you.. but I need FX order should change (e.g Delay after Reverb sounds different than Reverb After Compressor) as soon as I change the FX panels.. Is this possible?

  • @DabDab

    You can also possibly take up Lindon's idea and select the effects via ComboBox in slots - it's the same but without drag&drop.

  • @UD-AUDIO Scriptnode has nothing to do with this, it's more a modular DSP environment.

    @DabDab On the interface, you'll need to master the panel painting/mouse callback (so all in one panel). But it might be doable with simple dragging panels though (one panel per effect), but I never tried...

    On the FX side, you'll need to use the "Effect Slot" FX so you can swap FXs at runtime using the "SlotFX" API.
    It should also be possible in Scriptnode with some basic routing and send/receive nodes.

  • @DabDab So Make 2 Chains.

    Delay > Reverb
    Reverb > Delay

    Simply Bypass / First One Using A Button, And Enable Second Chain.
    Also To Make It More User Friendly, Just Move The Graphics Around By Adding Some X,Y Positioning.

    Kinda Cheating, But It Works 👋

  • @ustk said in How to Change Order of the Stacked Effects:

    Scriptnode has nothing to do with this, it's more a modular DSP environment.

    Actually it is a bit more convenient to implement a dynamic signal chain that can be scripted using scriptnode.

    // Create a DSP Network
    const var dsp = Engine.createDspNetwork("dsp") ;
    // Create a list of all effects that you want to assign
    const var fx = [dsp.get("reverb"), dsp.get("delay")];
    // Create the ID list for the slots 
    // (they are just simple containers but it helps avoiding
    // fiddling with the indexes)
    const var slots = ["slot1", "slot2"];
    // This function will take an array with slot indexes
    // and move them into the slots defined above
    inline function setOrder(order)
        local i = 0;
        for(i = 0; i < order.length; i++)
            local idx = order[i];
            fx[i].setParent(slots[idx], 0);
    // Use -1 to remove the effect (not assign it to anything)
    setOrder([-1, -1]);
    setOrder([0, -1]);
    setOrder([1, 0]);

    Now all you need to do is to implement a dragging UI using script panels and then call setOrder with the updated index array (this is rather a tedious task but you would have to implement it anyway).

  • @Natan I like the idea... I have a lower knowledge of HISE. So I need your help. I will post the project tomorrow along with your idea. I need some corrections.

  • @MikeB Yup.. 🙂

  • Drag&drop swapping for comboboxes would be insane 😄
    (FL Studio mixer does work similar to this)
    99 problems but f-x ain't one!

  • Hi, @ustk @ulrik @Natan @MikeB
    How can I change FX Order stack from Interface and via DSP.

    HiseSnippet 955.3oc4W8zabSDEebxNzraJnVTkfi6wToRk2lT.INraR1rvpl+XkMT5sxD6miGE6YL1iaYEh67UH23iBR7Qnm3FRHwY9F.uw1q83F2nvJHUH7I+98duwu+7adyXmDoKjlJSHVcOYdLPrtMc1bgJX2.FWPlNlX8dzCXoJHoeAzNyiYoofGwxZ0OWCX0sCI+4OFtCKjIbgZHB4oRtKrOOhqpQcF8DdX3DlGbBOxv5sFM0UJ1UFJyv3YUpMIl4dN6L3Pl1rUnDq2YOOtRlLSwTPJZyNRu4yBjuTTX+S4o7SCAsv.xLbgJfI6FvC8bVjqoDhUGm5Le0hL+dzC3d7J75JvcxUzu1CyZf0JMCoNMBoAuoPZhLzSu.ugvyxH75TDd2kNyMgGqp0nis0oSEXywmgkcyvpvVh0OQ2UhFHTOLhcNLIAEpbXiGaa+f9aYae+OyOS3p3RQeo3PoBNRrw868c8516660+0U462pN8mIQFFBIspV2oStJG2PjEcJj7f9ufElAUFhoey565Wu5qaQVaXnTLUvUGECkx0c.sthrdgVaRUxZBUmiln4oVKlUCc4FLorqfu8kSGyTLcOuDCsKFRTbc1ZMFdAtApfAzkNFROWIiwsPWhdfjToWVHS0j4p2hVp.K2MnHZdfHkqlatE9uAc1tU57f1x1qY3dWpCW4Fzd7tRKwKV092NdKGN7tz878AWUcv1gN4Y2.SBLGTsdQrbKjGDxlmGEqU79fFQRNjlVtO3aL28CGUo3X9YAFZt2nI.3cJNs0viQat4qFt.2zgbE6KeoC9Amj.eS057CuZzWvuDJY7nC3eas3uN7DHJVhGy31f4s5UMaev0e1N4XYlhKN6.lJQ+coGlEMCORwEvlmP.g3hSsVQuIrP1VKqChYfvKW3OwmRkCzxVkJGrPoICYsE6NyOlCJlK2agTyNyIAIPZPcc72FdTlJNSYhbLDBrTvrfssRg8fZi94gOQ.Kr3Gu3he4+tUuasn54DfIMtkp3Tsbo9SdVyxmlWkABWjuWUclOpB8Q0nWTwnKw9Ze+eeXCd3+fTt1Nut0IbueYh81ej7am175zYLUVhtnjWOtcsbyNcIrt.YLs+q.01QxLgxr93j.MuHJN+Vlpdcra9l8GPqyh+mzwuI9FQL2D4ycKtjkterVNBl2h7+SnK9CKnb+Aj7qRh9QsenMIBuC+ycc0Gb+QX8ocedzR3ylKgOasD973kvmOdI74SVBe9zqzG8uOsclRFUv+Q.m8xuzqk0dBFxjy2JP9K..R92xC

  • Hi....Snippet is not openning

  • @Natan @ustk @MikeB @ I have done FX Slot Reorder via comboBox and FXSlot . Now my problem is You to change order Of Panel?

    I can understand dynamically it is impossible to make stunning Animated Things, like Serum/Vital does. Till now can anybody tell me how to change order of panel? Something virtual to make End user believe . I hope this will be my only solution for now.
    I hope HISE developer @Christoph-Hart will implement this features in future.

  • @DabDab Well, if you use comboboxes, this means an effect type can be select multiple times unless you added some safety. So moving panel isn't the solution, because this is more apparently related to effect selection than effect reordering... This would mean all panels have to exist prior to being called. If you have 5 effect types with 3 slots, this is 15 panels... imagine if you have more effects and/or slots...

    Dynamic reordering is absolutely doable, but this requires some learnings on how to manipulate panels (or child panels). And this is not combobox friendly as they don't suggest re-ording by nature, but straight selection.
    If you don't want to reorder but just call the good panel (like your screenshot suggests), then instead of creating 15 panels like mentioned above, a panel factory would be much better. But again, this requires some learning about panels and how to make a factory, as well as child panels. because child panels can be dynamic, not straight panels from a factory (they can be created but not deleted like child panels)

    Seeing all of this it's hard to tell you how because it depends on the behaviour that you want and the skill level. In any case, you'll need to learn a lot about panel manipulation and/or how to make a factory using child panels, as no easy or ready solution will come to you (at least none I can think of to replace 15 or more panels, which is absolutely not a good start). I strongly advise you to learn everything about panel recipes in the doc, this will keep you busy for a while:

    go step by step, create one child panel using a button first, then a combobox for two children, and add difficulty step by step.

    It is not necessary to think effects like a list though. Each of the 3 panels above can have its own list of 1 panel 😉
    Just make a child factory per effect type, and call it when and where you need it. I must say I've never done it this way for effects reordering.

  • @ustk said in How to Change Order of the Stacked Effects:

    (at least none I can think of to replace 15 or more panels, which is absolutely not a good start).

    Why? It works like a dream for you can see in the example I posted 5 slots with 7 FX in each = 35 panels, works fine, no CPU or graphics overload....

  • @Lindon For two reasons:
    It's good you don't have graphic overloads because I had some in the first tests I've made long ago. So I would be afraid to get glitchy graphics on some user smaller systems...
    But the main reason (if the graphic load is ok) is the maintenance and the UI list growing exponentially, requiring huge component declarations.
    I don't say it doesn't work or it is bad, but I prefer dynamic stuff with only one panel and some factory. The only issue with child panels is the impossibility of inserting something else than a panel. So knobs have to be panels too...

  • @ustk Ok... Thank you 🙂

  • @Christoph-Hart This is really interesting!! I think I'll try this one! But what I don't quite get yet is the dsp.get("reverb") for example. So the reverb is a container in your DspNetwork? Or wrapped ones?

Log in to reply