Master Bypass Button
-
@DanH store all the individual bypass states in an array, then from your master bypass, either bypass all modules or restore their state from the array
-
@ustk Thank you :) I don't know how to do this lol. Where do I need to start?
-
@DanH do you know how to use an array yet?
-
@dustbro The basic principle yes, I have several in my project doing various things, but I haven't come across storing changeable values in one yet... Assuming I'll be needing .getValue API at some point!
-
@DanH if you have several bypass buttons I imagine you have stored them in an array as well as the modules, so you use only one callback
Just use the index of the buttons to store their value in the array using the button index
bypassArray[btnIndex] = value;
Then in the master bypas CB
for (i=0; i<buttonsArray.length; i++) { if (value) moduleArray[i].setBypass(true); else moduleArray[i].setBypass(bypassArray[i]); }
Sorry for the approximate typing I’m on my phone...
-
@ustk You would imagine, but actually I went the long way round at the time as I didn't know scripting very well :face_with_tears_of_joy:
I'll see if I can figure it out
-
@DanH said in Master Bypass Button:
@ustk You would imagine, but actually I went the long way round at the time as I didn't know scripting very well :face_with_tears_of_joy:
I'll see if I can figure it out
Time for some refactoring
-
@d-healey indeed, I find arrays really confusing. your scripting 101 video is great but only so deep. I have several arrays doing different jobs and which all look totally different (these are taken from scripts and snippets from the forum), and I can't figure out exactly what they do - scripting wise I mean...
-
which all look totally different (these are taken from scripts and snippets from the forum),
You're making Frankenstein code
Make a new file and play around with arrays to get a better understanding. Just try stuff out.
-
@DanH This is where it is important to build a small house before constructing a building. Play as long as you need with the basics, make dummy projects, turn the code in all possible shapes, again and again, using different techniques to do the same thing from different angles, and understand EXACTLY what it does.
Taking ideas and solutions on the forum is a good thing, applying ready-made blocks of code is less of a good thing... -
@d-healey Yup, you see why I want my homework marked now right?
-
@ustk only just saw this, thank you :)
-
@ustk Help please! :face_with_tears_of_joy:
I'm getting the error: Interface:! Line 50, column 35: Unknown function 'setBypassed'
Which is the moduleArray line in the callback, but I suspect some other things might be wrong as well!
Code & Snippet below:
HiseSnippet 1371.3oc6Z80aaaCDmJ1ps1YtXcnOrGEB1CNqsYxRscCHqn1wwdvXM+A1oEaHvnfQl1lHRjZRTYynH.608sXOuOM6iR+FrQRIaI4nYq3zsAjZ8j3c2Ope2wi7N5ji8nVHeepGPozISbQ.kOQs2DBabywPLAzYefRE0iN7n1s0ZzsaieDr2DWnuOZ.PQov2ILQoTQf748ubOnMjXghEA.ughsPuB6fYwROt92issaCGfNA6jv5mVuiEkzjZSC3zofpNvEZcNbD5PnvrMTAJ2o0.Li50iAYHefRw8nClzaL8mIg1+FrO9LajXPMPO9DEJtM0dffwh2AMGisGb7T21G.Tt6wwAgBgAgGpd.d.dl73fwmJUnEiHY7PYiEQuZqH8TRPuhgz6Ap8r7vtrXMBtsoZGBC4MDxWBRRqPaAa7a2QsIkaAgsiC7bTaO9fYHp9bc8Gq8Lc8s2sR4Jk4KD9LsKfdZ6EvXTRMsWnME7HDqI0wkR3CptUj9sD3lGkwRPYjIJykfxbq44XuNG1RvPYlqDiHJJGUcKox49PBYFKBfQF.LWDfojpRYLwFSPZCCHVLLknQIQgHgO4QsqZM0gdLepsCPaWo76pTtjjm63iXSW6pV6IQFvm4Kky9RVBDni9JMg11mw29Tc9O+xnoQNnowMflFKllF4jll4fll2.ZZtXZZlhlw4ImI052vyCNgmtb5r0lGqMy+m8p4V8Skj4PGDXihwFl4xMOLiL5k4QclzAmgRnLgnS06mqstIgTqet12lDhQ+bso8JDSthj0mOKEFIUjUpgCzmeb1RxLFR8zpheg9tZ3uM4x0N1HxH1Xt3G8nsK+txZ7G7PspgXkCEOIVjNE2OUFFySjcIsDY6ixCjjtGtOG7kKN4LzC+mxMS4+auahHygTF5HRUgeUp7kk0lW0vgYpKZprQdYpVT+1aQ.qRBbNC4McAXpg7BYoqTtY9pTZEFSRXHkzgfYG4hhFGWKUnKzqmpUGLyYSJJ1GSJU5ZYXVrnqVpFDslwKZWLxbtoLYI66GUxNb2..y4XI0nMf.YzIYmTfqAbiaFby4gG4GKA98TCS1x3i+5N6CYPQmKQwCdLxE4wvhUZk8QWvaILrOlRp6i7OmQckArnjb964Hj8Ky9j+Z85ShGzpN3ZMSFhYRU4O3XmHd4KC8+qwLXFNCekx0dFlECicl5NIble+75fq17GuETw4IPV59REMiGofuELUCfhl7H9X1jjKSWilU0yrY0ZYsCHmz8ApGiYViyluajAe4YS+ay2nV+qn1Z3PjEKlrEUa+CqZe9qFUteHU1TsGu.mrISIQtqprifEbGr+Lu2AyM22A6HKF7BzIdPhuK0O0D2C4fOgmk6mT3q842r.8ScEKqIk2jB8xT06eYatWlIldPVfmL+ngCMfvRkOTXktrU5sIIrOiadU7+gKF9geu1M+ngB4itK4tqklxwdXGWaTKxEHadcAIG+Ldgfgv.a1TooSxOfRntioDrUxLftHlGdzHjWRtmoC0fw3MHEK4g06hrQvjYyeQ8WwyBgd73DZEiE0xerXQqWetZHc0D6L0tcbjdgONORuKMfgIiN.xSTEMIbXfSO9AqVHNSHD9cDD8Krg3vwvw5hwgmrRFHG7W7mHk0DiUhTVapxbW1vXcYi0kMtsW1vXcYi0kMVW13CXYCyT2LacYi0kMtEV1vbcYi0kMVW1HGkM9u3a3.s7nu0J72fVjKeOoDteSj+i.TR8.wXsY+t4pp56nCb3mH9VKKQ39I73S1XLVALlq.lmtBXd1Jf44q.ludEv7MKDinXTi.F0IbqHWvwsj+M.TTZQf7LYYVO3ugmYIVD
const var Button1 = Content.getComponent("Button1"); const var Button2 = Content.getComponent("Button2"); const var Button3 = Content.getComponent("Button3"); const var SINE1 = Synth.getChildSynth("SINE1"); const var SINE2 = Synth.getChildSynth("SINE2"); const var SINE3 = Synth.getChildSynth("SINE3"); inline function onButton1Control(component, value) { SINE1.setBypassed(1- value); }; Content.getComponent("Button1").setControlCallback(onButton1Control); inline function onButton2Control(component, value) { SINE2.setBypassed(1- value); }; Content.getComponent("Button2").setControlCallback(onButton2Control); inline function onButton3Control(component, value) { SINE3.setBypassed(1- value); }; Content.getComponent("Button3").setControlCallback(onButton3Control); const var buttonsArray = ["Button1", "Button2", "Button3"]; const var moduleArray = ["SINE1", "SINE2", "SINE3"]; const var bypassArray = []; bypassArray[0] = Content.getComponent("Button1"); bypassArray[1] = Content.getComponent("Button2"); bypassArray[2] = Content.getComponent("Button3"); bypassArray[0] = value; bypassArray[1] = value; bypassArray[2] = value; inline function onmasterControl(component, value) { for (i=0; i<buttonsArray.length; i++) { if (value) moduleArray[i].setBypassed(true); else moduleArray[i].setBypassed(bypassArray[i]); } }; Content.getComponent("master").setControlCallback(onmasterControl);
-
@DanH You're module array just contains strings, it doesn't contain any modules.
-
bypassArray[0] = Content.getComponent("Button1"); bypassArray[1] = Content.getComponent("Button2"); bypassArray[2] = Content.getComponent("Button3"); bypassArray[0] = value; bypassArray[1] = value; bypassArray[2] = value;
More crazy code :p
-
as @d-healey says. Use your variables, not strings.
const var moduleArray = [SINE1, SINE2, SINE3];
-
@DanH Ok so many things going on here
First, the error you get is because what you stored in
moduleArray
are strings, not the variables you declared at the topThen another error, why are you declaring the buttons a second time in
bypassArray
, and why are you overwriting it again withvalue
?bypassArray
should be at the top too (like all declarations actually) and kept empty until the buttons callback are feeding itSo this is better:
const var SINE1 = Synth.getChildSynth("SINE1"); const var SINE2 = Synth.getChildSynth("SINE2"); const var SINE3 = Synth.getChildSynth("SINE3"); const var moduleArray = [SINE1, SINE2, SINE3];
Even better so you declare directly the array of modules
const var moduleArray = [Synth.getChildSynth("SINE1"), Synth.getChildSynth("SINE2"), Synth.getChildSynth("SINE3")];
and then the buttons have the same treatment:
const var buttonsArray = [Content.getComponent("Button1"), Content.getComponent("Button2"), Content.getComponent("Button3")]; const var moduleArray = [Synth.getChildSynth("SINE1"), Synth.getChildSynth("SINE2"), Synth.getChildSynth("SINE3")]; const var bypassArray = [];
Now we are going to feed
bypassArray
Before, you would have done this (temporarily, to show the progress):inline function onButton1Control(component, value) { SINE1.setBypassed(1- value); bypassArray[0] = value; }; Content.getComponent("Button1").setControlCallback(onButton1Control); inline function onButton2Control(component, value) { SINE2.setBypassed(1- value); bypassArray[1] = value; }; Content.getComponent("Button2").setControlCallback(onButton2Control); inline function onButton3Control(component, value) { SINE3.setBypassed(1- value); bypassArray[2] = value; }; Content.getComponent("Button3").setControlCallback(onButton3Control);
But instead, you can use only one callback for all the buttons
inline function onBypassButtonsControl(component, value) { var btnIdx = buttonsArray.indexOf(component); moduleArray[btnIdx].setBypassed(value); bypassArray[btnIdx] = value; }; for (b in buttonsArray) b.setControlCallback(onBypassButtonsControl);
So we put altogether:
const var buttonsArray = [Content.getComponent("Button1"), Content.getComponent("Button2"), Content.getComponent("Button3")]; const var moduleArray = [Synth.getChildSynth("SINE1"), Synth.getChildSynth("SINE2"), Synth.getChildSynth("SINE3")]; const var bypassArray = []; // The array that stores the buttons states (bypass) // INDIVIDUAL BYPASSES inline function onBypassButtonsControl(component, value) { var btnIdx = buttonsArray.indexOf(component); // Which button has been clicked moduleArray[btnIdx].setBypassed(value); // Set the corresponding module bypass bypassArray[btnIdx] = value; // Store the individual states }; for (b in buttonsArray) b.setControlCallback(onBypassButtonsControl); // MASTER BYPASS inline function onmasterControl(component, value) { for (i=0; i<buttonsArray.length; i++) { if (value) // If Master bypass ON moduleArray[i].setBypassed(true); // Set all to bypass else moduleArray[i].setBypassed(bypassArray[i]); // Or restore their original state from the array } }; Content.getComponent("master").setControlCallback(onmasterControl);
And the final snippet:
HiseSnippet 1461.3oc6Y0saaaCEVJNps1ctXcnWrKIB1E1ncoNNscCvqn1wwdvXMwFVocqnHnfVhNlHRjdTzYwnn.6QYOR6QouAaGRJaK0oj53sVr0YcQf4Omi9324P9cnROA2iDEwEV14OZ5Xhk8m43NkIG0bDlxr5rukcQmtG1scaTi98a7Bq8lNFGEQ7srsy88poXmeSK8yaexd3.LyirnKKqmyodjmRCoxE81q9OPCBZi8IGQCSL6GTuiGm0jGvm.vImSEqwXuSwmPNDql1FNV1WqkOUxEtRrjDYYu4db+oti3+ByL+mSinCBHpF6X4BNxzcadfuBwpdsZNhF32a1xNxxx958VPB4LjvcbNf5Sm2+Bx3y0CfVXQR9vdiKCd6jDdUVd3Ym.daZf2scb8DzwxEinv1Mc5vjDwPLDBRBKybs1v5ZNM4vLXxsCwmRZKfFysnzipT4dnGVoR4ZEKTr.DHhjnyvBzfIRIzngPfmhdL5kybwIDYSd3XNCZTZq8zyZmsJeuhEPW3ykYa0+F1t6VkO9cfcH2eR.YNp04zZaU7qtUosb6bXq2CjuP6pth1kATGniUFnpv5w0Td392GczHBBq6VNBKQQPpEIB9MYVPA5RkogJYbQYkeKV.rryg6244c1+YMdJZuWzqgqaK2hEnr.JifFNg4IobFhyLYIFNLRQvBdPIuYr68.zELg.d80lUpFrRVG+yAXlLuXaJymbd2gKrsbMyR3GGQ8FEOWzHbDZ.gvPdATuSI9FuZ9ah30KMuii2NhHmkGWx.kZyIXv2tDolL73BfWf2qOkcRrihIUiuSPvy7Mr.zdrVVAOkuUbs16vRidF0eBNHlsKV3MP.bHW.zNLZJhnLZfB0wTYSbPv.3HrRYyzlcZ530AMbOpU+3XUVQpPbDrQ88Ghzvh93J0PzuKUDJfvNQNB59t2srdluddxKcHJldQK0iJ+ZH5.Mhh4VT2CSsWHYzjlNPJEohiyij.Wgj7X+M2YjfHxx54jgY5wv6.7bWABxMlELoBSLDMTvC0QW81K8K3Ml3Z1GyXn+sJmcvMUvobsDgsC4RRWVoxEdcg7EdSAz6NzvgYNVrqBHhLGVIaJtLCKwlDNfHlkcLahf9QZAJmKVfJo9omgSRLQNqCiJ6NlvtHYKqXhDDvxEiJ3WRs70shkuLaGrnfJUdmXEDKMjSVUg0Uv7puq4w.YIMe2Ld6Oqy9XIVoCGuhfU4XhPRUDn89jyfBbLpx4c1mDcpjOF3444NvuWhE84yek+Z85SWznUcqqjmplvS0II7j0U0S6lvSuUbwdx4B8zMbL6KRBovDN52NsdD9LRGVOXGJQppTw5uVpCTvkZGOVltJLUomwC.Y9oJ2QURCKhJmlLL9AozrkEt21oGU5MJa7tQF3Ex19Pi23BcK5zZ3PhmbAX2zo8O8gup1jP4VFnbSGWPzSWpjFHW2QWeVJtJ8MN98k8FGiW5abz0SB4jGIvLnfhnTN1kDROBx5iR14yhf5nI+beUXMY+M4XQlC81mzFVkYZiKVNQnyOZDxmvjoxGxszAgqvMe17e0274i2oA4VN39dtbV9YXzkFNNfzhcFI.jJzX7K.sgg3IAxY8lJuN2AbFe7HNi5kLn2mHEzSNgHRh8LWPMjRnTjE8bm58IADbxD3up9SgDOr.3IxJxE6r7bwkEu9RGCbQpMinOMNEO2+OOEuOehDtz0AXHQEj4cNbRnKbVpGAPBiAEuC8Yug57PS6Jp1lCSY95F+A7DO3Np11wCtyrAWZkhpWx2lZsRwZkh+qpTTcsRwZkh0JE+CpTr656TrVo3SPkhcWqTrVoXsRwRnT7w3cDh8D7W4Y95ypb4an6AV2L8+O67NGnZil+IucbprcEqP3DwW44on6uF3mrso5JXytqfMOXEr4gqfMOZEr4aVAa91K0FkXTiIRdnYqHzQuV5O9uscKFFxj0Y8V+I7haMR
-
@ustk You missed an opportunity, you could use a single callback for all the buttons ;)
-
-
@ustk Oh so you did! I read through it too quickly :D