Open4

RustでVST(nih-plug編)

おるとろおるとろ

前もRustでVSTを書こうとして、GUIをつけようというところで挫折した。
バックグラウンド側の処理に対して、GUI側のスレッドからパラメーターを渡す方法が分からなかったんですよね。

僕が知ってる限り、RustでVSTを作るのはこういう変遷があったと思う

  1. vst3-sysで実装
  2. baseplug, baseviewで実装
  3. nih-plugで実装 <- new

それぞれがどういう関係性なのかはわからん 分かったら追記する

RustでGUIの問題は色々あったっぽい。例えばguiとしてwindowを作ろうとしたときにwinit(https://github.com/rust-windowing/winit) では初期値を渡せなくて、バックグラウンド(音響ソフト部分)へのポインタを渡せなかったり。だからRustAudioとしてBaseViewっていうフォークを作ったんじゃないかな、知らん。
今はeguiで実装するとうまくいくのかな? eguiの例が多い。winit使ってないのかな。
とりま最新情報は RustAudio のディスコード鯖に行くといいです。僕もここを読んでいるだけです。
https://discord.gg/ykxU3rt4Cb

おるとろおるとろ

で、今はnih-plugというフレームワークがでているっぽいのでそれを見てみるためのスクラップです。

https://github.com/robbert-vdh/nih-plug
こちらです。
とりあえず動くみたいだけどRustでVST組んだ時はGPLv3ライセンスになるみたいなので商用には無理じゃないかな......

とりあえずサンプルを動かしてみます。

git clone git@github.com:robbert-vdh/nih-plug.git # gitでクローン
cd nih-plug # フォルダ移動
おるとろおるとろ

サンプルをビルドしてみます。

cargo xtask bundle gain --release

xtaskっていうのはよくわからないがcargoのコマンドっぽいですね。gainのサンプルをビルドします。

すると、以下の場所にclapファイルとvst3ファイルが作られます。

Created a CLAP bundle at 'target/bundled\gain.clap'
Created a VST3 bundle at 'target/bundled\gain.vst3'

clapはよく知らないけどプラグインの次世代規格じゃないかなどうせ。
じゃあ今回はvst3を動かしてみましょう。ローカルでの動作チェックにはvsthostを使います。

おるとろおるとろ

実際に使ってみました。

今回は以前別のプロジェクトでビルドしたwhisperプラグインの後段に、先ほどビルドしたgain.vst3を差してみました。

whispter -> gain -> output という流れですね。

まずnew pluginからgain.vst3を読み込みます。適切なプラグインの後段に差しましょう。

プラグインの左上のchain after...の部分から繋ぎ変えることができます。