iOS Safari:仅录音噪音

时间:2018-11-15 17:32:30

标签: javascript ios safari

我正在开发一个允许在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})

0 个答案:

没有答案