HISE Logo Forum
    • Categories
    • Register
    • Login

    How do you change the 'SaveInPreset' by using code

    Scheduled Pinned Locked Moved General Questions
    16 Posts 5 Posters 742 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      LeeC @d.healey
      last edited by

      @d-healey Yeah I'm struggling to control the 'saveInPreset' value on the fly but really like the solution that you've come up with. Would never have looked at it that way!

      How do you check the status of the lock button when the user loads a preset?

      Is there an 'engine' function that can be used or something.

      Thanks again ☺

      d.healeyD 1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey @LeeC
        last edited by

        @LeeC Put if (lockbutton.getValue() == 1); in the control callback of one of the controls that has saveInPreset set to true.

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        1 Reply Last reply Reply Quote 1
        • L
          LeeC @d.healey
          last edited by

          @d-healey I've had a go at this but I've hit a dead end trying to figure this out ☹

          Was excited to try the 'duplicate controls' method that you mentioned but couldn't get the two slider pack arpeggiator controls to work independently using a 'lock button' as the slider pack that has savedInPreset disabled will always reflect the current state of the arp.

          If you could take a quick look at this code snippet I would be eternally grateful. You've helped out this community massively and we always appreciate you time.

          Thanks

          HiseSnippet 1639.3oc4XsraabCEkikYPjRThcPPetYfQQgMZhfjyi9HHHRxRNP0uTsbbypFLZFJIBOhbxLbbrZP.5GPWzOg9Kz+frua5eP+E7xhtw8RNijnrdjwpMAEsyBAMWx68b3kWd3PV2maSBB39HizGzyifLtJtQOlnyFcrnLTsJHiqfK46sM29Hy0Qk64YEDPbPFFodrrCFoWDodN8QksbsX1jglPnC4Tax1ztTwPq0KtE00cSKGxAztZ89tEqYyYavc4g.YRgyi7rrOxpMYWKY2V.iLtTUGpf62PXIHAHiEKyc50nC+Ern9eHMf1zkHeo.pADnHyaxccjLVZEsQGpqS89C5.Dx.WeXJHUTJ3l3cnNzA1GlJVR0f4POzyGFKLK5UPmd4SN8VPidKFQukwMr8odhgsDMMUiIH9srfo.cZE0WzB+tAdCNzClHWWqiHa5CuLviUue972x7d4yu1CxlIaFXhHPXdrkuYCWpCwuNLSTv7gl8CPahXCdWONCdY0Uz5yJR+G5sKT0zLTH3ro57vtrxZYxPYtTFwrUHyVPAu3LsfKCfO2cUVX2lD+aAH3FRVKyKylwDdnsLWcXvjnbnr8UWy7gOzrvZOP0I0Op+7pLYzBct.IoTgeCKW2lfsUmD1q8.MpsKWP1isJvfLog3Yd9lZ0ZhsEGJWh+DaVtpveVNN13OpiP4wn0e3oW+ou7vNZZQqibVMFUrmGgMspRT7bor9LlU.7BU04MhqNGl7PTnPLKVKahTTWW7vwRXgL9Xbg6mCdNtzF4x0pbE3ueSc3GQoRQXp.JUDPWKFnxpIbEHWEOrB37X.OOoVEILvphX9CiIOhufJSWFUHGCpUQKwRiqPBNRv8.QmAEqvZLQr9PDxa5xsDTV6CnPZUh+0w5lJfNY.7+v1E6oykXBDg10AMHBTAV1m+h.hOpY69xfouDz2+P5.UP5Nz5ub1Oc1nVWWZ9We8YJypgowOiUKMVQN01v5XRThZkuxT3GRt0flTBP9SoQYgbvXVkEZQNLdaaZcL2G3kTMejF2MTR0vtJetS1LuB8BpinCTnZ7mFHTGBscGg7MrgJAMHqiu.EVCy3nc0x3u1qnW+52ZNxZGXOMR61TKXASgQP6RIFs00meOVCskd9LQK.lKpwhlxkJzSXrlMF8ssZRbU.eYr5+pQH136.T5I+yOB4JA4DvyOD2nzgUqTa256WsQ0CLusY0cKUd6pUPWj3qOlL+dswzomTLBmOZLbpTqwTA5MsHcHZ48zmudYLZYwpu7H1cz36UmUO2p1H7bY6Q1hN0nRjoRlD4LE.WNA5RWCGwhxSSYJAwHKdekFwEMDQ0qwxSvZvFBhWrsyEjkJljfbErLBJtLerXIU.ZbDcJz3zGkjzADEtuXKRuf+NYDXv3QHNaw3MOe.9zwyFKEG.nLuIuL+DUH.gBxyCIvW9NvbxGPZTIKdOaAnLruEqMY9FMowM5D1pk6Lce1aSCasQ5RO.VDq0vXQ6hra8aBuCIfb.UzKw305yJWJWtubK.u6DVO58Di2MvaSXsEcRNZGIQ6vuFP6o75QuiRVkwxX3jCLFwsAwkXKkmdyEFSLPuOduPgWn3envsLdm5UAIP+9AbrTPBK8utLPUYNSIL4KhF+vKvQn3NgtRsY8yUIOLYbCvG6Nhns7PJr.nBQej9V4vVIktKiqSE1clLeWXB7U9cxuk46fsCq1pETcLjrKh27ou8OmpNUtVDU.sU3rbpKSPQj2S8t42BZblOlvH9iu+7nWovukzqTvKwWoPjD6A9Vr.OdvHAtutWftwmD.GTl778kyxi946V9SroSezlvfbh9zvRD5qJWJ0kGxDiTdjJwyIWfq1Xw+Ue0Fu6DGRkL5NgLnQ8wteLPIj10ykTkcLryEXQxwa.mWrkUnqnu0Qqq2gy3dc3Lps9j99DgOscahuN2m3.pjPH2oZfkaVbeXO.K8B3Oo31PgmkOjmHyYtnPxyEyZ95CvQz0TtXz7+Fh5o9+on997P4kYriETnJO2o73CfVJ7otQ63KukIiEj5gQumGEc3cPLk4nd4L3ItwBx2MharP+FemfQWKae9yri9lFYs7kUVfwMSc4xow6He2bvESgw4ykG0ETDelssLceaH+LYeVeN74NygO2cN74dygO2eN74ymCe9hY5ibynRgBd2nkhfg5UitUKipLKnRVU0i9KGaimXA
          
          1 Reply Last reply Reply Quote 0
          • L
            LeeC
            last edited by

            I've probably misinterpreted your method to be honest.... Would be ace if you could steer me in the right direction.

            Assuming this is all possible to do in HISE that is ☺

            1 Reply Last reply Reply Quote 0
            • d.healeyD
              d.healey
              last edited by d.healey

              Ok I played around with it and had to make a few changes to my initial idea, but it works.

              Firstly the lock button needs to have saveInPreset disabled, otherwise it will reset to however the preset was saved and then it's not going to work.

              I've never used the arpeggiator before so I didn't realise the sliderpack connected to it via processor ID. A control can't have both a callback function and be connect by processor ID, it's one or the other. So I removed the processor ID on sliderpack2 but kept it on sliderpack1.

              So now sliderpack1 controls the arpeggiator and sliderpack2 controls sliderpack1. This means we can hide sliderpack1 all the time, we never need to see it.

              When you make a change to sliderpack2 it will be passed on to sliderpack1 through the control callback.

              Now the last piece of the puzzle. We need a control that has saveInPreset enabled so that when the preset is changed we can check the lock status and update sliderpack1 or sliderpack2 as needed. For this I added a new button called btnTrigger. You don't have to do it with this control, if you have another control that is more suitable you can use that, you could also do it in a timer but I prefer using control callbacks.

              HiseSnippet 1907.3oc4YszbabbDdWBNxBvFRjpbE+HWlhUpT.kjAAnrUjeUBfjf1HhjBEAMku4ZwtC.lh6NypcmkOrhq3eB4mfuje.4efpbMWxOEcLWRI2yLK.F7fPKgeUUxd.E2dlt+9lt6omYa1Nh6Rhi4QV14O9xPhk8ag5bISLXmANTlUqcsreSTinv84tmh2xZ6KCchiIdV1149B4Dryupkk02+ee5e+Qa636vbIohTOmvotj8oATwXosq+Xpu+dNdjioAFy9Cq2xky1g6yS.xjCU0Jzw8Tm9jCcjSaEjk8MZ5QE7nNBGAI1xd0s4dW1Y.+bld9mPioc8IxWpY0ALjV7dbeOIikRs1Y.02q8vEcrkkMp8XWPNsK3sQGP8nijO1UrlZ.7XML8G1qrH5U60SupyidqXPuU0zacTG2HZnX7H5vTKlfD0yABAlzROWqU9mqh1gCyfIpD3bJYuH3kQZT5AUqdO7GUsZ4OsXghEf.Qr.elSDtiO0iD0FhD0veNdnA5SD6vCB4L3kRaXLmMj5OOs2JCZu0TZ6C4bcSDBN6JUd7T1nLvaJymxH3dILWAETiyLrtzBQb+RtCU+d.J9IjxEK77hEvvSOdDtDE.q5mho3OCOZlRTOLIPar3Rkggu6cKqUJUW4iginRLQnesA3k8HWThduIsmdzSjLngnDsrbsKMx2Urv2oBBYvcIQIcYsiiueWPZo4sl0Q0hE1byiin86Sh.pnF.KF3HvmCaHwQIL74CHLbXDALKlFicG3v5S7lmesqfkZpE6VyS6gKMNJIWLpkboxkwatYqdpfrDKByA1b.XkeRO4VURYgzqu4llYTfVhADbWdbLnFwOlLoI8nwo1bp3zlad.rC.GqrUnxVANB2AFRpMd1SmUXxsEjWLElSuplW9gY9yBxPTYIYIWYbP5pRUlILJwvHLeHWPdBqT4BOuP9B.lSOTudycrTi4Shl6vxB+QKRwRrjftjngYRCmHTAbxRrnrUh0U6cLlHm0hQEOIjvtpyErRcoxRvorBfWnJ.emzBviiWVTnVaQjQ.zRQciCCq64Hbrr+8nZOnh7owNvOM2G9431vOeYiczXp.JmFnakBz1pMOJPdKz3X1LXXY8Us1UBCT3Ok+vZJjDInR2k8tjyfCj0mhjGsKI9TAOzx9MFky.GiHROBTi7d9bGAk0+XJ3Vk3eajonZVWLB9ue+5WZxkTBnQ61vwrxxJaGwOOFXd29COoO+Mf49ejJPEjfwR+Gu5u8pIktkT7+5EuRIVsLs+AjZK1FxPaGmyHZG0FeBVDkPt2ngTmwFcECJSjimQpLQSqvrismyY7HfWxKrLwfPs.fpIAJctOr4z5bpmXvHuxO7WqOfP6OX70gZGV2xv6eiqQB1XOu0gFd9WDVObXdbKOYNDb8MR+9TGXiCjVNbKhcNSfuYlAdKyP9YF.u1ypGCgfVLcjVhftdZi.dBy3FfqUOXzMGgmG9h.Gi0xCmvgfz7pXJu12oKwWQoahT+8DIfO0zMbQcA4BvBuGpSiSZtaqCaeTyNMOF+A3lG1X68atq00AGyUM9aMv4kCw48mAmca0YVftwB1YO9bRCzpFZtpddJZEQpajmp9z9cS.WMakRLh.erAfs+K0sl8BxEMyoT29bprrItWbtIKZmKaEsWXI40yPkxagzrHUzr0JyfMJhNRU055ZB81kzBlxaHHHgoxlxHqUOKF4MQRKn3xxwh0TFnyozqfFu7QYwc.VgGIdL4x3eJdDXwDRHdOlw6NsA9iy5MVK0.PJcW917KTl.pSQdVBA9byQhy9BxfJEQOwU.adNRdEyka0jG0YPRud9KT8EewA3vVR.8XXCqw.yXsqy8Gdc3cBAp0PEWlY75c2saToxG+3cqT49Is0umY7tCZeBquXP1Q6TIZm7mAz9Zda86VYKyXcD745LFwuCwm3JKO85SLlqgdGzSRDgIhelL25nCZ2DJAFMzfydAwrYnaKMTSl2UXlpSTuNsiAqgNf6k3KqMa1LCYGbRG.t98DEskcFfECYHlqzqQGNpl4FvjU5tNpME9Fs4y2UlCek2b+WX9N53vl85AYGiI6pn895ks4PKGUtklJPsU3K0UcvSQjem5c7SgZb3ufvHQyd9rQe7fm+cV6iWXl6imtD6wQNr3Pd7DFdXcuXSgeULYuHxyNRFkm7CJbhl6Pu7Q6AKx4pSGGQRjJcY5agBoG49kngcq9aP+D+4e21O8hC4xFcmiGzt8LMkFpDRCB8IMYmAmbARjb7NvWv1yIwWLT5j40GvY7vAbF00LneDQjdiWCtO2ETCgPdR0HIuc8ify.bLSf+C02GR7bh.+DYI8E0xtuXQwq2EooKVtYD++FE0y8+mE0OhmHauxANPhJ7UYpOe.pkBW0UehuruW1qHqGpeup7ccwTlm5kWAOoCVS9tc5f0FN3uJXD33Fw+lzFMKykuoRBrtYp+iN4QGHeGOpUYHT0JUsBfJheiqqzc+Af+Y95r0Rny8WBc9vkPmOZIz4AKgN+okPmGtPcjGF0HQvCzaEAAsap6ylcSc64UMW3GA33xj9F
              

              Libre Wave - Freedom respecting instruments and effects
              My Patreon - HISE tutorials
              YouTube Channel - Public HISE tutorials

              1 Reply Last reply Reply Quote 1
              • Christoph HartC
                Christoph Hart
                last edited by

                I would recommend a totally different approach: having a second (hidden) UI element is rather weird.

                Just take a copy of the current values when you press the lock button and restore this array in the slider pack' callback:

                HiseSnippet 1847.3ocsX0sbaTCEVaRDPbvsIcfgKfKD4FblVL1sPggxOt4OvsMsdpSCkggoi7tx1hrVZQq1j5goyvvS.uC7Dva.2yKCWxckij1+bsiqSlhuHSzQme9NGcNGcV0QI8YwwRExa0CGGwPduIt6Xgd3NCobAp8tHuKgOfFqYJhiz1iinwwr.jm2xeigf2pqfr+9mudaZHU3yJHgPGI49r6wGw0ET6z5t7vv8oArC4iJw8G2psuTriLTl.3YYbCTD0+X5.18oF1VBi7ds8B3ZopqlpYw.OaKCF2cn7Tgi+i3w7dgLyhlntfhbjQ6LjGFzIyWiQHuU5T34K6772Be.OfmSuHBrtcCRgDkiAdKMIjVYBH07rfz9xv.iBNC3sTI3shCdaf65q3Q5hcLXaMbaAb3zmBg8xvxwKZo5uNdGIvgPWeD8X19JXQtD0tYiFWi7IMZr0spVoZkO5iHGNjGSNENcHGyXQD8PFYyPo+wrfMImPCSXwUqnXCHNZcC4AL0QV5juj7C+nUMvYXrF3VQb62ANDaBamgiAL8NxQQRArn1lk3YSCLJj9dfM1NQqkhyT3BV1z4BUqvEgbAizOQ3q4fnRQASFknjg07yzv0bN0VUq7KUqPfePHXmPFXbim6bRGKjPdr1wyY66lcqVYUd+ZYp0PIU0YpWFM1pc+DkBfPdXsDOeGrKU7AZxOk.wBMbtYkfpTzwvoidHABCVSWaKROlOMIlMgBNkQNUlDFPjQLEjWBQAqFhgBIR.USMqD0qWuPpo8p5JVLScBqVoiHS7+9IibThqs0V2pPCE+WeopFGBJMtEgS9BxbjGX3pWcqBIKEqNCPEkDO7EQTIFtstFGPUtVdl8+dV0JOyle7xSipGa1xlmrCMLrGXiZyHG5rS2JgsEJeaWIQH0C4hADd+x4clLNBTNxFEoG6XGxrlQHIjIF.4DeIDvKEJULchRjmUNWqQ54py3wlrNlfBcrBxM46W380KR7dol5PSRdZHzjRXslC3l95t1L8fXGWAdqMsF3HWb+gTw.XCtHf8TCXGKSH9gbPR.oTRrUSYY1OpMQpxkMSYfqnAsmV4jpCHsF5WCDIQlLbc8bwZazEDw8owLSMjs7qGDt.6P6ISzthHFziJvxTtjwRC+9CY.5.yvsGbTQpgC41JXd7mmGSs4AYmbeU9A2j8Jtiw9ld5FEZLsqWA7uTMXuO3DlwENgKShCGOgj9xHNKXhB77jPSFt6Lb5bozJmm4NHmWMyD8smcQyzUBYUMkJWtuTydfn1VU9kJqVApVews52el6kpvPlZlaaFrPMOAqIRF0ioxJHyXDtscxqyWawtN22EiJwnTzVv0OHhktt3BeydNuNa2FnbmsLoBerLUqqMC1JHM87DnzyPXxBuT1AOUamq3JoyUTbZg3.NqhKc7grQIjG1yCTl4BDj2aiadcHAq9C291ve+lcqW+aUcPnG0dWy1oFBrIfC3RHM2DM81ExV8YtAZVEuKK9XsLBPcdhEx60OGv5o4CO156aMNewe0oUTl22NvLB6sUQrAC3T3jEN1x0PaSuE2Yxo7.8vhYQG2BUBSXGltTJlb8Bs34MwEMGKAGTY3f3shomvZK5X62XFOqrxWSmN9oS46GJoZn+7gbHMyXhKiKSprSiduRV4WEsRi3tv6kwNyssRdJbONp2frIqW80.1+WKvzrQET+ym+6OeRpW2P9u+qmaIaOW89CrsG0llT8tfWkdu4mSzpD10x2xltqx2rOMLtztlj83oIaJ8bhDOsBomHU.xLehvjRByS.nMYjUna.csdgyxneq0PFevvhu.okrEZ54+qVNKI8SelHuYhw9WddeIRyE+KQJUZtQdo4xmY91kvNTjRJstr36sPKfNphenMwXBUf8lq3tZlz7QyDbZVTJsbErxBpf0vFosX3b3.kTv5VEz8X9TPvaACAfFjJ8cYiO+AxIcjHFK3tBYuBHr1rDd8Tggx9dxskO0JNzhi8yIL3KlyIuXNRIHTE+.eMTF9PyvRm+yxUwcGlzueHadAf4eQAz2hMheHzLqzFSoM2cFuKt4MqO6emC6cDCFbgqG+xs2YbG0BZoqfumc9rE1u5erwNGcGvNOV1wsdAyE1.uCLuqfE1kEx7MMflepvLUx6fePhNJQ+JPUafOnydPyMUlxJTxRKrRtrQI6IBlREqaeFnodhi0wGHCRBMcaK+5KlmYJcCXFtIZCadJCQLjKT9YnNGOISiY9jLMmUe5EDtaf6v09CmMdWZF307ZO+Oi27K31qeeHin.rqf2+wuZeMqYBkGBe5DL9xATshCSuXu+.lt.564RLhyRqRW2HqEVWlHvt34vuzMalkHa1rY1lnQTek7I9tzRySn8FVJ.lD1WObU7Al0jhYYwMp2.MhGvehuuIT7g.1msLW+BHyMt.x7wW.Y9jKfL27BHymdAj4ylqLlGU81IZ4HWYBPnydtYL81y8BD1Ik+OjXiR0K
                
                1 Reply Last reply Reply Quote 2
                • L
                  LeeC
                  last edited by

                  Wow, thanks both for 2 great working solutions to the problem.

                  Pure gold!!

                  Hope you're both good ☺

                  LindonL 1 Reply Last reply Reply Quote 0
                  • LindonL
                    Lindon @LeeC
                    last edited by

                    @LeeC

                    or theres this(a combo box listing arp presets, and an arp setting save button):

                    inline function onSaveSettingsControl(component, value)
                    {
                    	//save a setting
                    	local arpsetDX = ArpSettings.getValue() - 1;
                    	//Console.print("index is:" + arpindx);
                        ArpSettingsArray[arpsetDX] = Arpeggiator1.exportState();
                        //Console.print("arp settings are:" + ArpSettingsArray[arpsetDX]);
                        ArpSettingsArrayPanel.setValue(ArpSettingsArray);
                    	ArpSettingsArray = ArpSettingsArrayPanel.getValue();
                        //Console.print("retriving:" + ArpSettingsArray[arpsetDX]);
                        component.setValue(0);
                    };
                    
                    Content.getComponent("SaveSettings").setControlCallback(onSaveSettingsControl);
                    
                    
                    inline function onArpSettingsControl(component, value)
                    {
                    	//load an arp setting
                    	//Console.print(ArpSettingsArrayPanel.getValue());
                    	local arpLoadDx;
                    	arpLoadDx = value -1;
                    	ArpSettingsArray = ArpSettingsArrayPanel.getValue();
                    	
                        //Console.print("returned value is:" + ArpSettingsArray[arpLoadDx]);
                        Arpeggiator1.restoreState(ArpSettingsArray[arpLoadDx]);
                        //Console.print("num steps:..........." + Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                        ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                        ArpTempo.setValue(Arpeggiator1.getAttribute(Arpeggiator1.SpeedKnob));
                        ArpSwing.setValue(Arpeggiator1.getAttribute(Arpeggiator1.Shuffle));
                        ArpDirection.setValue(Arpeggiator1.getAttribute(Arpeggiator1.SequenceComboBox));
                        ArpOctave.setValue(Arpeggiator1.getAttribute(Arpeggiator1.OctaveRange));
                        ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.StepSkipSlider));
                        ArpSteps.setValue(Arpeggiator1.getAttribute(Arpeggiator1.NumStepSlider));
                        // start it in the off state
                        Arpeggiator1.setAttribute(Arpeggiator1.BypassButton, true);
                        Content.getComponent("ArpBypass").setValue(false);
                    };
                    
                    Content.getComponent("ArpSettings").setControlCallback(onArpSettingsControl);
                    

                    HISE Development for hire.
                    www.channelrobot.com

                    L DanHD 2 Replies Last reply Reply Quote 1
                    • L
                      LeeC @Lindon
                      last edited by LeeC

                      @Lindon This looks interesting ☺
                      Would actually make a lot of sense to include the option to 'save' an arpeggiator sequence.

                      Will take a look when I get back to the machine.

                      Big thanks for this!

                      1 Reply Last reply Reply Quote 0
                      • DanHD
                        DanH @Lindon
                        last edited by

                        @Lindon Reviving this old thread. Is combobox still the way forward for Arp / Sliderpack presets?

                        DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                        https://dhplugins.com/ | https://dcbreaks.com/
                        London, UK

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        28

                        Online

                        1.8k

                        Users

                        12.0k

                        Topics

                        104.2k

                        Posts