Как проверить, какой микрофон активного пользователя (устройство ввода звука) с JavaScript? - PullRequest
0 голосов
/ 16 января 2019

Я создал веб-приложение, которое позволяет пользователям делать запись голоса, и заметил, что существуют проблемы с выбором правильного устройства ввода звука. FireFox прекрасно работает, но Chrome и Safari не всегда записывают, если я использую способ по умолчанию для инициализации аудиозаписи: navigator.mediaDevices.getUserMedia({audio: true}). Из-за этого я должен указать, какой микрофон использовать следующим образом:

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}`);
    }
});

Проблема с этим кодом в том, что он работает только иногда. Я по-прежнему получаю сообщения от пользователей, которые жалуются на то, что запись не работает для них или запись пуста (что может означать, что я использую неправильный аудиовход).

Я предполагаю, что мой код не является правильным способом получения активных (или, скажем, работающих ) устройств ввода звука. Как я могу проверить, какой аудио вход является правильным?

...