Я разрабатываю приложение, которое позволяет записывать голоса в веб-браузере.Это работает нормально в большинстве браузеров, но у меня есть некоторые проблемы с iOS Safari.Ниже вы можете найти фрагмент кода, он не завершен, но дает представление о том, что происходит.
//Triggered when the user clicks on a button that start the recording
function startRecording() {
//Create new audio context
let audioContext = new (window.AudioContext || window.webkitAudioContext);
//Hack polyfill media recorder to re-use the audioContex
window.NewMediaRecorder.changeAudioContext(audioContext);
navigator.mediaDevices.enumerateDevices().then(function (devices) {
console.log('loaded audio devices');
console.log(devices);
devices = devices.filter((d) => d.kind === 'audioinput');
console.log(devices);
console.log('chosen device: ' + devices[0].deviceId);
navigator.mediaDevices.getUserMedia({
audio: {
deviceId : {
exact : devices[0].deviceId
}
}
}).then(function (stream) {
console.log(stream);
let recorder = new NewMediaRecorder(stream);
recorder.addEventListener('dataavailable', function (e) {
document.getElementById('ctrlAudio').src = URL.createObjectURL(e.data);
});
recorder.start();
console.log('stop listening after 15 seconds');
setTimeout(function () {
console.log('15 seconds passed');
console.log("Force stop listening");
recorder.stop();
recorder.stream.getTracks()[0].stop();
}, 15000);
});
});
}
Для записи, я использую полифилл аудиозаписи (https://ai.github.io/audio-recorder-polyfill/) для достижения записи, так как MediaRecorder еще не доступен в Safari.
Рекордер работает нормально на всех навигаторах (включая OS X Safari), но в iOS Safari он записывает только шум.громкость моих громкоговорителей на максимальном уровне. Я слышу, как я говорю, но это «очень далеко».
Все обнаруженные мной онлайн-диктофоны / рекордеры имеют одинаковую проблему, они всегда записывают шум. (Проверенос iPhone 5S, 5SE и X, все в актуальном состоянии).
Я немного отчаялся, потому что я уже провел много исследований, но я не нашел никакого решения для этой проблемы.
При необходимости AudioContext создается на пользовательском событии (в данном случае прикосновение к кнопке).
Я даже пытался изменить усиление, но это не помогло. Попытка получить доступаудио без урегулированияИспользование мультимедийного устройства не помогает.
navigator.mediaDevices.getUserMedia({audio: true})