我正在开发一个允许在Web浏览器中录音的应用程序。在大多数浏览器上都可以正常工作,但是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);
});
});
}
为了进行记录,我使用音频记录器polyfill(https://ai.github.io/audio-recorder-polyfill/)来实现记录,因为Safari上还没有MediaRecorder。
该记录器在所有导航器(包括OS X Safari)上均可正常工作,但在iOS Safari上,它仅记录noice。如果我将扬声器的音量调到最大,则可以听到自己说话的声音,但这是“很远”的声音。
我发现的所有在线录音机/录音机都存在相同的问题,它们始终会记录噪音。 (已使用最新版的iPhone 5S,5SE和X进行了测试。)
我有点绝望,因为我已经做了很多研究,但是我没有找到解决这个问题的任何方法。
根据需要,在用户事件(在本例中为触摸按钮)上创建AudioContext。
我什至试图改变的增益,但这无济于事。 尝试在不设置媒体设备的情况下访问音频无济于事。
navigator.mediaDevices.getUserMedia({audio: true})