トップページ


VST GUIの作成

VST GUIのウィンドウが開かれるだけのサンプルにテキストラベルを追加したもの。
追加内容としては以下のとおり。

  • テキストラベルクラスCTextLabelクラス)へのポインターをGUIクラスの変数として定義
  • GUIクラスのopen()関数にテキストラベルを作成するコードの追加

なお作成したVSTは以下のとおり。(DLLファイルを利用するときはウィルスチェックをかけてください)

サンプルコード全体

【MyGuiVst2.cpp】
  1. #define _CRT_SECURE_NO_DEPRECATE 1
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <math.h>
  7. #include <windows.h>
  8.  
  9. #include "audioeffectx.h"
  10. #include "vstcontrols.h"
  11.  
  12.  
  13. // ============================================================================================
  14. // 設計情報の記入
  15. // ============================================================================================
  16. #define MY_VST_VENDOR "test vendor" //作者(ベンダー)名
  17. #define MY_VST_VERSION 1 //このVSTバージョン
  18. #define MY_VST_PRODUCT_NAME "Sample VST GUI" //このVSTの製品名
  19. #define MY_VST_NAME "GUI" //このVSTの名前
  20.  
  21. #define MY_VST_INPUT_NUM 2 //入力数。モノラル入力=1、ステレオ入力=2
  22. #define MY_VST_OUTPUT_NUM 2 //出力数。モノラル出力=1、ステレオ出力=2
  23.  
  24. #define MY_VST_UNIQUE_ID 'SMPL' //ユニークID
  25. //公開する場合は以下URLで発行されたユニークIDを入力する。
  26. //http://ygrabit.steinberg.de/~ygrabit/public_html/index.html
  27.  
  28. #define MY_VST_PRESET_NUM 1 //プリセットプログラムの数
  29. #define MY_VST_PARAMETER_NUM 2 //パラメータの数
  30.  
  31. #define MYVST_VOLUME_L 0
  32. #define MYVST_VOLUME_R 1
  33. // ============================================================================================
  34. // VST GUIクラス
  35. // ============================================================================================
  36. class VstGui4 : public AEffGUIEditor, CControlListener
  37. {
  38. public:
  39. VstGui4 (void* effect);
  40. virtual ~VstGui4 ();
  41.  
  42. // GUIのWindowを開いたときと閉じたときに処理を行う関数
  43. virtual bool open (void *ptr);
  44. virtual void close ();
  45.  
  46. // ボタンやつまみ等が動かされたときに処理を行う関数
  47. // 今回はテキストラベルのみのため、処理すべきことはないが、
  48. // valueChanged()関数は必ずオーバーライドしなければならない。
  49. virtual void valueChanged (CDrawContext *pContext, CControl *pControl) {};
  50.  
  51. protected:
  52. // テキストラベル
  53. CTextLabel* textLabel;
  54. };
  55.  
  56. VstGui4::VstGui4 (void* effect)
  57. : AEffGUIEditor ((AudioEffect*)effect)
  58. {
  59. // 継承元のにあるrect変数を初期化。
  60. // このrect変数にGUIのWindowsサイズを設定する。
  61. // (設定を行わないとWindowが開けない)
  62. rect.left = 0;
  63. rect.top = 0;
  64. rect.right = 512;
  65. rect.bottom = 256;
  66. }
  67.  
  68. VstGui4::~VstGui4 ()
  69. {
  70. }
  71.  
  72. bool VstGui4::open (void *ptr)
  73. {
  74. // まずは継承元の関数を呼び出す(必須)
  75. AEffGUIEditor::open (ptr);
  76.  
  77. // 次にフレーム(CFrame)を作成する。
  78. // ボタンやつまみ等はこのフレームの上に配置する形になる
  79. // ここではWindowと同じサイズのフレームを作成している
  80. CRect size (rect.left, rect.top, rect.right, rect.bottom);
  81.  
  82. CFrame* cframe = new CFrame (size, ptr, this);
  83. // 作成したフレームは継承元にあるframe変数に値を保存する必要がある。
  84. this->frame = cframe;
  85.  
  86. // -----------------------------------------------------------------
  87. // テキストラベルの大きさを設定
  88. CRect textsize (0, 0, 80, 25);
  89.  
  90. // テキストラベルの位置を設定
  91. textsize.offset (16, 16);
  92.  
  93. // テキストラベルを作成
  94. textLabel = new CTextLabel(textsize, "TextLabel", NULL, kLeft);
  95.  
  96. // テキストラベルをframeに追加する
  97. frame->addView (textLabel);
  98.  
  99. // 処理に問題がなければtrueを返す
  100. return true;
  101. }
  102.  
  103. void VstGui4::close ()
  104. {
  105. // frameをdeleteすることを忘れないようにする
  106. if (frame)
  107. {
  108. delete frame;
  109. }
  110. frame = 0;
  111. }
  112.  
  113. // ============================================================================================
  114. // VSTの基本となるクラス
  115. // ============================================================================================
  116. class MyVstGui4 : public AudioEffectX
  117. {
  118. public:
  119. MyVstGui4 (audioMasterCallback audioMaster);
  120. ~MyVstGui4 ();
  121.  
  122. // 音声信号を処理するメンバー関数
  123. virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
  124. };
  125.  
  126. // ============================================================================================
  127. // このVSTのを生成するための関数
  128. // ============================================================================================
  129. AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
  130. {
  131. //newでこのVSTを生成したポインタを返す
  132. return new MyVstGui4 (audioMaster);
  133. }
  134.  
  135. // ============================================================================================
  136. // コンストラクタ、デストラクタ(VSTの初期化、終了処理を記述)
  137. // ============================================================================================
  138. MyVstGui4::MyVstGui4 (audioMasterCallback audioMaster)
  139. : AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM)
  140. {
  141. //VSTの初期化を行う。
  142.  
  143. //以下の関数を呼び出して入力数、出力数等の情報を設定する。
  144. //必ず呼び出さなければならない。
  145. setNumInputs (MY_VST_INPUT_NUM); //入力数の設定
  146. setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定
  147. setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定
  148.  
  149. isSynth (false); //このVSTがSynthかどうかのフラグを設定。
  150. //Synthの場合…true、Effectorの場合…false
  151.  
  152. canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。
  153. //音声処理を行わないVSTはないので必ずこの関数を呼び出す。
  154.  
  155. // GUIを設定する
  156. editor = new VstGui4(this);
  157.  
  158. //このVSTのパラメータを初期化する。
  159. }
  160.  
  161. MyVstGui4::~MyVstGui4 ()
  162. {
  163. //VSTの終了処理をする。
  164. //このVSTでは特に実行する処理はなし。
  165.  
  166. // GUIはdeleteしなくていいっぽい
  167. }
  168.  
  169. // ============================================================================================
  170. // 音声信号を処理するメンバー関数
  171. // ============================================================================================
  172. void MyVstGui4::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
  173. {
  174. float *inL = inputs[0]; //入力 左用
  175. float *inR = inputs[1]; //入力 右用
  176. float *outL = outputs[0]; //出力 左用
  177. float *outR = outputs[1]; //出力 右用
  178.  
  179. for (int i = 0; i <sampleFrames ; i++)
  180. {
  181. // 入力をそのまま出力へ
  182. outL[i] = inL[i];
  183. outR[i] = inR[i];
  184. }
  185. }





javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2012年12月02日 16:08