2017-06-04 6 views
1

ノードjsとソケットioを使用してMP3曲をリアルタイムでバッファリングしようとしています。私は基本的にMP3をバイトのセグメントに分割し、それをクライアント側に送り、そこではWebオーディオAPIがそれを受け取り、デコードして再生を開始します。ここで問題となるのは、サウンドが連続的に再生されないということです。バッファされた各セグメント間に0.5秒のギャップがあります。どのように私はこの問題を解決することができWebオーディオAPIがサウンドを再生しない連続して

// buffer is a 2 seconds decoded audio ready to be played 
// the function is called when a new buffer is recieved 
function stream(buffer) 
{ 
    // creates a new buffer source and connects it to the Audio context 
    var source = context.createBufferSource(); 
    source.buffer = buffer; 
    source.connect(context.destination); 
    source.loop = false; 
    // sets it and updates the time 
    source.start(time + context.currentTime); 

    time += buffer.duration; // time is global variable initially set to zero 
} 

ストリームが

// where stream bufferQ is an array of decoded MP3 data 
    // so the stream function is called after every 3 segments that are recieved 
    // the Web audio Api plays it with gaps between the sound 
    if(bufferQ.length == 3) 
    { 
     for(var i = 0, n = bufferQ.length ; i < n; i++) 
     { 
       stream(bufferQ.splice(0,1)[0]); 
     } 
    } 

私はウェブオーディオAPI以外の別のAPIを使用する必要がありますか、それはように私のバッファをスケジュールする方法があると呼ばれている部分継続的に演奏されるだろうか?

+0

'stream()が呼び出されるのはいつですか? – guest271314

+0

@ guest271314申し訳ありませんが、私はこの点を明確にしませんでした。私はすでに私の答えを編集しました。あなたはそれを見てみることができますか? –

+0

前の 'bufferSource'の終わりに次の' bufferSource'を開始することができます。 'MediaSource'イベントと' updateend'イベントを利用して、メディアソースセグメントの 'ArrayBuffer'表現をメディア再生に追加することもできます。[HTML5オーディオストリーミング:正確にレイテンシを測定する](https://stackoverflow.com/q/) 38768375 /) – guest271314

答えて

0

これはmp3ファイルの問題です。それぞれのmp3ファイルには、開始時と終了時に数フレームの無音があります。 wavファイルを使用するか、各ファイルの起動と停止に時間がかかる場合は、修正できます

関連する問題