Parametric EQ - Limit the amount of nodes?
-
@DanH Is this by any chance possible now ?
-
@lalalandsynth I donโt think so. I reckon there must be a way to edit the mouse callback for adding nodes in the source code. My initial idea was to create the nodes you require and then edit the source to prevent users adding their own.
Failing that what you want to do might be possible using multiple EQ filters in scriptnode
-
Digging up quite an old one!
Is there a way to limit the number of nodes nowadays?
Only found interrogations... -
@ustk I seem to remember being able to edit the data field but can't find an example. I did it in the source code. Do you want a fixed amount always visible or allow the user to add a max of x?
-
@DanH always visible and not able to edit the type. Iโd prefer not to edit the source unless itโs customisable for a pull request compatibility.
But seeing my needs I might just end up with a panel based custom solution lol
-
@ustk you're good at those

-
@ustk
I solved it using an EQ broadcaster. The value you get from the broadcaster is the index of the band.If the index is below my maximum value, e.g. 8, nothing happens except that I save the current status of the EQ in a variable (Effect.exportState()).
If the index exceeds my maximum value, I show the user a message and reset the status of the EQ to the status I saved in the variable. It's actually pretty simple. :-)
At least that works with HISE's internal EQ.
-
@Oli-Ullmann Mmm clever!
-
@Oli-Ullmann do you have an example? I've been trying to do this but I get some buggy behaviour (My EQ is maxed at 3 nodes, but every other click adds a 4th node).

const var MAX_BANDS = 3; const var eq = Synth.getEffect("eq"); const var ft = Content.getComponent("ft"); reg savedState; const var eqBroadcaster = Engine.createBroadcaster({ "id": "eqBroadcaster", "args": ["eventType", "value"] }); eqBroadcaster.attachToEqEvents(["eq"], ["BandAdded"], ""); inline function onEqEvent(eventType, value) { if(eventType == "BandAdded") { if(value < MAX_BANDS) { savedState = eq.exportState(); } else { eq.restoreState(savedState); Engine.showErrorMessage("Maximum " + MAX_BANDS + " bands allowed", false); } } } eqBroadcaster.addListener("", "bandLimiter", onEqEvent);HiseSnippet 1244.3ocuV07aiSDEebScEM.R6JshyV9TJaHJoY6WrTQa9BhXS2.or6JsZU0D6wIip8LIimj1HTk3NHw+Cbh+IPBtw+Jbiybo7lwNw1McKkH.eHJuu+Mu2aduoqf6PBC4BjQ9SmMhfLdOydyXxg0GhoLT6FHi20jLt4k3fQ9DTsYivggDWjgQtOSofwlqize+wmVC6iYNjDVHzK3TGxynATYB2tG8ETe+VXWxozfTZ+jiZ6vY0497I.XxYVFMB6bNd.4DrRs0LQeNNbHx3CM2c+9k26.u881lP5224.ra4cHDmcw86uWYbksc8H66tS0pHiMZ5RkbQOIVRBQFqWi6Nq2P9Ern.7BZHsObp.hJndPjiX2h66pNhJtn5Co9tcmmkBQfW5ljyxEkydjYGpKcA+jb2CzBrRrHcBzXsrvKWF3U4sAuaARFofz5QP5gl8bDzQxDIQ0x1LIQ3gcxVKizEslaNSnHDJslhEVcN9UmU63SZzy5PqpOMeh.xXfitKoz.hromGwQVvlL1dqzZ4IAspyg3wjJ8pyCFwY.QAaOoR07Bx.qP7ThqNC.LRGhZBN10AGBvE7SS1.JiTxQP.MSIpv2j2B9rot1erkcFqrKFIBKFDBBesMYJDbU1wtnk8Tr+Dh8axekBHYrqDVJwNCOk2bbSkEgEds5r8lhfKpgYtG6BcGJRa8gfx7AjY4Mg4HoblEmEaWgEwqnkNZakOBr5endIxsN7PqTtdKsBQ5Fqp1dqOIojr0BoI5o9RRmPRiLtD4xQbgTyn.f14pc0h+Q7CIuEeAlKHgPCJIx9DemxSpu3hSHz51TH3hNPCGbwsfcG7kzfIAV1VONU2ziA59voMzB66yu.NwEs7v.NVBfWk+pkJNttOiB+iA0daUgT4I8HFUEOI6u0SSUQNgKIOmUPU.1Dbo0ME44cqxTMuBtuODpaSrZ9k3tLr.aRPehHU4WqHbGM6E+MteW7chtKkRQNqMiJe9HRL8cO4BEeYD92W2tAVhUSNh4A5MhHjTEbLZPlBysiliroYCR34R9Hstw2fgAIx3AeQSNZ4ywRJavoT.1T.Aqa5IQWldWvrzDWPckvrbSihFHzPBcvPoh52R.YTz+.yFB7fAXHazh5Ck3tXFwG0ev78DatwbWBM.AIbu95q+1rb2NV4pJ15SuQKSUCu8hbT63gH5IG1sYtjKAFeTEMIjagl0WxEmGBKlHf.cOa9qfUZKM8El6ycm3ikYWFnVYFK.ZTxLAVMWlERkyRuR8evFhx24Fh6KDenYWpzY3siw0tELBsP+Wfw38puuYzxkD.ttYqWspKQKe+Wh9n4M+0mHlRZNNN1jwYh8ISBh5JCUMu4fifZHd44YmuuT9iTLpLmwne5K0L1N6ylXtUuIimjv3AZS1Ilwu7ck9SsF6NmQoekp0Xua5i8uIiCtoSqr.p+9OlKhyBr9y+vzHNKA1JKg1JYfaqVm1jotwFUex8uzibPeEehZDSGrTPgIKlP1uGbu1g.cGLXpftHrlZBRDcYEsBR8H5hhoALT35XgUTzFwBqLW3+KwH.6H3m4DshP038NZNv4loeo6llcTzVUP50FouqE.Ol7LGmrtZIC2dUMr5pZ3SVUC2YUMb2U0v8VUC2+u2P0a8OdhjGDM5Dg5zsYzlFiT2HP+EzhLhdJ -
@HISEnberg @Christoph-Hart I think at this stage it would be interesting to consider a
NumMaxEqNodesproperty, or even just a knob on the module itself that could be added to Hise 5. There are much much to do already but my guess is that it should be quite straight forward to add in the end...
For now that's precisely what's making me dodge the param eq on my interfaces and build custom ones... so...
-
@HISEnberg
I just checked it and I have the same problem. For some reason, the broadcaster stops responding after the first reset. I have a workaround in mind, but I can't check it right now because I have to finish something else first.When do you need a solution? Is next week okay? Then I would try to implement it by then.
-
@Oli-Ullmann said in Parametric EQ - Limit the amount of nodes?:
For some reason, the broadcaster stops responding after the first reset.
I suspect you need to enable the queue
https://docs.hise.audio/scripting/scripting-api/broadcaster/index.html
-
@David-Healey
@HISEnberg
Yes,.setEnableQueue(true);fixed the bug. Thanks, Dave! :-) -
@ustk I made a simple source code change to add a
MaxBandsparameter.Is this what you mean? If so, I'll submit a PR.

-
@dannytaurus Much cleaner solution
-
@dannytaurus
Looks great! :-) -
@dannytaurus nice I was thinking of doing this myself, this is a really clean and ideal solution. The UX is precisely what I was after.
Thanks to all of you guys for your responses as well!
-
@dannytaurus Yeah exactly

I was working on it but you got there first! Thanks!
-
@David-Healey @Oli-Ullmann @HISEnberg @ustk Hmmm... maybe not as clean as I thought.
I think this would introduce a breaking change to any existing projects using the per-band indices to access and/or change values.
The docs page shows 6 attributes for the Parametric EQ, and I believe they are per-band, so band 1
Gainis index0, band 2Gainis index6, and so on.The
MaxBandsattribute I introduced here would be a new (and only) global attribute for the module, at index 0, which would shift all the per-band indices by 1.Thoughts?
-
@dannytaurus what about making it a floating tile property instead of a module attribute?