0

私のアプリでは、ユーザーがアプリ内を移動するときにバックグラウンドで音楽を再生する必要があります。それで、MixerHost から始めて、8 トラックを同時に再生できるオーディオ ミキサーを開発しました。とはいえ、8 トラックのファイルを 8 つのバッファにすべてロードするため、大量のメモリを消費します。

メモリ消費を制限するために、最初はデータの小さなチャンクのみをロードし、そのようなコールバックで新しいデータをフィードします

result = ExtAudioFileRead ( audioFileObject, &numberOfPacketsToRead, bufferList );

非常にうまく機能しますが、再生が一時停止することがあります。問題の原因はわかっています。コールバックで FS アクセスを行うことです。

しかし、メモリ消費を制限する別の解決策はありますか?

4

1 に答える 1

1

これは通常、共有リング バッファを使用して処理されます。リング バッファは、リアルタイム レンダリング スレッドと低速ディスク アクセスの間のショック アブソーバーのように機能します。ファイルからオーディオを読み取り、リング バッファーに格納するだけの新しいスレッドを作成します。次に、レンダー コールバックでリング バッファーから読み取ります。

Apple は、CARingBuffer と呼ばれる Audio Units での使用に適したリング バッファの実装を提供しています。/Developer/Extras/CoreAudio/PublicUtility/CARingBuffer で利用できます。

于 2011-08-05T12:09:34.443 に答える