2011-08-05 21 views
0

私のアプリでは、ユーザーがその内部をナビゲートするときに、バックグラウンドで音楽を再生する必要があります。 MixerHostから、私は同時に8トラックを再生できるオーディオミキサーを開発しました。それにもかかわらず、8トラックのファイルは完全に8つのバッファにロードされるため、多くのメモリを消費します。オーディオユニットを使用するときのメモリ消費量を制限する方法

メモリ消費を制限するために、私が最初にデータのほんのチャンクをロードし、私はそれが非常によく動作しますが、時々再生があること

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

のようなコールバックで新しいデータでフィードまもなく一時停止しました。私は問題の原因を知っている:コールバックでFSアクセスを行う。

しかし、メモリ消費量を制限するもう1つのソリューションはありますか?

答えて

0

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

Appleは、CARingBufferと呼ばれるオーディオユニットでの使用に適したリングバッファの実装を提供しています。/Developer/Extras/CoreAudio/PublicUtility/CARingBufferにあります。

+0

ありがとうございます!私はそのようなことをする方法を探していました。 –

+0

このOPのケースでは、彼は8個のリングバッファを使用するのでしょうか? – user523234

+1

8つの別々のトラックの場合、最も一般的な設定は8つのリングバッファです。 – sbooth

関連する問題