RustでVST(nih-plug編)
前もRustでVSTを書こうとして、GUIをつけようというところで挫折した。
バックグラウンド側の処理に対して、GUI側のスレッドからパラメーターを渡す方法が分からなかったんですよね。
僕が知ってる限り、RustでVSTを作るのはこういう変遷があったと思う
- vst3-sysで実装
- baseplug, baseviewで実装
- nih-plugで実装 <- new
それぞれがどういう関係性なのかはわからん 分かったら追記する
RustでGUIの問題は色々あったっぽい。例えばguiとしてwindowを作ろうとしたときにwinit(https://github.com/rust-windowing/winit) では初期値を渡せなくて、バックグラウンド(音響ソフト部分)へのポインタを渡せなかったり。だからRustAudioとしてBaseViewっていうフォークを作ったんじゃないかな、知らん。
今はeguiで実装するとうまくいくのかな? eguiの例が多い。winit使ってないのかな。
とりま最新情報は RustAudio のディスコード鯖に行くといいです。僕もここを読んでいるだけです。
で、今は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...の部分から繋ぎ変えることができます。