7月の開発記録 (2023)

今年もこの時期は台湾暮らしに切り替わっていて、そのために7月はまあまあ落ち着かない時期で、作業もまあまあ停滞しています。

今年はCOSCUP2023でも特にセッションを持っていなかったのですが、まあ何もしないのは何なのでオーディオ開発に興味のある人向けのBoFLinuxオーディオ方面の知人と雑に企画して開催しました。15人ちょい来てもらえて、思いのほか大成功だったといって良いのではないかと思います。自分ではほとんどネタにしなかったのですが自分が去年MIDI2の話をしていたこともあって、割とMIDI2の話を聞かれました。相方はAI使ってるというので話を振ってみたのですが、蓋を開けてみたらSynthesizer Vがひたすら紹介されるみたいな内容でした。もちっとコード寄りの話を振っても良かったのですが、まあみんなの話したいことを話してもらいたいですし。いい会になったので来年も何かやろうと思います。

今年は純粋な一般参加者ムーブができたので、ブースでwasmedgeの開発者から話を聞いたり、知人のKotlinのセッションとかRustのzero overhead networkのセッションとかgo wasmのセッションとかを見たりしていました。

aap 0.7.7 / aap-lv2 0.2.7 / aap-juce 0.4.7

AAPはこのところGUIサポートの確立がメインの作業となっていて、本当はUIサポートを使ってプラグインのデフォルトアプリケーションUIを書き換えてからリリースとしてもよかったのですが、前回のリリースがM3春直前だったので、2ヶ月くらいでできるうちにやっておいたほうがいいだろうということで、0.x.7シリーズが出ました。

github.com

先月できていなかったLV2プラグインの動的パラメーターサポートも完了したので(あんまし意味ないけどこれだけ未サポートなのも不格好ですし)、先月書いたようにプラグイン側のファイル作成のアプローチも変わって、これ以上の変更を詰め込むと次のリリースの変更が多くてしんどくなるやつです。

さすがにaap-juceの移植が増えすぎて、全部やってはいられなかったので、絞り込んでアップデートすることにしました。プロトコルバージョンは上がっていないので、0.7.6のDSPもそのまま使えます。ただしネイティブUIは互換性がありません。

ResidentMidiKeyboard

AAPはその後プラグインのdefault activityのアプリをいい加減ちゃんとしたやつにしようと思って新しいものを作り始めたのですが、現行版の機能としてMidiDeviceServiceの実験モードを、現行の「ボタンを押すたびにオクターブが上がる(そしてループする)chordを鳴らす」はいくらなんでも不自由なので、ちゃんとしたMIDIキーボードで作ることにしました(そのためのnative UIコンポーネントを作ったわけですし…!)

それに加えて、オーディオプラグインとしてのAPIMIDIメッセージを送信したときに正しく処理できるかどうかも別途確認したいわけですが、現状では決め打ちのMIDIメッセージをKotlinのコードから送るだけという全然柔軟性のないテストにしかなっていないので、これもMIDIキーボードとしてもう少しまともにメッセージを送れるようにしたいところです。そうするとどうなるか…

mastodon.cloud

ちょっとこれじゃ意味不明すぎますし、幸いMIDI APIの実験に使うだけであれば他のアプリからでも良いはずなので(MidiDeviceServiceのデバッグ程度ならクライアントが別プロセスにあっても困らない)、AAP GUIの初期実装で使ったSystem Alert Windowの仕組みを流用してResidentMIDIKeyboardというアプリケーションが爆誕…というのが、先日書いたResidentMIDIKeyboardです。

atsushieno.hatenablog.com

Androidオーディオコミュニティに出してみたら思いのほか反応があって、ちょいちょい修正を加えて、CCなどのメッセージを送れるコントローラーのセットが実装されたのはその辺のフィードバックがあったからです。考えてはあったものの優先度がそこまで高くなかったので(あとシンプルな見た目の割に実装が面倒ってこともあったし)、リクエストドリブン…!という感じです。

本当は数日で開発を終えてAAPに戻っているはずだったんですが、ちょうど台湾に移動する時期でこういうサイドワーク(Play Storeの諸々と格闘したりとか)がちょうどよかったようです。

ResidentMIDIKeyboardで初めてnotificationとか使うことになりましたが、パーミッションの仕様とGradleのtargetSdk指定の書き方とかの組み合わせで、「期待通りのパーミッションダイアログが出ない…!」みたいな問題にハマったりしました。この辺はaccompanistを使って解決したわけですが、これもサンプルコードが新しくなくてAPI Level 33でも動かない…みたいなことを発見して直したりしていました。

来月の予定

他にもちょろっと仕掛りのやつがあるところですが、8月には何か出るでしょう(雑)。

8月は生活環境次第な側面もあるのですが(今いるところはあんまし作業環境として良くない)、たぶんAAPの作業に戻っていると思います。7月はKotlinばかり書いていたのでそろそろネイティブに戻らないと…