12月の開発記録 (2023)

12月、あっという間に過ぎていきました。開発記録はほぼ一つのことしかやっていないので短めです。シンプルにいきます。

ktmidi midi-ci-tool

今月初頭にJUCE 7.0.9で追加されたMIDI-CIサポートについてというエントリを書きましたが、当該エントリにもある通り、これを書いた時点ではktmidiのMIDI接続まわりで期待通りの動作ができていなくて、じっくり機能を調べることができていませんでした。その後ほどなく、実際には仮想MIDIバイス接続さえ出来てしまえば何とかなることがわかって、JUCEのCapabilityInquiryDemoとの間で相互接続できるようになって、開発が一気に進捗するようになりました。

上記エントリでも言及しましたが、ktmidiのMIDI-CIサポートには、MIDI-CIのInitiatorとResponder(ざっくりクライアントとサーバーのようなものだと思って大丈夫です)のagentのようなものが実装されていましたが、あくまでproof of conceptとしてしか存在していなかったので、APIとしての利用価値はほぼ無いものでした。それでは存在している意味がないので、ここはひとつJUCEに倣ってCapabilityInquiryDemoのようなツールをktmidiだけでも作ってみよう、と思って、新しいサンプル ユーティリティをCompose Multiplatformで開発しています(未完成):

ktmidi midi-ci-tool with juce CapabilityInquiryDemo Initiatorの機能はむしろResponderより後に作り始めたものだったのですが、UIを含むアプリケーションとしての機能はむしろResponderより先にざっくり出来上がってしまいました。Responder側の機能は昨日ようやく開発が始動した感じです。年始の暇な時間に作り上げようと思っています。

Compose Multiplatformで作っているので、デスクトップとAndroid、あわよくばCompose for WasmでWebも…という感じなのですが、現状ktmidiが依存しているKtorがまだWasmに対応していないので、Web版はまだすぐには出来なそうです。Android版は…Googleが新しいAPIを作っていれば && MIDI-CIがそこに入っていれば必要ないという話があるのですが(!)、現状まだ無いので、ここが最大の使い所かもしれません。atsushieno/aap-coreに統合すれば、AAPの拡張機能の問い合わせをMIDI-CIでできるようになる可能性がまあまああります。

(AAPの開発の進捗は今月はほぼゼロです。)

MIDI-CIの実装に際しては、MIDI-CIと関連仕様についていろいろ覚書を貯めているので、これはいずれ公開しようと思っています(今月出すつもりだったけどプライベートで忙しくて無理でした)。

Kotlin MultiplatformでMIDI 1.0/2.0ライブラリを開発している話

ktmidiの開発が進んでいた頃、20日にKotlin/Swift愛好会(たまに参加している)があって、直近まで登壇枠が開いていたので、そんなら…と思ってktmidiの話をしてきました。

speakerdeck.com

内容はほぼプラットフォーム別バックエンドをどう作るとかMaven Centralでの発行どうする?みたいな部分に集中してしまいましたが、参加者のみなさんの質問の大部分(いろいろ来てありがたかったところです)は「Kotlin/Swiftはリアルタイム性ないぜ〜」って話したところに集中していました。上記MIDI-CIやMIDI 2.0の話はほぼゼロです(!)