台独万歳! (228の時候のあいさつ)
1月はいろいろな予定が積み重なってテンパっていたのですが、2月はある程度余裕が出来たので主に原稿書きや雑事を片付けていました。コードは公開部分では結果的に全然増えてないところです。そんなわけで短いです。
DTMの世界に触れてみよう(ハンズオン)
1月にもちらっと書いたのですが、2時間のDTMの超入門講義をやってきました。超入門ということで、基本的に有償製品を避け、使うのにユーザー登録が必要なソフトもなるべく避け…という感じで、教材の選択でめっさ難儀しましたが、一応「とにかく音を出す」「音符を置いて鳴らす」「総合音源とシンセとドラム音源を紹介する」は出来たようです。超入門と言いつつも、開発コミュニティ向けだったので、プログラミングのタームを使って説明できるというアドバンテージはだいぶ大きかったように思います。
スライドは特に非公開にする理由もないので公開してあります:
どんな感じだったかは当日の参加レポートを書いていただいてます(ありがたいです…!)
自作やっつけ総合音源(USF2Plugin)は作りかけのまま放置してあります。今月はVitalAudio/visageが公開されたので、試しに組み込んでみようかなと思ったのですが、DPFのUIの根本的な方向性がちょっと性に合わないな…と思ってそのままにしてあります。やるならGUI統合部分など完全にforkプロジェクトとして進めたほうがよさそう。まああとVisageはIMEサポートがまだアレなのでこのプラグインには向いていないところがありますね。プリセット名とか検索できるようにしたいし。
そんなわけで講義では総合音源には(USF2Pluginの代わりに)SforzandoとGeneralUser-GS.sf2を使って乗り切りました。今月は世間では無料音源は使うな!みたいな話が話題になったりしていましたが、入門者講義で取っ掛かりから有償音源に誘導するのはあり得ないので、この辺の選択肢は(知識として)確保しておきたいところです。Linuxで使える音源なんかも無料のものが多いので、話題としてはかぶってきます。この同人誌を書いたのももう3年くらい前ですね:
ktmidiのJVMプラットフォームバインディング再考
ktmidiでプラットフォームMIDI APIアクセスはめちゃくちゃ大変で、Kotlin/JVM用にJNIを、Kotlin/Native用にcinteropを、Kotlin/JS用にNPMを、Kotlin/Wasm用にWebMIDIのDOMバインディングを(当時Kotlin/Wasm自体にnodeサポートが無かった)それぞれ作らざるを得ない状態なのですが、現状JVMまわりが特にパッケージ参照をまともに解決できない困った状態になっていて、中長期的な解決策を探しているところです。現状javacppを使っているのですが、このGradle統合がjavacpp的には本筋ではなく(mvnを使っているため)、gradle-javacppを使ってきちんとパッケージ発行まで漕ぎ着けたプロジェクトは何一つ存在せず、どうもまともに動くものではない(そして開発者もやる気がない)という詰んだ状態です。
自分が手を加えて生きながらえさせることも考えましたが、javacppは今さら使う必要のないJNIベースのプロジェクトなので、Kotlin/JVMではもうPanamaベースのプロジェクトに移行したほうが良いかなと思っています。ただjavacppは実行時に自動的にネイティブライブラリをロードしてくれる仕組みがあって、これはPanamaやjextractではOracleは全然手当する気がない(そしてコミュニティもそれを当然と思っている)ので、その辺をどう埋めるべきか迷っているところです。Panamaでも、だいたいどのサンプルもライブラリを同梱する必要がないlibcとかcurlとかzlibみたいなやつばかりで、ちゃんと現実の課題に取り組んでいる様子が無いんですよね…
あとPanama jextractの仕組みはイケてないのでプラットフォーム中立のバインディングをきちんと作れる仕組みにしよう、というvproxy-tools/panama-native-interfaceというプロジェクトも発見していて、これもいいかもなあ…とか考えています。実際libremidi-panamaを作ったときは、プラットフォーム固有のバインディングが生成されたりして、それは手動で取り除いていたりします。取り除いているというか、そもそもビルド時にjextractを走らせて自動生成する仕組みは避けているので(ksp1で痛い目を見ているので…)、jextractを有効にしたビルドで生成されたものの一部だけを取り込んでいる感じですが。
この辺はそのうちPanamaですっきりさせることになると思います。ktmidiはAndroidではAndroid MIDI APIを直接使えてJNI不要なので、あまり心配せずにPanamaに移行できるのはいい話といえます(?)。