En lisant un peu à propos de RecorderJs je me demande s'il est possible d'enregistrer un son sans émettre de son dans les haut-parleurs, le tout dans un fond, quelqu'un sait si c'est possible? parce que je ne vois pas quelque chose de similaire dans le dépôt Recorderjs
.RecorderJs peut-il traiter un enregistrement d'un fichier sans émettre de son dans les haut-parleurs?
0
A
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();
}