iOS Audio Unit render callbackで私のカスタムシンセコードから低レイテンシーのオーディオをレンダリングしています。明らかに私のレンダリングコードが遅すぎると、コールバックから遅すぎて戻ってバッファアンダーランが発生します。私はこの経験から、無音が出力されることを知っています。iOSで時間制限内でオーディオをレンダリングする方法を教えてください。
私は(試料中の)バッファの長さは、音声の存在の持続時間を決定明らかに
..私は、デバイスの制限などに合わせて、処理のレベルを管理できるように、私が持っているもの、時間制限を知りたいですレンダリングされ、全体的な制限が設定されます。しかし、Appleオーディオエンジンは、レンダリングコールバックを発行してからレスポンスを要求するまでの時間制限が小さくなると思われます。
- この制限時間はどのようにして知ることができますか?コールバック関数自体で何ができるのでしょうか?
- 制限時間を超えてバッファアンダーランが発生した場合、私が受け取ることができる通知か質問することができるステータスオブジェクトがありますか?
NB:私のアプリでは、1つの「出力」オーディオユニットを作成しているので、オーディオユニットを連鎖させることについて心配する必要はありません。
を設定することができます。これは、iOSが動的なデータを提供できるかどうかについてです。私のアプリで 私は古いデバイスのために、私は最悪のデバイスのための固定された合成エンジンを設計するのではなく、品質と処理時間を短縮することができますので、その場で合成の複雑さを適合させることができるしています。これは、オンザフライ、利用可能な時間、およびアンダーランが発生したかどうかを知る必要があることを意味します。あなたはこれを手伝うことができますか? (特にあなたのアプリが認識されないとの措置oerformance事前に校正されているデバイスの機種)オーディオを開始する前に –
は、あなたのアプリが、それは、N個のサンプルを生成するのにかかる秒数またはミリ秒を参照するためにいくつかのベンチマーク合成ルーチンを実行する可能性があります。 Nを適切に変更して、少なくとも10分の1秒にわたって複数の反復可能な測定値を取得します。マッハタイマーを使用してベンチマークコードの時間を計測します。このためのパブリックAPIはありません(CPUサイクルタイマーとクロックレートはユーザー空間から隠されています)。アンダーラン(遅すぎる)は、1秒あたりのコールバック数をカウントして平均化することで検出できます。 – hotpaw2
ありがとうございます。私はベンチマークについて疑問に思っていました。残念ながら、「あなたはどれくらいの時間を持っていますか」、「やあ、期限を逃しました」という明確な情報を得るための公開APIはありません。私はあなたのコメントからあなたの答えにいくつかのノートを追加し、それらの編集が受け入れられたらそれを正しい答えにします。 –