2017-10-15 10 views
0

J'ai du mal à enregistrer du son et à le rejouer sur un safari mobile.Comment convertir un buffer (audio) en blob pour le rejouer

Cette source est absolument fabuleuse.
onaudioprocess not called on ios11

Je peux voir le bloc de données audio arrive ...

// 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() 
} 

Mais je ne pouvais pas faire blob de rejouer. Comment puis-je convertir les données audio brutes en BLOB et les lire?
Et je n'ai aucune idée de quel type de mine utiliser.

si je peux utiliser 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() 
} 

Cela fonctionne sur le bureau Chrome, mais Safari ne supporte pas l'API MediaRecorder malheureusement.

Quelqu'un pourrait-il m'aider?

Merci d'avance.

Répondre

0

Vous pouvez consulter Recorderjs sur GitHub: https://github.com/mattdiamond/Recorderjs

La démo peut enregistrer un audio blob et une lecture ultérieure. Il fonctionne pour le bureau Chrome, mais pas pour iOS 11 Safari: exemples \ example_simple_exportwav.html

Avec une simple modification sur auj StartRecording() en ajoutant audio_context.resume(), il fonctionne sur iOS 11 Safari:

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

J'espère que cela fonctionne aussi pour vous.

tommy

+0

Vous pouvez également consulter ce qui suit, qui a modifié à la fois le soutien de safari mobile et plus récent navigator.mediaDevices.getUserMedia() API: https://github.com/tommysheu/Recorderjs –