簡體   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