10月〜11月の活動記録 (2021)

月末恒例の自分用メモです。と言いつつ先月それらしいことを書いていなかったので(サークル情報で書いた気になってた)10月から…

MML + sfizz + VPO3のdogfooding

10月はM3の展示用の準備と展示告知がほとんどで活動記録らしきものを書いていなかったのですが、基本的にはM3の展示として作っていたRealistic SoundFont V2 + juicysfplugin (Fluidsynth) でフルオーケストラをTracktion楽曲フォーマットに変換して演奏するやつを実現するための実装やバグフィックスに奔走していました。

DAWシーケンサーエンジンなのでMIDIの16チャンネル制約は無く、フルに管弦楽曲として打ち込めたのですが、高音質のサウンドフォントとはいえMIDI音源らしいところが残っていたのはやや残念なところでした。このままだと単に「チャンネル数が多い(だけの)Fluidsynthで演奏してみた」以上のものになっているとは言いがたいので、改めてsfizzとVPO3 (Virtual Playing Orchestra3)というSFZを使用して、打ち込んだMMLに大きく手を加えてアレンジし直す作業をやっていました。完成品を聴いてもらえると分かるかもしれませんが、…

soundcloud.com

…VPO3はモダンなサンプラー用に録音されたデータで、キースイッチも活用して奏法を切り替えられるのを活用しています。fluidsynthでやっていたときは、これは単に音長を短縮するかたちで対応していました。

VPO3はフリーソフトウェア系のDAWユーザーの間では割と安牌なオーケストラ音源で、たとえばsfizzのサイトでは、フリーソフトウェアDAW系の有名打ち込み職人(?)のUnfaという人が、Ardour + sfizz + VPO3で音楽を打ち込むデモンストレーションをYouTube Liveで放送していた動画がリンクされています(長い動画ですが実質00:30:00くらいから1時間くらい)。

www.youtube.com

Unfaも動画中で解説しているのですが、フルオーケストラを打ち込むときはリバーブを(おそらく統一的に)適用するのが王道です(多分何を打ち込んでいてもそうだと思いますが)。フリーソフトウェアDTM界隈ではDragonfly-Reverbというのが割と知られていて(たぶん非フリーソフトウェア界でVarhalla DSPがポピュラーなのと同じくらい)、実はこの開発者がVPO3でオーケストラ楽曲を構成するときにこういうレイアウトにするといいよ、というArdourのテンプレートを公開しています。パンとステレオパニングとリバーブが設定されているようです。

github.com

Fluidsynth (juicysf)で打ち込んでいた時はパンを振るところまで手が回っていなかったので、sfizz版ではこのテンプレートに準じてパンを設定しています(Ardourを使うわけではないのでパートレイアウトだけ)。割とこの辺の知見を調べたりしているのは面白かったですね。

ちなみにDragonfly-ReverbはVST3フォーマットに対応しておらず、augene-ngでVST3のみ対応しているのと相性が合わず、今回は見送っています。これはプラグインSDKとしてVST3未対応のDPFが使われているためです(DPFには現在進行形でVST3サポートが追加されつつあります)。代わりにsuzuki kengoさんのSimpleReverbをビルドして打ち込んでいます。DSPとしての実装はほぼjuce::dspモジュールのReverbっぽいのですが、プレーンだとどうやってもうまく作れない銅鑼パートが「∞」 (Freeze) 機能でまあまあいい感じに出来たのでありがたく活用しています。

完成したトラックですが、当然ながら自作曲ではないものの、VPO3を含めフリーソフトウェア音源のみを使って打ち込んだ楽曲としては、かなり作り込まれたほうなんではないかと思っています。もうちょっとビルドの再現性を(誰でも同じプロジェクトソースから同じmp3/ogg/flacなどをビルドできるように)整備してから宣伝しようと思っています。ビルドの再現とはすなわちSTEMに留まらない全ソースの公開すなわちDTM環境の民主化であり、自分の開発活動の原点なので、地味だけど重要なトピックとして掘り下げていくつもりです(AndroidオーディオプラグインMIDI 2.0への関心も概ね似たような動機ですね)。

一方で「割とよく出来てるんじゃね?」と言いながらもホントはもっと調整したい項目がいくつかあって、特にエンベロープ、レガート、PAF (key pressure) あたりは音源のサポートが無いと難しいところです。どれもSFZとしてのopcodeはあって、SFZ側でそこまでカバーできているものが無いという感じで、フリーソフトウェア音源の限界は今のところこの辺にありそうです。VPOと同じくVSCO (Versilian Studio's Chamber Orchestra)のフリー版を採用しているORCHESTOOLSというHISE音源があって、これも試してみたいのですが、HISEのVST3ビルドのGUIが不安定で確認出来ない状態です。そんなわけで、この辺まで使い込んでみて、サンプラー開発の最先端課題のひとつに辿り着いた気持ちになっています。

何にせよ、コーディングではなく打ち込み作業に注力してそれなりのアウトプットが出せるというのは楽しいですね。もうちょっと意識的にこういう時間を確保していきたいところです(放っておくとコーディングに走ってしまうので)。

AAP: JUCEのエフェクトプラグイン

11月になって締切の類がなくなってゆとりが出てきたので、ひさしぶりにAndroid開発に手を出せました。今月新しく実現したのはaap-juceで長らく課題になっていた「インストゥルメントプラグインしか使えない」状況の解消です。

JUCEからのプラグイン移植はほとんどがシンセだったのですが(OB-Xd, Dexed, OPNplug, Odin2…)、エフェクトプラグインにもFrequalizer, ChowPhaser, 前述のSimpleReverbなどいろいろあり、ビルドだけはできていました。これはJUCEのissueがblockerだったのですが、先月「直ってるはず」とされたので改めてビルドして、自分のコード側のcrasherも修正して、もうひとつプラグインパラメーターをきちんとAudioProcessorに反映できていない問題も修正したら、ついに動くようになったのでした。

エフェクトプラグインが問題なく音声処理できるようになったので、割と使えるものが増えたのではないかと思います。ただAudioPluginHostでリアルタイムでInstrumentと繋いで発音させてみるとまだ遅延が割とあるので、やっぱりもうちょっと自作モジュールを見直したり軽量なホストアプリケーションを書いたりしてみないとな…という感じです(ホスト自作はめんどくさいのであまりやりたくない)。

ホントはここでスクショとか出したいところですが、MSIのメインマシンが1年4ヶ月にして死にかけていてビルドが今使っている旧メインマシンで残っていないので、別の機会に改めて列挙したいショゾンです。

UI統合を実装してみて外からプラグインの挙動を調整してみたいという気持ちもあるのですが、これは特にAndroid Sv2で複数のActivityが並列に動作可能になったことでAAP GUIアーキテクチャの再考も必要かな…となったり、その後Pixel Foldの撤回疑惑で一気にSv2の雲行きが怪しくなったので再考も先送りするか…となったりと、今月は情勢の変化に踊らされて止まっています。

ADC21

中旬にはADC 2021がロンドンとオンラインのハイブリッドで開催されていたので、夜中はこれに参加していました。現地参加できなくもなかったのですが、英国入国はともかく日本の入国がannoyingとしか言いようがないので見送りました(日本語で何て言うのが最適なのかわからない)。

細かく書ける無限の時間があれば書きたいところですが、特に面白かったセッションとしては(自分が聴けた範囲では) "Inside Modern Game Audio Engines" とか " Leveraging C++20 for Declarative Audio Plug-in Specification" あたりが良かったです(セッション個別のpermalinkが貼れないことに書いていて初めて気付いた)。まだ裏番組で見られなかったやつとかを見ていないので、他に面白かったのがあれば改めて書こうと思います。セッション動画はいずれオンラインで出てくることになっています。

buffering...

今月書けるネタが少ないな?と思ったところですが、よく考えたらテイルズ某とかやってた期間が空白なんだった…

12月は何かと書き溜めておかないといけないものが多いので下旬はそのために時間を使っている感じです(まあコレ自体もそう)。割と完成しないネタやボツったネタもあったりして、草稿箱の治安が悪くなっています。はよ手離れしてほしいけどそのために余計に書き物タスクの比率を増やしたくはない…

…とまあ今年はそんな感じで、ハードルの高いアドベントカレンダーも立てていません(去年もそう)。コーディングなり打ち込み作業なりに時間を使っていきたいと思います。