Slide 1

Slide 1 text

Androidに 楽器のエコシステムを作る atsushieno

Slide 2

Slide 2 text

Androidは音楽アプリ市場で立場が弱い モバイル = iOS みたいに思われている どうにかしたい Androidにいま足りないもの=「オーディオプラグイン」を作っている GitHub: atsushieno/aap-core

Slide 3

Slide 3 text

オーディオプラグイン is 何? InstrumentとEffect DAW (digital audio workstation): DTM (desktop music, 和製英語) の作業環境 オーディオプラグインは (主に) DAWでロードされる楽器

Slide 4

Slide 4 text

オーディオプラグインのしごと audio input -and/or- MIDI input を受け取って audio output (-and/or- MIDI output) を生成 (MIDI: 楽器演奏命令の規格 ) 楽器は演奏命令から音声を生成する エフェクターは音声を加工する オーディオプラグイン以前: MIDI楽器の時代

Slide 5

Slide 5 text

公開プラグインフォーマット プラグインAPI等を共通規格化すれば 好きなDAWで好きな楽器を使える ポピュラーなフォーマット: - VST 2, 3 (Win / Mac / Linux) - AudioUnit v2 (Mac), v3 (iOS / Mac) - LV2 (Linux / Mac / Win) 機能とAPIがそれぞれ異なる

Slide 6

Slide 6 text

iOSにもある…? AUv3プラグインがけっこうある

Slide 7

Slide 7 text

Androidは…? ¯\_(ツ)_/¯ DAWアプリはある (楽器は全部 in-app synths) プラグインフォーマットが無いので 自由に楽器を選べない(!)

Slide 8

Slide 8 text

Audio Plugins For Android to fill the gap ※まだまだ開発中

Slide 9

Slide 9 text

AAP ecosystem: current state of union ※まだ実用できるDAWはない

Slide 10

Slide 10 text

AAP APK Installer atsushieno/android-ci-package-installer on gitHub プラグインもDAWも全部別々のアプリで まだPlay Storeには出していない(不安定 / 多すぎ) GitHub releases / Actions artifactから DL & installする仕組みを作ってある

Slide 11

Slide 11 text

プラグインとホスト(DAW)はどこから? 全部GitHubにあるOSSで、特に以下のものが多い (C/C++): - JUCE: 複数のフォーマットをサポートするプラグイン開発ライブラリ - LV2: Linux上の代表的なプラグインフォーマット 運が良ければ小一時間で1本移植できる

Slide 12

Slide 12 text

モバイルの課題 #1: アプリケーション配布とプロセス分離 DAWとプラグインは別々の開発者が公開するもの デスクトップのようにはプラグインのネイティブコードをdlopen()できない… solution: DAWとプラグインをIPCで繋ぐ Service Binder IPC, NdkBinder (minSdk 29) Apple AUv3も同様(プロセス分離, IPC)

Slide 13

Slide 13 text

モバイルの課題 #2: GUI Androidアプリの一般的なGUI: Activityの切り替え デスクトップのようにはDAW上でプラグインのUIをダイアログ表示できない… solution: 1. DAW側のWebViewにWeb UIをロードし、 IPCでプラグインを操作 2. System Alert Window - 特別なパーミッションの下でViewを表示 (IMHO: UIはモバイル向けに作り直すべき)

Slide 14

Slide 14 text

モバイルの課題 #3: extension API (if time permits...) ● モダンなプラグインフォーマットのAPIは柔軟な拡張機構をもつ(AAPも) ● 拡張機能は誰でも定義可能(プラグインとDAWで実装されて初めて有用になる) ● 拡張機能には関数があるものだけど、ここでもIPCが必要 ● DAWとプラグインの開発者がIPCも実装するのは無駄に煩雑… solution: ● 拡張機能を定義した開発者がIPCの部分も実装する ● DAWとプラグインはそれぞれ拡張機能のIPCをAAPのAPIに沿って呼び出す

Slide 15

Slide 15 text

AAPのその他の特徴 MIDI 2.0ネイティブ: 32bit floatパラメーターをMIDI2で操作可能 Instrumentプラグインは仮想MIDIデバイスとして利用可能

Slide 16

Slide 16 text

Lastly... 世界最先端を行っているはずなので割と面白いと思います でもまだいろいろ足りないことだらけ 興味がある人がいたらぜひ一緒にやってください せんでん: Audio Plugins For Androidの設計と実装 @ M3 2023春 & 技術書典14(予定) Android Audio Devs Discord https://discord.gg/6AC3heft (英語)