ブラウザである一定レベルの音がしたらイベントを発生させる


はじめに

ブラウザでマイクの音を拾ってある一定レベル超えたらイベントを発生させたいというマニアックな時に使うコードです。
getUserMediaのパラメータでオーディオデバイスを選ぶなども可能ですがここでは記載していません。

navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then((stream) => {
    const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    const analyser = audioCtx.createAnalyser();
    const source = audioCtx.createMediaStreamSource(stream);
    source.connect(analyser);
    const data = new Uint8Array(analyser.frequencyBinCount);
    const render = () => {
        analyser.getByteFrequencyData(data);
        let sum = 0;
        for (var i = 0; i < data.length; i++) {
            sum += data[i];
        }
        const volnum = sum / data.length;

        // volnumの数値が一定数以上なら何かするとか

        requestAnimationFrame(render);
    };
    render();
});