如何转换(音频)缓冲区为blob重播
问题描述:
我很努力地录制音频并在移动Safari浏览器上重放。如何转换(音频)缓冲区为blob重播
这个来源绝对是神话般的。
onaudioprocess not called on ios11
我可以看到音频数据的块来了...
// 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并进行重放?
而我不知道哪个mineType既不使用。
如果我可以使用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不幸。
有人可以帮助我吗?
在此先感谢。
答
你可以参考Recorderjs在GitHub上: https://github.com/mattdiamond/Recorderjs
演示后可以录制音频为BLOB和回放。它适用于桌面版Chrome,而不是iOS的Safari的11: 例子\ example_simple_exportwav.html
随着机能的研究的startRecording简单的修改()加入audio_context.resume(),它在iOS的Safari 11工作:
function startRecording(button) {
audio_context.resume();
recorder && recorder.record();
button.disabled = true;
button.nextElementSibling.disabled = false;
__log('Recording...');
}
希望这也适用于你。
汤米
您也可以参考以下内容,即修改为移动Safari浏览器的支持及新的navigator.mediaDevices.getUserMedia()API: https://github.com/tommysheu/Recorderjs –