1月の開発記録 (2025)

2025年最初の開発記録です。このフォーマットもそろそろやめてもいい気がしていますが、とりあえず継続しておきます。1月は裏稼業がそこそこしんどかったのと勉強会(後述)の下準備と親族の相続まわりなどで他のことは何もかも止まっていましたが…

USF2Plugin

DPF + WebUIの実験を兼ねて雑なGM音源のプラグイン作っていました(過去形?)。

次の週末にちょっとクローズドなDTM入門講義をやらないといけないのですが、まずはいろんな楽器に触れるのが良いかな…シンセはシンセで触れるとして総合音源があったほうがいいよな…でも今General MIDI音源みたいなやつでカジュアルにダウンロードして使えるやつが無いな…と考えていました。いろいろ選択肢を検討したのですが、どの案もイマイチなんですよね…

  • Komplete Start に入っているKontakt 8 Player + Kontakt Factory Selection : たぶん音源としては申し分無い。ただしユーザー登録 + インストーラー経由でKontakt 8を入れるややオーバーキルな手順。Linux版は無い。
  • Sforzando : SF2を別途ダウンロードしてロードする必要がある(そもそもSF2は主な用途ではない)。Linux版はまだ無い。
  • JuicySFPlugin : SF2を別途ダウンロードする必要がある(デフォルトで何も使えない)。GUIが使いにくい。macOSビルドがnotorizationかかっていないのでVST3が一生ロードできない(これはしょうがないんだけど)
  • x42-gmsynth : 最初から音源が固定で入っていてセットアップ不要なのは良いが、GUIもプリセットも無く音色変更にプログラムチェンジの送信が必要なので、DAWGUIから指定するのが困難

そういうわけで「自作しちゃえば早いんじゃね?」と雑なことを考えて、DPFでとりあえずx42-gmsynth相当のもの + プリセットでGM音色を選択できるものを作りました。サウンドフォントのエンジンとしては、当初はx42-gmsynth同様Fluidsynthを使うつもりだったのですが、せっかくGPLv3フリーなDPFを選択しておきながらこっちでGPLv2に拘束されるというのはイマイチだと思って、今回は選択肢から外しました。最初はsf2hppを使っていたのですが、さすがにCCがほぼ手つかずなのは実用上困るな…となってTinySoundFontを使っています。

ただ、DSP側はすぐ作れたのですが、DPFのWeb UIの方向性がかなりイマイチということがわかり(secure contextの問題が十分に理解されていないし、Web UIを設計するために必要なJSあるいはJS APIが何も公開されていない)、今回の締切がある短期決戦には間に合わなそうです。そしたらこれ作る意味ほぼ無くね?とも思うのですが、まあ今後AAPその他で使い回せるかもしれないので、継続する可能性はそこそこあります。

augene-ng環境の復元

DTM講義でデモとして提示できる楽曲データとして、昔Tracktionプロジェクトとして作成した打ち込みデータを現在手元にある + 商用音源も出せるmacOS環境でロードできるようにしたかったのですが、これが一筋縄ではいかず、いろいろ苦労しました。以前はUbuntuGitHub Actions環境ですらレンダリングできたやつなのですが…(!)

まずTracktionデータを「生成した」augene-ngというMML to MIDI 2.0 to Tracktionなツールを「生き返らせる」作業が立ちはだかりました。これにはXMLリアライザとなるコードを自動生成するKSPの自作コードが含まれており、半年くらい前にはKotlinが2.0化する過程でksp2がきちんと動作する世界線が存在しない…という状況にあって、その状況で放置されていました。

これが何とか動くようになると、次はTracktionプロジェクトを再生するJUCEベースのプレイヤーがmacOS上で動作しないという問題が出てきました(これはLinuxでしか動作しなかった)。これを開発した当時はJUCEにLV2サポートが無く、またホスト側の機能が必要だったのでDISTRHO/JUCEではなくjlv2を使っていたのですが、これが引っ張ってくるpuglのmacOS実装が雑なのかイベントループが適切に初期化されない…みたいな問題にぶち当たり…その辺は原因追及せずtracktion_engineとJUCEを最新にして依存関係をまるっと切り捨てることで解決しました。

このプロジェクトではオーディオプラグインとトラックの関連付けにJUCEのAudioPluginHostのセーブデータを使っていて、そのためのプリセットデータも大量に作成されているのですが、プラグインのインストールパスが環境依存になる問題に対する解決策が不在で、今回も未解決で終わりそうです。解決策のひとつとしてStudioRackを使おうとしたのですが、先月修正したsfizzのPRも開発者不在で放置されていて(これは先月書いたやつ)、すなわちStudioRack経由でインストールされるsfizzは動作しないバージョンということになるので、今回も諦めました。そもそもプラットフォーム別にプリセットファイルを調整しないといけないはずですし、別のアプローチが必要そうです。この辺はそもそも最近は自分でプラグインホスティング機能を開発していることも考えると、JUCE AudioPluginHostより相応しいマッピングファイルを策定するのが正しい姿という気もしています。