summaryrefslogtreecommitdiff
path: root/scripts/microphone.js
blob: 7e8de6ab6131cbfd88c4d36e094a5931a2bb0241 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
    const volumeHtml = document.getElementById("volume");

    navigator.mediaDevices.getUserMedia({ audio: true })
        .then(stream => {
            const audioContext = new (window.AudioContext || window.webkitAudioContext)();
            const source = audioContext.createMediaStreamSource(stream);

            audioContext.audioWorklet.addModule("scripts/volume_processor.js")
                .then(() => {
                    const volumeNode = new AudioWorkletNode(audioContext, "volume_processor");
                    source.connect(volumeNode).connect(audioContext.destination);

                    volumeNode.port.onmessage = (event) => {
                        const volume = event.data;
                        const db = 20 * Math.log10(volume);

                        volumeHtml.innerHTML = `${db.toFixed(2)} dB`;
                    };
                }).catch((err) => {
                    console.log(err);
                })
        })
        .catch(err => {
            console.error('The following getUserMedia error occurred: ' + err);
        });
} else {
    console.warn('getUserMedia not supported on your browser!');
}