slides for my 15 min. LT at shibuya.apk #41 (2023/4/21)
Androidに楽器のエコシステムを作るatsushieno
View Slide
Androidは音楽アプリ市場で立場が弱いモバイル = iOS みたいに思われているどうにかしたいAndroidにいま足りないもの=「オーディオプラグイン」を作っているGitHub: atsushieno/aap-core
オーディオプラグイン is 何?InstrumentとEffectDAW (digital audio workstation):DTM (desktop music, 和製英語)の作業環境オーディオプラグインは(主に) DAWでロードされる楽器
オーディオプラグインのしごとaudio input -and/or- MIDI input を受け取ってaudio output (-and/or- MIDI output) を生成(MIDI: 楽器演奏命令の規格 )楽器は演奏命令から音声を生成するエフェクターは音声を加工するオーディオプラグイン以前: MIDI楽器の時代
公開プラグインフォーマットプラグインAPI等を共通規格化すれば好きなDAWで好きな楽器を使えるポピュラーなフォーマット:- VST 2, 3 (Win / Mac / Linux)- AudioUnit v2 (Mac),v3 (iOS / Mac)- LV2 (Linux / Mac / Win)機能とAPIがそれぞれ異なる
iOSにもある…?AUv3プラグインがけっこうある
Androidは…?¯\_(ツ)_/¯DAWアプリはある(楽器は全部 in-app synths)プラグインフォーマットが無いので自由に楽器を選べない(!)
Audio Plugins For Android to fill the gap※まだまだ開発中
AAP ecosystem: current state of union※まだ実用できるDAWはない
AAP APK Installeratsushieno/android-ci-package-installer on gitHubプラグインもDAWも全部別々のアプリでまだPlay Storeには出していない(不安定 / 多すぎ)GitHub releases / Actions artifactからDL & installする仕組みを作ってある
プラグインとホスト(DAW)はどこから?全部GitHubにあるOSSで、特に以下のものが多い (C/C++):- JUCE: 複数のフォーマットをサポートするプラグイン開発ライブラリ- LV2: Linux上の代表的なプラグインフォーマット運が良ければ小一時間で1本移植できる
モバイルの課題 #1: アプリケーション配布とプロセス分離DAWとプラグインは別々の開発者が公開するものデスクトップのようにはプラグインのネイティブコードをdlopen()できない…solution: DAWとプラグインをIPCで繋ぐService Binder IPC, NdkBinder (minSdk 29)Apple AUv3も同様(プロセス分離, IPC)
モバイルの課題 #2: GUIAndroidアプリの一般的なGUI: Activityの切り替えデスクトップのようにはDAW上でプラグインのUIをダイアログ表示できない…solution:1. DAW側のWebViewにWeb UIをロードし、IPCでプラグインを操作2. System Alert Window -特別なパーミッションの下でViewを表示(IMHO: UIはモバイル向けに作り直すべき)
モバイルの課題 #3: extension API (if time permits...)● モダンなプラグインフォーマットのAPIは柔軟な拡張機構をもつ(AAPも)● 拡張機能は誰でも定義可能(プラグインとDAWで実装されて初めて有用になる)● 拡張機能には関数があるものだけど、ここでもIPCが必要● DAWとプラグインの開発者がIPCも実装するのは無駄に煩雑…solution:● 拡張機能を定義した開発者がIPCの部分も実装する● DAWとプラグインはそれぞれ拡張機能のIPCをAAPのAPIに沿って呼び出す
AAPのその他の特徴MIDI 2.0ネイティブ: 32bit floatパラメーターをMIDI2で操作可能Instrumentプラグインは仮想MIDIデバイスとして利用可能
Lastly...世界最先端を行っているはずなので割と面白いと思いますでもまだいろいろ足りないことだらけ興味がある人がいたらぜひ一緒にやってくださいせんでん:Audio Plugins For Androidの設計と実装 @ M3 2023春 & 技術書典14(予定)Android Audio Devs Discord https://discord.gg/6AC3heft (英語)