6月、予定通りに裏稼業で忙しくなり(無職なのに!)、本業の開発はあんまし進んでいません。とはいえ活動自体はしているので書き遺しておきます。
multiplatform-library-template-nexus-publisher
KotlinFest24の副産物みたいなものですが、いまJetBrainsのKMPライブラリテンプレートでプロジェクトをビルドしてもパッケージ発行で躓くことになるので、その問題を解決するためのfork版を作りました。詳しくは(KotlinFestのセッションでも話しましたが)↓で解説してあります。
ちなみにセッションスライドはspeakerdeckで前日には公開してあります:
Kotlin Festに参加できたのはオフライン開催が無かったことを別としてもひさしぶりだったのですが(オフライン開催していた頃は毎年絶妙に母校のイベントとかぶっていて参加できていなかったり)、規模が大きくなった以外は変わりなく楽しめました。今年はコンパイラプラグインとかCompiler as a Service(この単語自分で書いててもひさしぶりに見た気がする)をIDEに統合する話が最先端トピックとしてセッションに出てきていて、こういうワクワクする話が前面に出てくるようなコミュニティになったんだなと思いました。
あとAmperというJetBrainsが開発中のビルドシステムの存在も中の人に教えてもらいました。これがCMakeのように普及すればいずれはbuild.gradle(.kts)をMakefileの立ち位置に追いやりつつNinjaに換骨奪胎するようなことが出来るので、今後は折を見てこっちに移行していこうかなと思っています。.NET Coreで*.csprojをproject.jsonに置き換えることは叶いませんでしたが、こっちの世界線ではうまくいってほしいですね(不吉な物言い)。
Foojay Podcast #54: Music and MIDI with Java and Kotlin
6月にはもう1件、OpenJDKのコミュニティFoojay.ioで毎週のようにpodcastを公開しているFoojay PodcastでKotlinとMIDIについて話さないかと声をかけられて、ひとつ参加してきました。
ドイツ・米国(NYC)・日本で同時に話すみたいなのはひさしぶりでした(もちろん日常だったのですが)。一緒に喋っているGeert Bevinは(ぐぐるといろんなところで名前が出てきますが)Moog所属の開発者で、何やらMPE仕様の策定に大きく関わっていたようで、MPE推しが強い内容になっていました。自分はだいぶ控え目にしゃべったのですが、MIDI 2.0の話をちょろっとしたのと、javax.sound.midiじゃできないことがまあまああるんやで、みたいな話をしています(あんまし大した話はしていない)。
AAP 0.9.0(進行形)
まだ現在仕掛中の作業なのですが、Android 15のAPIがstableになったようなので(compileSdk = 35が通る)、満を持してMidiUmpDeviceServiceをサポートする(かつPlayStoreに発行できる)バージョンとしてAAP 0.9.0をリリースする予定です。開発自体はそんなに進んでいないし実装コストは大したことなかったのですが、MIDI 2.0デバイスとして他のMIDI 2.0クライアントから操作できるというのは、機能的には大きな追加といえるでしょう。
最近忙しくしているのはAndroidオーディオの低レイヤー方面の仕事をしているためで、落ち着いたらこっちでいろいろ調べて得られた知見をAAPにも反映していこうと思っています。
aap-juceのGUI統合は止まったままです(作業時間もとっていない)。Web UIをサポートするJUCE 8.0もリリースされたことですし、ライセンスの変更は大いにアレですがこのままjuce_gui_basicsが廃れていくほうが先だと言いなあとか思ったり思わなかったり…
ktmidi 0.9.0(進行形)
これも現在仕掛中の作業なのですが、ktmidiもバージョン0.9.0が視野に入っていて、これはALSAのUMPサポートが稼働するようになったら確定しようと思っています。ただ現状まだ入出力の送受信が確認できておらず、ALSA上でUMPの相互運用を確認できる他のアプリケーションもデバイスも存在しないので、現在進行形で難航しています。
なお、AAPもktmidiも0.9.0ですが、その次は1.0ではなく0.10.0となる予定です。
alsaktからalsa-javacppへの移行
ktmidiでALSA UMPサポート実装に着手できるようになったのは、実のところ自分のUbuntu 24.04環境がそこそこ安定して「alsaktを昔のように安定的にビルドして使えるバインディングにする」という隠れたミッションを、新しくalsa-javacppというプロジェクトに切り替えて達成できたためです。
2月にも書いていたのですが、alsaktはalsa-lib (libasound.so)をバンドルする方向性にしてだいぶ失敗した感じになってしまいました。最初にalsa-libをバンドルする方向性にしたのは、Ubuntu 22.04でMIDI 2.0サポートが追加されたLinux kernelをインストールできていた環境で、MIDI 2.0に対応するalsa-libのパッケージが提供されていなかったためです(Linux kernelのALSAとは別にパッケージとしてインストールされる必要があります)。
javacppでライブラリまでバンドルする仕組みが期待通りに機能しなかったこともありますが、そもそもjavacppに関係なくalsa-libが静的リンクされているプロジェクトでも実行時にconfigまわりでうまくいかない、みたいなバグレポートなどを見て、この路線で対応するのは無理そう(自分の環境で動いたとしてもユーザー環境でエラーになって原因が特定できない)…となって、従来通りの「システムにMIDI 2.0対応のKernelとalsa-libが両方備わっている」前提でパッケージを配布することにしました。
そのついでに、KotlinのOOバインディング実装をktmidi(-jvm-desktop)のほうに移行して、Javaパッケージとしてのalsa-javacppとしてリリースすることで、多少一般的なjavacppプロジェクトに寄せることにしました。alsakt開発の傾向としては、javacppバインディングにはあまり変更が加えられず、主にktmidiで問題が発覚してaksaktのOOバインディングに変更を加え、そしてパッケージが別々なのでalsaktの新版をリリースしないとktmidiの修正をコミットできない…という感じで、時間を無駄にしていました。
Gradleという負の遺産が残ってしまった感じで、いずれはmvnにしたほうが良い(何なら本家javacpp-presetsの一部にしてもいい)と思っていますが、これはまあやる気が出たらで…
7月の予定
6月が忙しい時期の切れ目になると思っていたのですが、8月の初頭に台湾でCOSCUP 2024の30分セッションでしゃべることになってしまったので(もちろん自分でCfPに応募したからなのですが)、その下準備としての調べ物に時間を費やすことになると思います。今回の主題は "Catching up trends in audio app development" でオーディオ開発用のライブラリとかどんな機能が必要になるか、などを話すことになっているので、ヲチャー力が試される、といったところです。
あと7月からもう1つ別の裏稼業の企画が始まることになりそうなので、本業(?)の開発は7月も停滞しそうです。まあこれも(開発ではないのですが)音楽技術関係でAAPやktmidiの開発の肥やしにはなるはずです。