它可以RecorderJs处理文件的记录而不会在扬声器中发出任何声音吗?

时间:2016-12-06 02:44:24

标签: web-audio web-audio-api recorder.js

在阅读有关RecorderJs的一些内容时,我问自己是否有可能录制声音而不会在扬声器中发出任何声音,所有这些都在后台,有人知道这是否可能?因为我在Recorderjs存储库中看不到类似内容。

1 个答案:

答案 0 :(得分:2)

如果你真的想使用recorder.js,我想有一种方法可以直接用MediaStream来提供它,你可以从streamNode.stream得到它。
快速读取此lib的source code,它似乎只接受AudioContext源节点,而不是直接流,无论如何,你只需要评论 recorder.js的line 38 文件。

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

作者的评论
事实确实如此。

否则,你也可以使用官方的MediaRecorder API(可以在最新的浏览器中使用)来实现它的香草风格(除了它将保存为ogg而不是wav)。

主键是MediaStreamDestination,不需要连接到AudioContext的destination

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