real-estate / static /js /audio-processor.js
brestok's picture
init
d0e0a14
class SilenceDetectorProcessor extends AudioWorkletProcessor {
static get parameterDescriptors() {
return [{name: 'threshold', defaultValue: 0.01}];
}
constructor() {
super();
this.silenceStart = 0;
this.SILENCE_DELAY = 0.4;
}
process(inputs, outputs, parameters) {
const input = inputs[0];
const threshold = parameters.threshold[0];
if (input.length > 0) {
const inputChannelData = input[0];
let sum = 0;
for (let i = 0; i < inputChannelData.length; i++) {
sum += inputChannelData[i] * inputChannelData[i];
}
let volume = Math.sqrt(sum / inputChannelData.length);
if (this.silenceStart === 0) this.silenceStart = currentTime;
if (volume < threshold) {
if (currentTime - this.silenceStart > this.SILENCE_DELAY) {
this.port.postMessage({type: 'silence', silenceDuration: currentTime - this.silenceStart});
this.silenceStart = currentTime;
}
} else {
this.silenceStart = currentTime;
this.port.postMessage({type: 'sound'});
}
}
return true;
}
}
registerProcessor('silence-detector-processor', SilenceDetectorProcessor);