javascript - 从音频元素获取音频样本

标签 javascript node.js websocket html5-audio webrtc

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

有人能告诉我怎么做吗?或者还有另一种方法吗?谢谢!

最佳答案

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

  • 您想发送原始数据,因此从您的上下文中创建一个 JavaScriptNodeScriptProcessor,并为您的函数使用 onaudioprocess。您可以轻松设置时间间隔,以确保它只是每 10 毫秒一次。这与当前的 RTCRecorders 所做的非常相似。
  • 默认创建的数据包是float PCM。您可以在 JavaScript 中将它们转换为 16 位 PCM,但值得它们使用的媒体库(我确信 Gstreamer)可以转换流。

这里是 code that I wrote .这段代码只是已经存在的录音机的修改版本,但我通过 websocket 发送数据,我没有在 javascript 中修改它,但是如果你需要的话,源代码中包含从 float 到 16 位 PCM 音频的功能。您可以在 onaudioprocess 中弹出一个时间检查并将 websocket 移出 worker(目前只有 Chrome 支持工作线程中的 WebSockets)并且您应该可以走了。

关于javascript - 从音频元素获取音频样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19805670/

相关文章:

javascript - 放大水平条形图中的画笔

asp.net - 如何从 Javascript 函数设置 ASP.NET 控件的 "Visible"属性?

javascript - 为什么这个输入有效

node.js - 内部 socket.io 客户端列表位置

php - 通过 PHP 连接到 socket.io(nodejs)

javascript - Nodejs "ws"Websocket 服务器

javascript - 主干事件点击表格行

javascript - 两次格式之间的差异 (hh : mm: ss)

javascript - Nodejitsu:无法将属性添加到包描述

javascript - 无法将 websocket 连接到 service-worker