見出し画像

VST プラグインのプロトタイピングから検証までを MATLAB で ~ MATLAB の VST 生成機能を使う ~ データインスペクターでログ比較

まえがき

みなさんは信号処理系のプラグインを作る場合、プロトタイピングや検証はどうされてますか?

私は、JUCEWwise でプラグインを作る前に、まずは効果を MATLAB/Simulink で確認し、MATLAB で VST 化してリアルタイム検証を行っています。

今年の ADC でも、「最初に MATLAB で作ってから JUCE にする」って言ってた方がいましたね。
"super helpful" と。(--)(__)

Musical sound coding for cochlear implants - Shaikat Hossain


以下は、実際に MATLAB で VST を作り、JUCE 化した例です。

MATLAB で生成した VST の例
JUCE 化した VST の例


MATLAB で生成した VST の例

以下、実際の動作例を上げておきます。

Simulink 上でのデバッグ例

Reaper での動作例1

Reaper での動作例2

スタンドアローン版での単体動作例


VST 開発を MATLAB で行うメリット

MATLAB の Audio Toolbox は、VST プラグイン生成に対応しています。

もちろん生成された VST はネイティブですので高速動作します。

開発環境が MATLAB なので、とにかく簡単に作れてデバッグも便利です。

最短数分~で作れますし、信号処理部に MATLAB の関数が使えます。

MATLAB 上でデバッグができるので、グラフィカルなデバッグも簡単にできます。

メリットを上げると
・機能ブロックを繋ぐだけ(Simulink)なので思いついたらすぐ試せる、思考が止まらない
・圧縮フォーマットを含むマルチメディア・ファイル入出力可
・中程度の処理であればリアルタイムデバッグ可
・一部機能ライブラリ化による高速化も可
・瞬時にブロックを入れ替え・並列化して聞き比べ(Simulink)
・プログラミング不要なグラフィカル・デバッグ
・ステップ動作、逆転動作(Simulink)
・長年使われ続けている上に頻繁にアップデートされており(年2回メジャーアップデート+適宜マイナーアップデート)将来に渡って信頼性が高い
・(ちゃんとした)日本語版を含む公式ドキュメント・チュートリアルが充実している

JUCE 等に持って行くには MATLAB 固有の関数は使わないようにする必要がありますが、デバッグでスペクトルを見たりするのには便利ですし、とりあえずデバッグ不要な MATLAB 関数で組んでからブレイクダウンするのも効率的です。

特に Simulink であれば機能ブロック単位で C/C++ 等他の言語を用いることもでき、ブロック単位でのデバッグにも便利です。

プロライセンスであれば、MATLAB 関数を使っていても直接 JUCE プロジェクト生成が可能です。

生成できるのは、Windowsでは VST2(64/32bit)、VST3、Macでは AUv2、AUv3 です。
単体動作するスタンドアローン版は両 OS で生成可能です。

現時点ではまだ VST2 生成にも対応しています。

但し、VST 動作では制限事項もあります。

・VSTi 非対応
・グラフ出力不可
・タイム関数や Web アクセス関数等使用不可(これらを使った認証等が行えません)
・ファイル読み込み不可
・GUI のカスタマイズ制限(背景画像等、一部画像貼り付けは可能)
・プログラム内からの GUI 操作不可
・GUI コンポーネントは以下の7種類のみ
 水平スライダー、垂直スライダー、ロータリーノブ、チェックボックス、ロッカーSW、トグルSW、ドロップダウンメニュー
・MIDI によるパラメータ操作不可
 audioTestBench 上でのデバッグ時は可能ですが VST では未対応です


開発環境

MATLAB 本体以外に以下の Toolbox が必要です。

・DSP System Toolbox
・Signal Processing Toolbox
・Audio Toolbox
・(MATLAB Coder) ← JUCEプロジェクト生成には必要

これらがないと作れません。

最初の2つは "Audio Toolbox" の動作に必要なので、"Audio Toolbox" が動く状態ならVSTプラグインが作れると言うことになります。

MATLABでは、MATLABアプリは "MATLAB Compiler" 、コード生成及びネイティブアプリは "MATLAB Coder" がないと作れませんが、VSTは "Audio Toolbox" があれば作れます。ですので、"MATLAB Compiler/Coder" 製品自体がない MATLAB HOME ライセンス(非商用のみ)でも作ることができます。

VST 生成に必要な Toolbox を揃えると、Home 版で税込み 3万円ちょいです。

あると便利な Simulink も +5千円弱。

Simulink があると、ブロックを繋ぐだけでシミュレーションができますし、サイドチェインを使った VST のデバッグも可能です。

Simulink モデル例
Simulink モデル例

Scope や Spectrum Analyzer を繋げば、任意点での波形やスペクトルを見ながらのシミュレーションが可能です。

Scope による波形表示
Spectrum Analyzer によるスペクトル表示


また、JUCE で日本語表示させる場合 urlencode する必要があります。Projucer にも変換ツールがありますが、MATLAB にも matlab.net.internal.urlencode 関数が用意されているので簡単に変換できます。

売り物だけあってインストールも一発、OSS等でありがちな一部のアップデートで全体が動かなくなるようなこともまずありません。

他の開発環境ではあり得ない程(日本語)公式ドキュメント・チュートリアルが充実していて、ユーザーコミュニティも活発でなぜか優しいです。
(オーディオ系は、日本語化されていない部分も多いですが・・)

MATLAB 専用の AI Chat も始まりました。
充実した公式ドキュメントがベースになっているので期待できます。
質問は日本語でも OK です。


サンプルコード

音量を変えるだけのプラグインなら、コードはこれだけです。

classdef VST_simple1 < audioPlugin
   properties
       inputGain = 1;
   end
   properties (Constant)
       PluginInterface = audioPluginInterface(audioPluginParameter('inputGain'));
   end
   methods
       function out = process(plugin,in)
           out = in * plugin.inputGain;
       end
   end 
end

生成は以下のようにします。

>> generateAudioPlugin VST_simple1  % VST2
>> generateAudioPlugin -vst3 VST_simple1  % VST3
>> generateAudioPlugin -au VST_simple1  % AUv2
>> generateAudioPlugin -auv3 VST_simple1  % AUv3
>> generateAudioPlugin -exe VST_simple1  %  Standalone executable
生成された VST プラグイン


例えば以下のようなパンを変えるだけのものであれば、30分程度で VST プラグインが作れると思います。

パン VST

多少はデザインもいじれます。

オリジナルボタン・ノブデザインの例


Audio TestBench

デバッグ環境としては専用の Audio TestBench アプリが用意されており、このメニューからもプラグイン生成が可能です。

Audio TestBench

入力はオーディオファイルやオーディオデバイスの他に各種 SG も用意されており詳細設定もできます。

Input 選択
Audio Oscillator 設定
Chirp Signal 設定
Colored Noise 設定
Output 選択

タイムスコープやスペアナ表示も可能ですが、動作が重いので通常の Simulink を使った方が良いかと思います。

Audio TestBench は MIDI も対応しているので、有線/無線での MIDI control も可能です。

VST のフィルターパラメータをスマホからワイヤレス操作


データインスペクター

Simulink では、ログを取ってまとめて見ることもできます。

モデルコンフィグレーションパラメータ(Ctrl+E)で「信号のログ」をチェックし、あとはログを取りたい信号線を選択して実行するだけです。

モデルコンフィグレーションパラメータ
ログを取る信号を選択


データインスペクターを起動して表示したい信号を選択します。オーディオ信号は列をオーディオチャネルとするフレーム信号として扱われるため、「フレームの変換」を選択します。

フレームの変換
時間プロット選択

実行毎にログが取られるので、パラメータを変えた場合と比較することなどができます。

色やタイトルなどは、あとからこの画面で自由に編集できます。

ログの比較


参考記事

MATLAB で VST を開発する記事は過去にいくつか書いていますので、以下列挙しておきます。


また、去年の時点でまとめたものを Kindle でも出しています。

Unlimited 会員であれば無料でお読み頂けます。


MATLAB/Simulink 自体についてはこちらの記事をご参照ください。


MATLAB Home についてはこちら。


MATLAB/Simulink 自体は、まずは Mobile アプリ/Web アプリで無料で始められます
(VST 生成や Audio device I/O の使用はサポートされていません)


あとがき

使用可能なコンポーネントもテキストウィンドウがないとか色々と制限はありますが、すぐ作れてデバッグも楽なのが特徴です。

プラグインだけでなく、組み込み系に持っていく場合なども、元を MATLAB で作っておけば融通が利きますし、アルゴリズム検証~インプリ~テストデータ作成・検証まで効率的に行えます。

論文等でもコードが載っていることの多い信頼の MATLAB、ユーザーは制御屋さんが圧倒的に多いイメージですが、実際に音を出し波形を見て開発できるので、オーディオの信号処理開発にもとても適しています。

毎年2回のメジャーアップデートがある MATLAB ですが、VST 関連はここ数年目立った機能アップデートがありません。(VST3、AUv3 対応はありました)

使う人が増えれば機能アップの要望も通りやすくなると思うので、みなさんもぜひ使って要望を上げてください! (-_☆)


タイトル画像モデル:綾夏
The title image was created using Adobe Generative Fill based on this picture.

Original Image

この記事が気に入ったらサポートをしてみませんか?