VST Tips(準備中)


VST GUIの作成

VST GUIのウィンドウが開かれるだけのサンプルです。

プロジェクトの作成時は以下のソースファイルもプロジェクトに加える必要がある。
(プロジェクトへの追加方法は「VC++ プロジェクトの準備 No.2」参照)

  • vstcontrols.cpp
  • vstgui.cpp
  • aeffguieditor.cpp
(vstsdk2.4\vstgui.sf\vstgui 配下に保存されている。)

つまみを追加したサンプルはここ
つまみをスライダーに変更したサンプルはここ

サンプルコード全体

  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 1 //パラメータの数
  30.  
  31. float midinum;
  32. // ============================================================================================
  33. // VST GUIクラス
  34. // ============================================================================================
  35. class VstGui : public AEffGUIEditor, CControlListener
  36. {
  37. public:
  38. VstGui (void* effect);
  39. virtual ~VstGui ();
  40.  
  41. // GUIのWindowを開いたときと閉じたときに処理を行う関数
  42. virtual bool open (void *ptr);
  43. virtual void close ();
  44.  
  45. // ボタンやつまみ等が動かされたときに処理を行う関数
  46. virtual void valueChanged (CDrawContext *pContext, CControl *pControl);
  47.  
  48. protected:
  49. };
  50.  
  51. VstGui::VstGui (void* effect)
  52. : AEffGUIEditor ((AudioEffect*)effect)
  53. {
  54. // 継承元のにあるrect変数を初期化。
  55. // このrect変数にGUIのWindowsサイズを設定する。
  56. // (設定を行わないとWindowが開けない)
  57. rect.left = 0;
  58. rect.top = 0;
  59. rect.right = 512;
  60. rect.bottom = 256;
  61. }
  62.  
  63. VstGui::~VstGui ()
  64. {
  65. }
  66.  
  67. void VstGui::valueChanged (CDrawContext *pContext, CControl *pControl)
  68. {
  69. }
  70.  
  71.  
  72. bool VstGui::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. // 処理に問題がなければtrueを返す
  87. return true;
  88. }
  89.  
  90. void VstGui::close ()
  91. {
  92. // frameをdeleteすることを忘れないようにする
  93. if (frame)
  94. {
  95. delete frame;
  96. }
  97. frame = 0;
  98. }
  99.  
  100. // ============================================================================================
  101. // VSTの基本となるクラス
  102. // ============================================================================================
  103. class MyVSTGUI : public AudioEffectX
  104. {
  105. public:
  106. MyVSTGUI (audioMasterCallback audioMaster);
  107. ~MyVSTGUI ();
  108.  
  109. virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
  110. };
  111.  
  112. // ============================================================================================
  113. // このVSTのを生成するための関数
  114. // ============================================================================================
  115. AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
  116. {
  117. //newでこのVSTを生成したポインタを返す
  118. return new MyVSTGUI (audioMaster);
  119. }
  120.  
  121. // ============================================================================================
  122. // コンストラクタ、デストラクタ(VSTの初期化、終了処理を記述)
  123. // ============================================================================================
  124. MyVSTGUI::MyVSTGUI (audioMasterCallback audioMaster)
  125. : AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM)
  126. {
  127. //VSTの初期化を行う。
  128.  
  129. //以下の関数を呼び出して入力数、出力数等の情報を設定する。
  130. //必ず呼び出さなければならない。
  131. setNumInputs (MY_VST_INPUT_NUM); //入力数の設定
  132. setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定
  133. setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定
  134.  
  135. isSynth (false); //このVSTがSynthかどうかのフラグを設定。
  136. //Synthの場合…true、Effectorの場合…false
  137.  
  138. canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。
  139. //音声処理を行わないVSTはないので必ずこの関数を呼び出す。
  140.  
  141. // GUIを設定する
  142. editor = new VstGui(this);
  143.  
  144. //このVSTのパラメータを初期化する。
  145. }
  146.  
  147. MyVSTGUI::~MyVSTGUI ()
  148. {
  149. //VSTの終了処理をする。
  150. //このVSTでは特に実行する処理はなし。
  151.  
  152. // GUIはdeleteしなくていいっぽい
  153. }
  154.  
  155. // ============================================================================================
  156. // 音声信号を処理するメンバー関数
  157. // ============================================================================================
  158. void MyVSTGUI::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
  159. {
  160. float *inL = inputs[0]; //入力 左用
  161. float *inR = inputs[1]; //入力 右用
  162. float *outL = outputs[0]; //出力 左用
  163. float *outR = outputs[1]; //出力 右用
  164.  
  165. for (int i = 0; i <sampleFrames ; i++)
  166. {
  167. // 入力をそのまま出力へ
  168. outL[i] = inL[i];
  169. outR[i] = inR[i];
  170. }
  171. }





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