0

そこで、マルチチャンネル ミキサーとリモート I/O ユニットをセットアップして、オーディオ ファイルから読み取った PCM データの複数のバッファーをミックス/再生しました。ゲームの短いサウンド エフェクトの場合、ファイル全体をメモリ バッファにロードしますExtAudioFileRead()

バックグラウンド ミュージックとして、3 分間の圧縮オーディオ ファイルがあるとします。mp3 @ 128 kbps (44,100 Hz ステレオ) としてエンコードされていると仮定すると、1 分あたり約 1 MB、つまり合計 3 MB になります。無圧縮の記憶では、私の記憶が正しければ10倍くらいはあると思います。小さなファイルの場合とまったく同じ方法を使用できます。ExtAudioFileRead()利用可能な場合は(単一の)ハードウェアデコーダーを使用してデコードを処理すると思いますが、バッファー全体を一度に読み取るのではなく、ディスクから定期的に「ストリーミング」したいと思います。

最初に頭に浮かぶのは、(「拡張されていない」) Audio File Services API の 1 つ下のステップに進み、次AudioFileReadPackets()のように を使用することです。

  1. 2 つのバッファ A と B を準備します。それぞれが 5 秒間のオーディオを保持するのに十分な大きさです。再生中、一方のバッファから読み取りを開始し、最後に到達したらもう一方のバッファに切り替えます (つまり、リング バッファの 2 つの半分を構成します)。

  2. ファイルからオーディオの最初の 5 秒間をバッファー A に読み取ります。

  3. 次の 5 秒間のオーディオをファイルからバッファ B に読み込みます。

  4. 再生を開始します (バッファー A から)。

  5. 再生ヘッドがバッファ B に入ったら、次の 5 秒間のオーディオをバッファ A にロードします。

  6. 再生ヘッドが再びバッファ A に入ったら、次の 5 秒間のオーディオをバッファ B にロードします。

  7. #5へ

これは正しいアプローチですか、それとももっと良い方法がありますか?

4

1 に答える 1