1

I've created a web app that allows users to do a voice recording and have noticed that there are problems with picking the correct audio input device. FireFox works great but Chrome and Safari don't always record if I use the default way for initializing the audio recording: navigator.mediaDevices.getUserMedia({audio: true}). Because of this, I have to specify which microphone to use like so:

let dD = [];
navigator.mediaDevices.enumerateDevices().then((devices) => {

    dD = devices.filter((d) => d.kind === 'audioinput');

    try {
        // checking if there is a second audio input and select it
        // it turns out that it works in most cases for Chrome :/
        let audioD = dD[1] === undefined ? dD[0] : dD[1];

        navigator.mediaDevices.getUserMedia({audio: { deviceId: audioD.deviceId }})
        .then(function(stream){ 
            startUserMedia(stream); 
        })
        .catch(function(err) { 
            console.log(`${err.name}:  ${err.message}`);
        });

    } catch (err) {
        console.log(`${err.name}:  ${err.message}`);
    }
});

The problem with this code is that it only works sometimes. I still get reports from users complaining that the recording is not working for them or the recording is empty (which might mean that I'm using the wrong audio input).

I assume that my code is not the correct way to get the active (or let's say the working) audio input devices. How I can check which audio input is the correct one?

Jack Moody
  • 1,590
  • 3
  • 21
  • 38
Ale
  • 944
  • 3
  • 14
  • 34

0 Answers0