Я создал веб-приложение, которое позволяет пользователям делать запись голоса, и заметил, что существуют проблемы с выбором правильного устройства ввода звука. 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}`);
}
});
Проблема с этим кодом в том, что он работает только иногда. Я по-прежнему получаю сообщения от пользователей, которые жалуются на то, что запись не работает для них или запись пуста (что может означать, что я использую неправильный аудиовход).
Я предполагаю, что мой код не является правильным способом получения активных (или, скажем, работающих ) устройств ввода звука. Как я могу проверить, какой аудио вход является правильным?