VST3.6勉強中 9 – MIDIメッセージの受取1

VST3プラグインでMIDIメッセージを受信する方法1

前回まででパラメータに関するさまざまな説明をさせていただき、ひととおりのパラメーターについての説明はさせていただいたと考えております。

【参考】

パラメータ実装方法1 最小構成のVST3プラグインに基本となるパラメータを実装する方法を記載します。
パラメータ実装方法2 パラメータ実装方法1で実装したパラメータは「0.0~1.0」しか表示できないので、
それ以外(例えば「10~100」や文字列のリストなど)を表示するパラメータを実装する方法を記載します。
パラメータ実装方法3 パラメータクラスを継承して自作のパラメータクラスを作成します。
「フィルタのカットオフ周波数」等で利用するスライダーの位置と出力の関係が線形でないパラメータを実装する方法を記載します。
パラメータの保存方法 パラメータ実装方法1~3で追加したパラメータはホスト(DAWなど)を終了すると初期化されてしまいます。
終了時に保存し、次回起動時にデータが読み込まれるようパラメーターを保存・読込する方法を記載します。

ですので、今回はMIDIのノートオン/ノートオフメッセージを受信する方法を記載したいと思います。

今回作成するプラグインはVST3プラグインのパラメーター実装方法で作成したプラグインをベースにします。
(コントロールの実装以外に余計なコードが少ないためです。)

  • パラメーターはなし(ただしパラメータ操作クラスは定義します。)
  • MIDIのノートオン/ノートオフメッセージに応じて音を鳴らすモノフィックシンセサイザー
  • 音色はサイン波のみ。(エンベロープジェネレータ等の機能もなし)
  • 入力バス、出力バスは1つで、共にステレオ(2ch)

今回ベースとなるプラグインの説明はこちらに記載しています。

音声処理クラスの定義

まずは今回作成するVSTはモノフィックシンセサイザーとして動作するため、音声処理クラスにて必要な変数等を下記の通り定義しております。
続きを読む

VST3.6勉強中 8 – VST3プラグインのパラメーター内容の保存方法

VST3プラグインのパラメーターを保存する方法

前回まででいろいろなパラメーターを実装しました。

【参考】

パラメータ実装方法 パラメータ自体を実装する方法
パラメータ実装方法2 0.5~30.0の範囲や文字列リスト等のパラメーターを実装する方法。
パラメータ実装方法3 「フィルタのカットオフ周波数」等の線形でないパラメータを実装する方法を記載

しかし、VSTを終了し再度起動してもパラメーターがデフォルト値に戻ってしまっていたかと思います。
それはVST3ではパラメーター内容を保存する処理を自分で記載しなければならないためです。
今回は作成したパラメーターの値を保存する方法について記載したいと思います。

今回作成するプラグインはVST3プラグインのパラメーター実装方法で作成したプラグインをベースにします。
(コントロールの実装以外に余計なコードが少ないためです。)

  • パラメーターは1つ(ボリュームコントロール)
  • 入力のボリュームをパラメーターにより調整して出力する
  • 入力バス、出力バスは1つで、共にステレオ(2ch)

今回の内容はいままでのパラメータの実装方法をベースにしています。上記の参考についても必要に応じてご参照ください。
なお、「バス」についての概念はこちらに記載したとおりです。

パラメーターを保存・読込するための関数

パラメーターを保存・読込するためには、音声処理クラスとパラメータ操作クラスで必要な関数をオーバーライドします。 続きを読む

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

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

前回はいろいろな値を表示すると文字列リストのパラメーターを実装しました。

しかし、「デジタルフィルタのカットオフ周波数」ようなパラメーターでは、パラメーターの値が大きくなるにつれて効き目が変わってくるものもあります。
例えば、デジタルフィルタのカットオフ周波数の場合、同じ1,000Hz分をカットオフ周波数を操作するにしても500Hz~1,500Hzと15,000Hz~16,000Hzではフィルタの影響が大きく異なります。(15,000Hz~16,000Hzはほとんど変化がないように感じます。)

20171103

このようなの場合、どの位置を動かしても同じような影響がでるパラメーターを実装したほうが使いやすくなります。
これはパラメーターの操作に対して指数的(非線形)に値が増加するパラメーターを実装すれば実現できます。

今回は「パラメーターの操作に対して、値が指数的(非線形)に値が増加するパラメーター」を実装する方法について記載したいと思います。

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

  • ローパスフィルタをかける機能を持つエフェクター
  • パラメーターは2つ
  • 周波数(50.0~22000.0Hzの範囲のパラメーター)
  • Q値(0.5~10.0の範囲のパラメーター)
  • 入力バス、出力バスは1つで、共にステレオ(2ch)
  • VSTのイメージ
    20171103

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

    指数的な変化をするパラメーター

    指数的な変化をするパラメーターを実装するためには、Parameterクラスを継承し自作のパラメータークラスを作成します。

    Parameterクラスを継承して自作のパラメーターを使用するには、下記手順を行います。 続きを読む

    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クラスを使用します。

    続きを読む

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

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

    前々回は最小構成のVST3のプラグインを作成いたしました。
    今回は前々回のVST3プラグインにパラメーターを追加します。

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

    • パラメーターは1つ(ボリュームコントロール)
    • 入力のボリュームをパラメーターにより調整して出力する
    • 入力バス、出力バスは1つで、共にステレオ(2ch)

    「バス」についての概念は前回記載したとおりです。

    パラメーター操作クラスの作成

    まずはパラメーター操作を行うクラスを作成します。

    続きを読む

    VST3.6勉強中 4 – VST3のバスについて

    VST3のバスについて

    前回は最小構成のVST3プラグインを作成しましたが、その中にあったバスの概念について簡単にメモいたします。

    VST3のプラグインには「バス」というものがあります。

    「バス」とはコンピュータでは”データの流れる道”になります。
    VST3のプラグインには「AudioBus」と「EventBus]の2種類のバス(データの流れる道)があります。

    • AudioBus
    • オーディオデータ(音声波形データ)の流れる道。
      オーディオバスには「モノラルのオーディオバス」や「ステレオのオーディオバス」等の構成がある。

    • EventBus
    • イベントデータ(ノートオン、ノートオフメッセージ等)の流れる道。

    続きを読む