1

私は、数オクターブにまたがる12音階の全音階から音を再生するアプリに取り組んでいます。これは基本的に、その場しのぎのウェーブテーブルシンセサイザーになります。

使用する楽器の数でその倍。

メモは.wavファイルとして保存され、ハードドライブの取得によるオーバーヘッドを防ぐためにRAMにキャッシュされます。ただし、.wavファイルは非常に大きくなる可能性があるため、物理メモリに関しては時間と空間の大きなトレードオフがあります。

これらの.wavファイルをよりスペース効率よくキャッシュする方法を知っている人はいますか?圧縮は良いオプションですが、多すぎると品質が低下する可能性があります。その場で周波数を変調または歪曲することは、間違いなく遅すぎるでしょう。私が間違っている場合は訂正してください。ただし、この実装で200BPMを再生しても機能しません。

音楽アプリの使用経験がある場合は、アドバイスを共有してください。

4

2 に答える 2

1

IMA4 圧縮を使用して、.wav ファイルを caf ファイル (Core Audio Format) に圧縮する必要があります。iPhone はこれらのファイルを同時に複数再生できます (ハードウェア デコーダが必要なため、MP3/AAC は再生できません)。

Mac OS X で次の端末コマンドを使用して、WAV を CAF に変換できます。

$ afconvert -f caff -c 1 -d ima4 loop1.wav

また、これらを AVAudioPlayer (AVFoundation) で再生する場合は、AVAudioPlayer が既にこれを行っているため、キャッシュについて心配する必要はありません。より高度なオーディオについては、Audio Services (Audio Queue) を参照する必要があります。

于 2009-12-17T11:58:23.843 に答える
1

音楽アプリ自体の経験はありませんが、録音を含むオーディオを使用しました。

iPhone では、サイズの制約とディスクの速度のため、通常、オーディオ全体を RAM にロードすることはありません。AudioQueue API を使用して、(通常は AudioFile メソッドを使用して) ディスクからバッファを作成するコールバック関数を記述します。バッファ サイズとバッファ カウントを適切に選択して、アプリケーションのオーディオ再生をスムーズに実行し続けることができます。

おそらく、圧縮の可能性も調べる必要があります。ロスレス AAC のようなものを使用すると、処理のオーバーヘッドが大幅に増加する代わりに、品質を損なうことなくファイル サイズを 50% 削減できます。

本当に、ここで最適化しようとしているのが早すぎるようです。いくつかの実験的なコードを書いて、オーディオ再生ルーチンの標準的なファイル読み込みスタイルから 200BPM を得ることができるかどうかを確認してください。WAV を使用したファイル読み込みスタイルは、デコード時間のために、圧縮して RAM を使用するよりも実際には高速である可能性があります。

于 2009-07-23T20:13:17.070 に答える