Velocity to delay



  • Hi guys. How can I link velocity to Delay? I want to decrease delay time (i.e. 1/8 to 1/32T) when velocity increases. Maybe there's another way to archive what I'm wanting to do (it's for a Melodica flute to have some ms. of air sound before note sounds, depending on velocity)


  • administrators

    The delay effect is not working on voice level. You need to delay the note on message with a script depending on the velocity, but make sure you delay the corresponding note off by the same amount or you‘ll get stuck notes when played fast.


  • administrators

    I've written a script module that does this:

    /** Velocity 2 Delay Script
    *   Christoph Hart
    *   Public Domain
    *
    *   This script delays incoming notes depending on the velocity.
    *   You can set the max delay time and a curve using the UI widgets.
    */
    
    Content.setHeight(200);
    Content.setWidth(800);
    
    const var Table1 = Content.getComponent("Table1");
    const var Delay = Content.getComponent("Delay");
    
    // Store the calculated delays for each note to delay the corresponding note off message.
    const var noteDelays = [];
    
    /** Small helper function that fills a given array with the same value. */
    inline function fillArray(array, size, value)
    {
        array.reserve(size);
    
        for(i = 0; i < size; i++)
            array.push(value);
    };
    
    // Init the array with zeros. 
    // This is required on initialisation to avoid reallocation in the note callbacks
    fillArray(noteDelays, 128, 0);
    
    function onNoteOn()
    {
        // Calculate the table value
        local multiplier = Table1.getTableValue(Message.getVelocity());
        
        // Calculate the sample amount for max delay
        local maxDelay = Engine.getSamplesForMilliSeconds(Delay.getValue());
        
        local delayToUse = maxDelay * multiplier;
        
        // Store the delay in the array
        noteDelays[Message.getNoteNumber()] = delayToUse;
        
        // Delay the event
        Message.delayEvent(delayToUse);
    }
    function onNoteOff()
    {
        // Delay the note off message by the previously calculated delay
    	Message.delayEvent(noteDelays[Message.getNoteNumber()]);
    }
    function onController()
    {
    	
    }
    function onTimer()
    {
    	
    }
    function onControl(number, value)
    {
    	
    }
    

    Check out this snippet:

    HiseSnippet 1648.3oc4X7uaSbC1WaOFMrfFRLo8mVHlTRoqsoiswDCsTRZgpQnU8JkgPHj6cN4r3N6LaesDXSh2f8xrGj8HrGg8Fr8Y66xcojVZ6XaRaQHz4ue+S+84tsTDRUJgD4M+tiFRQdenevHtNtSLgwQa1E4cY+dDklJwNP2czPhRQiPddydOC.u4mCY+86e6cIIDdHsDDBsmfERe.KkoKgNr82wRR1fDQ2kkVg5a1dyPAuiHQjA1yr9qfFRBeAY.8gDCYy3i77WOhoEx.MQSUHu4tqHZTPr3Pti98XJ19ITygVn.PPNvaHRhLVr4aTmXVRz1E9sBABc6xnvrtnvU86whXigWFM9HKBbIGUiGdybRlWqyo44Uw7lyYdWwOHTxFpKw3rs8nIhPldzpcoIjQSXaNFPyz7B9KuvB3BJwqhszhc3qWaALFxzRlRKFFiuOQlCa6r8SXg3thTHT.fbP2MlovJKq3HibTXFOTjx3CvbADD.nCo7HyYAGqio3Cx07RNI7DQFNjvwJp1hNk7RmjvZn3.S3QXBNLSd.EmoLhwPzi1DeHKZ.UqLRY450pWqifqob8RfbtOkMHV2X0UVo4sm.wiYQ53F2xAudMnXSowGPj3cIPZoE9N3BhAQ2QjNTvgCMtlC80LbUxiKrcbrXwdMmdVdYb.TUPsldHIILKApOhJBX8ERLkDFaCXXsnv8MDKjRpBjYTQ.EK52GmB4bnsXopliAYWm.uC9oOyoXHQGjRRRvwzjgPKb+LdnlYSDDMtOzEpfn6.1ATNlHkfVOjoispVA8bffSxnKgMQXFOgwokRvv7ZFVZXYbQrh8J5hNNZVu1qqWCRtNgtD3CTHA1vPhKjXvA9cCFXrqbaLC+MV9gutwMZ5PWx9vLUbCmfucsepHjtIm4pXpX3uhJEpkvV71RS3eR5OjwjP3FLZFvCijvTDWTPfIGHXQ.MPPRD5fxb0o1nMjsR1GtDRUuVoCWFpWD2Z0asHFpmFGWD7GBn2h2nYQL.rkNEIcqj0lxIWjxQgQ0I3zrDMaXBCxS2IuhzTTY+ZOCwM5km2AnE8uMZZBnFgbLJCxiCAsQREYbssVabG1DJm7xhB504CfLsQIAVdUaHj8.mmEPgxsHUCKgVivZUGwBbxypfcEORQAINV3KTwIOpYW1h3p+ySC1rqinx39SqDILg6GlktOU1n4y.kUp4ipgti6qnPAu1AuPRV1V2.uQoDL0a0NZpse+IxskR8n8m38cvGJoGvDYpjQuU2es4mh9OE94QMLykPRQRhAYsWWa9IwZFyNUD4r0fakaQ2aNcvzlIGmU6zMNKzcgXEBEbSy5VvffhytdjBHqfFGZqBpzopB05LSgrRPu8LTT9kzvzzYxIG7NscVZ87Yo19LDCFVdQeW2GxFNFuexadV6Hhlf79T+Uu4RS96fsf+q+MLe90crmc5zpnYcJ5x4JJHgEQkVM8A9tA0Spne6UsQOZytFcAStyMcvcfav0LShvqKTPERc6BLOHC0Kfo0VeKe.Dx6BuSu6kkadc81ipd3PybRXuHuezCghsSSMm9EjMRNVEW5c5WUTwniQEuAUUEPxCkJh.odAe6xgvUGiYq8O2FVDcX.Lnn5Vmpr98Y.U993TEJkEEkP2VnXlZ7R5dRazauGErMmHxzON4Jdl8ZyQXjQ00n1zjL.YOppEbF16akot2WqoUydJM2q3uMSGFOc6cloXullf+ls27snq6ud+9zPcowNm+Fe+4ck4ymobYmobI+.Xnl8oMVC4ismwOl.6UdOJmJMA0S3wM+56+G2rUnFz9tRBG1vSMgfCnorcgtLUUfv7nMfkY1wjjqV80QPjGCpM.ebJH.EPzYRa0xZ1ECln5X1ISI9mtq8mrooB8mbtxat+Ed806+tv+5WZL6oybeGOPb9BaLfY1cact44V.D2MEco8IvBXigV0H6I3vK9DbVX0hgcnZIav.prpoOU+YMsFVTtDxUauCMgRpVXe81O.JHIxd1a3OWghVm9PwIkt9Dem4hMMo3+abW+r++7t9cDYZ30w8HPgpYK.XG4.3N1PJXIbNMwbCl2LlMWbmWwb1cIKOxd3Ofe4HaYN6kirUAx+QzQJITJddnaoQSs7EsP.+la+yeMueOyY730RMwFXaG1yCCMA6OChNSmiUOyb74mYNt4Yliu3LywWdl43qNybbqSfCyrm0xzhTWqGB8mznL4NB
    


  • @christoph-hart Awesome!!!! thanks once again! Will try it later today


Log in to reply
 

1
Online

315
Users

919
Topics

6.0k
Posts

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