HISE Logo Forum
    • Categories
    • Register
    • Login

    How to debug control not linking in exported plugin?

    Scheduled Pinned Locked Moved Scripting
    17 Posts 4 Posters 520 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.
    • SimonS
      Simon
      last edited by

      When I export my project, a control in my realtime script that should be controlling a knob in the deferred script, isn't. The behavior is the same whether I use the linkedTo field or a callback. I thought maybe the reference to the other script was ending up undefined on init, so I tried getting the reference in the callback, but with the same result.

      inline function oncurrentPhraseControl(component, value)
      {
      	local Interface = Synth.getMidiProcessor("Interface");
      	Interface.setAttribute(Interface.currentPhraseKnob,value);
      };
      

      I'll try building a minimal project that replicates the issue but maybe somebody ran into this before? It always works fine in HISE, it is only unlinked in exports on all three OSs.

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

        @Simon Not sure why it's not working, but getting references dynamically at run time like that is bad practice. Try storing the reference in a const in on init. I think though there is probably a better way overall to structure the intercommunication between your modules.

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

        SimonS 1 Reply Last reply Reply Quote 0
        • SimonS
          Simon @d.healey
          last edited by

          @d-healey It behaved the same when it was in a constant. Is there another way besides using a global variable or linking controls together with a callback?

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

            @Simon said in How to debug control not linking in exported plugin?:

            Is there another way

            It depends on what the goal is, but I think it's a structural issue. Without knowing more about your project it's hard to give specific advice. Can you send me your project or tell me more about what this element's purpose is?

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

            SimonS 1 Reply Last reply Reply Quote 0
            • SimonS
              Simon @d.healey
              last edited by Simon

              It's for keyswitching. In the realtime script, on note, if a note is in the KS range, it updates a knob. That knob is linked to a knob in the deferred UI script, so it can update the key colors on screen. That's it really. The keyswitching is working, because I can hear the articulation change, it's just the linking part that doesn't work.

              It's tricky to debug as it only happens in a compiled vst or standalone. I'll probably try Christoph's logger next: https://forum.hise.audio//post/26752

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

                @Simon I understand now. This is how you do it.

                Your real time script does the keyswitching (changing articulation). In your UI you have another script that also picks up the keyswitches and updates the UI. The two scripts don't need to communicate.

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

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

                  @Simon Here's a snippet that demonstrates it, the keyswitches are 24 and 25.

                  HiseSnippet 1662.3oc6ZstaSbDEd1jroXCkBHpfetD0eroDErcBIDQQDxMHBLwJN.UBgPi2c13Qd2YVsyrowsBo9pzmj1Gg9HzGAdCZOydwdWGiwwwDHzDEEk4Lma64Ly46acRs.tEQH3AHsh601mfztjd81LYy0ahoLz1afztrdUrPRBLhEsVaerPPrQZZS9Xk.sBSgh958ObMrKlYQ5JBgdImZQdF0iJ6Js1pOk55tE1lrG0Ki1Kt51Vb15bWdHjOSpWB4isZg2m7brRsIzQOAKZhz9Q8R2cIBY4EbrswKrf8RKszJ2akEWoL1ozh3FkWZkEqr3xUt2xNHso2zlJ4A0kXIQ.NcMtc65M4+BKN.ujJnMbIpEkQ0gHGKFsdSpqcszhi.gzzq0sTMYbo555Uo1zNx6VxtRzFFcsHaQSahAkRkOFojVlTZp3T5p50sBn9xt6nxmKpuMC5fNXn2jMUh0EMwenouNGzfIm2C2hrU.rniElKUpzbFvOl89EKFc1XdahCIXcrqaCn+HLkAgD0lPySHMZILdfwqqr3bFUt6a5Jk03QARpUnKVR4LPkzHtOQtN2ymyfElyzidyn7qSHyJxHN64bIYGl4rE+shEb4VXWCkqpBOpvwDkqTJ77PuFj.SvzBEKPcLLaIlGxBIzdDlrYmsXAv5B8Do4ED4KwtgDk1TlM4vcbTJCN4cEeWQidSBGm3rnm8TOUAbWWU76y1pC7ACxPSVTxOmwApboihPCN+oloGtSMVwE4LJxYaynxc7IIq2h6ZqNMn98idFCkzkTm1RxPPUYzYsKmbVqtK0lDfn1pie8TUQQOFYmQfdw1afk3TGB9FhmOArQ8XosA4.XfQ7g4B5aPDsjb+HcSNhfz9liQ3OrSn+8Vq1tyh+xcUOpssKoFWPiTrSF9OODF14Wm9qPHz0KOeIjjbnTEtbNFcz6dvsdtsZ+7iBTCIS1PYX16ep6XLHAZms.cLlOTZfyGF1T7p50nRql8OGmnO4Hz69TjiISU+V8McbHVxtI3T5a8yi5HzgO7W3Cf+conYivJRP4wA5m+Pi9oM43B7Z5OCfWkFSfWeuNNyEOHOY6SB5KLl+j5CBBxKDPzh1QIygGXXRsMnLiXPM.7Xa6mQE.Hjp.TUo8LJvhX6l2OTzzrip4Jdfeh.JJdm6bqdQ59n3eXa6mx3MLmIGt2bF.nqBxsOvT6pJAlv9kgu6uJIypSwnM4rdTJQAE7Jk4BGtyhE0ecMsRmAmEcxJpgjUcy3MuOfaEUP1JwwhiDo9XaDxajiiaPPgpz8MnF+TR6adWBaeYSPzsuMzaRZNul9F0S8ijx.ZCPhYWwz8Y7.xZgRImMG3na8.i3X.42mFhEoFEG4MOPwqIkhzwg1wQTMtbYGE+2UnvWfrRzGWrRNwLQ5AtNgFhtllZT6IlBRwgMtGphoJjsS+EgrspfLst5RO5CwB48+YWVHcQXDgNNzCidSHGpqm.Ns6usGbVCocM8WHHF.wbbnqzPzBFlC20ZQr2iGo+47U9ZiuxMhC+E0eE9.RDtTBboZML7zy3wDfyhp1MHdK+83m2xNVRHE1K.yD9bAobVOWm3Q2CtEIxIsGKpzWKxIcChLjk20whxokpTrETJxn2EVMUXkrBqgY4bFrNmmpROL66HrICCMr5D3I2dGgETXT04rWKpE5JHuhZKaVNqgcEWIq3mfCrgdnUtCs8P+apga3Z96uYz+rGuvISOh2gPVBi7NqyexdvDlOFezJY.al3CA1DSoHYneVVF84cdGBe7c5vn85xPqVJfbQuNAcVXBdtlWgzbrN0y2krI6.hKfxFkiWCfUiPpRkluOVky39M4LZt6C6R.7t8Uj+yj688AB3ABjd6J45qtKwkfEYpm+vpOCnhhCf5DYDqEG+Oct91utodb5ZnFqZb1E4cx+2f7N3ae.RwW1cwanCHVULhZkFed5k6xCkT19UwvMZEEY3EqpCzGrHpWumQbUuJg1Dp4vwqKkxdtNgYGs3eguR1rbJud0lkS2bDoJU4bpRcDdk9QU5lmSU5rIUoJmAnJk3tyoJM.pRUNmpzImpzTCWe6i7GG6zi1zXOeGcJTmpktSNcpS0zcrQsZ7j0mFzr9ZIFdXq.9ashQeTCktPjDn1xh9uOofdU0ZixGEtwCfXeqkUdWcDCqLpFtvnZ3hipg2cTMboQ0vkGUCu2G2PECnGEJ4dI+k6QUqsYzm+ulVL2znqkn+CfV1fAi
                  

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

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

                    @d-healey yup this is the way. Put the key switching stuff into functions and into an external script, then include it in both the interface and real-time processors, so you only have to maintain one version of it.

                    SimonS 1 Reply Last reply Reply Quote 1
                    • SimonS
                      Simon @aaronventure
                      last edited by

                      Despite separating the two scripts as much as possible, I've run into the need to get an integer from the realtime audio script into the deferred interface script.

                      Trying to use a global here causes a race condition where sometimes the value gets updated before, sometimes after.

                      This time I created a panel in the interface script, and set its value with Interface.SetAttribute(Interface.storagePanel,value)

                      It works in an exported plugin, but I'm not sure why!

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

                        @Simon said in How to debug control not linking in exported plugin?:

                        Despite separating the two scripts as much as possible, I've run into the need to get an integer from the realtime audio script into the deferred interface script.

                        If you want I can take a look at your project and see if I can suggest an alternative approach.

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

                        SimonS 1 Reply Last reply Reply Quote 0
                        • SimonS
                          Simon @d.healey
                          last edited by

                          @d-healey I appreciate it, but I already know the alternate approach is re-implementing a bunch of legato logic in both scripts. I understand that's the "correct" way to do it, but if the panel method works I just can't justify the additional code and time spent.

                          Is there a reason this separation is so insisted upon? The integer in question must be kept track of in the audio thread anyway. Is the performance overhead from setting panel data really higher than running the legato logic twice? Maybe there's a potential for catastrophic failure I'm not seeing?

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

                            @Simon said in How to debug control not linking in exported plugin?:

                            Is there a reason this separation is so insisted upon?

                            I think it's just good practice in general with most programming systems to modularize and separate functionality from form. This is why a lot of programs are separated into backend components and frontend components, and you can have multiple GUIs for the same programs because the backend logic doesn't have to change.

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

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

                              I'll suggest something (David, cover your eye) :

                              Create a broadcaster in your interface script for the sole purpose of writing these variables, but create it into a global.

                              Add the functions (reading the global variable from your realtime script), then just trigger the broadcaster in your realtime script.

                              That way you bypass midi execution order.

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

                                @aaronventure said in How to debug control not linking in exported plugin?:

                                I'll suggest something (David, cover your eye) :

                                thats just cruel..... funny, but cruel.

                                HISE Development for hire.
                                www.channelrobot.com

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

                                  @aaronventure said in How to debug control not linking in exported plugin?:

                                  Create a broadcaster in your interface script for the sole purpose of writing these variables, but create it into a global.

                                  I thought that might be a good use for globals too but it doesn't work - https://forum.hise.audio/topic/9746/broadcasters-best-practices/42?_=1736095809561

                                  @Christoph-Hart said in Broadcasters best practices:

                                  yes, don‘t. The global variable system breaks apart as soon as you are calling functions from other script processors as it was designed for data sharing across modules. Treat the option that you can slap a broadcaster to a global variable and react to events from another module as an easter egg functionality but I absolutely cannot guarantee that it will work 100%.

                                  There is an attachToModuleParameter broadcaster which might do it, but it also doesn't seem to work at the moment - this one's a bug though whereas a global broadcaster is not intended to work.

                                  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

                                    @d-healey Dammit, I felt so smart for a second there. Totally forgot about that thread, I don't recall reading Chris' reply there so that's good to know, thanks. I should probably check whether I actually did that anywhere...

                                    1 Reply Last reply Reply Quote 1
                                    • SimonS
                                      Simon @Simon
                                      last edited by Simon

                                      The root cause of this was actually this bug: https://forum.hise.audio/topic/12055/control-callback-does-not-fire-in-non-ui-script-when-value-is-updated-from-onnote?_=1740472879585

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

                                      19

                                      Online

                                      1.8k

                                      Users

                                      11.9k

                                      Topics

                                      104.0k

                                      Posts