2020作業記録総括

2020年はあまりアウトプットに結びつかない1年(当社比)だったような気がしたので、そもそもどういう流れで今に至ったのかを振り返ってみました。(android-audio-plugin-frameworkに関連する話題がメインなのでMusic Tech Meetupなどの話は書いていません。)

Q1: JUCE_emscripten gallery: 自作プラグインのUIを動作させるのに一番手っ取り早いのはJUCEプラグインUIのwasm化ではないかと思って、GUI ApplicationだけでなくAudio Pluginプロジェクトをビルドできるようにしたり、Web MIDI API統合を実装したりしていました。肝心のUI統合自体は他のことをやっていて進んでいない状況です。UI統合より先にやるべきこと・やりたいことがある感じなのと、AndroidChrome (WebView)でAtomicsがサポートされていないので意味なかった(これは近いうちに実装が載るはず)という話があって棚上げ状態です。そういえばJUCE6対応もやっていない…(Dreamtonics社が先にやるかもしれない)

この頃からメインマシンだったHP Spectreが頻繁にキーボード/トラックパッドが死んでは修理が必要になるようになって、結局7月に買い換えるまでに4回修理に出し、その間まともに作業できない状態が続きました。買って1年も経っていないのに4回は多すぎる。

Q2: オーディオプラグインUI統合まわりでは別のシナリオを考えることにしました。JUCEからの移植は未来の案件ということにして、フルスクラッチのHTML UIのものをとりあえずPoCで作ろうと思いました。それで、(UIとは別の観点で)今年はOSSKontakt/nkiの代替を目指せるようなフォーマットとしてSFZ形式のサンプラーに注目するようになっていたので、当時GUIの無かったsfizzにARIAっぽいGUIをWebViewで付けてみようと思って、LV2 UI拡張をwebkitgtkで作ってみたりしました。sfizzは成長が早くて、今はvstguiを使ったGUIが付いている状態です(ARIA的なものではありませんが)。

sfizzはファイルシステムではなくassetからデータをロードするような変更も加えようとしたのですが(Fluidsynthでは実績があるので)、そこまで綺麗にローダーができていなかったのと、libsndfileまでパッチを当てないと無理っぽかったので、この計画は(この時点では)ポシャりました。

Web UIがちゃんと機能する感じになってきたので、こっちの作業はここで一区切りとしておいて、それまでmda-lv2くらいしか無かったLV2移植を拡充することにしました。sfizzとguitarix、後からfluidsynthの独自LV2プラグイン版が追加されました。これを実現するには、LV2 toolkit(serd/sord/sratom/lilv)と同じようにAndroid用のネイティブバイナリをビルドしないといけないので、ここでcerberoをアップデートして対応する作業をこなしました(毎回NDKの仕様変更が大きくて割と面倒なやつ)。

あとQ2に入った頃にAndroid NDK方面でPrefabが出てきたのでいろいろ試行錯誤して、だめだこりゃってなったりまだまだいけるか…?ってなったりしていましたがやっぱりダメでした(というのが今のステータスです)。割とこれで時間が溶けたはず…

Q3: 台湾のCOSCUPで初めてAAPの話を公にしたり、LV2開発者ガイドを書き始めたり、ついでにMIDI 2.0本を書いたりして(コレはホントにオマケのつもりで始めたやつですが完成度も割と満足しているし一番売れてます)、割とnon-coding taskに時間を費やしていた気がします。MIDI 2.0 UMPを扱うライブラリが一向に出てこなかったので、cmidi2という軽量ライブラリを作って、ついでにLV2とMIDI 2.0を繋ぐものがまだ無かったので、lv2-midi2という拡張機能も作りました。ただまだ使う場面が無いです。AAPには組み込んだのですが、MIDI 2.0に対応しているプラグインが無い状態です。

そして本当はM3 2020秋に向けて作品を作りたかったのですが、完全にインフラが足りませんでした。インフラというのは、MMLと音源設定だけでtracktion_engineベースのプレイヤーに変換できるような仕組みを構築しきれていなかったというところです。Tracktion Waveform 11はVST2のみ、tracktion_engineのプレイヤーはVST3のみのところにがんばってLV2対応を追加…といった感じでちぐはぐで、創作に耐えるシチュエーションではありませんでした。(別に以前にやったような構成でMIDIだけで完結させてからDAWに持っていってもよいのですが、もともと創作が目的ではないし得意でもないので…)

あとsfizzで使える音色と使えない音色があって、たとえばUnreal InstrumentsのKSOPの類は残念ながら全滅だったので、FM音源でも使ってお茶を濁そう…とか思ってFM音色を自分のデータから引っ張ってきたり、SSG音源もほしいよなあと思ってayumiをLV2化したりそれをAndroidで動かしたり、あとJUCEアプリだったOPNplugをAndroidに移植したりとかやっていました。Androidで作品を作るつもりだったのではなくて、この辺なら「Androidでも鳴らせます」っていうデモができるかなーと目論んでやっていたのですが、プラグイン機構が上記のような感じで平仄が合っていなかったのと、プラグイン機構の違いからstateのBLOBに互換性がない問題などが露見して、「そもそもポータビリティのある音楽データが実現できていないのでは…?」みたいな、この業界の課題に直面することにもなりました。

tracktion_engineも複雑過ぎるのか演奏開始するなりクラッシュする状態で、デバッグを続行するにはJUCE統合まわりのビルドも複雑でLV2サポートもビルドが不安定で…みたいな状態で、ダメだ…腐ってやがる…早すぎたんだ…と反省して、ビルドと開発の基盤を整備しよう、となりました。

Q4: M3が終わってから引っ越したりADC 2020に参加したり、Jetpack Compose / for Desktopとかいろいろ調べたりしていて大したことはやっていなかったのですが、今は開発を継続できる体制を整備する作業が進んでいるところです。前回書いた感じの作業ですね。1年前に比べるとやはりだいぶ違うソース構成になっていて、いくつかのプラグインがそれぞれ要素としては稼働していることを考えると、もうしばらく続けるとだいぶtoolchainとしては期待通りのかたちになるんじゃないかという気はします。てか1年前にはJUCEプラグイン移植が何も存在しなかったのか…(独自プラグインフレームワーク用のJUCEモジュール開発については2月に書いていて、プラグインはその後に一気に移植しています)。

今年の積み残し課題は2つあって、GUI統合と音楽プレイヤーなのですが、特に後者と関連する音楽データのポータビリティは大きな課題なので、来年もいろいろ模索しながら進めることになると思います。

パブリックな活動はほとんどしていなかったと思うのですが、LV2仕様やLV2 toolkitにはちょいちょいcontributeしていて、LV2 Wikiにもなぜか自分のプロジェクトやら同人誌(!)やらがチマチマと載り出したので(多分ほとんどがめっさ日本語を解するZrythm DAWの作者氏によるもの)、「何か見覚えのあるやつ」くらいのポジションにはなったような気がします(それまではlilvの.NETバインディングくらいしかやっていなかったので)。

とりあえず振り返りはこれくらいですね。来年の方針については来年考えてもよさそうです。災禍の時勢なのでのんびり考えようと思っています。