in demo-website/src/meeting.js [745:773]
startAudioPreview() {
this.setAudioPreviewPercent(0);
const analyserNode = this.audioVideo.createAnalyserNodeForAudioInput();
if (!analyserNode) {
return;
}
if (!analyserNode.getFloatTimeDomainData) {
document.getElementById('audio-preview').parentElement.style.visibility = 'hidden';
return;
}
const data = new Float32Array(analyserNode.fftSize);
let frameIndex = 0;
this.analyserNodeCallback = () => {
if (frameIndex === 0) {
analyserNode.getFloatTimeDomainData(data);
const lowest = 0.01;
let max = lowest;
for (const f of data) {
max = Math.max(max, Math.abs(f));
}
let normalized = (Math.log(lowest) - Math.log(max)) / Math.log(lowest);
let percent = Math.min(Math.max(normalized * 100, 0), 100);
this.setAudioPreviewPercent(percent);
}
frameIndex = (frameIndex + 1) % 2;
requestAnimationFrame(this.analyserNodeCallback);
};
requestAnimationFrame(this.analyserNodeCallback);
}