Set Sampler Volume



  • 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?


  • administrators

    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.
    


  • Thanks alot!
    That helps me out 🙂


Log in to reply
 

1
Online

277
Users

739
Topics

4.8k
Posts

Looks like your connection to Forum was lost, please wait while we try to reconnect.