HISE Logo Forum
    • Categories
    • Register
    • Login

    Do I not understand the setLoadingCallback?

    Scheduled Pinned Locked Moved General Questions
    45 Posts 5 Posters 2.2k 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.
    • A
      aaronventure @clevername27
      last edited by aaronventure

      @clevername27 getPreloadProgress() repeats itself from 0 to 1 and it doesn't return a sample map name, that's getPreloadMessage().

      Panel's getLoadingCallback will return 1 of its preloading. While it will return 0 with the preload not yet finished (but rather at 90-something percent), you can query whether the preload has finished with a timer and if (getPreloadMessage() == ""). Start the timer in the loading callback with if (isPreloading == true)

      clevername27C 2 Replies Last reply Reply Quote 1
      • clevername27C
        clevername27 @aaronventure
        last edited by

        @aaronventure Thank you!

        1 Reply Last reply Reply Quote 0
        • clevername27C
          clevername27 @aaronventure
          last edited by

          @aaronventure On second thought, I can't follow what you're saying here. Could you pls explain it to me like I'm 5?? :)

          A 1 Reply Last reply Reply Quote 0
          • A
            aaronventure @clevername27
            last edited by

            @clevername27 what have you tried so far?

            clevername27C 1 Reply Last reply Reply Quote 0
            • clevername27C
              clevername27 @aaronventure
              last edited by

              @aaronventure Mostly sacrificing my collection of rare Creed memorabilia.

              Appreciated - I'm not sure this is granular enough for me to answer your question. There are so many variables here that I don't how to proceed.…

              A 1 Reply Last reply Reply Quote 0
              • A
                aaronventure @clevername27
                last edited by

                @clevername27 the panel's loading callback should, on 1,start the timer. The timer should run at 500ms intervals, checking whether the preload message is an empty string. That way you know the preload is finished (because it can only get started with the preload start, and can only return an empty string if the preload is finished) as the panel callback doesn't properly return a 0 on preload finished, but rather blows its load a bit too soon.

                The callback starts the timer, the timer checks for preload finished by fishing for an empty string.

                clevername27C 1 Reply Last reply Reply Quote 1
                • clevername27C
                  clevername27 @aaronventure
                  last edited by clevername27

                  @aaronventure Thank you - I think I understand. You're saying that with:

                  setLoadingCallback(function(isPreloading)

                  …isPreloading gets set to 1 before preloading is actually complete?

                  The context here is that the Samplemap is being loaded from a saved state when the plugin starts up. After the Samplemap is loaded, I need to do something - but it's always too early.

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

                    Oops, a bit late to the party but what's the problem with

                    Panel.setLoadingCallback(function(isPreloading)
                    {
                        if(!isPreloading)
                            doTheStuffWithSampleMaps();
                    });
                    

                    no timers or preload message hacks necessary, the isPreloading will guarantee that the samples are loaded). That's how I'm using it and it never failed me so far...

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

                      Ah nevermind, I looked at the first post.

                      The loading callback is being executed every time when the sample loading callback picks up its work and finishes it, but it might be possible that this will happen multiple times if you load many sample maps as each of those is a single job.

                      It's therefore not 100% precise but I guess that was OK for me because I

                      1. didn't rely on it for doing actual logic
                      2. didn't use it in projects which loaded many samples at once

                      Now the proper solution for this (and I think that was requested by @gorangrooves last year) is to add a event type to the broadcaster that attaches to the event notifications of individual samplemaps - they get notified when a sample map was loaded, a new sample is added and a sample property is changed. This way you can write that logic in the place where it belongs and not a callback that was supposed to hide a loading progress bar and is working overtime since 2016...

                      A 1 Reply Last reply Reply Quote 1
                      • A
                        aaronventure @Christoph Hart
                        last edited by aaronventure

                        @Christoph-Hart https://forum.hise.audio/post/76283

                        This is the primary issue.

                        It's returning 0 before the reloading finishes so if you have a percentage bar that you're refreshing, it stops just shy of 100%. The solution is to check the reload message string with a timer for the bar refresh and set it to 100% when it detects an empty string.

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

                          @aaronventure the primary issue is that this callback does not have a precise execution order.

                          I've added the attachToSampleMap() function here:

                          Link Preview Image
                          HISE | Docs

                          favicon

                          (docs.hise.dev)

                          Remind me in two days to update the broadcaster wizard...

                          clevername27C d.healeyD 3 Replies Last reply Reply Quote 1
                          • clevername27C
                            clevername27 @Christoph Hart
                            last edited by

                            @Christoph-Hart That is fantastic - thank you.

                            1 Reply Last reply Reply Quote 0
                            • clevername27C
                              clevername27 @Christoph Hart
                              last edited by clevername27

                              @Christoph-Hart Thanks for the docs, too. Some feedback -

                              7191144f-2305-4cc5-9c98-c00f047e7845-image.png

                              I think you meant "The function expects three parameters. The third parameter needs to be a function…"

                              In the same sentence, you write "either" but the other case is never mentioned. If the two cases are regular and inline functions, consider: "The third parameter needs to be a function (regular or inline) with the exact…".


                              68fc8f95-b8fa-4b0a-a6bd-cb51520fb4c6-image.png

                              In line #3, should samplerID and eventType be switched?


                              3e412207-9f20-414f-bb51-3c6266e26692-image.png

                              By "SampleMapLoaded" do you perhaps mean "SampleMapChanged"?

                              1 Reply Last reply Reply Quote 1
                              • d.healeyD
                                d.healey @Christoph Hart
                                last edited by

                                @Christoph-Hart said in Do I not understand the setLoadingCallback?:

                                Remind me in two days to update the broadcaster wizard...

                                Tis time.

                                Also might want to fix this bug while you're at it (if you haven't already) - https://forum.hise.audio/topic/9746/broadcasters-best-practices/30?_=1718707836936

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

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

                                  @Christoph-Hart How do we use the broadcaster to show a loading bar? It seems to me that the events trigger after they have completed.

                                  Also SampleMapLoaded doesn't work, it needs to be SampleMapChanged.

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

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

                                    Can anyone tell me why this progress/loading bar doesn't work?

                                    HiseSnippet 1429.3ocyXrsaaaCkJNJM1qYXsnOrW1lfwdvYsHvNWZGVQwbhSRQvhSMrSCFPPP.iLsLQkHEHoRa1PA1Gy9.1mP+j1eP2ghx1zxtoNtWVMfMz4F4494H2Rv8IRIWfbJd7UwDjysc6bES0uQeLkgNXWjy23FKHgbbWJK3XhTg14pXrTR5hbbJ7TMWNEWDk94e+0cvgXlOYDJD5DN0mbHMhpFgsU8eiFFtOtK4XZjE2aV+.eNqAOjm.ZTA2pnXr+KvAjivZ1VvE4rzdcoJtniBqHRfmc3cupSe9KYF9OgJoWDRz.0PcfCxfF0nOMraqAVqDgbbaMx1KXr8641j1kNDusOPSvajD19.mEtNUp1MPkbrToEMpzcb63KnwpQTz5yW4d.SQD8vfq1VUL7hVXiBtM3.GL0ZQ3WP1W..CknxCqV8AdvOq93Rk.2sT4cIV30ByHg07dh2.ICHpF7nXNC.pT1PtLHi4o0jD0I3vDRkzyYDxVfSS0lmnnLRkdILeEkypDrZo+rTQ88fgqP0mJ0m+gbeb3N7DVWo4XJFrVOHyX6vvJC3oR4KBLYDkWEXonlGoV0znr3hpHQ17YNo1DeUkSwmV8rG3cZM3G7oqel2OMTCLlvpZ7ab1Yfbudbq4PSheCbX3EPp3HChJaMrrH01n87xgrXwzaQpvBkNOWTYqpSdCoTl77SOSi7Czx8XAfOUq0Y2BjTDHfrhJoFbJyBRr1+Ww3ofPojGRVKVnwcMx6ceuxd+B789dSvUSfCnDrRl2Wamuad7dxS7JW1x14wFSe0GWrn1zGXfdb1QbE4YYVZoWWxKOod8lJMc9ofGFpOzoPN65d2BVgkDcAQ7.HqG7pCYDJ4FuNdoYqN12TtXwHmc.ipdVLICdedXWc8o94Iq5QY0avSO+fcwJrtQPFNfuXhPQ0piytjKgNol1BEc2kHeA3bS4MqHE4rrJk5JCZZnSxPT3pW10jvgd0vls+0I0uZHvatn9KocU8g1hN+sCB0mPC5qzPeOPcPAHv9R.3a0RLpbSi8svGSm8I5fA8N4cSBwpwanpmbjQ.hNi0ES2ohIopqrmrbC5xV8Z6xNqp3cbaQU98mtNtvTzQHt8oPGylMsh6d85AMyFofK5t+uOuChl8q+6LW+cc6nDDbDzXqCNJFJ9R0gRtYP09XrVP7LuVPVamNz+vhs2TemDvGIFG6+TO8p1NBFyL1cko4sIwDrBByVxrb81sepfmDmWpkqmlTbr.5UCtBaa7YLB3qU11XCAWJ6AlS5YIsI0JQDn8UivzlbIQHGG2QIQP7lAUtRcsXAcOBIQGeo9MwJA8U1bmdKUOFmFigckRgqkCd8bvajCdybvakC9g4fezHXiCsINVmY7CtQXAE62md95WR4gTl7bnWVOtHxjJjqa6slstsvom1IyhycnACuYClw6sXw5v.RpRas13TVFaoOU6Gt3rUV9dlZ7kei1wVms3.crCUGp1icIT.CXz53cggY8vIgpAXGuYRSNiG2myn9iWt.o+AADgstOUCZakBpVGg4d0aSBIXoU89OV+PXeFrX7t.2HewMe09oFu9VWi55o6.58gD29rllcsCKKLSCK+nquy+fyOqttuNaDpWG86I7Edb91toM88zyn++RUMuaYvf4eq.CI6.KF3SrGUp2SMCtpFVqPcHrto.5sUyHVSC6jQrVNhqaK454Htgsjaji3l1RtYNhaYK4VCHh7Gn9fkm8b5qC3TfvziqR26LD1RHztLRBq7ncC2x0OjC8zP2bQccif2QXNDbIWAmGMQDwcpQjE9fhHnHrufetu4U3z9nkSw.ZJK8+FpnaSMrWMT5q0Yqtf0QO22e7iZBAWedEbi4UvMmWA2ZdE7gyqfOZdE7me+BpWcZ6DEOxL3.gZ1ZOSRnydCSBKf9O.VLRpn.
                                    

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

                                    A clevername27C 2 Replies Last reply Reply Quote 0
                                    • A
                                      aaronventure @d.healey
                                      last edited by aaronventure

                                      @d-healey Because my preloadMessage workaround seems to no longer be working, so your timer stops on the very first iteration.

                                      It's time to implement the broadcaster, I think.

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

                                        @aaronventure said in Do I not understand the setLoadingCallback?:

                                        It's time to implement the broadcaster, I think.

                                        See my post one above

                                        I suspect that the loading callback is actually triggered on the UI thread because it seems to block the timer.

                                        I did a test where I did the sample loading on a background task and in this case my loading bar worked, but it caused crashes in certain DAWs when loading lots of samples so I'm not trusting that method.

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

                                        A 1 Reply Last reply Reply Quote 0
                                        • A
                                          aaronventure @d.healey
                                          last edited by aaronventure

                                          @d-healey here you go, tested with my samplemap. You were nearly there.

                                          HiseSnippet 1543.3oc0X0kaabCDdWKuoVpIEMo4g9RAHL5CxsFNR4ezfzHaY6.iZkHH4ZT.CCC5coVQ3UjaI4ZGkh.zSPOK8HjiTuAoCIWIwUV10UMIs0O33Y3PxO9MCmOtosfGRjRtvyu7dCSId9WOn6Plpey9XJyamM87+7fTAIgiinr38HRk2FCSwRIIxy2uzy0Q4WdQOyO+wy1.mfYgjIt771mSCI6RGPUS71twOPSR1FGQ1iNvI562XmPNqIOgmAHpTPMuTb3I3XxKv5vVHvy+ZaEQUbQWEVQjd9KtAOZX297yX132mJoGmPzF085BKj0817jHMh0d8Z1mlD0dzIW544GzdBOTxxC2NnEMhN1uKenG.MYFt7g+BEgWoBvqtK7p4.uY.IeGHsnER2LnanflplLhFOeZvNLEQzCCztKTrw5svusXPSNDASs1.7IjsEfw3YT8g0psJB90JOoRksXwTFYMa1d8jjt3AoIDY0UdB5N2A0iKPvYRAkAUp.YIoBcJVfZiYjj5nmhFsIwDUS9fTNCLptrc3kgk29WqIIp8wIYjplsbhy1.+p5vyf0mTsWFKTQ4rpwqT4WpTVuOXXKT8oR85uKODmrAOiEIMKiIfTAOV.zxn3hvJ7ZTY6wEunmgxOgvRj6tc9jptB56P0MmyiIg3LIAVDBJuxexZ2CSSjHEGIH3v9n5qUyxKPrIXfQjFJa.NcUzYDTDGQUHnVVRRNkHQb3pQg0kBqHkQk8IQUpTNdsdvsBf3qN5fVc4iis2FVdE84TGiTyuZWNQQUjAtwYWoNjPU0CvGT6vUQGTG9E9f6dH5aFeZzNt2gGBS3MEyE6ZIrl3jjig6eSRGtzoIyjOmyy0OE4ZZHVIWyIgXF5myHhglrDhjHIm0mHH5CGsGZpsnbYygTpvBktUgn5Cpcd7ZF47n0fP67GUzcIE.ZdyDrfjpqEqZIbnrVxSHqkJz9trBnuEsLTDsL7umKpVPDPWrp4IQ847hYtmhpshluB6SBOYb4kNPclKkHTCQT35GAGMge3oV5YkmTtrldFQBPM2K3JxKyYiJuoBZ5g50aliouOK3II5EcFCmucW7DqxxFbLQrJzk.X9wABcyJ1hL3haQ51AOz1dwIPNaGFU8xTB6h5q6k2SB9qebmMABT2WM2WaKUR0PveSxofHksKa4fMIxS.B0DadiLO+kTlQuwndv5zmGE5ztTfMU58pw5X+59MFN13sG23LZjp+XGMdci9DZbeG8vuuwn64fuqANdm16ja0ZuuC9wJddNgAPRhGkkfUE0ozhy4C.YlBhCZA.ljpF5Jd+dS75pBwaFzlpB6OaLtvLvHj+9PfwbI+aDrUudPOyI.bwfs+oOL56ta+WY29aEzUAxJCfl.VkWq9dkfbq5uOd4U5U9kW4sj5ResSXuswFY.GIJ582aX1p0G.RxE1qbj2gjRvJHM6LmkZzoyyE7rzom0xMLEE6Ifd4.U3dFeIi.bsx8L1TvkxdvwwrVR2gZmIh0b0DOcHmRDxh9dQ1.Heyfav5dQ995dERhN+RCagUB5qbi1rK01CaxwvyQM10mx9tSYeuoru+T1OXJ6GNk8ilXaIzV3TckwWDr95G0gDSyjO9nM2okohXptqexUq6JrhltXNQtAMd7tY839H5w7tAaNO.eFOk8Zendc8hWsaeW9i++eP+zBeLP4QXrKUmc1hcJbOE7nw3s.sqd3rD0HuE6Yzhy3o84LZXwaEPUdbLQ3h8YdfVWofKkS7b6FcHIDrz4Z8W2XW3oOXQwK6+s3h5+s+vnYlu9x.KbQ5Fcn+I4sOpkYWplXoqjl36c7N+5ieTotOKWoD0U+4B+GOOe8.SucjVJ9eKnZ+b63QxbAfVXWP+Oj3pHtfVk0ZWSaqATWBKxXneTZ9f0GIepGr9nA8BGsTvYK+uMuD2uDgokNLO0KADlSbKokvqLzPBj79nfxA3PA+nP6Wtnw5RFO.JYl+mmJGzRaip6Y9ZFWnN.zqNJLr3RctId24ch2adm38m2I9f4chObdm3il2I93+5IpeNw5YJ9.ayTOuVs2xV.5u03BvRd+IpqL1KC
                                          

                                          Basically:

                                          • store isPreloading into panel data property
                                          • check against that in the timer in order to stop it
                                          • check against that in the paint routine whether to poll PreloadProgress or to straight up draw 1.0
                                          d.healeyD 1 Reply Last reply Reply Quote 0
                                          • d.healeyD
                                            d.healey @aaronventure
                                            last edited by

                                            @aaronventure Thanks!, It's interesting, because it works. But this doesn't

                                            Panel1.setLoadingCallback(function(isPreloading)
                                            {	
                                                if (isPreloading)
                                            	this.startTimer(50);
                                                else
                                                    this.stopTimer();
                                            });
                                            

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

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

                                            55

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.1k

                                            Posts