日本では7月になったみたいですが、今ゆえあってバーゼルにいて、これを書いているのは現地時間の21時です。
midicci
atsushieno/uapmdをもう少しMIDI 2.0デバイスらしくしたいと思っていて、それならAllCtrlListとかProgramListを実装するのが良いだろうと思っているのですが(この辺は先月書いたMIDI 2.0アーキテクチャガイドブックにも書いている話です)、そのためにはC++で統合できるMIDI-CI実装が必要です。現状まともな実装はjuce_midi_ciくらいしか無く(ni-midi2は中途半端に作って放り出されている)、JUCEに依存してAGPLにするつもりは無いので、実装を用意する必要があります。ktmidiはKotlin/Nativeでもビルドできるので、最終手段としては使えなくはないですが、MIDI-CIの多様な機能にアクセスできる幅広いpublic APIが必要になるので、多分これは「使いたいAPI」にはならないでしょう。
しばらく「どうしたもんかな」と思っていたのですが、もしかして最近流行りのagentic AI codingで何とかなるんじゃないかと思って、試しにDevinにktmidiのktmidi-ci-toolをQtに移植させてみたら、もう完全にGUIコーディングのパラダイムが違うはずなのに、1発でそれなりにそれっぽく見えるGUIを提示してきたので、もしかして割といけるのでは…と(その時は)思って、しばらくDevinで遊んで移植を進めていました。Qtには無いMutableState<T>やMutableStateList<T>みたいなやつは最初に作っておいて、それを使わせている程度で、あとは何も設計を与えずにチャットだけで指示しています。
ただktmidi-ci-toolは割と複雑なMutableStateの使い方に依存していて、だんだんDevinではまともに処理できなくなってきました。やはりQtでは無理か…と思って、もうFlutterやReact + Electronで作り直させてみよう、とやってみたのですが(人間にはとてもやらせられないし自分もやりたくない)、やはり言語ランタイムの壁を超えるのはまともに実装してもらえませんでした。
Devinはいちいち金がかかるしこれ以上やらせたくない…と思ってClaude Codeに切り替えてやらせてみましたが、やはりClaude Codeでも無理でした。しかしふと「Claude CodeならDevinではできなかったQt版の状態管理が実装できるのではないか」と思い立ってやらせてみたら、ちゃんとやってくれたので、Devinは捨ててClaude Codeに切り替えて今は進めています。
肝心の「何ができるようになったか」ですが、MIDI-CIクライアントとしてはSend Discoveryを送って返ってきた応答をもとにプロパティのリストを取得してプロパティの値を変更したり変更通知を受け取ってGUIに反映する程度のことが出来ています。ここまでできる実装はjuce_midi_ciとktmidiとこのC++移植版しかありません。initiatorとしてはだいぶできることが多いので、次はrecipientの実装を埋めるフェーズです。ただClaude Codeでもそろそろ無理かも…という状態にはなってきています。最近は人間(自分)が手をいれてばかりです。そんなことをしている場合ではないので、多分進捗は悪くなります。
LAC 2025
今月は25日から4日間リヨンで行われたLAC = Linux Audio Conferenceに参加していました。
2019年以来、6年ぶりの開催だったようですが、今まで一度も参加したことはなく、知り合いがいたわけでもなく、一度くらい参加してみようという感じで雑に参加しました。完全に無料のコミュニティイベントで、INRIAとINSAとGrameの支援で実現したようですが、次回はどうなるかわかりません(決められなかった)。実際にはフランス語で行われたJIMというカンファレンスとくっつけてJIMLACとまとめられていましたが、わたしはフランス語はサッパリなのでLACのみの参加です。25日はBBQだけだったので実際には3日間です。他の参加者にはJIMから参加していたという現地人も多く、25日はすでに仲良くなっている参加者の群れに翌日から参加の誰も知らない自分が飛び込んで話さないといけないというコミュ力を使い果たすイベントから始まりました…
LACはLinuxガチ勢のハードコアなイベント…といえばそうなのですが、100%というわけでもなく、そもそもキーノートはWebAudioの話だったし、LACセッションの後には毎日2時間くらいライブイベントがあって、そのための応募も受け付けていて、Linux Audioは何も知らんという人も来ていました。家族連れてきていた台湾人と話すようになったのですが、electroacousticsのライブをやりに来た、普段はDAWでやってる、Linuxは使ってない、みたいな感じでした。
あとLinuxのイベントのはずなのになぜかAndroidのセッションがいくつかあって、なぜ…と思ったのですが、1つはrooted Android 2.3以降でALSAをフルに使うみたいなやつで、1つはいろんなセンサーを使って(これもrootedだった気がする)Androidをペリフェラル的に使おうという感じのやつでした。
もちろんLinuxオーディオガチ勢向けのセッションがメインで、Ardourスクリプティングをx42(開発者の片割れ)が解説したり、Yoshimiの設計や使い方を開発者が解説したりといったワークショップもあり、Studio OneのLinuxサポートを実装した開発者がLinuxのX11ベースのオーディオプラグインをWaylandで使うための方法を解説していたりと、期待通りの話題もいろいろありました。
ちなみに会場は、セッションの部屋(1トラックしかない)はACが効いているのに、休憩時間はACどころか扇風機も無い部屋でホットコーヒーと常温のジュースが置いてある、そこにみんな集まって雑談する、みたいな感じの地獄だったので、後半はあんまし人がいない感じでした。そうでなければもっとしゃべったかもしれない。まあそれでもいろんな開発者とやり取りできて満足しました。
7月以降の予定
7月にやることではないのですが、8月に台湾のCOSCUP 2025で、9月にDroidKaigi 2025で、それぞれセッション応募が採用されたので、しばらく登壇準備しなければならなくなりました。どっちかは不採用かな〜と思っていたので、ちょっと忙しい気分になっています。8月のやつはideal-plugin-bookの話をするだけなのでそんなに緊張感はないのですが、9月のやつは「Androidはまあまあわかってるけどオーディオは基本知らん」というオーディエンスが多いであろう中でどこまで説明できるのか手探りの必要がありそうです。まあメッセージは明確なので、これもそんなに迷わないでしょう(慢心)。どっちも英語セッションですが、興味のある方は是非どうぞ。今年のCOSCUPはRubyConf Taiwanと共同らしいです。

