use sample as an impulse response for the reverb

This commit is contained in:
Vasilii Milovidov 2023-10-01 15:31:10 +04:00
parent fd18508266
commit 755e24315e
3 changed files with 1221 additions and 1205 deletions

View file

@ -7,22 +7,31 @@ if (typeof AudioContext !== 'undefined') {
return impulse;
};
AudioContext.prototype.adjustLength = function (duration, buffer) {
const newLength = buffer.sampleRate * duration;
const newBuffer = this.createBuffer(buffer.numberOfChannels, buffer.length, buffer.sampleRate);
for (let channel = 0; channel < buffer.numberOfChannels; channel++) {
let oldData = buffer.getChannelData(channel);
let newData = newBuffer.getChannelData(channel);
for (let i = 0; i < newLength; i++) {
newData[i] = oldData[i] || 0;
}
}
return newBuffer;
};
AudioContext.prototype.createReverb = function (duration, buffer) {
const convolver = this.createConvolver();
convolver.setDuration = (d, i) => {
convolver.buffer = i !== undefined ? buffer : this.impulseResponse(d);
convolver.duration = d;
convolver.setDuration = (dur, imp) => {
convolver.buffer = imp ? this.adjustLength(dur, imp) : this.impulseResponse(dur);
return convolver;
};
convolver.setIR = (i) => {
convolver.buffer = i;
convolver.setIR = (dur, imp) => {
convolver.buffer = imp ? this.adjustLength(dur, imp) : this.impulseResponse(dur);
return convolver;
};
if (buffer !== undefined) {
convolver.setIR(buffer);
} else {
convolver.setDuration(duration);
}
convolver.setDuration(duration, buffer);
return convolver;
};
}