2017-07-11 3 views
0

私は170ミリ秒ごとにオーディオバッファを生成するPythonスクリプトを持っています。 このバッファはソケットを介してJSプログラムにリアルタイムで送信されます。 バッファのサウンドをリアルタイムで再生しようとしています。JS - バッファからオーディオを再生する

私は何かを受け取るたびに新しいJS AudioBufferを作成しようとしましたが、何度も吃音につながります。

var net = require('net'); 
var client = new net.Socket(); 

client.connect(8484, '127.0.0.1', function() { 
    console.log('Connected'); 
}); 

var audioCtx = new (window.AudioContext || window.webkitAudioContext)(); 
var channels = 1; 

client.on('data', function(data) { 
    // clean data (each buffer has a length of 1350) 
    var array = String(data).split(";"); 
    for (var i = 0; i < array.length; i++) 
    array[i] = parseFloat(array[i]) 
    // play the small buffer 
    var buf = audioCtx.createBuffer(channels, array.length, 16000); 
    var buffering = buf.getChannelData(0); 
    for (var i = 0; i < array.length; i++) 
     buffering[i] = array[i]; 
    var source = audioCtx.createBufferSource(); 
    source.buffer = buf; 
    source.connect(audioCtx.destination); 
    source.start(); 
}); 

ウェブオーディオストリームAPIも試しましたが、エラーメッセージが表示されました。

はあなたのバッファを時間を計る必要がある

答えて

0

こんにちはABCDEFまたは何でも、

ありがとうございます。ですからチャンクの長さ=> 170ミリ秒を知る必要があります。したがって、もう一方のチャンクを開始する前に、そのチャンクがfinsisehdであることを確認してください。これは配列やsetTimeoutなどで行うことができます。

スプリット( ";")コマンドが遅すぎる可能性があります。 あなたは数十万の分割が必要なことを意味します。余りにも時間がかかりませんか?

これがボトルネックであり、すべての処理を行うために時間が必要な場合は、170ミリ秒でログを記録してみてください。

おそらく、データを分割する必要がなく、直接デコードできるように、Pythonでデータを生成することができます。ちょうどmp3か何かのように=> wavはおそらくより速いです。

私は本当にあなたの設定と異なるステップがかかる時間に依存しているかわかりません。

乾杯

キリアン

関連する問題