HISE Logo Forum
    • Categories
    • Register
    • Login

    How to Modulate Gain with a Table in ScriptNode?

    Scheduled Pinned Locked Moved Solved ScriptNode
    10 Posts 4 Posters 492 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.
    • clevername27C
      clevername27
      last edited by

      Does anyone know how I would…

      1. When a note-on occurs, the Gain Node is modulated by the Table.
      2. The user can set the duration it takes to go from the beginning to end of the table.

      This is how far I've gotten…

      84430647-2110-4c59-8ad7-eb5e04549b39-Screenshot 2025-01-05 at 2.32.46 pm.png

      Christoph HartC 1 Reply Last reply Reply Quote 0
      • clevername27C clevername27 marked this topic as a question on
      • Christoph HartC
        Christoph Hart @clevername27
        last edited by

        HiseSnippet 1317.3ocuX0rbhaDDdDFgiwNaksxt24n2JtnfXu+3JGVa9KgxKXJKVW6dxYrz.LERynHMXa1T4dtky6s7Hjq4leGxKRdCR5YFAHYgYMT1VtJP8OSquomt+ZY5DvsIgg7.jwFcG6SPFaYZMlIFTc.lxPMqgLdhYKbnfDTPqpxXebXHwAYXr1OJUXrQVj55eeaErKlYSloBgNkSsIui5QEyz14finttMvNjtTuXdu2AMs4rpbW9H.OqYVB4isGh6SZiktkwDYjqtCUvCrDXAID7oB2Yr0.9kLs+mRCom6RjBkQVPfzpQUGPcc5LYuFhPFY6Lamuldm+LyVTG5T8yx.eixPgYqHdNvHyhfT4k.RFwfTVMjdpokc.0WLyhDOaZ1jAGH8vPpNNTz9hLt1rJGbfIJ5gGRZD.BSWv1upTocJ.e7hen2HlsfxYE3r1bA4X11uH+ulei7+V9B2zTudy0l7wDvccIAy0r7zMXQKba1HuyIA6T3Br6HxTGgsexbZt6VN0Vuqi4Hm0jQEG6Shjavccj4J48oOAPQoM3t22rFVfkGJQ5.+7IABpDNF0HW.U05inMLqQBGJ39PccpyOnxg6LxEKRVNI6ahL.4iDmgxCJVHULNde0RTiUZg0X2UH9TyNTg8f4iwLyAiPl5g.iQclesY8d8H1hY.LqYiOrpsgkV51v7QsgvyT9v2JRrPiOTdtMf+t4rhc+.hONfzk2wEOd6PrmuK4D.i6T3bWt8PK5mHo6P70PnhzissGfYLha3pzHk6dhbBcBejfx52BKBnWgLLaOxyBnosIUiPGnyHirGRKWRJKqKrHLGkv+AWQFKKkMhLVdhwXsesIhK4ACUGGQ2iLVWm6CUI4y5cUYzgtt7Kqx87oQUovYfRWGt6X+AbF0VpR6wDjdnGeD7Phf6OgC6hotxxZqQg.QgywLKvY0XLi0NkDDpB75lkJB+Ak4s4NfIyFXaHwNtCVLP1uH4dfhSRPQ6oEoIvZ75DYHlLlSmk.H5I25pgbqEirQWOJkftsL5n1L7ToUarK5T44sD7HYLktOAe5AEdvfKMfRf2mGCuyb4wBhFwfXdSOtybP3yhivId7XAvrw.XNUNLI3dhBbPemJ4c+AqbRtXxD.kClSHHHzLV3t3f9DQXzXIFwVWzqNxa5HWQ.vuf5fguHv.esNcTlpT1MmX+oVSh82lv9KfTTYXI1bYiu4lGrktCzeWMY1ZMZnOvJVYDvtq4dSnQlUXNjqlPPTG33bf42pkOgzH99BRuSjfMVKJKJSplR8me9y+8aaguJtND5f+3.KAwWRCG2OqgjK0oj3yg0kNcHATti5UWSEKzB.f5JE.fvdC.nttc.ro463befQOPfREp3O+0eXd9QETohxgiDbOvhyzVonJr0MEX4PlDkXaYB9Nnn1xp1.cy5otxnEN8tEW+T2bu2TL40EGeja6i1eW+2+KutpR9xO8w962Qb9d6pkgO58cRW2WKun9JeBd3b6qTFtO6qtU5f9RVyTzAftG5NwEHjHG0OEweTNp+Rx2mIQN5VIElSOwGuNcOAT+eWHEtt+e87ClzS.3MUTR1SrzbC2Uxoe9aq8OQbCVdbtX.7lZ2DL68k3ltOxCaYdBIjHzQIUrRVGTgyG5gUuj2p8ua8X7JodX6.9YQS6kESekRCTTwT+lDaX1RJWnL5hatakuZvY11ICUpE98q5B2cUW3dq5Be4ptvWspK70q5BeyWdgxeRmn1SIqIz80otlNynNSN8Pw5f9efqsiyv
        
        clevername27C 2 Replies Last reply Reply Quote 2
        • clevername27C
          clevername27 @Christoph Hart
          last edited by

          @Christoph-Hart Thanks so much, mate!!!! 🚀

          1 Reply Last reply Reply Quote 0
          • clevername27C clevername27 has marked this topic as solved on
          • clevername27C
            clevername27 @Christoph Hart
            last edited by clevername27

            @Christoph-Hart @aaronventure Thanks again for this, especially while you're away. I can't seem to get it working, though. (It's in my sampler's module tree.)


            Clipping

            The signal is heavily-clipped.

            759e69ed-b055-4a80-a6ca-179086da0e32-image.png


            Duration

            I can't seem to match the duration of the envelope to the duration of the sample? (Or, perhaps they are matched, and it's too fast to animate.) I'm guessing the the ramp simply fire the table envelope, and that its timing is irrelevant?


            If I get it working, I'll package it up as nicely-commented HISE snippet. 🙏 A custom-envelope dynamic processor seems cool.

            Matt_SFM 1 Reply Last reply Reply Quote 1
            • Matt_SFM
              Matt_SF @clevername27
              last edited by

              @clevername27
              I tried the snippet here and I get no clipping. But I can see in your screenshot that your table is nearly flat at 50%, so naturally the modulation signal can go over that value.

              BTW, it's better to put modulators and modulation processors into a container.modchain to get a more accurate modulation signals.

              The duration parameter of the core.ramp sets the duration of the modulation, independently of the sample duration. You can increase the max value of that parameter of course.
              You could also fetch the sample length value and set the duration accordingly :

              HiseSnippet 2603.3oc0Y0saabbEdWIs1VLpAIstn8lBLfn.kNVllqD0e0MnThRJQnVVrhJNI0vPXztCIGnk6rX2gRhMvn8xbceRJPeAx6PeE5c8l9FjdNyr+Rtx5mH6zJCXqyLm4b9lyb9ccmPgCKJRDZXV4nwALCyEr5N1WNn8.J22XusML+oVcoCC7Xgjc7Oi4I.l1Zb.MJh4ZXZN6mg7YN+bFpe9O+9sndTeGV1RFFuTvcXOmOjKyVsSq+.2yaWpK6H9vbb2r0dNB+1BOwH.SyZ0vHf5bJsO6ETjsYrL9bZz.CyOwx0tocu0cnqttcykbbVZ80VZi0bXzd8XqZuxZMWuWydTmFKYXducb4RQXWIUxhLLmaKg63tCDm6qUvK4Q7S7XHgsQWPy5k2U34hWQbUi1C3dtcRLVQFFlVcxLcypMcOzZetKOc8LS3Go1fjch7FPyYJBuYK.O67vqQN3UBjLyAo4zP5is55DxCjY6f34Cr1yWxBAySw2RMuFy7usrZK.N7k0GROksaHPjdhZq1nwhD3udzypTAdqhjj1hgmH1RbgM4SIIGrOSBKGH7AhZUS4nJbJ8g1eyNcA9ictP90+59zfmyij0xDeLKnzU9lY7FVqZxlYBVeK18qJv+NfagC.D8lDXW7.U39dbeFo2HeGIW3S1EbJSgQz9L+Q0dTkuox7o3udDCjBWxFFUcQRUTHyWY9dhvZbPcMdFgS9cpqVcOlee4.XgG+3GUYdPF4DB00cOPD0PFeE+0nPdSk2ToLsWBHw3iXIgV6PgWMmDS8hjyndiXJPmXZp6IntoxUqTEWOwFU8adVkBWuXY1l54cBD6UaZ0gfpxSeJ4KYDeFykHEjQQLBkbRHnIGZD3pfK1iIcFPjCXjHk1IZahFhKRNg4Pwyw6QNmQbE.m7HB2WchgvsmzdqEQ8fz9ryikxPZ.A3yWHAShm2XBd8.Tb9.luVkb+9SqUkjhDnpX9tjQAjy4RM5T3gzKTLTQFDxNiKFEkouXOK7lk4jBZEUzmB4E6CuO0cBYPD7VYlfZeSEBoJ2s5ukTsriVcQbeZX+HfiWUkcF79ggsnikV0g64hDtTIs5qUbKoZt0TvyNXmjnBpV4MpHlRzScpTRcFbjHyGHKrADe5xPFK+9L2DG6KQXttX7IyOK5CeQbTmk3EuEJCvg8zwvuj33VK8FtHI89sHAucJ+0yngjHlGS6kmlZvN1x1MYqZUq+Ip.O7.wtTeZ1IeUiWiQ70Rxrn+2c7c0wpO8ofWbjviUOHjC4lzB.2KMwAFEroTFxOYjjUKaYn.31iBonRVL4UGzz9PXKuKC7Qbi1ERjqzWThfwHrG8rbAuuPHYG3qyq.A8jI2pWuR2KN1CS5U11XYzv21Aq4OZ3Irv7IHPFgREEq+Xc40exWdzQmmOGiB+874xCBX9WVQSi3hCXspXTArJUUp9n3JUI4ZL3tXgpzTOFJXmqshVFewdaCtNIBCjKnq.VnjiWCysgfXGltL37VayhNUJBT7FmpDZL3Zp5KRU620u03Th+5erkpPfg4expRikexlNPRCI243je4Ic8ogria6AUX4NDEEwtRiUKg0iDC20SHBOdiF+lHBPQTjFCof1sLmQ0zzT02gNKDti7nxhsafMkEuA3CTnFOVG2OhKGmuos6rdPttP7is5vgD0kiwYJAivq76BLF241OwR2ePF.myZ2u5cSaZ4U+uRqdnEaIjhaHjdMNokBCUR5719tni6fqcG2cBYpNF3+4br8cs1ZDXiBKt5eukRUaNTLxufthQ9gr.H0M7Lm6LOn0gG9YghQASdJRKkSwQgPWGfoH+c7.eFXqk4uisCEQQ8fqiRVQ42pynv9nsJakCgROgQEW6EiFhE77YdXVOSSXouHhguubm8oP1+KxysRKMNhpdigwPTz1SPuzDzKOAcyInWYB5UmfdsL5z5vnmQcqaTNjISwe+qWJdPYcnf4IGmaw6mBD8J4GSJ8IQA6biXUxvJ26c07Syc8BLe6i28+AoZKLt27IXrKW2rS7j55A32l0iNxSlrZwzI6K7EACD9bmhALP.P+9rv7XuzKzlXykmlsxCacHzIFMJWD+ut0ygVkngEyCbirE123QeK885WZogKAyAR9g7t8d0M6sVtb1qU4x6b79iPoyxdlqXkzetR4KXkMgeYeaCyu0Jq2XXPu.nkriDc7niqoGI4P.ivnodBmSwRcS2PcfFBagbTyIt.xsou66cG47abnXjDpWlTyxBJr0EJl6vxWdCafLltARi9HcgAgUDeO7S7l1I0BwMsS1LqyciWvjmKBOU8bD+6PEEz1+Kr70zGKw7+oIg1zySbdGg23jzLpqGTOFcjMuuUi5vezbgMmyicwgGMMYx8HoeA8k4yoQGQ4dX+hcGEASc3dfeWfYUqPnS2KTYat+tTGvJOtCUN.Cjv4V.OUXtPmTO1KC3Y9OnkW+EHuLdwWtNzPfGXx+H8cDQPRiUZKda8.6pJ5lyh6i1wXndO82laHTqSisBP+mmC5YrTFDyKhqKDLyAgJVCEtkffGlGAIbTF.xIfqq9mKm9umB+E08GpzMDNot6kp03icUZL2Ph5DJHEj5bFspU0ndodVy6AU2kLCir7tGQgNKkQwyb5q+fCwOf64hm.7.BLRcDzqokRNuCCiBWW0YJbc+.35Fxpq1n76pZqq3tNGF+3wtHYL4s4QAPlNci7QSsBPumuK6BLE9SrKBXvtkPAwT6y8iMQODhdsan+wt4FMrsW0FZb7hWVXZ8u8e1pqjEnmcnzinyc2gExEtp4Sh6YIVN22BNAljXjTLDrlwUn5dJ6bscKeoZibP0JCpVXhlbXyxxFn0wbOWHBfDwgRiBaVDDZAbikd76+jxxd5qiQdeyx75x617.KUBH6hNNKXAxaPc0Vk54jdrqJNYBeGUK8Qo+FFujyWYGnDmKz3fhayUrVd05E+4rCN8KauyiWN7qGuVaEM7W8dbGum+0qvC5aKNXh.jBlhBQKvDkmVZzhZixiVTacUQK2jv79XxsoByg0Lt6h4JZCtzclJI1BV6E8RbWGpWh+LTx7Gr.J7JzepxCwuB8urpBwm4JdEl45j04AfspwjwaH8UjkIe9hel0J0atzRKsVi0Vq45MsWtwFogq.LmHzrPzagb.2+xyA7.Lq0MDVHCK2vtwx.Carw5M2XsF1wIo5NTHj3+4FY0mVpwTYohWz38ukaAqCYQrXbTP3kmG8x7tA+wbXGkLLjQ1md23tu5SJ+e+e4eMmwe6ezprj0kWrIeFhaVeAEJ2cqBH2RHNcHU0K9s5igecG+7Ci+PjDcIx+2dV4ErTe5LB9kN+wBpuOlHKYzS7IO920Uemk4iUnUeIcOFLdR9OKPDT0AgDjp88BJGRcBEGG26Nh0GnVAPoupnv7V6izjo++2w.6l+XGmhhZpCtzs8fKeaOXya6AW41dvUusGbsa6AW+pOH9IYiKRh45f9U6ri1AzbmTGvYM9urhleDB
              

              (The code in this snippet assumes all samples in your samplemaps have the same length)

              Develop branch
              Win10 & VS17 / Ventura & Xcode 14. 3

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

                @Matt_SF Thank you for your reply, and for taking the time to code a Network. So far, I've been to get this to work. Follow-up suestions, if I may:


                Module Tree Implementation

                Could this be implemented in the Module Tree by assigning a Table Envelope to modulate the amplitude of a SimpleGain (and sett the attack potion to 0)?

                Modchain Node

                I'm a little confused about the container.modchain Node…

                Why wouldn't modulation simply be made more accurate in ScriptNode. Why the need for a "Make this Accurate" flag?

                At least in my reading of the docs, it seems that this Container Node is only to prevent modulation signals from being audible, which appears to be a work-around for for the visual ScriptNode topology being restricted to a single, directed signal graph?

                This (seemingly) makes HISE's ScriptNode visual hierarchy confusing, as I guess the audio signal simply "pick up" further down the tree after the Container Node. (I'm guessing this is simply to save development time. In MAX and PD, you would simply create an independent hierarchy for the modulation path, but those projects have many developers.)

                ustkU 1 Reply Last reply Reply Quote 0
                • clevername27C clevername27 has marked this topic as unsolved on
                • ustkU
                  ustk @clevername27
                  last edited by ustk

                  @clevername27 said in How to Modulate Gain with a Table in ScriptNode?:

                  This (seemingly) makes HISE's ScriptNode visual hierarchy confusing, as I guess the audio signal simply "pick up" further down the tree after the Container Node.

                  Yeah but keeping it "inline" allows to live in the right block that is currently treated. In other words it prevents from sending a mod signal up in the chain (so back in time). This way you're kinda forced to respect the up->down left->right signal paradigm.

                  Keep in mind the modchain may not need the signal itself, but it still need to know where we are in the buffer to sync everything up

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

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

                    @ustk

                    Keep in mind the modchain may not the signal itself, but it still need to know where we are in the buffer to sync everything up

                    Ah! That makes sense. I'm now sure where MAX/PD comes down on that, but I see the logic and application here.

                    I'm still confused why…

                    • ...there's a need to enclose modulations in a mod.chain block; if that block is needed for effective modulations, when why wouldn't that be internal?

                    • ...why the pma block? (The documentation doesn't explain what it does.)

                    (I'm asking all these questions because I'm guessing at some point, other developers will have the same questions, and they can search the forum to find this message. But I'll no more questions in this thread; promise. 🙏)

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

                      @clevername27 said in How to Modulate Gain with a Table in ScriptNode?:

                      why wouldn't that be internal?

                      What do you mean by internal? The modchain separates the mod signal from audio signal. But some nodes can do both so you don’t want them to blend. For instance an oscillator. And having a dedicated container makes things tidier, at least to me…

                      • ...why the pma block?

                      I’d say why not? 😛
                      It does what the bipolar does but without the add parameter. I think add could have been added to bipolar And get rid of the pma but since the latter is older, it might be for breaking compatibility reasons… but yeah, we have two different controls that could’ve been one unique node…

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

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

                        @ustk Got it - thanks!

                        1 Reply Last reply Reply Quote 0
                        • clevername27C clevername27 has marked this topic as solved on
                        • First post
                          Last post

                        9

                        Online

                        1.7k

                        Users

                        11.8k

                        Topics

                        102.7k

                        Posts