9

私は iOS プログラミングがまったく初めてで (私はもっと Android の方です..)、オーディオ DSP を扱うアプリケーションを作成する必要があります。(iOS 開発者にアプローチする最も簡単な方法ではないことはわかっています;))

アプリは、次の両方からの入力を受け入れることができる必要があります。

1- 内蔵マイク 2- iPod ライブラリ

次に、フィルタを入力サウンドに適用し、結果を次のように出力します。

1- スピーカー 2- ファイルに録音

私の質問は次のとおりです。たとえば、複数のフィルターを入力に適用できるようにするために AUGraph が必要ですか、または異なるレンダー コールバックでサンプルを処理することによってこれらの異なる効果を適用できますか?

AUGraph を使用する場合、各入力に 1 つのオーディオ ユニット、出力に 1 つのオーディオ ユニット、各エフェクト/フィルタに 1 つのオーディオ入力が必要ですか?

最後に、オーディオ ユニットが 1 つしかない場合は、ソース/宛先を選択するために再構成しますか?

ご回答ありがとうございます。私はこのようなもので迷子になっています...

4

1 に答える 1

16

必要に応じてレンダー コールバックを実際に使用することもできますが、組み込みの 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)
);
于 2011-07-22T06:23:41.107 に答える