programmatically generating impulse samples for reverb convolution

Hey all -

Just wondering if anyone else has been working on code to generate
impulses on-the-fly for use in convolution nodes... I noticed that a
lot of examples involve downloading pre-recorded impulses, but I
figure if you're in need of some quick-and-dirty reverb, you probably
don't need to rope in additional audio file dependencies. For example,
the code below will generate a basic reverb node:

function ReverbNodeFactory(context, seconds, options){
    options = options || {};
    var sampleRate = context.sampleRate;
    var length = sampleRate * seconds;
    var impulse = context.createBuffer(2, length, sampleRate);
    var impulseL = impulse.getChannelData(0);
    var impulseR = impulse.getChannelData(1);
    var decay = options.decay || 2;
    for (var i = 0; i < length; i++){
      var n = options.reverse ? length - i : i;
      impulseL[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay);
      impulseR[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay);
    }
    var convolver = context.createConvolver();
    convolver.buffer = impulse;
    return convolver;
}

The "options" here are just "reverse" and "decay", and the result is a
pretty basic but adequate reverb effect. Has anyone else played around
with a strategy like this?

Matt

Received on Wednesday, 19 September 2012 23:21:20 UTC