VST3ホスト開発02 – VST3プラグインの読み込みと情報表示

VST3プラグインの読み込みと情報表示

前回はVST3ホストを作成する際の開発環境準備やVisual Studioプロジェクトの作成について記載いたしました。
今回はVST3プラグインを読み込むプログラムの説明を実施します。

今回作成するプラグインは下記のとおりです。

  • VST3プラグインを読み込む
  • VST3プラグインの情報を表示する

実際に音声処理を行うまではもう少し手順がありますが、まずは情報表示するところまで実施いたします。

今回作成したVST3のソースファイルはこちらになります。→ vst3host01_20200802
なお、Visual Studioのプロジェクトは「コンソールアプリケーション」で作成しております。

VST3プラグイン読み込みの流れ

VST3プラグインを読み込んで利用できるようにするには、大きく下記の流れで読み込みと初期化を行います。

  1. VST3プラグインのファイル(.vst3ファイル)をホストアプリケーションに組み込む(読み込む)
  2. VST3プラグインのファイル内にある音声処理クラスとパラメーター操作クラスの一覧を取得
  3. 音声処理クラスとパラメーター操作クラスの一覧から必要なクラスのインスタンスを作成
  4. 作成した音声処理クラスとパラメーター操作クラスのインスタンスを初期化

本ページで説明する内容は上記の1.と2.についてとなります。

はじめてのVST3ホスト

さっそく、VST3プラグインを読み込むプログラムを作成します。
ソースコードは下記となります。説明は後述します。

【main.cpp】

必要なヘッダファイルと定義

VST3ホストの作成に必要なSDKヘッダファイル「module.h」をまず読み込みます。このヘッダファイルにはModuleクラスとPluginFactoryクラスの定義が記載されています。

また、VST3のホストアプリケーションに関するクラスには名前空間「VST3::Hosting」が使われているため、これも定義します。

そして、C++の標準ライブラリのstringやshared_ptrなどが使用されているため、名前空間「std」も定義しておきます。

「module.h」を利用するためにはVisual StudioのプロジェクトにModuleクラスとPluginFactoryクラスのソースファイル(下記)を追加する必要があります。
(stringconvert.cppは文字コードの変換を行うためのソースコードで、module.cppの中で使用されているため、必要となります。)

  • C:\VST_SDK\VST3_SDK\public.sdk\source\vst\hosting\module.cpp
  • C:\VST_SDK\VST3_SDK\public.sdk\source\vst\hosting\module_win32.cpp
  • C:\VST_SDK\VST3_SDK\public.sdk\source\vst\hosting\stringconvert.cpp

VST3プラグインファイル(.vst3ファイル)の読込

VST3プラグインのファイル(.vst3ファイル)を読み込むにはModuleクラスを使用します。

Moduleクラスを作成するには、Moduleクラス内でstaticで定義されたcreate関数を使用し、引数にVST3プラグインのファイルのパスを指定します。
なお、Module::create()関数の内部では、初期化時にVST3プラグインのInitModule()関数が呼ばれます。

  • Module::create()関数
  • 概要 Moduleクラスのインスタンスを作成・初期化する関数。
    戻り値 概要
    shared_ptr 作成されたModuleクラスのポインタです。作成・初期化に失敗するとnullptrが返ります。
    単なるポインタではなく、shared_ptrであることに注意してください。
    引数 変数名 概要
    string& path 読み込むVST3プラグインファイル(.vst3ファイル)のパスです。
    string& errorDescription Moduleクラスの作成・初期化の失敗時に、エラーメッセージが格納される変数です。

実際にModuleクラスを作成している部分は下記となります。
VST3プラグインファイルのパスはVST3ホストから読み込める位置であればどこでもかまいません。(ここではVST3ホストと同じフォルダを想定しています。)
VST3の規格で定められているフォルダ(C:\Program Files\Common Files\VST3\)配下でなくても読み込めます。

Moduleクラスはshared_ptrのため終了時に解放されます。deleteなどで解放する必要はありません。
また、Moduleクラスの開放時にVST3プラグインのDeinitModule()関数が呼ばれます。

ファクトリークラスの取得とプラグイン情報

VST3プラグインのファイル(.vst3ファイル)が読み込めれば、次はファイル内のVST3プラグイン情報の取得とVST3プラグインにある音声処理クラス・パラメータ操作クラスの列挙をしています。
VST3プラグイン情報取得やクラスの列挙などをするにはPluginFactoryクラスを使用します。

PluginFactoryクラスはModuleクラスのgetFactory()関数で取得することができます。特に難しい関数ではないので詳細は割愛しますが、戻り値がPluginFactoryクラスへの参照(PluginFactory&)であることに注意してください。

getFactory()関数でPluginFactoryクラスを取得した後、VST3プラグインの情報(製作者、製品URL、EMailなど)を取得します。
PluginFactoryクラスのinfo()関数を呼び出すことで、VST3プラグインの情報(製作者、製品URL、EMailなど)が記載されたFactoryInfoクラスを取得することができます。

FactoryInfoクラスには、製作者を返すvendor()関数・製品URLを返すurl()関数・EMailを返すemail()関数(戻り値はすべてstring型)などがあります。
FactoryInfoクラスで取得できる情報は下記のソースコードにある情報でほぼすべてですので詳細は割愛します。

最後に、音声処理クラス・パラメータ操作クラス情報を列挙しています。
PluginFactoryクラスのclassInfos()関数を呼び出すことで、音声処理クラス・パラメータ操作クラスの情報が記載されたClassInfoクラスの動的配列(vector)を取得することができます。
ClassInfoクラスには、クラス名を返すname()関数やFUIDクラスを返すID()関数などがあります。ClassInfoクラスで取得できる情報は下記のソースコードにある情報でほぼすべてですので詳細は割愛します。

PluginFactoryクラス・FactoryInfoクラス・ClassInfoクラスは特に解放する必要はありません。

なお、気づいたかもしれませんが、FactoryInfoクラス・ClassInfoクラスの内容は、VST3プラグイン作成時に指定する、BEGIN_FACTORY_DEFマクロとDEF_CLASS2マクロの内容になります。

実行結果サンプル

上記のコードを実行すると下記のような表示となります。読み込んだVST3プラグインは私の作成した「Tempo Sync Filter」となります。

最後に

VST3プラグインの読み込みと情報表示は以上となります。

次回は、VST3プラグインから音声処理クラスを作成して初期化するところまでを説明いたします。

  次回→音声処理クラスの作成と初期化

VST3.6プラグインの作りの情報はこちらにもございます → はじめてのVST3.6プラグインの作り

ご指摘やご質問などがございましたら、コメント欄か掲示板Twitterでご連絡いただければと思います。

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp


コメントを残す