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


VSTパラメーターの処理

ホストアプリケーション(Cubase,Sonar等)がVSTのパラメーターを変更、表示するための関数を作成する。

パラメーターの値の設定

ホストアプリケーション(Cubase,Sonar等)が作成したVSTにパラメータを設定するための関数。
引数のVstInt32 indexはパラメーターの番号。float valueは与えられたパラメーター。
float valueは0.0~1.0の範囲で与えられるため、作成するVSTで利用する範囲に変換する必要がある。

サンプルエフェクターでは以下のように処理している。
index 変更する変数 変更内容
TREMOLO_SPEED(=1 宣言部で定義済み。) fTremoloSpeed トレモロのスピードを変更。
0.0~1.0の範囲で与えられたvalueを1秒~30秒(1Hz~30Hz)に変更し代入する。
TREMOLO_DEPTH(=2 宣言部で定義済み。) fTremoloDepth トレモロの深さを変更。
valueの値をそのまま代入。

  1. void MyTremoloVST::setParameter (VstInt32 index, float value)
  2. {
  3. //indexで指定されたパラメータに値を設定する。
  4. //valueは0.0f~1.0fで与えられる。
  5. switch (index)
  6. {
  7. case TREMOLO_SPEED:
  8. fTremoloSpeed = 1.0f / (29.0f*value +1.0f); //1秒~1/30秒の範囲にする
  9. break;
  10. case TREMOLO_DEPTH:
  11. fTremoloDepth = value;
  12. break;
  13. }
  14. }
  15.  

パラメーターの値の通知

作成したVSTのパラメーターの現在の値をホストアプリケーション(Cubase,Sonar等)に通知するための関数。
引数のVstInt32 indexで指定されたパラメーターの値を返す関数を作成しなければならない。
また返す値は0.0~1.0の範囲にする必要がある。

サンプルエフェクターでは以下のように処理している。
index 返す値の内容
TREMOLO_SPEED(=1 宣言部で定義済み。) トレモロのスピードを返す。
1秒~30秒(1Hz~30Hz)に設定されたfTremoloSpeedを0.0~1.0の範囲にして返す
TREMOLO_DEPTH(=2 宣言部で定義済み。) トレモロの深さを変更。
fTremoloDepthの値をそのまま返す。

  1. float MyTremoloVST::getParameter (VstInt32 index)
  2. {
  3. //indexで指定されたパラメータの値を
  4. //0.0f~1.0fの範囲で返す
  5. float value = 0.0f;
  6. switch (index)
  7. {
  8. case TREMOLO_SPEED:
  9. value = (1 / fTremoloSpeed - 1.0f) / 29.0f; //1秒~1/30秒を0.0f~1.0fの範囲にする
  10. break;
  11. case TREMOLO_DEPTH:
  12. value = fTremoloDepth;
  13. break;
  14. }
  15. return value;
  16. }

パラメーター名の通知

作成したVSTのパラメーターの名前をホストアプリケーション(Cubase,Sonar等)に通知するための関数。
引数のVstInt32 indexで指定されたパラメーターの名前をchar* textに格納する関数を作成しなければならない。
引数のchar* textは8バイト。NULL文字で終端させる必要がある。

サンプルエフェクターでは以下のように処理している。

  1. void MyTremoloVST::getParameterName (VstInt32 index, char* text)
  2. {
  3. //indexで指定されたパラメータの名前をtextに格納する
  4. //kVstMaxParamStrLenは「vstsdk2.4\pluginterfaces\vst2.x\aeffect.h」に
  5. //定義されている。(kVstMaxParamStrLen = 8)
  6. switch (index)
  7. {
  8. case TREMOLO_SPEED:
  9. vst_strncpy (text, "Speed", kVstMaxParamStrLen);
  10. break;
  11. case TREMOLO_DEPTH:
  12. vst_strncpy (text, "Depth", kVstMaxParamStrLen);
  13. break;
  14. }
  15. }

パラメーターの単位の通知

作成したVSTのパラメーターの単位をホストアプリケーション(Cubase,Sonar等)に通知するための関数。
引数のVstInt32 indexで指定されたパラメーターの単位をchar* labelに格納する関数を作成しなければならない。
引数のchar* labelは8バイト。NULL文字で終端させる必要がある。

サンプルエフェクターでは以下のように処理している。

  1. void MyTremoloVST::getParameterLabel (VstInt32 index, char* label)
  2. {
  3. //indexで指定されたパラメータの単位をlabelに格納する
  4. //kVstMaxParamStrLenは「vstsdk2.4\pluginterfaces\vst2.x\aeffect.h」に
  5. //定義されている。(kVstMaxParamStrLen = 8)
  6. switch (index)
  7. {
  8. case TREMOLO_SPEED:
  9. vst_strncpy (label, "Hz", kVstMaxParamStrLen);
  10. break;
  11. case TREMOLO_DEPTH:
  12. vst_strncpy (label, "dB", kVstMaxParamStrLen);
  13. break;
  14. }
  15. }

パラメーターの単位の通知

作成したVSTのパラメーターの表示内容をホストアプリケーション(Cubase,Sonar等)に通知するための関数。
引数のVstInt32 indexで指定されたパラメーターの表示内容をchar* textに格納する関数を作成しなければならない。
引数のchar* textは8バイト。NULL文字で終端させる必要がある。

サンプルエフェクターでは以下のように処理している。

  1. void MyTremoloVST::getParameterDisplay (VstInt32 index, char* text)
  2. {
  3. //indexで指定されたパラメータの表示内容をtextに格納する
  4. //kVstMaxParamStrLenは「vstsdk2.4\pluginterfaces\vst2.x\aeffect.h」に
  5. //定義されている。(kVstMaxParamStrLen = 8)
  6. switch (index)
  7. {
  8. case TREMOLO_SPEED:
  9. float2string (1.0f / fTremoloSpeed, text, kVstMaxParamStrLen);
  10. break;
  11. case TREMOLO_DEPTH:
  12. float2string (fTremoloDepth, text, kVstMaxParamStrLen);
  13. break;
  14. }
  15. }
float2string関数は継承元クラス(AudioEffectクラス)で定義されている関数。
他にも以下のような関数がある
関数 戻り値 引数 説明
dB2string なし float value,
char* text,
VstInt32 maxLen
valueの値をデシベル単位に変換してchar* textにmaxLen文字分書き込む
float2string なし float value,
char* text,
VstInt32 maxLen
valueの値を文字列に変換してchar* textにmaxLen文字分書き込む
Hz2string なし float samples,
char* text,
VstInt32 maxLen
samplesの値を周波数に変換してchar* textにmaxLen文字分書き込む
int2string なし VstInt32 value,
char* text,
VstInt32 maxLen
valueの値を文字列に変換してchar* textにmaxLen文字分書き込む
ms2string なし float samples,
char* text,
VstInt32 maxLen
samplesの値をミリ秒単位に変換してchar* textにmaxLen文字分書き込む
(詳細はaudioeffect.hで定義されている)



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

javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2010年11月28日 01:24