HISE Logo Forum
    • Categories
    • Register
    • Login

    Set Sampler Volume

    Scheduled Pinned Locked Moved General Questions
    9 Posts 5 Posters 1.2k 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.
    • C
      cykid
      last edited by Dominik Mayer

      Hey,
      i want to use multiple samplers and set their volumes through knobs.
      It tried it like this

      inline function onVolumeSliderControl(component, value)
      {
         reg x = Synth.getSampler("Top");
         x.setAttribute(0,!value);
         reg x = Synth.getSampler("Bottom");
         x.setAttribute(0,!value);
         reg x = Synth.getSampler("Room");
         x.setAttribute(0,!value);
      };
      
      Content.getComponent("VolumeSlider").setControlCallback(onVolumeSliderControl);
      

      but the result is weird and seems not to work.

      any idia?

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

        1. You can't declare regvariables inside a inline function. Use local.

        2. You can't declare a variable twice.

        3. Create the references to the modules in the onInit callback. You are creating three references including a full tree search for every slider movement which is terrible performance. Even worse, if you automate it, you'll end up with drop outs.

        4. Don't use magic numbers (0 as parameter index). Use Top.Gain for this, there's no performance overhead and the code gets 100x more clear and sustainable - if I decide that I add another parameter before the Gain parameter, it will break your code, the Top.Gain would then automatically point to 1. I admit it's highly unlikely that I do this, especially for the first parameter of the most generic module, but it's good practice.

        5. If you want to control the volume of a sampler with a knob, use a Simple Gain module. You will get a decibel range and much smoother movements. The Gain parameter of a sound generator is not smoothed for performance reasons (you can end up with dozens of sound generators which in 99% of all cases have a static volume).
          I can't say what range you are using in the VolumeSlider, but if you use a Simple Gain module and set the mode to "Decibel", it should work.

        6. Try to avoid repeating code. Use an array for the sampler references.

        Add three Simple Gain modules to the samplers, rename them accordingly and try this code:

        // Use an array with the references
        const var Gainers = [];
        Gainers.push(Synth.getEffect("TopGain"));
        Gainers.push(Synth.getEffect("BottomGain"));
        Gainers.push(Synth.getEffect("RoomGain"));
        
        inline function onVolumeSliderControl(component, value)
        {
            for(g in Gainers)
                g.setAttribute(g.Gain, value);
        };
        
        Content.getComponent("VolumeSlider").setControlCallback(onVolumeSliderControl);
        

        This is the HISE Snippet containing a full example:

        HiseSnippet 1514.3oc6aEsaaaCEkJNrs1qsnsnOrG1CBAa.NXco1oosaHXnt1ooKX0MFwocaXXnfQh1lnRjBTTo0aneHaeEaXOs25Wv9.1WQ+C1tjRJltyKwZMqqIP5gBwK4k7v68xKuGE2dRgGMNVHQNU2cbDE4bdb+wb0nNiHLNZqMPNWD2kDqnR2TQsGGQhio9HGmJ2WKvo5hHyyqtSaR.g6QmHBgdrf4Qe.KjolHMp0WxBB1j3S2kEZM50Zskmf2QDHR.7TA2.EQ7dJYH8gD8vV.ibv2ymoDx9JhhFibVrsveb+QhmwSG+iYwr8Bn5FMQ8gIJU7lh.eMh0ui5LhE32KeeGiPNms2DqPkTqvUwcY9rCjOwZbISGtSzv1d3rvgAul+KgmiE7VLEdWF22SxhTS5Qis2CuEGbTCHfKvFVoiEsvWr.ti.FAWsRH4ozMkPiCzn9sZz3Zt2rQikW+B0tPsqec2GEScIbWhTRF69LlZjqZD0URGPkTvKGWCbVwJ28IRWcf.UF694te62sdsrVqDkDOptIZZkgT08FLf5opuzthH8.VZ4kOpQ1VnThv4bv6HrFZMFO.Fr6fDtmhI3tB9iEAIgz9ALepTaEjhf5dhvHAGrGWC1EAIzkq8C0bgmABY8gtLd99ZYiT8yvUhop6pTR1dIJZ8gqnGQt1qW6EvRmahAr0Ie9quj8xuzx5YICDcHAA6Ag40mIDWdcqsvCEJ5175ZTVs1Kp858LXvr5JahBnxY0q9.n7PTqNOIbOpzx9nGGDGNcf9Ylu.cuTSi0.E7s3L01Qzr1SNJzbFGEPY1V8ghL.BCUYNRbwriDolODyWKx1hhLaA6bSnGs0FDEIe1fIFVrHpTwz6ImMn6C4tROvUEuAM9oJQjYrYdUjSs4cseNj5x4Wgkbr9ktvKgB+r40isGM.EZmJ8adYH441PER.G0m88F3+S+n942tSbxfAL8Dic8aC566GP6IhYZO3DcW8kn+d9CHKlvOIfnlN0lNXNqC8bXmCQmmfCy8X678EHeWiYlualN44DtWF2io7FMa7tvLvK3m+uFuY2dbAbZVoIfcQ7le8w6UEGET9fTnbEbekjRfnqg8IgQPZ.CdvXHM7a26x6IoABhedTb5vdYq1PTLUNszetkYotanHgO0ZksE1gFQIptomfN.d6ry8khjnWWqWcGSbxtRHIKXEr6XaNEL4J6IoiTDGO.1Nl4J1tqdIxgZak0JR2GtcXZYOLIDb6bNMHVeT2ADYlpF6RL9yOBu5ZqL8y9aC+yfOV+5m0wzNUklEWkUKtJ2n3prVwU4lEWkaUbUtcgTIMZpKIZl0Vdt4q1RP8dDvaac1sMan0TqkLchUqgdP3lA3Vq1QTS3Y9enj0i+T3u423TY9f6QTUc0bL1moca2iuOjpBjjdMyFzAjj.0ARsAYWAWDMRvYdSmW.JPb3PpzF5yb+.kRBoklH4ps1gFPIwVI19vVO.JBkHmNcWgLEMmeSwg4tdebJbc0o5cOcTnPkS8EJbjt7yd.weSz+8ygRUbFUsCoNADZCZ.YJa2Ww7UirJks0LpjvoxwUr6hycPfF3mbBZuB1XXOIAXii+jCfuDFt29c.3tiHQA0k1k.2YnYyAEP1GJZ1iZWF4B5RSSa2P2VCn9TtuoweBOYc1LulScmMy6bdMI.OVScKtvNTpdG2+cdrojOWM2iSy9Nu7oB1aYua9pENUnbcQiF5tA.Sjfo9fAYeb.nvVTrwoFpKFcQskCj0mrOMsfhT77OxcpKyK+aJnySiWu.jLOGN8K3cJhmYqe4OZUxyrjmYIOyRdlk7LK4YVxy7Mmm44wS9C8UR0rjpYIUyRplkTMKoZVDplmAq+8ebZ5On4veujnYIQyRhlkDMKIZVRzrjn4w.QyZ37ejnkzLKoYVRyrjlYIMyRZlq+1YSGR7jhm3k9qVWu0OmQBf.t4+cKUwc0scal+6TW6rBg5behmm9VzOAbWyViUKrF2nvZrVg03lEViaUXMtcg03SODMzjJtahRDll7Dg9K7T9lS.
        
        ten7kurT 1 Reply Last reply Reply Quote 1
        • C
          cykid
          last edited by

          Thanks alot!
          That helps me out :)

          1 Reply Last reply Reply Quote 0
          • Dan KorneffD
            Dan Korneff
            last edited by

            @Christoph-Hart Can we use the Property Editor to control the output of a sampler's volume?
            I think I have the settings correct for my knob, but it only brings the sampler volume to -100dB and then does nothing.

            0_1527620642411_db volume.png

            Dan Korneff - Producer / Mixer / Audio Nerd

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

              @dustbro You should use a simple gain plugin to avoid nasty noises when changing volume. If you really need to change the volume of a container directly you need to set your knob's min and max to 0 and 1. There is a function (one of the Engine ones) that can convert this value to a dB value if you need to display it anywhere.

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

              Dan KorneffD 1 Reply Last reply Reply Quote 1
              • Dan KorneffD
                Dan Korneff @d.healey
                last edited by

                @d-healey Thanks man! I was trying to avoid adding too many modules in this instrument... but that's definitely the easies route.

                Dan Korneff - Producer / Mixer / Audio Nerd

                1 Reply Last reply Reply Quote 0
                • ten7kurT
                  ten7kur @Christoph Hart
                  last edited by

                  @Christoph-Hart said in Set Sampler Volume:

                  1. You can't declare regvariables inside a inline function. Use local.

                  2. You can't declare a variable twice.

                  3. Create the references to the modules in the onInit callback. You are creating three references including a full tree search for every slider movement which is terrible performance. Even worse, if you automate it, you'll end up with drop outs.

                  4. Don't use magic numbers (0 as parameter index). Use Top.Gain for this, there's no performance overhead and the code gets 100x more clear and sustainable - if I decide that I add another parameter before the Gain parameter, it will break your code, the Top.Gain would then automatically point to 1. I admit it's highly unlikely that I do this, especially for the first parameter of the most generic module, but it's good practice.

                  5. If you want to control the volume of a sampler with a knob, use a Simple Gain module. You will get a decibel range and much smoother movements. The Gain parameter of a sound generator is not smoothed for performance reasons (you can end up with dozens of sound generators which in 99% of all cases have a static volume).
                    I can't say what range you are using in the VolumeSlider, but if you use a Simple Gain module and set the mode to "Decibel", it should work.

                  6. Try to avoid repeating code. Use an array for the sampler references.

                  Add three Simple Gain modules to the samplers, rename them accordingly and try this code:

                  // Use an array with the references
                  const var Gainers = [];
                  Gainers.push(Synth.getEffect("TopGain"));
                  Gainers.push(Synth.getEffect("BottomGain"));
                  Gainers.push(Synth.getEffect("RoomGain"));
                  
                  inline function onVolumeSliderControl(component, value)
                  {
                      for(g in Gainers)
                          g.setAttribute(g.Gain, value);
                  };
                  
                  Content.getComponent("VolumeSlider").setControlCallback(onVolumeSliderControl);
                  

                  This is the HISE Snippet containing a full example:

                  HiseSnippet 1514.3oc6aEsaaaCEkJNrs1qsnsnOrG1CBAa.NXco1oosaHXnt1ooKX0MFwocaXXnfQh1lnRjBTTo0aneHaeEaXOs25Wv9.1WQ+C1tjRJltyKwZMqqIP5gBwK4k7v68xKuGE2dRgGMNVHQNU2cbDE4bdb+wb0nNiHLNZqMPNWD2kDqnR2TQsGGQhio9HGmJ2WKvo5hHyyqtSaR.g6QmHBgdrf4Qe.KjolHMp0WxBB1j3S2kEZM50Zskmf2QDHR.7TA2.EQ7dJYH8gD8vV.ibv2ymoDx9JhhFibVrsveb+QhmwSG+iYwr8Bn5FMQ8gIJU7lh.eMh0ui5LhE32KeeGiPNms2DqPkTqvUwcY9rCjOwZbISGtSzv1d3rvgAul+KgmiE7VLEdWF22SxhTS5Qis2CuEGbTCHfKvFVoiEsvWr.ti.FAWsRH4ozMkPiCzn9sZz3Zt2rQikW+B0tPsqec2GEScIbWhTRF69LlZjqZD0URGPkTvKGWCbVwJ28IRWcf.UF694te62sdsrVqDkDOptIZZkgT08FLf5opuzthH8.VZ4kOpQ1VnThv4bv6HrFZMFO.Fr6fDtmhI3tB9iEAIgz9ALepTaEjhf5dhvHAGrGWC1EAIzkq8C0bgmABY8gtLd99ZYiT8yvUhop6pTR1dIJZ8gqnGQt1qW6EvRmahAr0Ie9quj8xuzx5YICDcHAA6Ag40mIDWdcqsvCEJ5175ZTVs1Kp858LXvr5JahBnxY0q9.n7PTqNOIbOpzx9nGGDGNcf9Ylu.cuTSi0.E7s3L01Qzr1SNJzbFGEPY1V8ghL.BCUYNRbwriDolODyWKx1hhLaA6bSnGs0FDEIe1fIFVrHpTwz6ImMn6C4tROvUEuAM9oJQjYrYdUjSs4cseNj5x4Wgkbr9ktvKgB+r40isGM.EZmJ8adYH441PER.G0m88F3+S+n942tSbxfAL8Dic8aC566GP6IhYZO3DcW8kn+d9CHKlvOIfnlN0lNXNqC8bXmCQmmfCy8X678EHeWiYlualN44DtWF2io7FMa7tvLvK3m+uFuY2dbAbZVoIfcQ7le8w6UEGET9fTnbEbekjRfnqg8IgQPZ.CdvXHM7a26x6IoABhedTb5vdYq1PTLUNszetkYotanHgO0ZksE1gFQIptomfN.d6ry8khjnWWqWcGSbxtRHIKXEr6XaNEL4J6IoiTDGO.1Nl4J1tqdIxgZak0JR2GtcXZYOLIDb6bNMHVeT2ADYlpF6RL9yOBu5ZqL8y9aC+yfOV+5m0wzNUklEWkUKtJ2n3prVwU4lEWkaUbUtcgTIMZpKIZl0Vdt4q1RP8dDvaac1sMan0TqkLchUqgdP3lA3Vq1QTS3Y9enj0i+T3u423TY9f6QTUc0bL1moca2iuOjpBjjdMyFzAjj.0ARsAYWAWDMRvYdSmW.JPb3PpzF5yb+.kRBoklH4ps1gFPIwVI19vVO.JBkHmNcWgLEMmeSwg4tdebJbc0o5cOcTnPkS8EJbjt7yd.weSz+8ygRUbFUsCoNADZCZ.YJa2Ww7UirJks0LpjvoxwUr6hycPfF3mbBZuB1XXOIAXii+jCfuDFt29c.3tiHQA0k1k.2YnYyAEP1GJZ1iZWF4B5RSSa2P2VCn9TtuoweBOYc1LulScmMy6bdMI.OVScKtvNTpdG2+cdrojOWM2iSy9Nu7oB1aYua9pENUnbcQiF5tA.Sjfo9fAYeb.nvVTrwoFpKFcQskCj0mrOMsfhT77OxcpKyK+aJnySiWu.jLOGN8K3cJhmYqe4OZUxyrjmYIOyRdlk7LK4YVxy7Mmm44wS9C8UR0rjpYIUyRplkTMKoZVDplmAq+8ebZ5On4veujnYIQyRhlkDMKIZVRzrjn4w.QyZ37ejnkzLKoYVRyrjlYIMyRZlq+1YSGR7jhm3k9qVWu0OmQBf.t4+cKUwc0scal+6TW6rBg5behmm9VzOAbWyViUKrF2nvZrVg03lEViaUXMtcg03SODMzjJtahRDll7Dg9K7T9lS.
                  

                  Hi all,
                  If i want to control for example Only "TopGain", shouldnt it work if i change g.setAttribute(g.Gain, value); to g.setAttribute(g[0].Gain, value);?

                  Thanks!

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

                    @ten7kur No. g only exists within the for loop. You'd need to reference the Gainers array directly, no loop required.

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

                    1 Reply Last reply Reply Quote 0
                    • ten7kurT
                      ten7kur
                      last edited by

                      @d-healey said in Set Sampler Volume:

                      You'd need to reference the Gainers array directly, no loop required.

                      mhm.Gotcha! Thanks!
                      Im trying to slim my script down(for performance reasons). So a direct reference wouldnt make much difference in my current script state. (i think).
                      Will post a new thread.

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

                      49

                      Online

                      1.7k

                      Users

                      11.7k

                      Topics

                      101.9k

                      Posts