自作のv3 AudioUnitのカスタムUIがAUv3HostやHosting AUなどのホストアプリで表示できない原因を調査していました。
どうやらビューコントローラのpreferredContentSizeプロパティをセットする必要があるようです。
FilterDemoではFilterDemoViewControllerのviewDidLoad内でpreferredContentSizeをセットしているので、それに倣って
としました。- (void) viewDidLoad {[super viewDidLoad];self.preferredContentSize = NSMakeSize(480, 272);}
なお、AudioUnit App Extensionターゲット追加時に自動生成されるコードでは、viewDidLoadの実装は
となっています。- (void) viewDidLoad {[super viewDidLoad];if (!audioUnit) {return;}// Get the parameter tree and add observers for any parameters that the UI needs to keep in sync with the AudioUnit}
しかし、このaudioUnitインスタンスは必ずnilになるようで、即returnでviewDidLoadを抜けてしまいます。
このインスタンスはAUAudioUnitFactoryプロトコルのcreateAudioUnitWithComponentDescription:error:で
とセットされます。- (AUAudioUnit *)createAudioUnitWithComponentDescription:(AudioComponentDescription)desc error:(NSError **)error {audioUnit = [[MyAudioUnit alloc] initWithComponentDescription:desc error:error];return audioUnit;}
しかし、createAudioUnitWithComponentDescription:error:よりもviewDidLoadの方が先に実行されるので、結果としてviewDidLoadの時点ではaudioUnitはnilのままになっているようです。
なんというか、AudioUnit App Extensionターゲットで自動生成されるコードって色々おかしい気がします…。
AutoLayoutを疑ったり結構原因の特定に時間がかかりました…。
というわけで次はビューにUIを追加していきます。