2017-10-15 96 views
0

我很努力地录制音频并在移动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不幸。

有人可以帮助我吗?

在此先感谢。

回答

0

你可以参考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...'); 
    } 

希望这也适用于你。

汤米

+0

您也可以参考以下内容,即修改为移动Safari浏览器的支持及新的navigator.mediaDevices.getUserMedia()API: https://github.com/tommysheu/Recorderjs –

相关问题