C++でVST作り

C++でVST作り

本サイトではこのサイトではVST/VSTiプラグイン(エフェクター、ソフトシンセ)を作成するための情報をメモしております。
旧サイトの編集パスワード紛失により移転いたしました。(更新は停止しておりますが、VST/VSTiプラグインの作成情報については、旧サイトにも多くあります。)

【主なコンテンツ】
ギター音源 GT-Strum
自作のギターストローク音源です。不具合報告や要望等、作成にご協力いただける方を募集しております。
はじめてのVST3.6プラグインの作り   (VST2.4はこちら → はじめてのVSTプラグインの作り)
VSTプラグインを作成するための手順を記載しています。
デジタルフィルタ
極力高度な数学(Z変換、伝達関数 等)を使わずに簡単にデジタルフィルタを設計・実装できる方法を紹介しております。

【その他】
■各コンテンツや掲示板にコメントに要望やご意見、応援をいただけるとうれしいです。 →掲示板

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

VST SDKの各バージョンのリンク

VST SDKの各バージョンのリンク

VST SDK 3.6.7からうまくビルドできないという方のために、VST SDKの各バージョンのリンクになります。

■VST SDK 3.6.8
https://download.steinberg.net/sdk_downloads/vstsdk368_08_11_2017_build_121.zip

■VST SDK 3.6.7
https://download.steinberg.net/sdk_downloads/vstsdk367_03_03_2017_build_352.zip

■VST SDK 3.6.6
https://download.steinberg.net/sdk_downloads/vstsdk366_27_06_2016_build_61.zip

■VST SDK 3.6.5
https://download.steinberg.net/sdk_downloads/vstsdk365_12_11_2015_build_67.zip

いつ消されるかわかりませんのでご了承ください。
VST SDK 3.6.0のリンクはなくなっていました。他にご存じの方がいらっしゃいましたら、ご教示いただければと思います。

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

VST SDK 3.6.8が公開されました

VST SDK 3.6.8が公開されました

VST SDK 3.6.8が公開されました。

参考→sdk.steinberg.net

変更点は下記のようです。(英語は自信がないです。)

  • 一部のライセンスが変更
  • C++11が必須に。WindowsではVisual Studio 2015以降が必須
  • Linuxのサポートがβ版に
  • いくつかのインターフェイスとフラグが追加
  • VST3ホストのサンプル追加
  • AUv3とAAXラッパーが追加

VST SDK 3.6.7の基本ライブラリ作成方法

VST SDK 3.6.7の基本ライブラリ作成方法変更について

VST SDK の最新版(3.6.7)が発表されております。
Linux対応に伴い、基本ライブラリの作成方法が変更されております。

具体的には、今までプロジェクトファイルが同梱されておりましたが、今後はCMAKEを使用してVisual Studioプロジェクトを作成する必要があります。

Visual Studioプロジェクトと基本ライブラリの作成方法

CMAKEによるVisual Studioプロジェクトと基本ライブラリの作成方法は下記になります。

  1. CMAKEを公式サイトからダウンロードし、インストールする
  2. VST SDK 3.6.7を任意のフォルダに解凍する
  3. 解凍したフォルダの「VST_SDK\VST3_SDK」配下に「build」フォルダを新規作成
  4. cmakeを起動し、下記の通り設定
    • where is the sorce code
        →「VST_SDK\VST3_SDK」を指定
    • where to build the binaries
        →「VST_SDK\VST3_SDK/build」を指定
  5. .cmake下側の「Configure」ボタンを押し、下記を設定し「Finish」ボタンを押す
    • Specify the generator for this project
        →「Visual Studio 14 2015 Win64」を指定
        (他はそのまま)
  6. cmakeの設定が自動始まり、中央部分に情報(赤字)が表示される
    →「Configure」ボタンの下側のログにエラーがないことを確認する
  7. 「Generate」ボタンを押し、Visual Studioのプロジェクトを作成する
    →「VST_SDK\VST3_SDK/build」配下に「ALL_BUILD.vcxproj」が作成されていることを確認する
  8. 「ALL_BUILD.vcxproj」を開き、Visual Studioでビルドを行う
    →「VST_SDK\VST3_SDK/build/lib」配下にライブラリ「base.lib」が作成される

なお、Visual Studio 2017ではエラーが出たという報告も確認しております。
詳細が分かりましたら、追記していこうと考えています。

その他変更点

VST SDK 3.6.7では下記の変更点もありますので、ご注意ください。
・64bitのみの対応
・文字はマルチバイト文字セットではなくユニコード文字セットを使う
・プロジェクトのプロパティでマルチスレッド(/MT、/MTd)ではなくマルチスレッドDLL(/MD、/MDd)を使用する必要がある
・「VST3_SDK\pluginterfaces\base\funknown.cpp」をプロジェクトに追加する

VST SDK 2.4におけるホストの時間情報取得方法

VST SDK 2.4におけるホストの時間情報取得方法

VST SDK 2.4におけるホストの時間情報取得方法についてのメモになります。
Twitterで少し会話がありましたので補足と他の方の参考のために記載いたします。

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

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

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

【参考】

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

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

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

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

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

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

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