HISE Logo Forum
    • Categories
    • Register
    • Login

    Lindon's interface has gone mad!....optimising a massive UI

    Scheduled Pinned Locked Moved General Questions
    21 Posts 5 Posters 114 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.
    • LindonL
      Lindon
      last edited by Lindon

      Ok so I have a plugin with 12 "pads" (yep its a drum thing..) and in each pad there are 3 "voices"(sound sources to you and me), so a total of 36 "voices". Now each voice has controls to manage it, including envelopes, LFOs, velocity modulators etc.... so if I build out an "editor panel" for each pad, then I end up with (roughly) 3,000 UI controls, yeah really....each "voice" has 15 modules in the tree...

      So I can either go that way, or....I could store each of the modules involved (modulators,FX etc.) in the presets for this instrument then, on opening a generic single editor panel, go read the values (.getAttribute) for each module and set up to edit these. So a quick count here means I'm saving 540+ modules in each preset..... eek! again that seems a lot, but Im saving about 2,000 UI components....but the "open the editor" code is now quite complex.....

      Has anyone been up here in this rarefied air of "massive module counts and massive component count"?

      Is there a preferred way? Are there any gotchas?

      HISE Development for hire.
      www.channelrobot.com

      Oli UllmannO 1 Reply Last reply Reply Quote 0
      • Oli UllmannO
        Oli Ullmann @Lindon
        last edited by

        @Lindon
        For the ui stuff:

        If you talk about pads and buttons, you could use a panel and its paint routine / mouse csllback to simulate the ui elements and store the actual data in one big sliderpack. So in the end you only have two ui components...
        This does not work for sliders if you want to modulate them but it should work for buttons.

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

          @Oli-Ullmann said in Lindon's interface has gone mad!....optimising a massive UI:

          @Lindon
          For the ui stuff:

          If you talk about pads and buttons, you could use a panel and its paint routine / mouse csllback to simulate the ui elements and store the actual data in one big sliderpack. So in the end you only have two ui components...
          This does not work for sliders if you want to modulate them but it should work for buttons.

          thanks,..sadly the UI is considerably more sophisticated than "just buttons"....
          471ce96a-4624-4516-b3b6-ee1398ade67c-image.png

          HISE Development for hire.
          www.channelrobot.com

          d.healeyD ustkU 2 Replies Last reply Reply Quote 1
          • d.healeyD
            d.healey @Lindon
            last edited by d.healey

            @Lindon is each one the same set of controls repeated? And how many sets of controls need to be visible at the same time?

            I've worked on projects in the past with a seemingly massive amount of controls, but only a fraction of the total needs to be displayed at any one time. What I've done is reused the same controls for each page/tab and stored the values in hidden slider packs.

            Free HISE Bootcamp Full Course for beginners.
            YouTube Channel - Public HISE tutorials
            My Patreon - HISE tutorials

            LindonL Oli UllmannO 2 Replies Last reply Reply Quote 1
            • ustkU
              ustk @Lindon
              last edited by

              @Lindon this surely can be optimised with a "still big" factory to save the component count.
              A per pad object could save all controls for this pad
              One set of waveforms, ahdsr, etc recalled from the pad control obj

              Hise made me an F5 dude, browser just suffers...

              1 Reply Last reply Reply Quote 0
              • LindonL
                Lindon @d.healey
                last edited by Lindon

                @d-healey said in Lindon's interface has gone mad!....optimising a massive UI:

                @Lindon is each one the same set of controls repeated?

                yes

                And how many sets of controls need to be visible at the same time?

                Just the one...

                I've worked on projects in the past with a seemingly massive amount of controls, but only a fraction of the total needs to be displayed at any one time. What I've done is reused the same controls for each page/tab and stored the values in hidden slider packs.

                ..and how did you manage preset loading? Using a UserPresetHandler?

                HISE Development for hire.
                www.channelrobot.com

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

                  @Lindon said in Lindon's interface has gone mad!....optimising a massive UI:

                  ..and how did you manage preset loading? Using a UserPresetHandler?

                  The sliderpacks are set to saveInPreset. When you change page you load the values from the sliderpacks. So as long as your change page mechanism is stored/restored with the preset then it will work automatically.

                  Free HISE Bootcamp Full Course for beginners.
                  YouTube Channel - Public HISE tutorials
                  My Patreon - HISE tutorials

                  LindonL 1 Reply Last reply Reply Quote 0
                  • Oli UllmannO
                    Oli Ullmann @d.healey
                    last edited by

                    @d-healey said in Lindon's interface has gone mad!....optimising a massive UI:

                    've worked on projects in the past with a seemingly massive amount of controls, but only a fraction of the total needs to be displayed at any one time. What I've done is reused the same controls for each page/tab and stored the values in hidden slider packs.

                    I did that too, and it works great.

                    @Lindon for example, you can put all the components in an array and then use indexOf to assign the appropriate slider in the slider pack.

                    1 Reply Last reply Reply Quote 0
                    • LindonL
                      Lindon @d.healey
                      last edited by

                      @d-healey said in [Lindon's interface has gone mad!....optimising a massive UI].

                      So as long as your change page mechanism is stored/restored with the preset then it will work automatically.

                      err, ? what do you mean? - theres a button on each pad(not saved in the preset) that opens the editor...

                      HISE Development for hire.
                      www.channelrobot.com

                      d.healeyD 2 Replies Last reply Reply Quote 0
                      • d.healeyD
                        d.healey @Lindon
                        last edited by

                        @Lindon I'll make a snippet, one moment

                        Free HISE Bootcamp Full Course for beginners.
                        YouTube Channel - Public HISE tutorials
                        My Patreon - HISE tutorials

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

                          @Lindon

                          HiseSnippet 1453.3ocsXssaaTDFd1zro0tsHJhK3xkJQkSSw01wMNnPKNwNgZfDahSi.QQQi2c13QY8LV6NNMAnR8RtiWAdT3cfWDdCf+4f8N9TNIpuHZ+m+Se+Gl+YlzJl6SRR3wHmrGbdeBx4dtsOmI5VqKlxPMpCq61GeLoNoGGs048wIIj.jiys9ZIemLKhT+9muZKbDl4SRWBgNjS8IeGsGUjtZqpeKMJZGb.4.ZOKoKWsgOmUiGwG.X4VtEP8w9m.NdOrTrEbQuDmzE47X2UqrFNrTkJDR3ZE9hJUBWqhOtDgTd0xk6Df6TZ808W+YUVG4rz1ATAOts.KHIfQ2hGbd6t72vzN3PZBsSDQRTD0F7rdYTstznfVCSLIHjyhsRSS2Rml9X2coAzQqmlt9PECuTMrSZNKbQPp30.RNVPZQMjdfaa+XZeQJGIdtqaClfDGhgZiMTzxhV3I21sFGjfIx2CeBYmXfXjF4VqPgm3A+Y4MxlEpOIBu8d0tGsc8FGzb+ip0b2VM2a68Nns2y8JAR7zm9odcDrCHIBizFJf+PmbLQTi2qOmAD4dng+CA6a9LehT.lHlGUCGE0A5BxwYFlFFRzPYQTFwKb.yWP4LuIkIm+Pu7DuSwQCHKm8WylIAR9j5XANWggKuQ12pQ9IrNxdRCxMTyE4F9Rja9b1H2v7BQ93xbYHu3XHWi19rHcm0bw6HIjHdDQ9Dn4aneCwQIRqNrNpEIsRNKOrYTzHmjnpmZod8qCjNJaHnPty7nrTCnBmyjYqCkgQNYykldl0csRo4u2NmZ+XxM6bXD2GGAXIfbFDEizIuZklgoJIQTlrYlI3yXicvNO2ajZdO5QiJMR8mcZdjDQbbfphp7eZiXRTe4xlDugZtEVC+GNrvsiIqjLUZRp2f3XPKMpxoRJpfjBluvFdTuuzJsDQXGK5BqtxJPXChlgF5kaD+eh9yRnnSDKKSLYhIhAwLOJDbuMKj.LzedwYV1RaoUIfoqT91nEP3zA.DyJPMgjOGboDPZ+KERavjHZ.ItgoAXbkd7bFsshtgYCY7Xx0x5eako1TnLVNKCO1tyIC4IJ4uGBUYemcv1LLDP6UMZ05aMJVWcGF2GOLtUKuoH2X9XEuBKK6qslGd8Tu3x5rl0F683BRSltSEX4MIqvvYxyrWKhDOS1R3EeQJliMnWGRrcKoTP3r1wO.eoq1A395ctVBxYMXTQy9DC8N7n.4Ayxum93djYqu7feCBAnHTG6+Qli80Y1VvbSDELTFWSVGoBgzaZcmpAxUc9L2RkyC+BWIe9Wle+5vmq1Le902emMyq9wnQeOB8pFJiXbLfA.W8IwBpL7cpSNEtim99GYbqSRNQv6ibbGMeB9VCyOv.ysFHDblBh2yczrjBnyRQ3Kpdt8ECSvmRZvZESflD4MWPWWiWzx3uK7+YiWxx3+o3pa7aqM98GdoMLiDor8ccGcrgMtwVl9cGV8Mz.AbcXWmuwAg5RnG2UBXmp.0oC6Ak22zxiKM2vIiqYGucUnrcr7hp8wxoGVlyFmWTfd2wcqtM03VyjBa29iVt8u5b8baOd.3okbU1rGN0p+9eWMQP52l9KD62rjLHLjBR4550KA0iFDDQZwSnxYAR4VPJV0+nJZ5r3ktqaNYRueqpdn2l83CXVOL5SpNAfQSeCe3sE7fAQXw3O3P9TLCCIvsuku7l7LHfN2NruFuBovE9JjqJDefaKpvu6rw3By.iv3l2GXz71s66tcXHwWjBvEc24GtoOT6Rb+97ABJ63cwhXUq1dC50FdiqOA7NC1ymH21JazLzEjzxLPaBKPQ7uvOCyhRZGCyhCYBs59w7i70GLHec3cTq.Xhod8bF2ckzdEm7r.jromdju+3lZJEKcSUb0aphkuoJ9raphqcSUrxMUw0ubEk+uD1bff2SusAg1s01pwKNNayvPGnpaE8e.m6PJ2C
                          

                          You need to set the sliderpack to have the number of sliders that matches the total number of editable controls. And the range should cover the lowest to highest range of those controls. Graphically the sliderpack will go weird, but it will be hidden anyway so it doesn't matter.

                          In my snippet I'm organising the data so that the first slider is the button's value, the second slider is for the knob's value, and this repeats for all 6 sliders. However you might not want to do this if you think you will be adding more controls in the future, because then you will mess up old presets. A solution I've used in the past is to have multiple sliderpacks for different groups of controls. So adapt as needed.

                          I'm not quite sure how you are showing/hiding the controls, so I've just added 3 buttons, only one is active at a time, and when a button is active the controls are visible. By default the editor is hidden and all controls are inactive.

                          One extra thing which I'd forgotten about is you'll need to set the values of connected modules from the sliderpack's callback, at least during onInit so that the preset is restored correctly.

                          Free HISE Bootcamp Full Course for beginners.
                          YouTube Channel - Public HISE tutorials
                          My Patreon - HISE tutorials

                          ustkU LindonL 2 Replies Last reply Reply Quote 0
                          • ustkU
                            ustk @d.healey
                            last edited by

                            @d-healey To this nice solution I prefer object stored in a panel. JSON are nicer to read when needed. And you can store other types than just values

                            Hise made me an F5 dude, browser just suffers...

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

                              @ustk Yeah that's a good solution too, can it be extended easily if you add new controls in the future?

                              Free HISE Bootcamp Full Course for beginners.
                              YouTube Channel - Public HISE tutorials
                              My Patreon - HISE tutorials

                              ustkU 1 Reply Last reply Reply Quote 0
                              • ustkU
                                ustk @d.healey
                                last edited by

                                @d-healey To me it seems even easier to extend because controls are either in an array inside the json or better, with a named property. So at checking time the property is either existing or not in the preset, so you have a safe control on value recall

                                Hise made me an F5 dude, browser just suffers...

                                d.healeyD 1 Reply Last reply Reply Quote 2
                                • d.healeyD
                                  d.healey @ustk
                                  last edited by

                                  @ustk Yes you've convinced me :) feel free to modify the snippet... hint hint

                                  Free HISE Bootcamp Full Course for beginners.
                                  YouTube Channel - Public HISE tutorials
                                  My Patreon - HISE tutorials

                                  ustkU 1 Reply Last reply Reply Quote 0
                                  • ChazroxC
                                    Chazrox
                                    last edited by Chazrox

                                    Choose your core controls, lets say for example ' attack' and 'release' x 12 samplers. Just make 1 attack knob and 1 release and trigger which envelope its assigned to via 'last note triggered'. So if that note is detected by piano press or a UI button, it will change its processor connection to the corresponding module. You can add some visual changes to let the user know which row its triggering. I have a 'core parameters' section thats all dynamically changed by piano press and/or UI button controls changing a variable flag 'last note played = note'. I change processor connection and call updateValueFromProcessor...something like that on all the core parameter control components.

                                    Screenshot 2025-11-25 at 2.56.46 AM.png

                                    These are my controls for 12 samplers all neatly tucked into a few tabs. You could def have more tabs, and maybe tabs within those tabs for your 3 different layers. A few different panels and a few radio buttons is the best way I could figure out how to minimize my interface when I want alot of controls but not want to show them all at the same time.

                                    This is just how I figured I'd approach it. 🙏

                                    btw, all individual parameters are obviously still read/write on preset loads so you do those in the background and on load you just restore the knobs visually for what trigger you want to show on launch.

                                    1 Reply Last reply Reply Quote 0
                                    • LindonL
                                      Lindon @d.healey
                                      last edited by

                                      @d-healey said in Lindon's interface has gone mad!....optimising a massive UI:

                                      One extra thing which I'd forgotten about is you'll need to set the values of connected modules from the sliderpack's callback, at least during onInit so that the preset is restored correctly.

                                      Yes thisis the thing I think was missing from your described approach, so I was at a loss as to how it would process presets, but yeah this is an approach....

                                      HISE Development for hire.
                                      www.channelrobot.com

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

                                        @Lindon The problem is of course, this fails to capture the Velocity Modulator shapes, which would have to be stored in the presets anyway...

                                        HISE Development for hire.
                                        www.channelrobot.com

                                        d.healeyD ustkU 2 Replies Last reply Reply Quote 0
                                        • d.healeyD
                                          d.healey @Lindon
                                          last edited by

                                          @Lindon Yeah for tables there isn't much you can do to reduce the number of components. In the project I worked on we just had to use lots of tables. It might be possible to convert them to encoded strings and store them in json or something but I haven't looked into it.

                                          Free HISE Bootcamp Full Course for beginners.
                                          YouTube Channel - Public HISE tutorials
                                          My Patreon - HISE tutorials

                                          1 Reply Last reply Reply Quote 0
                                          • ustkU
                                            ustk @d.healey
                                            last edited by

                                            @d-healey said in Lindon's interface has gone mad!....optimising a massive UI:

                                            @ustk Yes you've convinced me :) feel free to modify the snippet... hint hint

                                            Here ya go!

                                            HiseSnippet 2204.3oc6Y0zbaabFFPxv0DNoIYlbnW5La3gLT0pz7CYIU4HaRJQ1vFSJNhTtoihFOKAVJtwfXY.VHKUWO0G6s1i8X5efNS+Gzdq2yef9Sn25Q22cwWKHgrk03jSgGD.12udd+X28cWMviYQ78YdZ5litXNQS+8LFdgKe5dSwTWst6qo+yMFhOirGyk6wb76v75E3voycHCIbesVWLG66Sr0z0W8WKDQuvMzj+9uOrE1A6ZQRGRS6wLpE4QzYTd5nCZ7ETGmNXaxH5LEt2nQWKl6dLGV..uUMpnMGa8T7oj9XAaqXn84X+oZ5+Bi5asIdRss1hPlrYke0VaMYysrv0HjMpuwFiswiqs81Vaeus1VS+lssobl2PNlS70zuQKl8ECmxdlanAdL0mN1gH9np1PvxgC2g4XKbQwnZ6Mk5XOHNt4qAZYPZTb0vn3GaziZSSFOMZ9gRBnTITCf5qjEdqlAdUUgWEE3kCjzUfzMBgzGYLzxiNmmRQfmaaz0kS7lfg7jJTB4Uak+pogH0Sb4kmgeJoiG7QhDk1rRk0QaWoxZ22D3xm4PJa4PvdkfALgjmOGcF1CYSbvW3i1Ecrr1p7oDd6ISHV7RE2WPpZw0V2rf3W9zq8FnWu3ZmjXvwb2vnHXuXnCBzzwYO1r4LW3a+RES35q9J6h.ZCkctqSdxlHXohIbjJDnpQD34kIRD8TAdp6XQk9kJPDcg.IlqrOTFDMIrzDriOIaH1JjzAi+ZPsOOxj6.YmHksSkxUdw8UDn+Q8dxv1iFBrWGzjG4TDVDhBmlKxUhPpo4cu6mfntTtI00g5RPSBbs3TlqbvRqY9byBSf3UI5tUtOh9YwpEd+N2YMHoonzxyC7mVJEoPsB3wkVC7jBlEnSPk3PkJaRZZPDXdL1I.XB8I6hJxF+0PVunPuJQlXdTLEnxWXFhvDuHJnXF8THWD66ARNFVaoDyMhXDAP3Ec6EYA7mnD25PbEfgLjn.kiEI2.OOfiP.WZsSJmVyHkQF..7zJfyYt8X1ANjRKKWrEDNmzkhRtlQOy2khH95borrb8bozp5LtjbB5UyiRRSgTMk0UmCEZoiIQx4oobwJOgemapLTnTOGLRt4yL7ku66vrvNHvPfClHQYpqM47CljJRXsbtHufJvOGs6tnDoPe5mlDH.wyeVeBCdD.JNG0MNcTBzpZDLQ7bb1DZW0bcl7ozufIgBOSc1lYAPnkJfUm5GGn.ggjN723o.BGZw5jWufQEZRAu6cQXaavuHHomNmH1swmScwBG1rvKDvdo.1xEhh3WlkayqhZwfmbsE.B6cX6liZiNneaTmi5u2ntGzGMn8gnAMOrYu1if21u8vQc62TPYojxhgMoGqlMh2ZctGUr8vCPc2+KQ6TDcGjjU3YQze.0ZTezHvL6fDTTlVki8TC1WSy8E8agF0sW6rlqP3V8GK47DQTrIm6QGGvIkxRRBAQd7QjI7EVFHrLtSDf8WxCVN8ktMDTuJ1HB8YJyRcHtmxmFukjnTUrYSB8iomnrQiXhJTwvC7f83teREj76eY0HDtHhxcJo.TBCIWzXWPXgpC0jb1jxFQKsA1wvfmnNGQYI9KgYk4EQSKNpabeA9noDORbz8s3mxRG8YbxAtgwZPSnEIMYRtzh.oCwKWxBH685DrjavrwDO0JTAiPesYaV13xaVVsWdqvVtTXj41EZT3f4D2KqCesn9zDMVGgJfUtrs52OtsZrKwQiZKZoNYcBMIl0z+FieyvC5e7yS5EbGDzZVRid6fpVeSn+r0QpbTsbVdpUay5KwzBpo1lacOfmSzzNp69XNNFw.3AGBVcjSEwJ88ImAGDK7fAEL1m3+TNaNDCS5BEdOz+9oQ9W3RTRG78LRl5TQ67zCr8fFWnd5Me3XiccG3QfpSwQJzdaUdUEk+xIuiUdMEk+s7qtxu0UIsqfarhpe4ia7LpMeppgmRnmNU4zv7Es9JmEWHKNfnBRt4k5lELhJPTyNan5iOnwbrX8SE0oh+WW.31YM6PGpMwKxrQUhpl82oX1+432NyNiYCV5lFRcNCmp0+z20vmSlOj96IpW3fevjITfKCCzLesYTaaGx.lOUrfRBeM9yMxwc93H2oiCC5bv8zQTHhKbpOvPcnpWVDsweLN0ZnWYEMs3zpg9OSOY8iv4aefQnG1xi8LeHzM9z363nvMAM8+DpixIyRG8e7p+xqxNZsHlk+jSzW4aWw34lHTQwJaharIrd.VTf6EPVOlR6ymic8E6p1zGTUvLAGxySlvh71N7xWbwB89KoSH6ExdFRoCCaM.9qX8oJIB0z1NeSbHwEO6RPOzz.geIzFRvdVSag8TIzAeFyCBahaRJAEofPkbFwBbbFf4Sio6mIHE4qcg3nMoEyChVYn2OXVXnUHVM4Pge+aEUHGJ5LEHbLLNBUo78VO9E34IRteD0m2zifSPbDuqm2iDoBswgrmM.16GpWupxkD3ZwBbsEX93PB8XdQw5EojVesHk3H1RTMegl1xWJ0GZH6BEyydGYhaRLhfXpq5ESIt7IHvyuPch+6rKN6pBwOxX.kaMMeLtRNXD1H96CLFcciuuQ38gkBvaXz4K+d5tEWUw92Nz9+DCY67RKeqv2qlw5Y51OMpfajP3PksAQZZWznCgXKN2khDMpW+6dX73pBHI7HQkuueGOx2ntQwmSWZTs8aziprP9+4giHvFBCuv0JSFa0qbHq5qOicHKPrCROLbVHw9SvJDCgUwsHPByEZfPz9p9JhFMC+th3aADFRbske7J3WDwphu0iHVMln1UJqT6JjU96+seLq7CaVo9aNq7x+0+9GyJuyxJ+PXiYXKO1ShO+MDgtkbDvuck++qJXzS7MpZ7gDSClPmqzmXYkUUKIXsqqf0utBtw0Uv6ccEbyqqfaccEb62rfh+CdMC3rYg67qo0aPaYO355scwPUtbZr1+G3cS9YJ
                                            

                                            Hise made me an F5 dude, browser just suffers...

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

                                            42

                                            Online

                                            2.1k

                                            Users

                                            12.9k

                                            Topics

                                            112.0k

                                            Posts