VST3.6勉強中 6 – VST3プラグインのパラメーター実装方法2

VST3プラグインのパラメーター実装方法2

前回はパラメーターを実装しましたが、0.0~1.0の範囲の値しか表示できませんでした。
実際にVSTプラグインを作成する際には、0~1の間だけでなくいろいろな値を表示する場合があると思います。

今回は任意の範囲を表示するパラメーターと文字列リストを表示するパラメーターを実装したいと思います。

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

  • ボリュームコントロール、トレモロ、パンニングの機能を持つエフェクター
  • パラメーターは3つ
    • ボリュームコントロール(0.0~1.0の範囲のパラメーター)
    • トレモロスピード(0.5~30.0Hzの範囲のパラメーター)
    • トレモロタイプ(ボリュームコントロール・トレモロ・パンニングの文字列リストパラメーター)
  • 入力バス、出力バスは1つで、共にステレオ(2ch)

20150929

今回の内容は前回の説明をもとにしていますので、パラメーターの追加方法等については、前回の説明をご参照ください。
「バス」についての概念はこちらに記載したとおりです。

任意の範囲を表示するパラメーター

任意の範囲(例えば0.5Hz~30Hz 等)を表示するためには、RangeParameterクラスを使用します。

RangeParameterクラスはParameterクラスから継承されたクラスです。
RangeParameterクラスのパラメーターを使用するには、下記手順を行います。

  1. newでRangeParameterクラスのインスタンスを生成
  2. パラメーター操作クラスにparameters.addParameter()関数で追加

今回のRangeParameterクラスパラメーターは下記のようにして追加しています。

RangeParameterを作成するときのコンストラクタの引数については下記のとおりとなります。

  • RangeParameterコンストラクタ
  • 概要 RangeParameterのコンストラクタ。
    戻り値 概要
    戻り値はありません(コンストラクタのため)
    引数 変数名

    概要
    TChar* title

    パラメーターの名前。
    int32 tag

    パラメーターのタグ。重要。他のパラメーターのタグと重複しないほうがよい。
    TChar* units

    パラメーターの単位(dB、sec 等)。省略可。省略した場合 NULL になる。(単位が表示されない)
    minPlain ParamValue

    表示値の最小値。省略可。省略した場合 0.0 になる。(ParamValueはfloatの再定義)
    maxPlain ParamValue

    表示値の最大値。省略可。省略した場合 1.0 になる。
    defaultValuePlain ParamValue

    表示値の初期値。省略可。省略した場合 0.0 になる。
    int32 stepCount

    何段階のパラメーターか?
    例:
     3を指定した場合…minPlain、(minPlain+maxPlain)/2、maxPlainの3段階
    0を指定すると0.0~1.0を滑らかに動く。
    省略した場合 0 になる。
    int32 flags

    パラメーターのフラグ。省略可。
    省略した場合 ParameterInfo::kCanAutomateになる。基本的に省略でいいはず。
    UnitID unitID

    詳細不明。省略可。省略した場合 kRootUnitId になる。基本的にでいいはず。

RangeParameterクラスのsetPrecision()関数は小数第何位まで表示するかを指定しています。関数呼び出し自体を省略しても問題ありません。
省略時は小数第4位まで表示されます。

前回はaddParameter()関数にパラメーターに関する引数を直接指定していましたが、今回は事前に作成したパラメータークラスのポインタをaddParameter()関数に渡すことでパラメーターを追加しています。
addParameter()関数は他にも引数にParameterInfoを渡すことでパラメータを作成するものもありますが、詳細については割愛いたします。

文字列リストを表示するパラメーター

文字列リスト(例えば「Volume、Tremolo、Panning」 等)を表示するためには、StringListParameterクラスを使用します。

StringListParameterクラスはParameterクラスから継承されたクラスです。
StringListParameterクラスのパラメーターを使用するには、下記手順を行います。

  1. newでStringListParameterクラスのインスタンスを生成
  2. StringListParameterクラスのappendString()関数でリスト項目を追加
  3. パラメーター操作クラスにparameters.addParameter()関数で追加

今回のStringListParameterクラスパラメーターは下記のようにして追加します。

StringListParameterを作成するときのコンストラクタの引数については下記のとおりとなります。

  • StringListParameterコンストラクタ
  • 概要 StringListParameterのコンストラクタ。
    戻り値 概要
    戻り値はありません(コンストラクタのため)
    引数 変数名

    概要
    TChar* title

    パラメーターの名前。
    int32 tag

    パラメーターのタグ。重要。他のパラメーターのタグと重複しないほうがよい。
    TChar* units

    パラメーターの単位(dB、sec 等)。省略可。省略した場合 NULL になる。(単位が表示されない)
    int32 flags

    パラメーターのフラグ。省略可。
    省略した場合 ParameterInfo::kCanAutomate | ParameterInfo::kIsList になる。基本的に省略でいいはず。
    UnitID unitID

    詳細不明。省略可。省略した場合 kRootUnitId になる。基本的にでいいはず。

StringListParameterクラスのappendString()関数はリスト項目を追加する関数です。下記のとおりとなります。

  • appendString()関数
  • 概要 StringListParameterクラスのリスト項目を追加する関数。
    戻り値 概要
    戻り値はありません
    引数 変数名

    概要
    string String128

    追加するリスト項目の文字列

音声処理クラスでのパラメーター値の受け取り

次は追加したパラメーターの値を音声処理クラスのprocess関数内で受け取る部分です。

実は今回追加したどのパラメーターも必ず0.0~1.0の範囲で渡されます。
ですので、自作するVSTで使用しやすい値に再度変換する必要があります。

今回は下記のように処理しています。
赤く強調された部分が追加したパラメーター使用しやすい値に再変換している部分になります。

音声処理クラスでの音声信号の処理

パラメーター値を受け取り、再変換した後は音声信号を処理します。

今回は単純にtypeに合わせ出力する音声信号の計算方法を振り分けているだけです。
赤く強調された部分が今回変更した部分になります。

最後に

以上で0.0~1.0以外の表示を行うパラメーターをVST3プラグインに追加することができます。

次回は「デジタルフィルタのカットオフ周波数」のような指数的に値が増加するパラメーターを追加する方法について記載したいと思います。

今回作成したVST3のソースファイルはこちらになります。 → 20150929_vst3


コメントを残す