ライブ音楽と一緒に(ステージ上または寝室で)再生できるiPad用のドラムコンピューターアプリを作成しました。セットアップは非常に基本的です。ボタンの1つを押すと、対応するサンプルが再生されます。すべてが非常にスムーズに機能しますが、残念ながら、指を下に置いてからサウンドが再生されるまでの間に、(煩わしいとはいえ)わずかな遅延があるように見えます。レイテンシーの量を(耳で)測定しようとしましたが、0.05〜0.1秒のようです。
オーディオ再生は、AudioToolboxフレームワーク(拡張オーディオファイルサービス、Audio Units)を使用して実装されています。サウンドは、デバイスに保存されているファイルからストリーミングされ、異なるサウンドバンク間のロード時間を防ぎます。サンプルは生のwav形式(線形PCM、16ビットリトルエンディアン符号付き整数、2チャネル、44100 Hz)であり、私が理解している限り、処理が最も速いはずです(mp3のように圧縮されたものとは対照的です)。
ボタンを押してから(UIButtonタッチイベント)、サンプルの最初のフレームがミキサーに配信されるまでの時間を測定しました(再生コールバックを介して)。非常に安定しており、0.02〜0.03秒です。私にはこれはかなり速いように見えますが、十分に速くないかもしれません。
それが問題なのか、それともタッチイベントの配信の遅延のようなものなのか。
アップデート:
Tillが提案したように、サンプルの読み込みを書き直しました。これらはすべてメモリにプリロードされるようになったため、ディスクIOは問題ではなくなりました。その上、私はエコー効果のためにかなりのmemcpyを実行していましたが、それを無効にしました。後でリンクリストのような解決策で修正します。
これにより待ち時間は短縮されますが、ボタンを押した->再生は0.005〜0.02秒の間で測定されます(ただし、多くの場合、0.02秒のようになります)。これはまだ目立ちます。これは、再生コールバックのバッファサイズ(現在は1024バイト)が原因である可能性があると考えています。
それを行う方法について何かアイデアはありますか?kAudioUnitProperty_MaximumFramesPerSliceの設定が機能していないようです。