Forum
    • Categories
    • Register
    • Login

    Which modulation routing method would you recommend for my project?

    Scheduled Pinned Locked Moved General Questions
    19 Posts 4 Posters 570 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.
    • griffinboyG
      griffinboy @David Healey
      last edited by

      @David-Healey

      He means the rate at which the LFO actually updates the DSP it's connected to, I assume.

      This does vary in HISE and affects the sound of High Rate modulation.
      I haven't measured every path myself so I cannot give a breakdown here.

      But it's definately possible to do a sweep with a good AI agent, or use the REST system to probe all the Hise processing paths and get the exact numbers for all the different scenarios.

      I started to do this myself, but I haven't covered all of them and I'm using lots of custom nodes, where HISE allows you to set the rate of modulation yourself and so this isn't so unknown.

      What I do know is that HISE doesn't seem to go faster than updating DSP every 8 samples.
      I might be wrong on that point but that's what I've observed for C++ nodes anyhow. Maybe it's different for native DSP.

      Custom C++ DSP (for commission)

      David HealeyD observantsoundO 2 Replies Last reply Reply Quote 0
      • David HealeyD
        David Healey @griffinboy
        last edited by

        @griffinboy said in Which modulation routing method would you recommend for my project?:

        He means the rate at which the LFO actually updates the DSP it's connected to, I assume.

        Not sure, that doesn't jive with what he wrote.

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

        griffinboyG 1 Reply Last reply Reply Quote 0
        • griffinboyG
          griffinboy @David Healey
          last edited by

          @David-Healey Really? He's talking about block and frame sizes though? DSP usually reads parameter values at the start of each block. Using larger blocks means you might not be reading the parameters / LFO modulation as frequently. (assuming the modulation / parameter callbacks are also being called fast enough by the modulator)

          Custom C++ DSP (for commission)

          David HealeyD 1 Reply Last reply Reply Quote 0
          • David HealeyD
            David Healey @griffinboy
            last edited by

            @griffinboy said in Which modulation routing method would you recommend for my project?:

            He's talking about block and frame sizes though?

            I only see that in Method 4, but he's mentions "fidelity" and "Resolution" in method's 1 and 3 as well.

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

            1 Reply Last reply Reply Quote 0
            • observantsoundO
              observantsound
              last edited by

              Hey guys. I do indeed mean the speed of the LFO modulation.
              I should have been more clear.

              Slow methods like the global LFO to cable will sound mushy and uninteresting at speeds higher than 20Hz. Native LFOs add some nice audio rate modulation distortion at those speeds, which the other methods do not.
              At least the way I've set them up

              David HealeyD 1 Reply Last reply Reply Quote 0
              • David HealeyD
                David Healey @observantsound
                last edited by

                @observantsound What about using global LFOs and global modulators, this is what we did back in the good ol' days before global cables. :)

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

                observantsoundO 1 Reply Last reply Reply Quote 0
                • observantsoundO
                  observantsound @griffinboy
                  last edited by

                  @griffinboy said in Which modulation routing method would you recommend for my project?:

                  But it's definately possible to do a sweep with a good AI agent, or use the REST system to probe all the Hise processing paths and get the exact numbers for all the different scenarios.

                  I have no idea what that means, sorry. Could you explain?

                  @griffinboy said in Which modulation routing method would you recommend for my project?:

                  What I do know is that HISE doesn't seem to go faster than updating DSP every 8 samples.

                  I used the fix_block8 node and put my oscillator inside of that container. But at 40Hz the native LFO to Filter Cutoff still sounds better than doing the scriptnode LFO to filter.

                  Here's the Scriptnode LFO I built
                  TimeVariantLFO.xml

                  1 Reply Last reply Reply Quote 0
                  • observantsoundO
                    observantsound @David Healey
                    last edited by

                    @David-Healey I thought that's what I did in method 3?
                    Can you route global LFOs in Global Mod containers to various targets without global cables?

                    David HealeyD 2 Replies Last reply Reply Quote 0
                    • David HealeyD
                      David Healey @observantsound
                      last edited by

                      @observantsound said in Which modulation routing method would you recommend for my project?:

                      I thought that's what I did in method 3?

                      Nope, method 3 uses cables.

                      @observantsound said in Which modulation routing method would you recommend for my project?:

                      Can you route global LFOs in Global Mod containers to various targets without global cables?

                      Yes. I'll make an example for you

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

                      1 Reply Last reply Reply Quote 0
                      • David HealeyD
                        David Healey @observantsound
                        last edited by

                        @observantsound Here's a simple project that shows how to dynamically assign a modulation target. The combo box in this case allows you to assign the global lfo to either gain, pitch, or filter frequency. You can play with this example and expand it to connect the lfo to more than one target at a time.

                        As you scale this up for a full size project you'll need to plan how to keep things organised otherwise it will get messy.

                        HiseSnippet 1679.3oc2YEtaSbDDdu3rnXSKEJzJZER8vp+vAnA6jPBTJBSbhSsZBwDanUBgPquas8pb2tWuauzDUgT+Y+WeW5SRk5KBuAsyd2Y68RLNNlDBfijk2cmY1YlcluY1M08EVzf.gOxHWy88nHiOA2XetraktDFGUaU0DtBaeQnjw6fVYeORP.0FYXjYcEEFYmFE840ObEhCgaQGLEB8LAyhtAykIGLqW4eh43TkXSaxb0ndwx0rD7JBGQHnMYvEQdDqcHcnOlnHaJL5GIAcQF2.em4uqkU6kKM+xyOucqkZ0Z9RKr3xEoKVjTr0hVsVb412a4kuSKjw4VylIE9MjDIM.D5JB68azU7a73M3Yr.VKGpZPITCXmimFUoKywtdOWS.BDT8ANpLwNpqf2jYy5O+.G1EiVvb.G5NMioFkJU5XnRFZpzzwpzkvMr7YdxAqnzmyiqwkT+1D3rQWUhoEM0KxfqH.J3x4bI6Pq5CC5yQgkJV7VlvWyd+b4fym.oYGGQKhylBaEWfQS8qYa9.y7qGMuIrPnCALQy9qm+9Ir5zVDS6FU2Z.g46KZHRqlc.PPTL3bcnxZ1avBjE5IbUHi4yH9LBWpIfY6sARhOvjRBO+EfTaCZQg8LY7DIOatrITLmWXP2B82l9hpvdyprzae6qaZ41BltYD8IhWeJXO541fQUDtdBNLnPdchhzLswyEnHkK8ENUHNNsfH7BBtNEIqpTBF2A7dlsC4VRlfaNTBKX0amuk4tDmP5r498bYYsMKb8jgYy5Skg9bPhYibHLP0KdeSl4OzyeMmCk2Q1El6l2DX.DPjD.BePrPM+NyRJI0y88b1KlCbIbpkroX8dADItvgEfbq3ydvrxlk5DPe6jUdkeM6qxkM4uWkSyI8XgjtEuPje.Vw7fK0t8PWKwe5P8G5xpHO+QwXAdnaKpu9ofhPH4LcF+4FuLdq3XKMBE7ZblbKOZx3pBGaUlr52GFe.kDbpPJRzPfTYDNwESvIff1VhUD6gXfXt.VO5BEYE5v6nmVaUhjzSdfngsyi5KYJqxXU5t.VeLNTV7pzfcjBuHZSBOAKe7288PFXiqA669perJ7CWRzbYfexjTWXKuLVUAJWclzpatpLG.wBgNLnH.G2KZRGiVwaxBvwXJfQE3GOfI2W27OF.2EGIv83phWBGYYCWGmZH5HbxbZniIk69T7ZsaConCTvowU+kIs113u8yDu8eM9.HC8wChzkqgeyUeFQSK+yIeSKGLcexKvO8YPOGmLgtW9PmFAuCSvR0YzkhUSLF53HR29LbpdONZ8ZElmvg3qVupO8WCobKs0morJnn1fXpx+U4elrKEJz5l.F1WRaP6.ao9LMo.3HzDhkd7WCWgP1E51Ncn1UJugP3sFm.NAacgTuKIPUUCZsHkX.w1TrII.vEq3Hr1QewZc3BeZbkR84qDFHEt8LfnttaHodQ.+FOGuzhyAeZeS022qB70BacxLFcx0W7TicPpJPn+QtJj33GjN83EjdDkpOVZb+fvO.z3QVCKyG20v1N9JyaRj9LUqKONzsATkvhB6NzrqSfpcloT4bwiKpFGk3R41QC9O3SxhkTiMRVrTuEQwBOtsLc68Bw164wMfBfQWxIxZ+hnwlpzay0oPowCg.dpWdbKKIr6M8I7.OQPJA2f5xZBsJFnO4SCnp.9sUQOo.pDD+gtzqeXUvFGJOMHv0fhBCejqHjmBszHyXmlni+jtKRM5+npd9YX2xofyy1SGavb8bnqw2k5.WAIApYUZaRnir+r5J4lBtvqqfyRUocaJj9zoC0WW0Gp87HojnWA8Jk2l5PI5Avea4Mf.OhO3lnSnq33+hOC835p3X0M90RdaN1NwKVjzMeu10UJXxq4LniLkI7M3Q9fOGsk.3FMIQpphfcgqoFSbzjwsy.81TI9YGT9FiaLhqP78o6Y7D6H8Cg5noB6xNlmeli97a9Qp+l4y+2ZscO0w+rDFdpbFcFzGwvb+eNttvY+X7rjG9PoDyfSF7lqniPG9NL+4+V9I5oNoAvtZ4mDRbREb8GkSNbFdfWlSiK.OpriuDmpm3yfhTFS.D2QjhrvoAF2oUdwnwtTgfluW+VaeENIhN51UueqqW.+jyHE7cwMZ9XYObIV9hWZE+v6JHhYhlA7s7n+clYwapFaV5fOzNB4Bc9+RKqzh5PLN+jx3BSJiKNoLdmIkwklTFWdRY7tGMipKl8nPovMN+Cg1r9ZwfsF8ebNiLn+G.TwalO
                        

                        I also have a video about using Global Modulators which might have some useful info in it: https://youtu.be/Y2XhAEE1IBI

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

                        observantsoundO 2 Replies Last reply Reply Quote 0
                        • observantsoundO
                          observantsound @David Healey
                          last edited by

                          @David-Healey thanks David! I’ll check it out before the end of the week and get back to you.

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

                            @observantsound Use the matrix, you can add / remove connections with API calls that you can hook to combobox callbacks, the matrix / drag stuff is just a readymade solution for the most common synth UX stuff.

                            https://docs.hise.audio/scripting/scripting-api/scriptmodulationmatrix/index.html#connect

                            observantsoundO 2 Replies Last reply Reply Quote 1
                            • observantsoundO
                              observantsound @Christoph Hart
                              last edited by

                              @Christoph-Hart Alright. I had a feeling I was overlooking something.
                              I'll try both Davids and your Method Christoph. Just to get on top of what's actually possible.

                              1 Reply Last reply Reply Quote 0
                              • observantsoundO
                                observantsound @Christoph Hart
                                last edited by

                                @Christoph-Hart
                                I'm afraid I don't completely understand the matrix API yet.
                                In the example below, I'm not getting print messages for the modMatrix.connect. But maybe that's normal for onInit? And there's also no modulation happening.

                                The reason I thought it was a closed system, is because I don't understand how to set depth without using the floating tiles. I've looked at the tutorial snippet multiple times, but if the answer is in there, I don't see it. I only see a bunch of setup and then CSS styling.

                                const LFO 				= Synth.getModulator("LFO Modulator");
                                const modMatrix  		= Engine.createModulationMatrix("Global Modulator Container");
                                
                                // --- targets ---
                                const filter    = Synth.getEffect("Filter");       
                                const synth 	= Synth.getChildSynth("Waveform Generator");
                                
                                // If you want to be notified about connection changes, you can attach a callable object here
                                modMatrix.setConnectionCallback(function(source, target, isConnected)
                                {
                                	Console.print(source);
                                	Console.print(target);
                                	Console.print(isConnected);
                                });
                                
                                modMatrix.connect(LFO, filter.Frequency, true);
                                
                                1 Reply Last reply Reply Quote 0
                                • observantsoundO
                                  observantsound @David Healey
                                  last edited by

                                  @David-Healey I've checked out the snippet, and can confirm it works to switch the modulation between gain, pitch, filter using the Global Time Variant Modulators. And it sounds nice and crisp.

                                  I've also watched the video but I still have some questions:

                                  • What would I need to do if I wanted to modulate a custom target that can't have a GTVM? For example my instrument color crossfader slider, or modWheel?
                                  • Is there a way to set the modulation depth at the GTVMs directly instead of lowering the overall gain of the LFO module? That would allow the same LFO to modulate different targets in varying strengths. The GTVM UI does have a strength slider, but I don't see gain, intensity, depth or anything like that in the parameter dump.
                                  const globalModContainerId = "Global Modulator Container";
                                  const lfoId = "LFO Modulator";
                                  
                                  const modIds = Synth.getIdList("Global Time Variant Modulator");
                                  const targets = [];
                                  
                                  for (x in modIds)
                                  	targets.push(Synth.getModulator(x));
                                  
                                  
                                  // depth slider
                                  const depth = Content.getComponent("depth");  // -1.0 .. 1.0
                                  
                                  inline function onDepthSlider(component, value)
                                  {
                                  	for (i = 0; i < modIds.length; i++)
                                  	{
                                  		// Thought this could maybe work as the universal chain idx Attributes
                                  		modIds[i].setAttribute(1, value);	// Unknown function
                                  	}
                                  }
                                  depth.setControlCallback(onDepthSlider);
                                  
                                  David HealeyD 1 Reply Last reply Reply Quote 0
                                  • David HealeyD
                                    David Healey @observantsound
                                    last edited by

                                    @observantsound said in Which modulation routing method would you recommend for my project?:

                                    What would I need to do if I wanted to modulate a custom target that can't have a GTVM? For example my instrument color crossfader slider, or modWheel?

                                    Maybe a global cable - I'm not sure.

                                    @observantsound said in Which modulation routing method would you recommend for my project?:

                                    Is there a way to set the modulation depth at the GTVMs directly instead of lowering the overall gain of the LFO module?

                                    You can adjust the intensity slider .setIntensity()

                                    eab67264-4dce-4b3d-b150-bfd05690232e-image.png

                                    But if Christoph says it can be done with the mod matrix that is the way I'd go.

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

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

                                      With the mod matrix system each connection can have a intensity and you should also be able to set it programmatically without the matrix floating tile using the API.

                                      For targets that dont expose a mod chain you can just define a UI knob and give it a matrixTargetId. You‘ll loose the precision of the real mods but if it‘s acceptable then fine.

                                      The modwheel could also be a global source modulator using a control modulator.

                                      1 Reply Last reply Reply Quote 0
                                      • observantsoundO observantsound referenced this topic
                                      • First post
                                        Last post

                                      13

                                      Online

                                      2.5k

                                      Users

                                      13.9k

                                      Topics

                                      121.1k

                                      Posts