Forum
    • Categories
    • Register
    • Login

    Which modulation routing method would you recommend for my project?

    Scheduled Pinned Locked Moved General Questions
    19 Posts 4 Posters 118 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.
    • 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
                              • First post
                                Last post

                              36

                              Online

                              2.4k

                              Users

                              13.9k

                              Topics

                              120.7k

                              Posts