※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

VST(エフェクター)作成例


VSTの初期化

createEffectInstanceの記述

ホストアプリケーション(Cubase、Sonar等)が今回作成するVST(クラスの宣言でAudioEffectXを継承したクラス)のインスタンスを作成ために必要な関数。
なぜこのような関数が必要かの詳細は説明できるほどの知識がないため省略する。(どうもDLLファイルはC++のクラスをエクスポートできないらしい。苦肉の策としてこのような関数がある模様。)

とりあえず、今回作成するVSTのインスタンスをnewで生成してreturnで返すとよい。

  1. // ============================================================================================
  2. // このVSTのを生成するための関数
  3. // ============================================================================================
  4. AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
  5. {
  6. //newでこのVSTを生成したポインタを返す
  7. return new MyTremoloVST (audioMaster);
  8. }
  9.  

VSTの初期化

VSTの初期化はコンストラクタで行わなければならない。

サンプルエフェクターのコンストラクタは以下のようにしている。

  1. MyTremoloVST::MyTremoloVST (audioMasterCallback audioMaster)
  2. : AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM)
  3. {
  4. //VSTの初期化を行う。
  5.  
  6. //以下の関数を呼び出して入力数、出力数等の情報を設定する。
  7. //必ず呼び出さなければならない。
  8. setNumInputs (MY_VST_INPUT_NUM); //入力数の設定
  9. setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定
  10. setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定
  11.  
  12. isSynth (false); //このVSTがSynthかどうかのフラグを設定。
  13. //Synthの場合…true、Effectorの場合…false
  14.  
  15. canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。
  16. //音声処理を行わないVSTはないので必ずこの関数を呼び出す。
  17.  
  18. //このVSTのパラメータを初期化する。
  19. fTime = 0.0f;
  20.  
  21. fTremoloSpeed = 1.0f / 4.0f; //トレモロの周期 0.25秒
  22. fTremoloDepth = 0.5f; //トレモロの振幅 0.5倍
  23. }


VSTの初期化では初めにコンストラクタでは継承元であるAudioEffectXのコンストラクタを呼び出し、audioMasterCallbackとプリセット数とパラメーター数を設定しなければならない。(2行目)

AudioEffectX(audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)

audioMasterCallbackは作成するVSTの引数をそのまま渡せばよい。プリセット数とパラメーター数は作成するVSTにあわせて値を設定する。
サンプルエフェクターでは以下のとおりとしている
引数
audioMasterCallback audioMaster audioMaster
VstInt32 numPrograms MY_VST_PRESET_NUM((宣言部で定義済み。1)
VstInt32 numParams MY_VST_PARAMETER_NUM((宣言部で定義済み。2)


次に以下の関数を呼び出して、音声の入力数や出力数、ユニークID等の情報を設定している。(8~16行目)
なお、以下の関数に関しては必ず呼び出さなければならず、また設定した情報はプログラムが終了するまで変更してはならない。
関数名 戻り値 引数 概要
setNumInputs なし VstInt32 inputs エフェクターの入力数の情報を設定する。
サンプルエフェクターではMY_VST_INPUT_NUM(宣言部で定義済み。2)としている。
setNumOutputs なし VstInt32 outputs エフェクターの出力数の情報を設定する。
サンプルエフェクターではMY_VST_OUTPUT_NUM(宣言部で定義済み。2)としている。
setUniqueID なし VstInt32 iD エフェクターのユニークIDを設定する。
サンプルエフェクターではMY_VST_UNIQUE_ID(宣言部で定義済み。2)としている。
isSynth なし bool state 作成するVSTがシンセかどうかを設定する。
今回はエフェクターなのでfalseとしている。
canProcessReplacing なし bool state 32ビット浮動小数点で音声処理できるか設定する。
サンプルエフェクターでは32ビット浮動小数点で音声処理を行うのでtrueとしている


上記関数を呼び出した後、作成するVST固有の変数初期化やバッファの確保等を行う。
サンプルエフェクターでは各パラメーターの変数にエフェクターのデフォルトの値を代入している。(21~25行目)

VSTの終了処理

VSTの終了処理はデストラクタで行わなければならない。
サンプルエフェクターでは特に何もしていないが、コンストラクタで確保したメモリを開放したりする。

  1. MyTremoloVST::~MyTremoloVST ()
  2. {
  3. //VSTの終了処理をする。
  4. //このVSTでは特に実行する処理はなし。
  5. }


合計: -
今日: -
昨日: -