Choke groups

  • administrators

    The onNoteOn callback is a bit too complicated (you don't need to use nested for loops).

    Also, you need to call Message.makeArtificial() for the note on you want to kill later using Synth.noteOffByEventId(). The reason for this is rather complicated but there's an explanation here.

    This script should do what you need. I've added comments where possible:

    // Use const var for constants for improved performance.
    const var closeHiHatKey = 66;
    const var openHiHatKey = 70;
    //  An Array is also a constant, even if it will be populated later on
    const var evtList = [];
    // make sure it has enough storage to avoid allocation during the noteOn callback
    function onNoteOn()
        if(Message.getNoteNumber() == closeHiHatKey)
            // Always use the for ... in loop if you don't need the index
            for(eventId in evtList)
                // Send the note off command for the given event id
            // Clear all notes
        else if (Message.getNoteNumber() == openHiHatKey)
            // This is necessary because you will kill the note artificially and HISE
            // can only kill artifical notes for stability reasons
            // Add this ID to the list (it'll add the artificial event ID)
    function onNoteOff()
        if(Message.getNoteNumber() == openHiHatKey)
            // We need to ignore the note-off message
            // for the open hi-hat so it will keep ringing...
    function onController()
    function onTimer()
    function onControl(number, value)

  • Thank you very much, I learned a lot!

  • Hi,
    I'm back with another but related question. I would like to use the one shot option for my instrument but your script doesn't work anymore. Is there a way to make it work?



  • administrators

    Are you sure? I've just checked and it works here exactly like back in the days.

  • Yes I think. I tried a lot of time. When « playback settings / playback » is « normal », it works great but when I switch to « one shot », it looks like the function noteOffByEventId doesn’t cut the sound.

  • administrators

    Yes this is intentional. One shot means „ignore the note off and play the whole sample“.

  • Ok, I understand that. This HH things is a very particular case. But as far as I know, several sampler work this way for drums instruments, one shot and choke group. Do you think it would be possible to implement that in Hise? It’s certainly not a high priority but it could be a good feature…

  • administrators

    The script above already ignores the note off for the open hihat so it should behave like oneshot + choke group.

  • Ah Ok! Sorry for my dumb's questions... So I could use Message.ignoreEvent(true) in the onNoteOff() function for the all drum set to emulate the one shot option, that's it?

    Thanks again for your time

  • administrators

    Yep that should work.

  • Hey guys,
    Digging up this old thread. I'm working on a project that needs this function, but I'm unable to make it work. My background had been in Kontakt scripting, so a lot of this looks familiar. I see there are a million different places to add scripts in software. Does each script slot affect only a specific sampler?
    I've currently separated different instruments of a drum kit into containers, and placed samplers in each container for each instrument. Do I need to place this script in the midi slot of the main project container? or of the container for my hi-hat track?
    I've tried both with no luck.

  • @christoph-hart Also want to add that I've copied/pasted Cristoph's script above into the project, only changing the notes associated with closeHiHatKey and openHiHatKey.

  • administrators

    Still works:

    HiseSnippet 1399.3oc4X01ZabDD9NaePsRansjB8i6GJDIHQQJI0oPvDKKYmHRThwxMoPoDVe2b5V7ocut2dxQsj+i8mR9GzNy8tpu5XUZSf1CgP6L6ryy7LyN6d5HsxEhiUZK6qcxxHvx9ScltTZBFFvERqwirrutyDdrAzrLQ6uLhGGCdV11a9XRf81aYk97tGsOOjKcgJQVVuTIbgmIlKLURi16ohvvC4dvIh40l882arqRNTEpRP7roSOqHt6Y7Yvy4zz1vwZg.NO1xtmy8taW8Y8O8WFz8O8Lo+vtc8mspbK2DsFjlWhlaY6X+63isyAdBiRO0vM.tlasuxa4z.04xLW+RQr3zPfFz2ZJhoLwGpB8nfm9s0v.Qn2QETXrEt1GUQnalQn2vYhvSTJuhX+7TErJKpSs1abYvqec30qQ30uA3YUCcakgNDDJujPtYUjQY1bEB0pI8wRCHiElk0y7eTg6W3bjv3FzLd2nA7hIp+swadx+ybNv2GbMUfcKmC+gOrY5qmAkq4LUHgzM2o.4qRGydEeAvdLHAMQpWx16e6e9s2uv0fd+DMWFGohWYgmByEmnjDgTI76igC0vOeLkjqKenhqaT06dzgXL1nMS4lDcZ0xf4pDoYkpiMuxoj58FVcSSs42Pihs9HznXM5iYewsdegyTWsHxTogv1WlK8u.cYJs1Hzw4N2gg4OFVBDaXK3ZluRmMhKMwoiDyizpEfGKBz334T0V2VUV3FhUIOQ7Dt4ovR1trc14g0zph.YMkOn2Ca0BcJafjMPq4KYhXFOLVw3kt8VLXAHYBelvvNGqZYmBrHUDkBQXPeiqqrlSfElmIveuK6G+or0eN+LfEmnAZMB3wLPpRlEvhwjBd1EyfNbgR3g9NT4lVZv7RzB4LlI.XRkAdgj4hZOEOsqUtC5pgXPu.Zuy86f9wOQ5lZoR97TCZ2o0u1hgOB+1SPdG8T2YfgT97j4mB51cX6t6pLVmTCxLidPvOH7b9xXVBlXHvPIA77RlPxBUpHhXVpRXdJ4MMLIfTBMKgzCdS4pf1zlXQyXOxtb72oTek+x84TP5UF5LkuOlNli4ZuT2SJlInrR5hxDdqXeZ+qtojlu+9KOHywE..ophI91xeUOdGFBXRD45TmGWppf0cI8syWlrk.BQxAIhKilqW50.KeR.V5gej.sEgqWhkYtbhzI1Mst6L5qRRgqMBegq.A5RFwLOY7zCpuhtbpT.UlZW9z44QUJOh02mJBwi8XZfGi0uklWDGTg6fRG0tF2sREhGkrPvOdDUJSPLj1.zVXtI4ZurbYEhyyaiG04BraTRbPcZrH60ojve6Epz88uhk5umbvqf7BXESLSpzPIaeapDbd1BW2hhpQZgYAhaGvMLr6QQmhy.HhQaiwO3dlKPuYdIMDaazIPyw3PkznUggTTfg41qpkN.sQE4l0VlR.2BaMEhdHedXK6UOSn0U6LArKGdUISsIpjikByKPBnXbV2mBI8rJyR0EUET0klFLMLsJQMbOlgYXhN7e7HtgSmMkKCmGdNgQPQn8HXAdSjrSp11YDDelQE8A7Buad0t0164n1sKv3T7nvP3.4BHDCx7a4NB74IglRo0A4DkTEEnjB25Wj4XvnEylA55Puw3Yfwfm9TI4F6cLf8BqeoruYumgWlhqQZB9aRE8u5Twkkt9ZmL3xnRJ1+MdOkM++46obrJwfMPmvwB02fu+L1QeJ99At.hDoDO6kde8MnFAYi6QiydAAoWuhWlOWYeZrctx9EJ+f3i4bWs50tYcznZ4OIUBF2xz+7hsclPiY8sRaUmwMywq0+ZWWhruMxNMawcWaKt2Zaw8WaK9101hcVaKdvZaw2cIVPuC0fDiZd1VOKq+.2caPgA

    And yes you can add scripts at different places, which is super useful for encapsulating functionality, so in your case, it should be enough to drop this on the sampler that contains the HiHat samples.

  • @christoph-hart I think I'm counting the keys wrong. I had C1 as 60

  • Once you collect the midi note number with Message.getNoteNumber(), how do you display this in the console?

  • @dustbro C4 is the usual standard for MIDI note 60 although some systems use C3. -


  • @d-healey OMG I'm so stupid... That's what I was doing, but it was returning an "unknown Function" error in the console...
    I didn't capitalize the M in message!!

  • Still struggling with this script. I've confirmed that I'm using note 44 for closed hat, and 46 for open hat. I adjusted the numbers accordingly in onINIT and placed this script in the associated container.
    In debug mode, I can see that the array is capturing the eventID, and hitting the closedHat key clears the array, but it's not stopping the note playback. Is there any specific sampler settings I need to adjust for HISE to kill the note?

Log in to reply





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