HISE Logo Forum
    • Categories
    • Register
    • Login

    Slider value snapping please

    Scheduled Pinned Locked Moved General Questions
    10 Posts 3 Posters 471 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.
    • orangeO
      orange
      last edited by

      @Christoph-Hart Can we add value snapping feature to the slider please?

      For example: There is a knob with a value range between 75 and 15000.

      The user should be able to choose whether these values ​​are continuous or snapped with a switch.

      So if the user selects snapped values, the slider will jump to the previously defined snap values (for example: 75, 150, 500, 1040, 3600, 15000).

      If the user selects continuous mode, then the slider will be like we all know.

      develop Branch / XCode 13.1
      macOS Monterey / M1 Max

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

        @orange you should be able to do that with a broadcaster attached to the slider mouse callback and then round the values in the drag callback.

        orangeO 1 Reply Last reply Reply Quote 1
        • orangeO
          orange @Christoph Hart
          last edited by

          @Christoph-Hart I didin't know that. Is there any reference or snippet for this?

          develop Branch / XCode 13.1
          macOS Monterey / M1 Max

          ustkU 1 Reply Last reply Reply Quote 0
          • ustkU
            ustk @orange
            last edited by ustk

            @orange Here's an example snippet using a broadcaster as @Christoph-Hart suggested and a hidden knob (otherwise it's glitchy). But since my solution can also be done from within the knob's CB I don't understand why a broadcaster should be used here... Or maybe it has advantages I can't see and I use it wrongly?

            • Broadcaster solution
            HiseSnippet 1373.3ocyW8nSabCF+NfisbaqZUZO.VQSUGBHjPg1oArERfrgJPiHzpIUg5btyIwMN1Q9bBMCgzdf1qvj1d.16xdC19r8kbWf.kFoIsHQD96u+99i+7WpKEgj3XgzwM24i5Sbb+buFi3pNU6fobmiNvw8QdmfiUDIxRpxn933XRjiq6h+flfatkbLe96uuBlg4gjTRNNuVPCIGS6QUoTqW9ETFqFNhbNsWFo2p7QgBdUASL.vyhdEc5iC6haSNEqEaAOG2kOLhpDxFJrhD63tTEQznFcDWxsx+ZZLsIinOTxoAXHK4ZBVjFwZpNU6PYQ0GG2wNfUpmlEVzlE9JuSnQzIzSyFeogAJUir4C2ElFdKNE7JcWvaFPxMCjVxBoG60HTR6qR4nwym4cDGJNsvPZOKTrx5rvWurWUAHAWUnGtKolDNLQifmUr3ZH3qU1wGjJVvHEBYDrL.H3C0hXEZHVhh439UTbzdnw1pMQUUzqufCGBxmvOOnUpRufKZV5NUwv81Jr48pvl4mFWCAoeyy2dMTosg3XacvTp3Vv2O0DX.0hEu.z3lwRehrRUP2C4sobHjkDndUQJvQglV8fq7Qn7zn7eKx3WTCqR4WSSGKaGCbdS9vwnK+Zn7jg5+4B+q0PbhSJfUJbXmyEShjSDChIGpENNvjD.c2mwPUwLVSncOVarD+gLBiNlBfhCtWa5r1NJZLqf7SfnUaTWMtGhYCHZK1Z.OTQE7fIXdMjAwq3ekeNZKTf4TgHIt8J94.ZFhIEVco30ZSErBvzvMWKgDEP2q3NzcGVfQ3sUcVuzNzUWUKgUDiIl3vLFA8cngugdA5IOAMS16pYuZoKLlJwV41XCTDoETuPpNDTOZjM5PMIpKIDNRcovVbo71IAtUQcUW0QRh6.iAfptw0qhBr9.stgvJar4NVwseemPe28RMlEe4xY5MKDOVHi8RrFgEStSozg3Td0JRXGLuMIJXZdMgtztVJW6m7k9uDOXxR2vEyJ.rFcFNBr005tWj99BjrOGxxllHk.o6B0YcaFukTzymxY5Zw3FKjfaro9xqTvx1mYTxzmMdFSeIEtRaoui+063OA2IpO9xPvzV0z+qw1ORiH1ALYtYqA6w6WKyDD6E6iEgX1wBQ284Q0HDlY3VhvEjj15qPxZiufjGtBb4YBEVNpACbiL6sm1qgDMe2JWYtja7uFz2xAIF2B2zOYxUmJTjWxCLYE+q8Q2jUqVyjWRdfAW3mEa8yox6Sw.9fdMIxr0DsfvaLS+v0xOrGtBs44LBJ3GwopW1mjb99e40IoPAO3sXBBg+SYdt6QIO2YKBNTvHehmoYvw.9IqMf9sxNOXkKcCk+ye+tUtx.kRvMJmyKYR3MTG14w4UGc.Vg0uYmDMPDBChUTchz8.xPXAH6K347NfD2UI5aB2j6G.4OX.+9INr76JOJ8fnLLFLhQpKho5Bc1bBzT2uA8W.C64UpPQmdYVU6ONqbObpQO9uJCSVwCX1YDYEy4i.mk9eBN8d.kwTi9qcyfzetUYE48fMV1qwo6WGVU8VqgAK.JhFvvpo2JTuJbBCc.lcUL85VbHvGkss4iXUwh26phOTH9Xu5TUXmYiwElAFgN5+KvXxB1eg2gsZQBUo.bIuZ+z7tM8Gv8mIFnfsBNAqjTnx6c5fdMfeiQHA7NmCOfBzbWPOOxdtn9rNCzfviLG9G3SByR5ytILKMloSObnT71P6rD8J7epgBfIt4WujC9YTvYzjIPddEMs6Qz2FFpC+0gQjyVmMmCcd5bnyVygNaOG57r4PmmOG57M2qN5eH29CThd1qC.g5GZFk65dHGCcVltPm+EDw8szG
            
            • CB solution
            HiseSnippet 1258.3ocyW8tSiaDD2FvzF2VzcR8AXEe3ji.Bw4f6pTf1.ARK5.tHBEUoSnqar2jrWr20Z8F3ROgTefZeC5G5KPeW5aP6rqchcfjbbQpRMBrxty7a1eye7rSZJ3dj3XtvvrvkCiHFleoUqgLYu58vTlwIGYXtl0Y3XIQfR15vgQ33Xhugo4xeuZCyBqXn+72e2g3.LyijskgwUbpG4TZHUlsayZuhFDz.6StjFlS6cpchGmUmGvG.7YYqxFQXu93tjywJ0Vxxvb0i8oRtnkDKIwFlqbH2eXqd7aYI5eEMl1NfnV3ZzBLTx1M3A9JFq10ndOZfeyQ9crAXklYQgkShBes0YTe538yhFOQK.kgHe7vboIo2xSPO2YQuoPIybTZkDJ8TqVdBZjLShhOeg0ILH4zACg87TIQWikV0xpNGzfIKEh6SZHfEiQ37hxk2DAOJV0FzJlGPJ4EPvBGXCaHWDKQ2fEnXFN5PICsOZjs5Rj04gQbFrvY8T4qCnx.8JFus6Lgnk9P.UlKfJqOIutAz9Mub2MQt6B9wtJmws7NvymqcLX2xkuFPXu81nef56SXn9fYror.Jif5Lf4IobFhyzzQcvBdfi2nScS3TBFPJZ+A6BzNHmT+TwrqTBbJVzt.HqPGt.4P2ubU5d2TJfv5J6skaU5Fa.x0JngqMF5aQ27F50nm8rDii1SsdC2qUplnaAft9jNJJJ6QPgT+TUaSj2R.mPdKWmShnrtIhh03B3d3..ifD2CJ4gni9n1.NZ8Qf1RuQwsqTUqu9QFy1a+LrZ1TnfNpWJdj+pQmfkDDSlkNJuI2IjnfWOLqKw2Iuj1BBtud8c15+g+RLrJPbeCqyEUsmlAuy9tp15jnR+zDYcbPPanChyj4WUMjtj3RH3ppGPRNZPbRvNIRzQvCmQURk4VkL5snHAEJZGw3TtUY1bqx84FTtRRdEJW8thrmdPibui3AAPI4TUd+TNu+AL+FDRf902TkKIHcop92MR8Cm08E3aufKwhgsBfiQr9licRmtah3seWwObmxDiCnO3.RMdBcy9jKVcNWRdMyQGUruyFceQc5LUYowg.hXphUWXHlGPG1fv1DQ9bhRQnK5jslW8w0Z1KINmSQN6DFU95HR554e2hQZhBZoubJCguI0MzWKsgdRRvfBF4yrzECFZxCWLt5SVK8dzGMX2wfStU82+iZyD7gCjRNSCtfUZys6AGtU23GO4HrDqtUJ0a.OLhHjTUfz7HxMvU7I2QUv5HRbeIOR6toue.a+Qc32O9.q8tZCyVvqAc+7CHM4wTUhdrDzuUCJpiZQ+EvvVVtkJaDlaXj+7hZg3Lid5eUCZnhGDjzJIuZFeB7z8+I7z5QjFyL5u1OGS+4N0jj2C1XUqVmePSXXrGLnALhC2eP.VN4bOpg8REnbv7CanFnfAN9v7kMeBCCUdtCC8Xo3SsZRkd8lNGWZJbDpn+ufioiP9UVG2oCwSlQvUrZ7SK57heji+B9.ILLvYXofBYdqyGD1Blh1i.mNiAWoB6YtjpORx5xp0pHPKByWu3efOoBcUqMSE5NRnQH1SveqWRuD0PpetdGfSL874Efen.rFMtCjkUYc4tO8sddJ2eKnE4zwTYAv77E.yNK.lcW.LuXAv7xE.y2LWLpepxACj7vjWGfMZdrtUto4wLLTYoqBM9W.7ws0HA
            

            Can't help pressing F5 in the forum...

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

              I don't understand why a broadcaster should be used here...

              You don't need to write a callback if you just connect it to a module parameter. Also it's a bit weird setting the value in a callback that reacts on a value (it will happen in automation too).

              The broadcaster just adds that functionality without messing with the original function so it's more modular and reusable.

              ustkU 1 Reply Last reply Reply Quote 1
              • ustkU
                ustk @Christoph Hart
                last edited by

                @Christoph-Hart said in Slider value snapping please:

                Also it's a bit weird setting the value in a callback that reacts on a value (it will happen in automation too).

                Yeah I agree but doing so in a broadcaster also creates glitches
                I wanted to force the knob's value by snapping it but it's glitchy in both solutions, hence the reason I used a hidden knob.

                Of course the broadcaster spares a callback, but just using a callback is easier and less verbose than the broadcaster alone in this case

                Can't help pressing F5 in the forum...

                1 Reply Last reply Reply Quote 1
                • ustkU
                  ustk
                  last edited by

                  Another simple solution:

                  HiseSnippet 1042.3ocsV91aaSDF.+bRcY1.SLI9.bJuxAZScXsaHpPKKosPzncQ3RAoopwU6KIG47cF6KgFPSZe13SDugWCO2YmXGHMqDI7Krzyeue2y4mmyCRkgzrLYJxx4x4ITj0GXGLWnF2aLgIP8OAY8P6yIYJZJNWU24IjrLZDxxp9WoUX4rCx77GOqKgSDgzRUHzURVH8aXwLUo1AcdAiyOiDQujEWw6C6zOTJ5I4xo.O0s8QIjvIjQzKHZ2pYir18zHlRlFnHJZFxZmtxn4Aik+hH2+qXYra3TsPaT.jnb0mI4QZh0ZQ8Fy3QCVruyPPVFTVEpmWE9X6yYQrk5KqFejw.tLhp0CqZqhW8Uvq8cg2ZPxpBR6jizirCBSYIpRKZdde69B3vYHAJ6UQI2WTsuutcOI3gP0JlLgdVJHrLBum36uGFd07XWvqLIm1JjSIodfBW3rHSgmQRwYBRRWk.+k3E4ZDU0SFmHEffWiB6MfnJC5EB4MsuyPLVar5xLC79UO8n8vsOBv5HMas8ODd+XCmfVe+qgHLw1JiBoIlbai8vyZwohQpw62VmP2CN.+0rnHp.OA7zkI3LAEObpHTwjBrTXRflqTI2KbATPdH7ozlt+lqCWFR33goze9XWGWG1PrWwlTuOtR6mWyltNNZW.rm8JSr.cNTdFspA+qweJ1CbXIjWi22nuI9S.C53vGjWtzIOeS0roYgWbpjjxfplNmf92bbYInXWziv42.MKdqt4LkCc8H.fG28xKVSwnXeswxQkJNLJHIf8qzFE1wOC2tkO9Kv9s70k+BeCGSDinQd43tn1sVfWEfbjW7TgyKjJ5KEdFdbeiK9eZZ3v0ZqHsbZ5ZMqm.kto.8DSiuglVsZncDZKWsWe26WudXd2PEGkh9Bl5kIzB4MOrBUzNAyHpUPH3pxLg3gESHB3rHZJhAI48rMGGHC7ESZe6u+mOnC5tBt6TkRJLA6XWbzrR34OeW+SHJhdRUAP.jIzTESWKrNgNCF6mO2xw9DZ1DkLwPbwGWP85cx7sKWvN+Tm4kBxNPCBHtqcAKwPyNmNPlwzGckXZ1kKWP66w9rbIe6jJK4ONrihdqFZ6fKd9.3Fr+0zY3dAYzTNQs5kE5aHKLnQq5DZ8TXAf77p2f9e3FD+MdCx8EwGYOfoBGudFqsFF0e38+.iE269g1mNbHMTUB3N1m8Ca6kruik+akSULwnyIpTFbxaewz3.3WOBovpKDvbbPmUMcOWtruVVWABnhHiveAOEFaqksJL1dgQTLILU95v7lM8M6OvnAXRX9oFG3uq.Y7xVTaaXPp9SZ1qCC0a+8gw.qOlOaKh4waQLGtEwbzVDyS1hXd5VDymuwXz+e2ympjw4sCfhAmZl0YYcpf.eYY9JD82ok7Df.
                  

                  Can't help pressing F5 in the forum...

                  Christoph HartC orangeO 2 Replies Last reply Reply Quote 2
                  • Christoph HartC
                    Christoph Hart @ustk
                    last edited by

                    @ustk Yeah that might be the best one. I would suggest to interpolate between the array indexes if snap is off like this:

                    local freq;
                    	
                    	local idx = parseInt(Math.floor(value));
                    	
                    	if (snapBtn.getValue())
                    		freq = v[idx];
                    	else
                    	{
                    		local lo = v[idx];
                    		local hi = v[idx+1];
                    		local alpha = Math.fmod(value, 1.0);
                    		local interpolated = lo * (1.0-alpha) + hi * (alpha);
                    		freq = interpolated;
                    	}
                    

                    This will retain the position to the snap one.

                    orangeO 1 Reply Last reply Reply Quote 5
                    • orangeO
                      orange @ustk
                      last edited by

                      @ustk All three solutions are great, I will choose the latest one. Thank you!

                      develop Branch / XCode 13.1
                      macOS Monterey / M1 Max

                      1 Reply Last reply Reply Quote 0
                      • orangeO
                        orange @Christoph Hart
                        last edited by orange

                        @Christoph-Hart Great example! Thank you

                        develop Branch / XCode 13.1
                        macOS Monterey / M1 Max

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

                        50

                        Online

                        1.7k

                        Users

                        11.7k

                        Topics

                        101.9k

                        Posts