私はAudioQueueを使用して任意のソースからオーディオをストリーミングしています(クラスは基本的にパケットを提供するデリゲートが必要です)、Callを呼び出すことができるすべての機能をラップするクラスを作成しましたAudioQueueClass、私はこのクラスを使用して多くを再生しています曲、各曲の間にクラスをリリースし、次の曲を再生するために新しいAudioQueueClassインスタンスを作成します。原因を特定できなかった2つの問題が発生しています。おそらく、これらの問題に遭遇し、解決できる可能性があります。その上に光
1-時々、AudioQueueは前の曲の数秒を再生してから現在の曲に戻ります。曲ごとに新しいキューを作成しているときに、なぜこれが発生する可能性があるのかわかりません。適切にキューに入れる-従うべきいくつかのコード
2-これはさらに悪いことです。3番目または4番目の曲に入ると、オーディオキューの再生が停止することがあります...問題は、AudioQueueInputCallback inCallbackProcの呼び出しが停止することだと思います。これは、キューの再生と処理が停止したためだと思います。パケットですが、理由がわかりません...これは、外部ソースからデバイスにストリーミングする場合にのみ発生します。ファイルデータをローカルで取得し、それをパケットとして使用すると、「スタッター」が聞こえます。音楽ですが、回復して正常に再生されますが、ストリーミングの場合は音が止まります(かなり奇妙です)
これが私がオーディオキューを破棄するために使用しているコードです。投稿する関連部分がわからないため、これ以上投稿しません。コードのいずれかを表示して、投稿しない場合はお知らせください。
AudioQueueFlush(audioQueue);
AudioQueueStop(audioQueue, true);
if (audioFileStream)
{
err = AudioFileStreamClose(audioFileStream);
audioFileStream = nil;
if (err)
{
[self failWithErrorCode:AS_FILE_STREAM_CLOSE_FAILED];
}
}
//
// Dispose of the Audio Queue
//
if (audioQueue)
{
err = AudioQueueDispose(audioQueue, true);
audioQueue = nil;
if (err)
{
[self failWithErrorCode:AS_AUDIO_QUEUE_DISPOSE_FAILED];
}
}