Inter-App Audioに対応する
まったく安定しないですな。
特にEffectがダメっぽい。
ざっくりした手順としては、
プロジェクトを作成して、
Inter-App AudioとBackground Modesを有効にして、
Background Modesは「Audio, AirPlay and Picture in Picture」にチェックを入れる。
プロジェクトを作成する前でも後でも良いので、
Inter-App Audioが有効なProvisioning Profileを作成して、
それをプロジェクトのBundle Identifierに設定する。
次に、”Info.plist”に「AudioComponents」(Array)を追加する。
そして要素(Dictionary)を1つ追加して、
manufacturer
name
subtype
type
version
を追加する。
Typeは、version
のみNumberに変更して、
それ以外はString(デフォルト)のままでOK。
manufacturer
は、作成した会社を識別する4文字。
Appleは’appl'(*1)を使っている。
name
はアプリ名。
subtype
は、アプリを識別する4文字。
サンプルコードでは’iasp’を使っているが、
これは、”IAA Sampler”を略したと思われる。
type
は、’aurx’と’auri’と’aurg’のいずれか。
Generatorなら’aurg’を使用する。(”AUComponent.h”を参照)
version
は、整数値を使用すること。
あと、もう一つ、「Bundle display name」を追加して、
とりあえず、$(PRODUCT_NAME)
を指定しておく。
(どこで使われるのかまでは把握していない。。。)
次に、これらを使ってホストアプリにAudioUnitを公開する。
AudioComponentDescription desc = { kAudioUnitType_RemoteGenerator, 'hoge', 'fuga', 0, 0 }; OSStatus result = AudioOutputUnitPublish( &desc, CFSTR("Foo"), 1, audioUnit );
ここでのポイントは、AudioComponentDescriptionの
componentFlagsとcomponentFlagsMaskには0を設定すること。
AudioOutputUnitPublishの3つ目の引数にはversionの値を指定するらしいが、
サンプルコードを見ると、そうなってないのでなんとも・・・。
これでうまくいくはず。
“Info.plist”でスペルミスをすると、AudioOutputUnitPublishで失敗する。
あとは、音の出口であるRemoteIOを、
AudioOutputUnitPublishを使って公開するだけ。
なので、シンセアプリのように動的に波形を生成する場合は、
AUGraphによる接続は必要なかったりする。
残りはサンプルコードを見てなんとかしてください。
動作が不安定だけど、サンプルコードでも同様に不安定なので、
もう少しさぐってみようと思う。
おしまい。
(*1) kAudioUnitManufacturer_Apple
として定義されている。
Leave a Comment