「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

AudioUnit ざっくりメモ

AudioUnitの事を、項目別にブログにしようと思ったけど、 他にも、勉強する事が多いので、ざっくり流れをメモしようと思う。

このエントリーははっきり言って自分用なので、 他の人には役に立たないと思われます。

※ほとんどiPhone CoreAudioプログラミングの抜粋です。

●RemoteOutputクラスを用意する。このクラスで行う事で絶対に外せないものは、

AudioUnitメンバ変数の初期化 のみです。

【初期化で行っている事】

・AudioComponentInstanceをつくる!これが目標 と言っても、AudioUnitはAudioComponentプラグインの1つであり、 いきなりAudioComponentInstanceを作成する事はできない。

まず、AudioComponentDescription構造体を使用して、 使用したいAudioComponentを指定し、 AudioComponentInstanceを作成する親参照を作る。

1)AudioComponentDescription cd; この変数cdに対して適切なプロパティーをセットする

2)AudioComponent comp = AudioComponentFindNext(NULL, &cd); として、AudioComponentを取得する。

3)取得したAudioComponentを利用してAudioUnit変数をインスタンス化する AudioComponentInstanceNew(comp, &audioUnit); ※audioUnitは、メンバ変数として先に宣言している。

4)AudioUnit変数を初期化する。 AudioUnitInitialize( audioUnit );

5)だいたい、コールバック関数をaudioUnitに当て込むので、 AURenderCallbackStruct構造体変数に適切なプロパティをセットし、 その構造体を、以下の関数で、audioUnitのコールバック関数として定義する。

AudioUnitSetProperty (audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, // 0 == スピーカ &callbackStruct, //AURenderCallbackStruct構造体変数 sizeof( AURenderCallbackStruct) );

6)4)で初期化したaudioUnitに対して、オーディオとしてのデータフォーマットを決める。 データフォーマットは、おなじみのASBDを作成し、AudioUnitSetProperty関数でセットする。 AudioUnitSetPropertyでセットする引数は、リファレンスを参照。 あえて言うなら、AudioUnitの使用目的にあわせて値をセットするということ。 スピーカとして使うのか?など。

7)あとは、Audio Unit を開始したいタイミングで開始する。 このエントリーの場合は、Remote IOを使用しようとしているが、 AudioOutputUnitStart関数を使用する。

ながれをもう一度。 AudioComponentDescription ー>AudioComponent ー>AudioUnit ー>AudioUnitコールバック関数の設定(AURenderCallbackStruct) ー>AudioUnitの為にASBD構造体を設定 ー>AudioUnitにAudioUnitSetPropertyをつかって、ASBDをセットし、AudioUnitの性格付け

後は、思う存分使いたいように使用する。