How to Change Order of the Stacked Effects
-
@Orvillain Yup you are on the right track. I find it best to follow the Module order (which networks are placed in which Hardcoded Master FX) and update your UI components from there, but you can do it either way.
I made a template about this a few months ago:
Modular FX Template - changing Fx order with drag and drop panels
Alright this is probably the least frustrating way to set this up to share on the forum. I realize the effects won't be shared either unless they are in Scri...
Forum (forum.hise.audio)
-
@HISEnberg Nice one! I'll take a looksie. I'm not really bothered about dragging and dropping right now. Just the raw mechanics of switching the effect order across a bunch of SlotFX entries.
-
@Orvillain Understandable. You can replace that whole "drag n drop" system with simple comboboxes.
The code is pretty verbose but I tried to keep it modular enough to follow the different functions. I recommend putting it through an AI and directing it to just remove the drag and drop panels so you can study the SlotFX API.
As a side note, it isn't ready yet but I know Christoph is working on a DynamicContainer Component which will allow you to attach/detach the UI components to the module, so eventually this whole system will be a lot cleaner.
On the audio/module side it is quite clean to switch networks in the HardcodedMasterFx. For that reason I really recommend starting from the Engine.addModuleStateToUserPreset and building your UI accordingly.
Hope my ranting is clear here!
-
@Orvillain actually with the (not finished) addition of the dynamic container system which will be the goto solution for dynamic FX racks (once it leaves the experimental stage) you can leave the effects in the same slot modules and just tell them to be rendered in a different order.
The connection and API with the UI will change at some point, but there is also a new API call that's completely undocumented (because it's part of this new system which is not 100% ready yet), but since 2025 is not over yet, I would suggest this as an option:
HiseSnippet 1581.3oc4Y8zaaTDEe23rkFWnpEJzJwkUUbHEBodsSSCpBrShsSsvI1xq6ePUUlw6N1dU2clkcmMfKhybjy8FeM3i.23i.HjPpbhuAva1cs2YcLINl7mphOX44Myad+l2+mwM8nFXeepmjb11CcwRxuoh9PBav1CPVDoZkkjurxtHeF1SMhzVCcQ99XSIY4L6vIHuzhRge9qhagrQDCbBIIoGRsLv0sbrXITaV5ysrsqhLwssbDV8ZkpYPIaSsoA.dxnjSxEY7LTe7dH9xVPQ59H+ARxenBt6Zn6lecyB423N4JT.kK2FZFcQ4t6FcWO2F4WG00nqFdsbRxWnhoEi5oyPLrOroaQMGpOf90jHA7PKeqt1X9.MIcPxQjk1dfksYyQJGeIIYklIppLQppqorqko0X5IprqDNgZBGhJM4ENLHocLfjr.jVLBRWUQ2vyxkkLCGOWRoFArf8PfsQDJQqUZgueAksovJHrUcPOCW0CFLlikWOWtUTgut08xlErO9L08QdpQNEgmY0OUMzmY09XVHJCGs7ME8atYZtaUoQqxUZ0oYi5eQmpOF1gdHae78DVhd8Fs6zZy81oBL6S.HT3ovVb6aC79vJs1R8i+L0l2eS8Js3+Rey1On0lsazRMq.vV0GypzqG1fENrgmI1a4ID8JBBZkP4nshZ9mdqHYMMI.Chf.rf+aBiKoUTyMRXoDQhjOgDV9vSFWX8BHFLKJQkR1ixvMHKeqrea1kx9cYUmbpd8l5bbuEOpsMHzoMMOr16vXbYRfSWr2Jfg1N.Odgfab5XiKLawFFQNuBKjRpQrXMbwwiqRsM4977eevHIoXue3WOnVYDCwCthoAqyE6wr3vQtLdeHcVTn1RJkw9OiQcgDZGHNDx.PMCrQrzoE3ILim.zGohE4waDeK1PwDpSlqXw+c8QNA8wQbZmQ3dUklVLiASGuKLE7BZsSa7Fm48sTDb9CA6hJUe77llM2gmlMyAk+EUzsoLPhQEHi.iJmlVZPj4zHW+RQf3xJ5VNt13V38wdcCgx6mBJcRMuHtZQoN5VOeTs2e7Eu3kEKibbsH8iIUpPgeu3ivr5.y1IK6mKV1a3DzdYwGYYxFHRnpGF+bL34HHgep3Il1PpEMfAXcWDyy5afZy6E3nCMMXfAGBBAaCath7B7.6nw43i4Nn5XhY3f+F9DOoFerb7jZil7LQFGGOq7mAdVuwnTaMGf7wwn38RghNilRDMf89qBvDigZIYCFVZL07ITeQopXrYWnutXZeYud+Qwc4ZXgzdYNEaQZp45d6nSr5oTxYsolr6HQ7UiPrhR8pMhqf.+RcL90NZPlbfhhFibQGaYRV5EKwaHuVR+7k9gROBsOtG0yI1qX7lVG2GDuHk1XGWJz1mgX0.cGJkM.hgR2l+0JUmRcqPPfxwTbSBMAPKGPuMo1FXaaSia9wlN1yI7Ss9DpGNpMFQ5aG3ynNiN.gWdPmgcCKtK+Dk0WaU3SuOh+8mrM7UgFmLikN4ZuegYz28cBcJFa84tGuh2YQDhG6Dddh3+OVIovYWkjKoniXAdbyeHNtQJbzIYxTWKMhJOIbb2C67a+IuYjMcnADVpTFd3zOBA3CR8YSR6rufx0URNEpm+s7+Zna90G4gwSxG9hCgJ92UYTRe0cvDr2AqSl143Wl0Wsxcle0pFFL.Bs8PDeWpOVKUwLriUaJA6mh5DbjepbjhZYLKfjdqiHkZUbUQUPUnIVmeDw7hDahHo1LXbpcJUGZ+Zwnp25X3ja1v2.TLgQwhQlA193vKFnIxXB47hjuOxybx1GlLncF6uJ8crEV+Thluv4vi5c3217r6sDl+KDOk6hdk36hVg.WMjBThZptLtGJvlMhZ53vcoDp6.JwJkUuEFRezuONkyzTOPaxXHwlAuVoVXaLzBYBoOnTcKBF4IbSziqt3DpdvMThfqJO4g54hc6D4cexLSu6yIBFOGdqmYO5CxG9psU75JPd47pglR0yGa4qKMc3fL7ncLhd5ZdP+ECo.maR3eL0RJ6xGqpIE9b1hJSGnjQGCiza0AXL+7xXg4kw0lWFuy7x35yKi2cdYbiilQdE8MCXTmnXCnMmlUhdh.4wuOgbFo+A.NMM8a
Relevant code:
const var MasterChain = Synth.getChildSynth("Master Chain"); const var REORDER_POLY_FX = false; const var SLOT_RANGE = [0, 3]; // REVERB -> PHASER -> SATURATOR MasterChain.setEffectChainOrder(REORDER_POLY_FX, SLOT_RANGE, [0, 1, 2]); // PHASER -> SATURATOR -> REVERB //MasterChain.setEffectChainOrder(REORDER_POLY_FX, SLOT_RANGE, [1, 2, 0]); // SATURATOR -> PHASER -> REVERB //MasterChain.setEffectChainOrder(REORDER_POLY_FX, SLOT_RANGE, [2, 1, 0]);
This will also show the current processing order in the module tree like this:
-
It's.... so much less code
-
@HISEnberg yup and the drag container will create and update the index array automatically but that part is not ready yet…