2016-12-06 2 views

Répondre

2

Si vous voulez vraiment utiliser recorder.js, Je suppose qu'il existe un moyen de le nourrir directement avec un MediaStream, que vous obtiendrez du streamNode.stream. En lisant rapidement le source code de cette lib, il semble qu'il n'accepte que les nœuds sources AudioContext, pas directement les flux, et de toute façon, il vous suffit de commenter le line 38 du fichier recorder.js.

this.node.connect(this.context.destination); //this should not be necessary 

commentaire de l'auteur
Et en effet il est.


Sinon, vous pouvez également réaliser le style de vanille (sauf qu'il économisera en ogg au lieu de wav), en utilisant l'API MediaRecorder officielle, disponible dans les navigateurs de Dernieres.

La clé principale est le MediaStreamDestination qui n'a pas besoin d'être connecté au destination de AudioContext.

var audio = new Audio(); 
 
audio.crossOrigin = 'anonymous'; 
 
audio.src = 'https://dl.dropboxusercontent.com/s/agepbh2agnduknz/camera.mp3'; 
 
audio.onloadedmetadata = startRecording; 
 

 
var aCtx = new AudioContext(); 
 
var sourceNode = aCtx.createMediaElementSource(audio); 
 
var streamNode = aCtx.createMediaStreamDestination(); 
 
sourceNode.connect(streamNode); 
 

 
function startRecording() { 
 
    var recorder = new MediaRecorder(streamNode.stream), 
 
    chunks = []; 
 
    recorder.ondataavailable = function(e) { 
 
    chunks.push(e.data); 
 
    } 
 
    recorder.onstop = function() { 
 
    var blob = new Blob(chunks); 
 
    var url = URL.createObjectURL(blob); 
 
    var a = new Audio(url); 
 
    a.controls = true; 
 
    document.body.appendChild(a); 
 
    } 
 
    audio.onended = function() { 
 
    recorder.stop(); 
 
    }; 
 
    audio.play(); 
 
    recorder.start(); 
 
}