技術書典20、音楽技術勉強会、M3、さらにこれに合わせたUAPMDとAAPのリリースラッシュと、嵐のような1か月が過ぎて、ADC Japanまではひと息つけるようになりました…たぶん(?)
CLAPオーディオプラグイン開発者ガイド 第2版
UAPMDの設計と実装の本をまとめる時間はとてもじゃないけど取れなかったので、clap-wrapperを使ったCLAP first、VST3のMITライセンスへの変更、プリセットのスキャナーAPI、WebCLAPやといった最新の話題を反映して、だいぶいろいろ追記したCLAP開発者ガイドのアップデートを出すことにしました。アップデート版なので技術書典オンラインやboothで購入されていた場合は無料アップデートが降ってきています。
Linux DTMガイドブックもシーケンサーエンジン本も刷新したいところですが、先にAAPとUAPMDを何とかしたいと思っています。AAPは全然先が見えない状態だったのですが、今月だいぶ進展が見られたので1.0リリースもできるかもな…!?というムードになってきました。
音楽技術勉強会2026.04
大成功でした。こんなに楽しんでもらえるならまたやりたいですね(毎回それっぽいことを書いている気もする)。これについては昨日書いたので詳しくはそちらを見て下さい。
UAPMD v0.4
UAPMDの開発は、先月までは2週間に1回くらい大きなリリースが続いていたのですが、今月は主にAAP開発に注力していたことに加え、上記イベント群に合わせた作業も入ってきて(といってもUAPMDのデモ展示に大きなリソースを割いていたのですが)、リリースとそれに合わせた開発作業は控えめです。AAP 0.10のリリースとM3出展が終わったタイミングでv0.4をリリースしました。
あとそろそろ英語圏向けのアップデートをまとめておかないと…と思ってひと通り説明したものを書きました。日本語でもまとめたものを書いていなかった気もするのですが、適当に日本語訳して読んでもらえればと思います。
リリースノートには詳しく書いていないのですが、ゆとりがあるので少し詳しく書きます。
タイムラインUIの改善
これまではImTimelineというImGuiのライブラリを使ったコンポーネントのインスタンスをトラックごとに作成していたのですが、これだとスクロール対象がトラック単位になってしまって、ユーザビリティは極めて悪いものでしたし、そもそもスクロールがまともに動作しない状態でした(!)。クリップエディタだし余裕が出来たら直そう…と放置していたものですが、さすがに展示用となると多少まともに動作してほしいところです。
ImTimelineはそもそも複数のトラックを構成できるコンポーネントなので、その機能を使うのが自然な解決策であることは自明だったのですが、DAWのトラックリストには左横にさまざまなトラックコントロールが付いて回るので、それらが正しく動作しないうちは、このモデルには移行できませんでした。そして実際、最初はうまくいかなかったわけです。「ちょっと調べたらちゃんと動くものが作れるはず」のところまで手を出せたのがようやく今月ということになります。
DAGを使ったオーディオグラフとレイテンシー補償の実装
3月にWebCLAPをサポートするようになった時点で、オーディオグラフのAPIは完全にRT-safeな実装をAPIとして要求することになりましたが、それがAPIとしても妥当なものであるかは、実際にDAGを実装してみないと分からないところでした。また、プラグインフォーマットのAPIにはレイテンシー報告のAPIやtail lengthを返すためのAPIが用意されており、レイテンシー報告をもとにレイテンシー補償を実装する場合は、直列的なオーディオグラフAPIの実装だけでは、妥当性が確認できません。
そういうわけで、いずれPoCレベルでは作っておくべきと思っていたDAGベースのオーディオグラフ実装に手を染めることになりました。これじゃTracktion Graphの競合を実装しているのと変わらない…! まあシーケンサーエンジンを独自に作り込まないとプラグインホスティングAPIの妥当性は確認できないので、仕方ない話です。DAGを実装するセオリーは十分に枯れているので、完全にAI任せにしていますが、速度的に妥当かどうかはともかく、最長経路に基づくレイテンシーレポーティングとレイテンシー補償の実装はできていると思います。tail lengthの利用も、クリップの再生時間の計算で使われているはずです(うろ覚え)。
オーディオワープの実装
オーディオワープは本質的にはタイムストレッチのdiscreteなリストであり、オーディオトラックの編集機能としては実装しておくべきものです…というわけで単純に位置とテンポ変更率のリストを保持して再生中にsignalsmith-stretchに渡すだけの実装を作り、オーディオトラック上でそれらを編集可能にするUIをやっつけました。
ただ、オーディオワープ機能は、どちらかというとARA2に対応するプラグインがオーディオ入力を受け取ってタイムストレッチを動的に(リアルタイムに、ではないにしても)適用できるように事前処理する仕組み、を表現できる必要があって、いま実装されている静的なリストはARAの仕組みとは相容れません。時間ドメイン(と書くとFFTの話っぽくてややこしいですが)における加工処理にも、一定の抽象化が求められそうです。この辺はvNext issueです。
Androidサポートの拡大
これはAAP v0.10の項目で詳しく説明しますが、AAPのGUIサポートが現実的に使い物になり始めたので、それに合わせて必要になったプラグインフォーマットAPIの変更を反映しています。また、CodexやClaude CodeがAndroidデバイス上で実行しているUAPMDにadbで接続してデバッグできるようなReceiverの入口を用意して、そこからembedded JS Runtimeにリーチできるようにしました。これでデバッグをAI任せにできるようになりました。
AAP v0.10
先月末にADC JapanでAndroidのほうのセッション採択が決まったので、しばらくAAPに注力することにしたわけですが、今月は早速大きなインパクトのある成果が出ました。3年前から「動かない」として放置していたJUCEプラグインのGUIがAndroidでも「プラグインUIとして」まともに動作するようになりました。現在 https://androidaudioplugin.org (AAPのランディングページ)ではJUCEベースのプラグインUIが並んだ画像が出ています。

一番左上にあるのは今月新しく移植として追加した aap-juce-wavetable です。今回移植された FigBug/Wavetable は、一見地味な配色で気づかないかもしれませんが、波形やパラメーター制御点のアニメーション表示など実は割とぐりぐり動くモダンなシンセサイザーで、プリセットも豊富な上にAPIからも選択できる、MCP-enabled DAWフレンドリーなプラグインといえます。
JUCEのGUIは、モバイル向けに書かれていることはまず無いので、そのまま使ってもユーザビリティは良くないのですが、JUCEプラグインの残念な現状としてプラグインのプリセットの選択すらプラグインフォーマットのAPIを経由して公開しているものが少ないため、「プリセットを選ぶだけ」でもGUIが必要になってしまう、という問題があり、これは「使いにくくても無いよりはあったほうがずっと利用価値が上がる」ということになります。
JUCE GUIは、AndroidのStandaloneアプリとして動作するものであっても、プラグインUIとして動作させると状況次第でクラッシュするものが大半です。その理由はaddToDesktop()のような「グローバルデスクトップ」にアクセスを試みて落ちるというものです。JUCEプラグインのGUIをAAPのプラグインUIとして動作させるためには、SurfaceControlViewHostを使ってSurfaceViewに描画させることになるわけですが(仮にAAP以外のプラグインフォーマットが存在するとしたら、同じことが求められるでしょう)、このリモートプロセスで処理されるGUIのコードが「デスクトップ」にアクセスするためには、親となるSurfaceViewを使用する必要があります。Androidではモーダルダイアログを使用できないのと同じで、AndroidのプラグインUIではグローバルウィンドウにアクセスしない鉄則を守る必要があります。
いずれにせよ、JUCE UIを表示できるようになったのと、UAPMDがGUI表示を十分にサポートできるアプリケーションとして存在している(そして問題が起きた時にその根本のレベルまでデバッグできる)こともあって、プラグインのGUIを利用する場面・機会が著しく拡大しました。AAPのGUI extensionにもいくつかABIの破壊的変更が加えられています。
プラグインフォーマットAPIをひと通り使用するUAPMDが登場して、利用機会が増えるとAPIの妥当性検証が発生し、ABIの破壊的変更が加えられるようになってきました。これまで十分に吟味されてこなかったparameter APIやstate APIが検証のターゲットになり、現状まともに動作しないので根本的な修正が必要になりそうだ、ということが判明しつつあります。一方で、これらのAPIがひと通り機能するようになれば、プラグインフォーマットのバージョン1としては十分ともいえそうだ、という見通しが見えてきました。
5月の予定
5月はADC Japanのプレゼンテーションの準備(という名目でのAAP開発)もあるのですが、KotlinConfに遊びに行くミッション(?)もあり、開発に余計なゴールを持ち込まなければ余裕があるといえるのですが、まあそれなりの成果を出して発表に盛り込みたいところです。