AVAudioPlayerNode インスタンスと他の AUAudioUnits を組み合わせて EQ や圧縮などを使用してアプリを作成しようとしています。ただし、再生中に、ミキサーのゲインなどのパラメーターの変更を自動化して、変更が傾斜し (フェードアウトまたはフェードインなど)、変更がサンプルに正確であると確信できるようにしたいと考えています。
ノード(おそらくエンジンのミキサーノード)にタップを取り付け、その中で特定のユニットのゲインを調整することを検討した1つの解決策ですが、タップはユニットの出力にあるため、これを行うには常に遅すぎますオフセット計算を行わずに、ソースオーディオの再生を遅らせて、パラメーターの変更に合わせて、目的の効果(と思います)。scheduleParameterBlock
プロパティも見ましたAUAudioUnit
が、組み込みユニットを使用するのではなく、独自のカスタムユニットを実装してそれを利用する必要があるようです
WWDC セッション 508 : " ...スケジュールを実行するための最初の引数はサンプル時間です。Audio Unit がランプ可能であるとアドバタイズした場合、パラメーター値は時間の経過とともにランプすることができます。たとえば、Apple ミキサーはこれを行います。そして最後のもちろん、2 つのパラメーターは関数パラメーターで、変更するパラメーターのアドレスと新しいパラメーター値です...."
おそらくこれは、Apple Mixer が内部的にそれを使用することを意味し、ランプ可能な機能を利用できることを意味するわけではありません。この講演に添付されている Apple の例のようにカスタム オーディオ ユニットを実装する以外に、多くのドキュメントや例を見つけることができません。
私が見た他の潜在的な解決策にはNSTimer
、CADisplayLink
またはを使用することが含まれますdispatchAfter...
が、これらの解決策は、ユニットの出力に取り付けられたタップブロックからオフセットするよりも悪く、サンプルの精度が低くなります。
新しい AVAudioEngine API には他にも多くの意味をなす部分があり、古い AUGraph API ではサンプルの正確なシーケンシングとパラメーターの変更により多くのアクセスが許可されていたため、非常に明白な何かを見逃しているように感じます。