0

我使用 MediaRecorder 录制麦克风。chrome中MediaRecorder的默认格式是video/webm。这是一个简短的例子:

navigator.mediaDevices.getUserMedia({audio: true,video: false})
        .then(function(stream) {
            var recordedChunks = [];
            var recorder = new MediaRecorder(stream);
            recorder.start(10);

            recorder.ondataavailable = function (event) {
                if (event.data.size > 0) {
                    recordedChunks.push(event.data);
                } else {
                    // ...
                }
            }

            setTimeout(function(){
                recorder.stop();
                var blob = new Blob(recordedChunks, {
                  "type": recordedChunks[0].type
                });

                var blobUrl = URL.createObjectURL(blob);

                var context = new AudioContext();
                var request = new XMLHttpRequest();
                request.open("GET", blobUrl, true);
                request.responseType = "arraybuffer";

                request.onload = function () {
                context.decodeAudioData(
                    request.response,
                    function (buffer) {
                        if (!buffer) {
                            alert("buffer is empty!");
                        }

                        var dataArray = buffer.getChannelData(0);

                        //process channel data...

                        context.close();
                    },
                    function (error) {
                    alert(error);
                    }
                );
            };

            request.send();

            }, 3000);

        })
        .catch(function(error) {
          console.log('error: ' + error);
        });

此代码仅在 chrome 中出现“未捕获(承诺)DOMException:无法解码音频数据”的错误context.decodeAudioData

这里有什么问题,我该如何在 chrome 中修复它?

这是 plunker 中的工作示例:plunker

4

1 回答 1

0

好的...没有解决此问题的方法。这是一个 chrome 错误,您可以在此处查看

从 MediaRecorder 解码音频的修复将在 chrome 版本 58 上可用。我已经在 58-beta 上对其进行了测试,它可以工作。

于 2017-03-30T05:59:35.590 回答