HISE Logo Forum
    • Categories
    • Register
    • Login

    Value output from scriptnode

    Scheduled Pinned Locked Moved General Questions
    19 Posts 4 Posters 874 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
      audiolyf
      last edited by

      Is it possible to return a value from scriptnode? Let's say for example you have an envelope follower that modulates a knob, and you want that value to update something in the UI to animate or pass on to other processors?

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

        @audiolyf I think this is what global cables are for.

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

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

          Got this to work and it works fine in HISE, but on a compiled plugin it doesn't seem to trigger the callback when the UI is closed. @DanH I saw you were messing with the global cables a while back too, did you get it to work out?

          @Christoph-Hart Are global cables only good for changing visual things in the UI and is there a better approach for this?

          In my example it's of course an unnecessary way of modulating the saturation through scriptnode, but there is all types of fun to be had with making more complex modulation signals with scriptnode and using those with outside processors, so I'm dying to know if I'm using it in the wrong way and if there is a way around it or if there is a better practice to achieve my desires...

          HiseSnippet 1790.3oc6Y07aaTDEeVaOtXmRghpJbbUDGbkBVwPofTAEm37AQTmZEmlxspI6NwYj2cmkYGmDCh68Fhi8VOwe.bCt.+IfD23.Ggq8DWKuY1c8tq85zDmjBph8Pjm2LuY9MuO9My7RGA2hFDvEHiJ6LzmhLtJt6PO4AsNfv7PatJx3Z31j.IUXFJZkg9jf.pMxvn3FJAFUJgzeOaoUHNDOKZhHDZWNyhdOlKSlHsSyOm43rNwltCyM0nucyMs3ds3N7A.dJhWD4Sr5S5Q2hnFVALxn7Z1LIWzURjz.jQoU31C6d.+HuvwuKKfsmCU0nApKLQghWm6XqPr52nVGvbr6DuuCPHCbmDqPwPqvMvsY1rQxSrFuotCyDMRaOLJjEdEy.uFSCd4.IiTPpTHjtNtqkf4KS5Qgm4va5ANm8IfYOMTBGKpvmT.2hCivSV2kzmtt.ZLRiZ2YwEWvD9ysta0pfoOPZdHQX1y07SMWyqGyiVuGUtgCeOhy17ARlWu1DOvgHpAZjnfEA1UfN8bUiukpUs40B6MX37Ymbed.Sx3dvv0AZJMVa+8oVxZyG227Yl8tD4.AALqMxSmjd0KDyyAfs49C7rzqBDOovA3.85QqcHwY.8VU+5pURTqd.UtrTJX6MPRqs3Bgi4tU+F.0JUqKn8XpDfVDGm8f.xZYlyEL2m3D.JjZI2hKo22qldgh2SiuLMpundQLGWu82+jUbwbTT4hEbGGkiQo6XcqRyxumHEq4MvcOpXAyDCjZfPrW1.5xmt.ZqvHtTCj6soGSdeeZT6jLxF4D9ihBYge8fMWkHIpLhHYv37oBISAGiUoGBzKg4GUvqRC5K49.AyDIOPZK2dfixgmNWVQfE0AXOxj.oRR7.OvvzDbimfWZ51iEyk+I2c6oDtWG2gIsNHe7VHG7BVsKa7FQW953vzwDvVBu9WbhbikNcgRu.p6b3IqFwSBquBHUwwIR4wOZ7XbR5fuf5SDzc3cbHCqEPb8cnaCncAy8b3V86x9J5j4P9g.XE0HpYATBdTmfYIUq7EzYGnQL0.mwwvoaaMvsKbhpklvRgNPlQAUVVX6EUsUQKcod15FOG9h5rgpsQTmMh6LUB5VT4QbQesyH52vdI7nIM+oM0kiV1wgeTKtqOKJzEbAZYc3NC8Of6wrThBGQLPW1kO.ViHz9YjfcHLGUr9tTQfdRtBFXCqCXtvVbav1TdchEXCG1gHOPkvnHhfHRpnt0nHyzvJcDgZFhu6Qn8.PiqZSpt4gxSzgHfKh.mDnndJXTLEUTXjnpEj+UPsLWEuYvtpdsHNncU9ZkRH0pDZqz.FGFh5xsCAXF7eiT3ezHN8P97Avho.XYLrw8yBNvLxEvgipNNCXpTZLgR3x1gHfC0ChH58nVgQIZ+5lvDiw9tDzHOfRzUvgnVs.Pl5wwGTrJKvGRfWY.PIERRjQhZ66YSONNVdMHczF3XzpGGemxUqriwsfEsMyKxXooYe5SdxOtTaxwokgPO92Z1UR8ULFoGW29ziBMhoOTIzYzgJXba8EhyNWM+1lKOPxcAZAMQOJEZJOFZzeSfFXMFCM5uoil4v2iy8AlHgDMwziNAqwEz5WFNXVNtc.5KqcHU.ZXzQl3yWWm7.Dt0UcMqYMmgHzqg6oun7izzKSIT8TGWcAYIiW3Il5oFRkCPd1Oe9ARUb6ANRluyvWja8xGKX7x11uHSRpnqw7rYBytIVDdba8LiYZwaUJ+Ca7cO+LyTmJfKB1UwwuuJ2XzrAZF+qEnMUm6DXrTZZM0LVAuif0CdqI5hGwSnZ5b5omhGcNXlT6HtJz3v+J3t9TXWewedQhpO8uc9yl+TyYG7YN1Yhsvb3UYhn44hOSbF8A4bQfTbKSrGfWCnNFqCO3xeKjEymosPHkDZENuuKQea5y8KeuVXmyg6BWfTW1D80euots4CIGRM2fBWsTWDjSnrd+5osrd9m5x5ceKIr76HHdAviyxZnotrc3dp8XhvGDPWWP+xsUbbok2hSD410yVZcXSlqNQE9A7HwOuHk6q3L8F0rUQH03y4Aqktrp03K0RQb9qbxESoQqDiwtL0S.Vy6PpCjjnw3aAYE6S.hgXoYCxay83wO7LIBXapL5Pmzmuk2FZYojX0OQxMZtM0gRRGM+tMuGDERDs0Wk3x1VbR9q2AGBWSUlo4qFU7p3+WwqqLhhOtZ1nv6KlTc6rE8ZD2WrI62+9+XoGRkYnB+k2f9WK0QPydL.XD3AxwkMNi4ken7aiS1E+GHR9kQw1dUYMbIVB9ihdVtxm+ZZIfs0S+O3qBtspsYCzggWrBqJuGxEND7QVVpLr2C7A4qy6OC57AyfN2dFz4CmActyLnyGMC57wmnNp6eD8.NUNFHnyZg0IyXMOcUTUoan+A7H+YDK
          
          Christoph HartC 1 Reply Last reply Reply Quote 0
          • Christoph HartC
            Christoph Hart @audiolyf
            last edited by

            @audiolyf it depends on whether you assign the callback as synchronous or asynchronous. If it's asynchronous, it will assume that it's for the UI and not execute it if no interface is shown (otherwise Cubase will freeze with multiple instances lol).

            HiseSnippet 1790.3oc2YEzaaaCEVJ1JoIoancnnXGIJ1A2gTW61ttATLTm3D2Zr5DiXmztSYLRz1DQhTihJIdC65vNsct25ugca25OfcXG10AreB8eP2ijx1RIttNtsAsSAHQju2i7iO9de7QklBtKIJhKrrWrc+Phk8EcZ0mI6UsGlxrputk8G6z.GIIBjoq05GhihHdV114dfpC6Eyaoedw8WC6iYtjQcYYsKm5RdDMfJG0ayJeC02uF1izlFjR66TotKmUk6yiA7jyojUH18.bWxlXkZy4XYO+FdTIWzRhkjHPm03d8a0ieDyn+tzH599DUixVsfAxzsU0dTeulCVqQVV1NMGsxyYV4WwoA0iNr+QdfKoEfFYQZef8bSBRkOCPxNEjxafzkcZ4JngxQRT3YYm5LXCoCFb0oghQWq4P4bpxAMXxhA3CH0DPigVT3tkJsBB900u2RKAt6HI5Pr.IBPeMZCVWJiTrKQ9.e99X+s4wRJqaCLC1DDE.KFYfKnuHPoaULr9Jbsf964pd6ZYG3VzfPehJRoLXgN1RYzFc5PbkEtlQLRKWa4MuIpcOZD5HHDAsOAQNl3FKIdnn9L2dvRgGG42GwYHYOBBG6Q4vaBB1aIJyGfOpSLyURAE3LX5bKbH1Olb8k9wkVLEVJFQjqJkB59vfW.7HiV6qSbo6S7ipwEJUqgcgs2jQ452CA.7AqVeyk9oIA1D3sScPtBaqfh3HZGTedLx0mGQRDuh9ugXFC7ylgIRxCQAbuXerx4OlU0pQS4x51qfzZg9bzsJUBcCTY01tZEzbUXA.aSEEjtTU1cUru+9P1VAiSaE0Nk6lbIsC0EqlW8t53TWilUP5+j0fTPFDP1hUPCWXhQmTTmNiUlJLVv88UAeiQrh9PLICKvhC1mHRbCCUDxuxlzN+zkz5ZxpRoHmUmQkaERRZWi66oRFUue5TbqjzR3scpuNVhUY8I8A5ERDRpBN1qSNDnMMb.K5rNI5.Hn.HNOEAAPMYhTxxWohERD.9iLjDJh.VDU1OMw8YfDqzDIwlVHdYmlToauwiw4FCFAO06BLlP8+QNF9nQ.LuSsmLq77kNy77KkvyCyoZxuXRSTsmTdbL71+hynf8PAIDKHs4M8w8KDgUbAaCXbEz99b2CZQ+AxoyPBMPXMkFEb6A7O.g2rjHM+aoS+rFdVCPdcLb97lwAsf5.bIUSPGzm8bpbHS6Rp1p3hVDlmtwKgmDgkUssSDVdfvToeaRjGwEGn2NRd2xdAiuOR6j2qywksV02meTUdPHMIJE1Cz80j62OrGmQcUcYzX.RWMfGCSRBbeHNpMl5qBqaEGADEdawZAJqqSxN2tDQjdfWvoTQ3GHLeStGHxwbtS+lXYOU9hh6ABNIhhtCCRyf0zwIpgXPcTFuD.w.0RWWEUtTjMl3QUKHaaNynVOZWkTWru0tp8aE3sTioweYvmR0kbfCpL3ICbuRJ3NTiyK.NWJ.Nui.RHxBtkAvIHE0BNCXJeZLYMh4pMV.EMDkPkyHtl.EMJp6opetqtXJS0QVMwvDSfiPUxVvw.e0LAosGO3Lg0oQgP17Zw.qjgyHSOJ+.yib7f.6MfbSO3bGs4CB1GNQJ6yMrE3SZPYIdMM65yd5S+i62.eb59rrp7aUZIIgJ5iz505.xQFuY5yOL6JMIBJ2SWSepwJ9u+ym8qUrl..zOmB.vvdB.ned0.XYmGw4g.SjPZcpg+bX9mGN1URrN0nXkJd7DACYhKupivvAVLiNupPzEm+2eH6km4TmTwnIHERhSJcerg0YCjrS4GW3ciebPRwoFlUik7.vEqqQHCrx1XMN+f.rlc+MtNqO1HbYmV.Yl91KZl2qpaidL9P3tKDflSUdS4Ib43+ZZubb3Te43sbkvz2VfYQgvMJx3bIAz1blZMNpychfqBR99sUauo6uJGKFqnWb+Zvhbr1zBKiE53jAm1kpPsbYqIH+zUSP1ZVSo+XJgJ+6paume5pp60Tl+6+0omoHzEGfQyEI2fcHwGRRzX7SfrhN3Xe4fdyFj2.tO9f5fFEArMAJhqaWR1T6wsff6pB2hbTOWox1DeBNcz7mU4QPTHVzPyhNS9hy9GdYr6WepiAtHUlI5MYe6bMLah20J2TcWq253c1u20TxlLBJu1s7KL7CeN76nj7gOS+wodUb6e2t+7ce95Dn1rzNvGS8TGoOniusRV1++8eVammWGxnDR3lDXwIc+4daEZmepiQTKoObhoUzRfK+CI.qCI9vAvWxoI98g.hyiuKv+Wli.rqfumq4S1nR+uftGv2xz+GTVzogpMpr0glZqcTezAq.n9n8bcUju2.1CFuM2ZFr41yfM2YFr4KlAat6LXyWNC17USzFUooIWqQkiAczbCys3s2fotRlNcy5+.HoTW1M
            
            const var rm = Engine.getGlobalRoutingManager();
            const var c = rm.getCable("my_cable");
            
            const var SimpleGain1 = Synth.getEffect("Simple Gain1");
            
            // This will be executed synchronously on the audio thread
            inline function onSync(value)
            {
            	SimpleGain1.setAttribute(0, Engine.getDecibelsForGainFactor(value)); // GAIN
            };
            
            // This will be executed on the UI Thread, so if you close the UI, the panning will stop modulating
            inline function onAsync(value)
            {
            	SimpleGain1.setAttribute(3, value * 200 - 100); // PAN
            }
            
            // Protip: use the inbuilt constants for defining the notification type
            c.registerCallback(onSync, SyncNotification);  
            c.registerCallback(onAsync, AsyncNotification);
            
            A 1 Reply Last reply Reply Quote 1
            • A
              audiolyf @Christoph Hart
              last edited by

              @Christoph-Hart Thanks for the explanation! Why doesn't it ever update when it's set to synchronous though?

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

                @audiolyf are you using the master branch? I think I've fixed that on develop a few months ago.

                A 2 Replies Last reply Reply Quote 0
                • A
                  audiolyf @Christoph Hart
                  last edited by

                  @Christoph-Hart Ah that's probably it then! Develop but a March build

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

                    @Christoph-Hart Worked with the latest develop branch! Thank you so much for the input. It sounds like the update rate is waaay higher? Typically a good thing I guess, but I'm experimenting with sample start modulation and getting a very different sound from the asynchronous one (pretty cool but not what I'm after).
                    Is there a way to limit it somehow so it doesn't update quite as frequently? Tried throwing the global cable in a fix256 block as a wild guess but that didn't do anything.

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

                      @audiolyf the update rate is determined by the block size of the common container between source and target and yes you can control that using a fixblock container (but you need to put both the global cable node and the mod source in the fixblock container). If you enable CPU profiling (the percentage icon in the scriptnode workspace), you will also see a number that shows the sample update rate for each cable.

                      07f97ed0-192a-43df-b7ea-bf7bf55f7000-image.png

                      A DanHD 2 Replies Last reply Reply Quote 0
                      • A
                        audiolyf @Christoph Hart
                        last edited by

                        @Christoph-Hart You're a legend man, thanks. Having a lot of fun with this. Have a great weekend!

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

                          @Christoph-Hart this is interesting, I was following the docs and using a timer to get the cable value and update any elements of my project - works fine but this seems a more efficient and accurate method. How can I get .setRangeWithSkew into these callbacks for use with Frequency etc?

                          I've tried

                          Knob1.setValue(value.setRangeWithSkew(20, 20000, 1000);
                          
                          Console.print(value);
                          

                          No errors but no activity either!

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

                          DanHD 2 Replies Last reply Reply Quote 0
                          • DanHD
                            DanH @DanH
                            last edited by

                            Am I being super dumb about this?! 😆

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

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

                              Ok a bit more context, snippet below and callback too. I just want to convert the cable value into Frequency (or anything else but using the setRangeWithSkew function).

                              inline function onSync(value)
                              {
                              	FREQ.setValue(value.setRangeWithSkew(20, 20000, 1000));
                              
                              	SimpleGain1.setAttribute(0, Engine.getDecibelsForGainFactor(value)); // GAIN
                              };
                              
                              HiseSnippet 2059.3oc2Y8zabbaEmiVMxQRoBIAFAo2XT6gUEJJZcbSBfQgW8u0dQsjWqUVN8jA0Lb0xnYImxgij1TTfdLHGRNFja4yPu0a9CPOTfVfdoeHx2fz2iblclQZkxFYGgnHAHs7w2i7Ge78Wtczp.dRhRS7lcugwbh2q62cnzzei9LgjzdSh2B9ayRLbM0QZ8gwrjDdHwyq1CPBdyNMw9y2c+0YQLY.ufDgruRDvejXfvTPsSy+nHJpEKjumXPItuay1AJ4FpHUJfmZ9qRhYAGwNjuCCYaJeh2LaEJLJcWCyvSHdSutJbX29pSjN92WjHNHhiCZP5BKjibKUTHhXjJYi9hnvN4m6DBwyuSgVnlSKba+sEghQzKzFugcBZgDk0GdSUEd0p.uFkg2pkf2XfjWIHMsCRuoe2.sH1TLChm48aKgKmdLPsWFJNdIS8E072PAbHMqLfcDukFFLRh5e3pqtLE9yR2at4.UehgdLSS0Cn+A5VxCER9JGxMOHRc.KZWUpQHObalDtPz0AIJDH.3WO.4cCFb9pu3fgOO.+zhUW3thAwQbzpoAHg0NCEZqd83Al5K5llZmewJaPqc25IfD4mDbiTChURXP8EwIsazbu+6S2quHgdBXdQOfS4mxCRM7PZxPYPe3nqRShFRURpoOmxRCEJ3SZNKbNgLBNtzdox.i.XPIA3ET+XVTJeo49KyMKtKqjvM6iTbzwg6xjGxelvzu6Q7SpeGPcdmUWE0pMf+tDhpYKcpQIVyXzhC.XUG3pPKuIOPb.OJokRir1hE.FRY6+R2iBGsGrV6cl6uduK4XlcvdZaXd7TsLMQQE8nCUozfHUBOa5ks+OlIkvMpaYRLpX5.UXZDCulGi9XsjpJjK7X8AKSsbQ+cntf9dnpvcB5rFb..ChUz7CEXLkMXQQG.930cp6kQahfcTFQOQ.C2Wq8y3X2hlko1+UUfRPFlf+XYcKbgMld1o50aryglYZUTDZlOlowfV5KSv5xzAGv0YpgQLBdxUCO3ewgGJG8JvY0WhQkrsTXdbLWdQwzHYtJXnjLTArZrARVHKPR2HQHWSDP7hY7QyahEuYwiewG2++dexSauIyvxWEXAgMIlqMBD+daxOFht6BOMq+l7ji.qHKuYNmP5jen87TPO38ovFND+v+C9Pb94ncHtrsDQvUeCHWfFRC.eDIOueKM+OmxkACIfUK+LTJmV5tMGvNczvO+e2Drjh6J9Ld4LWIo85IPn3Se3mAxGFFw6nRD3EKxmGxV7W2jb93xPFAmaS0zDniQ1D3ZTN1LF+UBq8vxH3r4Nldxxcb4o1lT39l9cDlf9iGuSMF7BVD+Ti2rLw+JeW5gBvNseqO4RS6N8j4WU.kwlBdpNmq1n2xuiJZXbekTD3LKs.pvF8hKNhPJLOK4f8jxl.aaMjyG+NMeRJK5LZ80EwpHldhtQpMYpgwbzmdBMad6BeN5MHac7l4lCd+09YW5TTYeyA2K3+jeVB14xREAAQPX95YCos9jFiqBZuO2uHEerlCog36o5DwFVOggU.sK.2koGDoBNBypb95BxxmsNxQ8f9PUWPYdWkxGl4Uj+MYTs7PIaXRucRGzE54JfuQF5vTwSgUQ3FuJNFuk5xkg1AeO7S1jMvwdYS1HexhBPH6vMmnzGYaqI6yDua4z8IVk7y6cZCxZQQpSvJGDYVLvcfkVQLWjjiibjt1.UJVlgCtOjkrGSDg4r5ll.kGE9XYWfYaOod01mqSrK7s7WcE3WHh4N1Pty3p1dXGloOFf.q3BLi45UBFYNWAqksSvkHumUmVBf3.awOPGq4lmPVpZkpcx0gGNB7Alxs9sS1GmMfEQ12UHFbnvU2o4bHEYcNenjGGxp.7aWB3i335GpYJUej0Y7gh1hqBy4AXp4qXmXxQmMozHLQJhrrGSCsOkjUipjG3Ldrn.KUbA+CsMv55HkzobYj2x2Aebm.W4SyK1cSQRL3guNTUH20OdEJndPFxOM2XeKveMDzcVwyc.FsQn70FMBzIaKj6WpR6u8a9l+w82lcZYZDRyupY2pEpZ4CayzoMKG6zcqzgqEpP6apTZsR+O+yu8KaRtD.X+4b..V1tmqRYvK+BAv79ORohgnSZC4bK+0v9OCjX2vImaUHkbcNiwPE6x21W6hKtREdtHSzYm4u+P42+R3DUxZMCyfic1CmLVC7plTdkzn25mFMZt6w4Vl0RMpAfx11dPEXUcv5J0QCX1X+WoVIKm9dA2jy62EBvYe6nrZPwwzmwNlSe.GB8gUgbYUh+ulzmoLdhelxGGXfseOMSlDqRppb4CD6A8BmTl3SS3Xsb6hWukoughoG6Te28aAGxwJSWlIUasSxyEVpifZujMF03Gp6fWoOW50Z4ou7cn+p40cmMGit2SaK4w7Hvuvhw2BbD5wRiL4TqZWusRpxKLp3ReWNTU2gGxq5MOtCzZFCK3nBJ2t4t7HNqrA7us4i.COltZqo+nzEM9Q+R2i895c7cvkhNizeY7xJ0to8xJuZL4esQeSSidB4rNFK+M.bggvWZ369hM4PwXkUZOSDh4vyI7mZVMHO8u8t+lWzF7hzlNXuzmUkW659oSto8JDXnHPkeSBvVShaN.9M76v94fAw0wiC7Kk8X.KPqddf6caP2+WyRAzsR6WY8r9aiioMx+pU7wWd.+9EDOOH.C39dvcv3k4NWAY9fqfL28JHyu+JHyGdEj4itBx7wWpLX4nYcuf9X.gNa4Za2aKI14k0ci7+AZE2.dC
                              

                              Someone throw me a bone! 🍖 😆

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

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

                                @Christoph-Hart still trying with this... How can I convert a GlobalCable's value to something else (frequency for example) whilst using the Cable's callbacks? Or is it not possible?

                                HiseSnippet 2057.3oc2Y8zabbaEmiVMxQRoBNAFAI2HDJJVWnHq0wMI.AAd0+V6EwRdsVY4zdwfZFtZIzrjS3vQRaBZgOlCEIGKxs7Yn2ZQOjO.8PAZ+XzBjy8R56QNyNyHsRUYisgbVCXs7w2i7Ge78Wtczp.dRhRS7lc2gwbh2q62cnzze89LgjzdCh2B9awRLbM0QZsgwrjDdHwyq18PBdyNMw946u6ZrHlLfWPhP1SIB3OPLPXJn1o4mHhhZwB46JFTh66zrcfRttJRkB3ol+JjXVvgrC3ayP1lxm3MylgBiR20vL7Dh2zqoBG1su5Xoi+8DIh8i33fFjtvB4H2REEhHFoRVuuHJrS94NgP776TnEp4zB2veKQnXD8Bsw0sSPKjnr9vappvqVE30nL7VoD7FCj7JAoocP5M76FnEwlhYP7LueaIb4ziAp8xPwwKYp+VM+0U.GRyxCXGxaogAijn96uxJKQg+6lezbyAp9DC8HllpGP+X5lxCDR9xGvM2KRsOKZGUpQHOXKlDtPz0AIJDH.3WO.4ccFb9pu3fgOM.+1hUW3thAwQbzpoAHg0NCEZyd83Al5K5llZmewJaPqc17QfD4mDbiTChURXP8EwIsazstUvxIbyNL4A7mHL86dH+352FNg2dkUvCZiUbmzacK5t8EIziAqP59bJ+DdPpgGRSFJC5CZHUZRzPpRRM84TVZnPAeSyYgyIjQfVg1KUFXD.CJIbJBpeDKJkey49h4lEACBh8PJN5ze8ncd1RZ.jqUMFsXeXuqCvqPiuAOPrOOJokRir1hE.FUYaxM+HJf+6sZ6sm62eQmkLz+31v7HzWhlnnhdzgpTZPjJgmM8R1+FyjR310sLIFULcfJLMhgW4i4PuZR0S84drdukn45.3Rf9tnlvcB5rJb..iiK0MVvxZ9ABLJz5rnn8gnB0cZ9kPqnfsUFQOQ.CQ24xtEyKQs+op.kNXvD7GJqaOT.7nmdpd8F6bngoVEEgNFiYZLLm9hDrtLcv9bclxZDifue0.J9me.kxw6Bb9IkXTIaKElGFykmWTPRlyEF7ICU.qFanmExB8zMRDx0DADgYFezRmXwqKB9y9Oewe7yZRdb6MXFV9p.KHrIwbsQf32aC9QP9.W.sY82fmbHXqY4MycFR.8+aOOYTFim86ZNrXvgMiyOOsCwkukHBLAZ.YQzPBD3qH448ao4eVJWFLj.137SQobBs6zb.qXy9x+YSvhJtq3y4ky4kj1qm.3x2md+OGjOLLh2QkHvK3Q7E+mZRNaDcHWhyIqZBFzMJaBbMJGUGibKg0dXYD7bKqykEhugeGgIn+3w3TiAif0vKBLlkq9W36RfT.vo8a8oufRLOUmyTwza52QEMLtuRJBblbVPTX+c9kLQHEldYD+uexen4iJe8tk0HMe7a27QornSocWSDqhX5epZ9FW7Qe5Ko4waU3OQuhaGi2FWsw363mc4RQk5Uartf+itx.v4xRe.ABPn85YCos9zFiqNYuuzuHsbrlCoL36p5DwFVOgg01rC.wkn6GoBNDy.b1b4Y4dVC4ndPendJn.tIIk+LOm7WIipXGJFCSPsc5ftPmUA70yPGPyaJLyua7J3X7loKWFZG7CvmrIafi8xlrQ9jEEMP1laNVoOz17R12IdWyo6SrJ4m16jFjUihTGiY6EYVIvcfkVQLTjjiibjt5.UJVZfCt2mkrKSDg4Z5ll.kzD9PYWfYammd01iqSrK707WYY3ePDvssgPmwUG8vNLSez4GqRBLc45kCFYBWAqksSvkHuyTmVBf3.aAKPeo4MXBYZpUpdGWeb3HvteJ252NYOb1.VDYOWwSvgBWcmlygTj047gxSbHqBvuQIfOhiW9PMSo5irNiOTfUbUXNO.SMeY6DWdzYSxLBSjhnI6xzPiQIY0UJ4ANiGKJvx5Vv+.aapt9NIcJWx207cvG2IvU9j7BT2PjDCd3qAUvwcccWgBpGjg7SxM12D7WCAcmU7bGfQaDJesQi.cxVB4dEUGS91u4a9K2cK1IkoQHM+5lcqVTokOrOHm1rb7R2sRGtVnBsubRo0J8e82+1upI4B.f8yY..rrcOSUsfW94Bf48efRECQmzFxYV9WB6+LPRaCmblUgTx04TFCUrKeKesKt3xU347LQmcl+78k+vOAmnRVqYXFbryddjwZfW0jxqjF8ZuXzn4tGmYYVM0nF.JaaY8UfU0AqoTGNfYi8OQs+UN88BtIm2uKDfy9BQY0ThioOgcDmdOND5Cq73hpr9ebYeLx3K8iQ9v.Cr86pYxjXURUkKefXWn+0jxDebBGqYaG75sL80UL8Xm56uaK3PNVY5xLoZqcRdtvRU3W6hdTzFS3ihN8UtGE8UfNnq7tsyliQ2qiso7HdD3KXw3aBF+8XoQlbpUsk2RIU4ECUbQuCGpj6fC3U8fG2AZUigEbXAkazbGdDmU1n8W17AfwFSWs8xeT5hF+neC6wde819N3RQGP5qtu7Qsed+xGkuNesQ+VQid32rN.K+F9ma34+50+Ue2FbnPqxJpmHBw7y4D9sMqF.+Yy7u276ZCdKZSGre3Sqlq8x9YNdN75ASe4tLt3H0WVaWLjCnxeUBvVShWc.7086vtJXP7xnw+etrGCXAZ0SCbuIC59+ZVJftUZ+Qmm0eKbLsQ9O0gO9pB367KdZP.Fv8cg6fwKysm.YduIPl6LAx7al.Yd+IPlOXBj4CuPYvRMy5LA8w.Bc1z0Rt2lRrqJq6F4+Avcm42F
                                

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

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

                                  Yeah, you need to ignore the function argument and call Cable.getValue() to obtain the scaled value:

                                  inline function changeFreq(value)
                                  {
                                  //	FREQ.setValue(value); // won't work
                                  	FREQ.setValue(freqCable.getValue());
                                  }
                                  
                                  const var freqCable = rm.getCable("my_cable");
                                  freqCable.setRangeWithSkew(20, 20000.0, 1500.0);
                                  freqCable.registerCallback(changeFreq, SyncNotification);
                                  

                                  But this is counterintuitive so I'll change that so that it will call the function with the scaled value once you've called a setRange() function (because chances are high you'll want to use the scaled value and you can still get the normalized value with freqCable.getValueNormalized().

                                  DanHD 1 Reply Last reply Reply Quote 2
                                  • DanHD
                                    DanH @Christoph Hart
                                    last edited by

                                    @Christoph-Hart aha, excellent, thank you :)

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

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

                                      Alright I've changed this so that the value argument will be converted using the provided range, but this will obviously break projects that do not assume this (eg. your snippet will totally blow up trying to set the gain output to +20000dB lol).

                                      Given that it's a rather new function and nobody seems to have complained about the range not being used correctly until now I think it's reasonable to just introduce this breaking change.

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

                                        @Christoph-Hart Great, would you mind updating how the function should look with .setRange() please?

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

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

                                          @DanH

                                          inline function changeFreq(value)
                                          {
                                          	FREQ.setValue(value); // will work
                                          //	FREQ.setValue(freqCable.getValue()); // will work too
                                          }
                                          
                                          1 Reply Last reply Reply Quote 1
                                          • First post
                                            Last post

                                          21

                                          Online

                                          1.7k

                                          Users

                                          11.8k

                                          Topics

                                          102.5k

                                          Posts