in src/lib/worklets/vol-meter.ts [39:62]
process(inputs) {
const input = inputs[0]
if (input.length > 0) {
const samples = input[0]
let sum = 0
let rms = 0
for (let i = 0; i < samples.length; ++i) {
sum += samples[i] * samples[i]
}
rms = Math.sqrt(sum / samples.length)
this.volume = Math.max(rms, this.volume * 0.7)
this.nextUpdateFrame -= samples.length
if (this.nextUpdateFrame < 0) {
this.nextUpdateFrame += this.intervalInFrames
this.port.postMessage({volume: this.volume})
}
}
return true
}