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を使用する必要がありますか、それはように私のバッファをスケジュールする方法があると呼ばれている部分継続的に演奏されるだろうか?
'stream()が呼び出されるのはいつですか? – guest271314
@ guest271314申し訳ありませんが、私はこの点を明確にしませんでした。私はすでに私の答えを編集しました。あなたはそれを見てみることができますか? –
前の 'bufferSource'の終わりに次の' bufferSource'を開始することができます。 'MediaSource'イベントと' updateend'イベントを利用して、メディアソースセグメントの 'ArrayBuffer'表現をメディア再生に追加することもできます。[HTML5オーディオストリーミング:正確にレイテンシを測定する](https://stackoverflow.com/q/) 38768375 /) – guest271314