从audio元素获取audio样本

我想要使​​用networking浏览器从麦克风获取实时audio,并通过websockets将其发送到Node.js服务器。 我使用BinaryJS库发送二进制数据到服务器。 我在从麦克风获取audio样本时遇到问题。 这是我有什么:

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

我想要一些方法来获取每10ms左右的audio采样,以便我可以将它写入websocketstream。 我正在寻找这样的东西:

 function getSample(){ //read the current data in byte buffer. setTimeout(getSample, 10); } 

有人能告诉我如何做到这一点? 还是有另一种方法来做到这一点? 谢谢!

这些点应该让你在正确的轨道上:

  • 你想发送原始数据,所以创build一个JavaScriptNodeScriptProcessor从你的上下文,并利用onaudioprocess你的function。 您可以轻松设置您的时间间隔,以确保每隔10ms。 这与当前的RTCRecorders所做的非常相似。
  • 默认创build的数据包是float PCM 。 你可以将它们转换为JavaScript中的16 bit PCM ,但是值得他们称重的媒体库(我知道肯定Gstreamer)可以翻译stream。

这是我写的代码 。 这个代码只是已经存在的logging器的修改版本,但我通过WebSocket发送数据,我不修改它在JavaScript中,但如果你需要它的源代码包括从浮动到16位PCMaudio更改function。 您可以在onaudioprocesspopup一个时间检查,并将websocket移出worker (只有Chrome支持Worker线程中的WebSockets),您应该很好。