从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一个
JavaScriptNode
或ScriptProcessor
从你的上下文,并利用onaudioprocess
你的function。 您可以轻松设置您的时间间隔,以确保每隔10ms。 这与当前的RTCRecorders所做的非常相似。 - 默认创build的数据包是
float PCM
。 你可以将它们转换为JavaScript中的16 bit PCM
,但是值得他们称重的媒体库(我知道肯定Gstreamer)可以翻译stream。
这是我写的代码 。 这个代码只是已经存在的logging器的修改版本,但我通过WebSocket发送数据,我不修改它在JavaScript中,但如果你需要它的源代码包括从浮动到16位PCMaudio更改function。 您可以在onaudioprocess
popup一个时间检查,并将websocket
移出worker
(只有Chrome支持Worker线程中的WebSockets),您应该很好。