繁体   English   中英

如何将(音频)缓冲区转换为Blob以重播

[英]How to convert (audio) buffer to blob to replay

我正在努力录制音频并在移动safari中重播。

这个来源绝对是神话般的。
在iOS11上未调用onaudioprocess

我可以看到大量音频数据即将到来...

// get Buffers (Essentially a Uint8Array DataView of the same Float32 values)
var chunks = []
micStream.on('data', function(chunk) {
    var raw = MicrophoneStream.toRaw(chunk)
    chunks.push(raw)
});

function replay(){
    var blob = new Blob( chunks, { 'type' : 'audio/webm;codecs=opus' });
    var blobURL = window.URL.createObjectURL(blob)
    var audio = new Audio();
    audio.src = blobURL
    audio.play()
}

但是我无法重播。

如何将原始音频数据转换为Blob并重播?
而且我不知道哪一个都不能使用。

如果我可以使用MediaRecorder API,

var chunks = []
mediaRecorder.ondataavailable = (event) => {
    chunks.push(event.data);
}
function replay(){
    var blob = new Blob( chunks, { 'type' : 'audio/webm;codecs=opus' });
    var blobURL = window.URL.createObjectURL(blob)
    var audio = new Audio();
    audio.src = blobURL
    audio.play()
}

此功能适用于桌面版Chrome,但不幸的是Safari不支持MediaRecorder API。

有人可以帮我吗?

提前致谢。

您可以在GitHub上参考Recorderjs: https : //github.com/mattdiamond/Recorderjs

该演示可以将音频录制为blob,然后再播放。 它适用于台式机Chrome,但不适用于iOS 11 Safari:examples \\ example_simple_exportwav.html

通过添加audio_context.resume()对功能startRecording()进行简单的修改,它就可以在iOS 11 Safari上运行:

  function startRecording(button) {
    audio_context.resume();
    recorder && recorder.record();
    button.disabled = true;
    button.nextElementSibling.disabled = false;
    __log('Recording...');
  }

希望这对您也有用。

汤米

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM