エフェクターの簡単な実装例 – コーラス・フランジャー

コーラス・フランジャーの実装例

コーラス・フランジャーは入力信号に音程をずらした音を混ぜて音に厚みを持たせるエフェクターです。
コーラス・フランジャーの違いは明確になく、音程のずれの大きさで呼び方が変わります。
コーラスは音程のずれが少なく入力信号に厚みを持たせる程度のもで、フランジャーは音程のずれが大きく入力信号にジェットサウンドを加えたようなものになります。

パラメーターとして下記がよく利用されます。

パラメーター 意味 だいたいの範囲
ミックスレベル コーラス・フランジャーのかかり具合 0~1の間
レート 揺らぎの間隔(ディレイ信号の読み込み位置を揺らす速度) 0Hz~16Hz程度
深さ 揺らぎの深さ(ディレイ信号の読み込み位置を揺らす幅) 5.0~200.0サンプル程度
フィードバック フィードバックの効き具合 0~1の範囲

実装は入力信号に読み込み位置を周期的にずらした(揺らした)ディレイ信号を加えて出力します。
ディレイ信号の読み込み位置を周期的に揺らすことで、音程が数Hz~数十Hz程度変わります。この揺らしたディレイ信号を入力信号に加えることで音に厚みを持たせることができます。

ディレイ信号はリングバッファを使用して保存します。リングバッファは「リングバッファについて」で作成したものを使用しています。
また、読み込み位置を揺らした際、整数値にならない場合があるためサンプルとサンプルの間の位置の値を線形補間などを用いて割り出す必要があります。
線形補間の詳細は省略いたします。

あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】
■線形補間の実装

■エフェクターの実装

上記はあくまで実装例です。
読み込み位置を揺らす関数をSin関数以外にしたり、リングバッファを複数用意することで音の揺れ方や厚みが変わります。
リングバッファに保存する信号やフィードバック信号を左右逆にしたり、フィルタをディレイ信号にかけてみるのも面白いかもしれません。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

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

VST SDK 3.6.9が公開されました

VST SDK 3.6.9が公開されました

新しくVST SDK 3.6.9が公開されました。下記からダウンロードできます。

 →Steinberg – 3rd Party Developer

VST SDK 3.6.8からの変更点は下記のようです。

  • CMAKEファイルを再編
  • VST GUI4.6
    • VST GUI 4.6にアップグレード
    • ノートエクスプレッションをサポートした新しいUI KeyboardViewを追加
  • インターフェイスの変更
    • インクルードファイルの定義を一部変更
    • vsttypes.hからスピーカーアレンジメントの定義をvstspeaker.hに分離
    • idの初期化されていないパラメーター用に定数 kNoParamIdを定義
  • サンプルの更新
    • Validatorを修正
    • NoteExpressionSynthが新しいKeyboardViewを使用するように変更
    • HelloWorld VSTプラグインを追加
  • プラグインラッパーの変更
    • AudioUnit Wrapperを修正し、新しいXCodeに対応
    • Audio Unit v3 (AUv3) wrapperを修正、CMAKEを追加
    • AAX wrapperにバイパス処理とVUパラメータのサポートを追加
    • interappaudioを改善・修正し、CMAKEを追加
  • ヘルパークラスの追加
    • リングバッファークラス(ringbuffer.h)を追加

過去のSDKについては下記にリンクを記載しております。

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

ご指摘やご質問は各コンテンツページや掲示板Twitterでいただけばとおもいます。

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

エフェクターの簡単な実装例 – グラフィックイコライザー

グラフィックイコライザーの実装例

グラフィックイコライザーとは入力音声の各周波の数帯域を増減させ、音を整えるエフェクターです。

パラメーターとしては各周波数ごとの増幅量(ゲイン)が利用されます。
各周波数の割り当ては100Hzあたりから、オクターブごとに割り当ててるものが多いです。

パラメーター 意味 だいたいの範囲
100Hzゲイン 100hz付近の増幅量 -15~15dB
200Hzゲイン 200hz付近の増幅量 -15~15dB
400Hzゲイン 400hz付近の増幅量 -15~15dB
800Hzゲイン 800hz付近の増幅量 -15~15dB
1,600Hzゲイン 1,600hz付近の増幅量 -15~15dB
3,200Hzゲイン 3,200hz付近の増幅量 -15~15dB
6,400Hzゲイン 6,400hz付近の増幅量 -15~15dB
12,800Hzゲイン 12,800hz付近の増幅量 -15~15dB

実装は入力信号をピーキングフィルタを順番に通すだけです。

フィルタは「簡単なデジタルフィルタのサンプルコード」を使用しています。
あくまで実装例ですのでいい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。

【実装イメージ】

上記はあくまで実装例です。

質問はコメント欄や掲示板Twitterでいただけばとおもいます。
他のエフェクター実装例はこちらにもあります。 → エフェクターの簡単な実装例

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

VST3プラグイン開発(補足) – サンプルソースファイルのビルド方法

サンプルソースファイルのビルド方法

ここでは本Webサイトの各ページからダウンロードできるVST3.6のサンプルソースファイルをビルドし、.vst3ファイル(VST3プラグイン)を作成する方法について簡単に説明いたします。
Visual Studio 2017の画面となっていますが、Visual Studio 2019でも大きな違いはありませんので同じ手順で問題ないと思います。

なお、事前に下記を参考に開発環境の準備、基本ライブラリの作成、および、VST3プロジェクトの作成が完了してください。

ファイルのダウンロードと解凍

まず、各ページからサンプルのソースファイルをダウンロードしてください。
もっと見る

複数コントロールの同期

VST GUIにおける複数コントロールの同期

VST GUIを作成するうえで、下記のように「つまみ(ノブ)を操作すると同時にスライダーも動く」のように複数のコントロールで連携や同期をとりたい場合があります。今回はその実装方法を説明いたします。

なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。

また、こちらのTipsで紹介している各コントロールを作成する関数も使用しています。

もっと見る

テキストエディットの実装

VST GUIにおけるテキストエディットコントロールの実装

VST GUIにおいてテキストエディットコントロールを実装する方法を説明いたします。
なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。

テキストエディットコントロールは下記のようなコントロールです。クリックしてフォーカスした状態で文字を入力することができます。

もっと見る