J'essaie de convertir un AudioBuffer en un fichier wav que je peux télécharger. J'ai essayé deux méthodes : La première, j'enregistre tous les sons qui passent par un mediaRecorder et je fais ceci :
App.model.mediaRecorder.ondataavailable = function(evt) {
// push each chunk (blobs) in an array
//console.log(evt.data)
App.model.chunks.push(evt.data);
};
App.model.mediaRecorder.onstop = function(evt) {
// Make blob out of our blobs, and open it.
var blob = new Blob(App.model.chunks, { 'type' : 'audio/wav; codecs=opus' });
createDownloadLink(blob);
};
Je crée une table de chunk contenant des blobs, puis je crée un nouveau Blob avec ces chunks. Ensuite, dans la fonction "createDownloadLink()", je crée un noeud audio et un lien de téléchargement :
function createDownloadLink(blob) {
var url = URL.createObjectURL(blob);
var li = document.createElement('li');
var au = document.createElement('audio');
li.className = "recordedElement";
var hf = document.createElement('a');
li.style.textDecoration ="none";
au.controls = true;
au.src = url;
hf.href = url;
hf.download = 'myrecording' + App.model.countRecordings + ".wav";
hf.innerHTML = hf.download;
li.appendChild(au);
li.appendChild(hf);
recordingslist.appendChild(li);
}
Le nœud audio est créé et je peux écouter le son que j'ai enregistré, donc tout semble fonctionner. Mais lorsque je télécharge le fichier, il ne peut être lu par aucun lecteur. Je pense que c'est parce qu'il n'est pas encodé en WAV et qu'il n'est donc pas compréhensible.
La deuxième méthode est la même que la précédente, à l'exception de la fonction "createDownloadLink()".
function createDownloadLink(blob) {
var reader = new FileReader();
reader.readAsArrayBuffer(blob);
App.model.sourceBuffer = App.model.audioCtx.createBufferSource();
reader.onloadend = function()
{
App.model.recordBuffer = reader.result;
App.model.audioCtx.decodeAudioData(App.model.recordBuffer, function(decodedData)
{
App.model.sourceBuffer.buffer = decodedData;
})
}
J'obtiens ici un AudioBuffer des sons que j'ai enregistrés, mais je n'ai pas trouvé comment le convertir en fichier WAV...