Instead of loading audio files for convolution reverb, generate impulse responses procedurally. Apply an exponential decay envelope to noise:
function generateImpulseResponse(audioContext, duration, decay) {
const sampleRate = audioContext.sampleRate;
const length = sampleRate * duration;
const buffer = audioContext.createBuffer(2, length, sampleRate);
const leftChannel = buffer.getChannelData(0);
const rightChannel = buffer.getChannelData(1);
for (let i = 0; i < length; i++) {
const t = i / sampleRate;
const envelope = Math.exp(-decay * t);
leftChannel[i] = (Math.random() * 2 - 1) * envelope;
rightChannel[i] = (Math.random() * 2 - 1) * envelope;
}
return buffer;
}
// Usage with ConvolverNode
const ir = generateImpulseResponse(audioContext, 2.0, 3.0);
const reverb = audioContext.createConvolver();
reverb.buffer = ir;
Benefits: