必要に応じてレンダー コールバックを実際に使用することもできますが、組み込みの Audio Units は優れています (NDA などの下でまだここで言えないことがあります。 iOS 5 SDK を参照することをお勧めします)。
を使用せずに希望する動作を実装することもできますがAUGraph、内部で多くのことを処理し、時間と労力を節約できるため、使用することをお勧めします。
AUGraph の使用
Audio Unit Hosting Guide (iOS Developer Library)から:
このAUGraph型はオーディオ ユニットのストーリーにスレッド セーフを追加します。これにより、処理チェーンをその場で再構成できます。たとえば、オーディオの再生中に、イコライザーを安全に挿入したり、ミキサー入力用の別のレンダリング コールバック関数をスワップしたりすることもできます。実際、このAUGraphタイプは、オーディオ アプリでこの種の動的な再構成を実行するための iOS で唯一の API を提供します。
デザイン パターンの選択 (iOS 開発者ライブラリ)では、Audio Unit 環境の実装方法を選択する方法について詳しく説明しています。オーディオ セッションの設定から、グラフ、ユニットの構成/追加、コールバックの作成まで。
グラフに必要な Audio Units については、既に述べたことに加えて、MultiChannel Mixer Unit ( Using Specific Audio Units (iOS Developer Library)を参照) を使用して、2 つのオーディオ入力をミックスしてからフックする必要があります。ミキサーを出力ユニットまで上げます。
直接接続
または、AUGraph を使用せずに直接実行する場合、次のコードは Audio ユニットを自分で接続するためのサンプルです。( Constructing Audio Unit Apps (iOS Developer Library)から)
または、オーディオ ユニットのプロパティ メカニズムを使用して、オーディオ ユニット間の接続を直接確立および切断することもできます。これを行うには、リスト 2-6に示すように、プロパティAudioUnitSetPropertyと共に関数
を使用します。このアプローチでは、プロパティ値として機能する各接続の AudioUnitConnection 構造を定義する必要があります。kAudioUnitProperty_MakeConnection
/*Listing 2-6*/
AudioUnitElement mixerUnitOutputBus = 0;
AudioUnitElement ioUnitOutputElement = 0;
AudioUnitConnection mixerOutToIoUnitIn;
mixerOutToIoUnitIn.sourceAudioUnit = mixerUnitInstance;
mixerOutToIoUnitIn.sourceOutputNumber = mixerUnitOutputBus;
mixerOutToIoUnitIn.destInputNumber = ioUnitOutputElement;
AudioUnitSetProperty (
ioUnitInstance, // connection destination
kAudioUnitProperty_MakeConnection, // property key
kAudioUnitScope_Input, // destination scope
ioUnitOutputElement, // destination element
&mixerOutToIoUnitIn, // connection definition
sizeof (mixerOutToIoUnitIn)
);