8

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

Websocket ストリームに書き込むことができるように、10 ミリ秒ごとにオーディオ サンプルを取得する方法が必要です。私はこのようなものを探しています:

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

    setTimeout(getSample, 10);
}

誰かがこれを行う方法を教えてもらえますか? または、それを行う別の方法はありますか?ありがとう!

4

1 に答える 1

1

これらのポイントにより、正しい軌道に乗ることができます。

  • データをそのまま送信したいので、コンテキストからJavaScriptNodeorを作成し、関数に を利用します。時間間隔を簡単に設定して、10ms ごとになるようにすることができます。これは、現在の RTCRecorder が行うことと非常によく似ています。ScriptProcessoronaudioprocess
  • デフォルトで作成されるパケットはfloat PCM. それらをJavaScriptで変換でき16 bit PCMますが、その重量に見合うメディアライブラリ(Gstreamerは確かに知っています)がストリームを変換できます。

これが私が書いたコードです。このコードは既存のレコーダを修正しただけですが、websocket 経由でデータを送信し、javascript では修正していませんが、必要に応じて float から 16 ビット PCM オーディオに変更する機能がソース コードに含まれています。でタイム チェックをポップし、外にonaudioprocess移動することができます(現在、Chrome のみがワーカー スレッドで WebSocket をサポートしています)。 websocketworker

于 2014-05-09T21:28:48.620 に答える