8

我想使用网络浏览器从麦克风获取实时音频,并通过 websockets 将其发送到 Node.js 服务器。我正在使用 BinaryJS 库将二进制数据发送到服务器。我在从麦克风获取音频样本时遇到问题。这是我所拥有的:

window.AudioContext = window.AudioContext || window.webkitAudioContext;

var context = new AudioContext();
var audio = document.querySelector('audio');
navigator.webkitGetUserMedia({audio: true}, function(micstream){

    audio.src = window.URL.createObjectURL(micstream);

    }, errorCallback);

});

var errorCallback = function(e){
    console.log("Rejected!", e);
};

我想要某种方法以每 10 毫秒左右获取音频样本,以便我可以将其写入 websocket 流。我正在寻找这样的东西:

function getSample(){
    //read the current data in byte buffer.

    setTimeout(getSample, 10);
}

有人可以告诉我该怎么做吗?还是有其他方法可以做到这一点?谢谢!

4

1 回答 1

1

这些要点应该使您走上正轨:

  • 您想发送原始数据,因此从您的上下文创建JavaScriptNodeorScriptProcessor并将其onaudioprocess用于您的功能。您可以轻松设置时间间隔以确保仅每 10 毫秒。这与当前的 RTCRecorders 所做的非常相似。
  • 默认创建的数据包是float PCM. 您可以将它们转换为16 bit PCMJavaScript,但值得他们重视的媒体库(我确信 Gstreamer)可以翻译流。

这是我写的代码。这段代码只是已经存在的录音机的修改版本,但我通过 websocket 发送数据,我没有在 javascript 中修改它,但如果您需要,源代码中包含从浮点更改为 16 位 PCM 音频的功能。你可以弹出一个时间检查onaudioprocess并移出websocketworker目前只有 Chrome 支持工作线程中的 WebSockets),你应该很高兴。

于 2014-05-09T21:28:48.620 回答