Javascript 从音频元素获取音频样本

Javascript 从音频元素获取音频样本,javascript,node.js,websocket,html5-audio,webrtc,Javascript,Node.js,Websocket,Html5 Audio,Webrtc,我想使用web浏览器从麦克风获取实时音频,并通过WebSocket将其发送到Node.js服务器。我正在使用BinaryJS库向服务器发送二进制数据。我无法从麦克风获取音频样本。以下是我所拥有的: window.AudioContext = window.AudioContext || window.webkitAudioContext; var context = new AudioContext(); var audio = document.querySelector('audio');

我想使用web浏览器从麦克风获取实时音频,并通过WebSocket将其发送到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);
}

有人能告诉我怎么做吗?还是有别的办法?谢谢

这些要点应该会让你走上正确的道路:

  • 如果要原始发送数据,请从上下文中创建
    JavaScriptNode
    ScriptProcessor
    ,并为函数使用
    onaudioprocess
    。您可以轻松设置时间间隔,以确保它仅为每10毫秒一次。这与当前的RTC记录器的功能非常相似
  • 默认情况下创建的数据包是
    浮点PCM
    。您可以在JavaScript中将它们转换为
    16位PCM
    ,但值得使用的媒体库(我肯定知道Gstreamer)可以转换流

这是。这段代码只是已经存在的记录器的修改版本,但我通过websocket发送数据,我没有在javascript中对其进行修改,但是如果需要,源代码中包含了从浮点更改为16位PCM音频的功能。您可以在
onaudioprocess
中弹出一个时间检查,并将
websocket
移出
worker
(当前只有Chrome支持worker线程中的websocket),这样您就可以开始了

这可能会对你有所帮助:我之前看过这篇文章。问题是此代码正在本地将数据转换为wav文件。我想要实现的是将麦克风音频直接传输到websocket服务器。只需跳过转换为wav并将数据直接推送到您的web套接字连接?您可能想看看Recorderjs或MediaStream录制API(在Firefox中实现,打算在Chrome中实现):@我试着把它推到服务器上。在服务器上重新组装它并从中创建wav文件。但是我得到了关于无法读取的流数据的错误。我正在努力解决这个问题。