Attention! Translated article might be found on my English blog.

2017年10月6日金曜日

自作のV3 AudioUnitが10.13で動かなかった

NOTE: English article is available.

開発環境はXcode9.0, macOS 10.13です。

AVAudioUnitインスタンスが作れない

+[AVAudioUnit instantiateWithComponentDescription:options:completionHandler:]でAVAudioUnitインスタンス作成に失敗していました。
completionHandler内のerrorを出力してみると、
Error Domain=NSOSStatusErrorDomain Code=-3000 "invalidComponentID"
というエラーが出ていました。

試行錯誤の結果、ホスト側のSandbox化をoffにすることでインスタンスを作成できるようになりました。
なお、Appleのサンプルコード「AudioUnitV3Example」でもホスト側はSandboxがoffになっているようでした。

ちなみに、Sandboxがonでも+[AUAudioUnit instantiateWithComponentDescription:options:completionHandler]ではインスタンスを作れていたので、こちらに置き換えるのも良いかもしれません。
ついでにAudioComponentInstanceNew()も試しましたがダメでした。

AUViewControllerが作れない

数時間かけてようやくインスタンスが作れるようになったものの、
今度はビューが表示されないという問題が発生しました。

-[AUAudioUnit requestViewControllerWithCompletionHandler:]をコールしてもcompletionHandler内のviewControllerがnilになってしまいます。

ビューコントローラのメソッドにトレースを仕込んでみましたが、
そもそもオブジェクトが生成すらされてないようです。

AudioUnitV3Exampleは-[ViewController embedPlugInView]でバンドルから直接ビューを作っているようなので、
こちらに実装を変更するのが良さそうです。(未着手)

雑感

10.13だと.appexを内包するアプリを起動してもauval -aで表示されるリストの中に自作AUが表示されないようですね。
ということは他のホストアプリから使えないということになるはずなので、
こちらも解決しないといけませんね。

めんどくさい!

つづく…