ホームに戻る
/*
nmVst2 サンプルの解説
2プログラム、2パラメーターの例
setProgram はホストアプリ内でプログラムを切り替える際に呼ばれる。
curProgram がどこかで定義されているで現在のプログラム番号を入れておく。
setProgramName と getProgramName は curProgram を使って設定。
resume はプラグインのスイッチオン時に呼ばれる。
おもにバッファのクリアなどを行う。
setParameter と getParameter はパラメーターを扱う。
引数が index を持ってくるので適切な対処をする。
fParam と programs[curProgram].fParam の値は同じであるはずなので、
常に SetParameter を使うように心がけると良いかもしれない。
getParameterLabel、getParameterDisplay、getParameterName
はデータを渡すのみなのでそれほど難しく無い。
Microsoft Visual C++ 2008
vst_sdk 2.4 を使用
*/
#include <stdio.h>
#include "audioeffectx.h"
enum{
kParam1 = 0,
kParam2,
kNumParams
};
class nmVst2;
class nmVst2Program{
friend class nmVst2;
public:
nmVst2Program();
~nmVst2Program(){}
private:
float fParam1;
float fParam2;
char name[24]; // 24文字まで
};
class nmVst2 : public AudioEffectX{
public:
nmVst2(audioMasterCallback audioMaster);
~nmVst2();
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void setProgram (VstInt32 program);
virtual void setProgramName (char* name);
virtual void getProgramName (char* name);
virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text);
virtual void setParameter (VstInt32 index, float value);
virtual float getParameter (VstInt32 index);
virtual void getParameterLabel (VstInt32 index, char* label);
virtual void getParameterDisplay (VstInt32 index, char* text);
virtual void getParameterName (VstInt32 index, char* text);
virtual void resume();
virtual VstPlugCategory getPlugCategory(){return kPlugCategEffect;} // Simple Effect であることを返す
protected:
nmVst2Program* programs;
float fParam1;
float fParam2;
};
nmVst2Program::nmVst2Program(){
fParam1 = 1.;
fParam2 = 1.;
strcpy(this->name, "Default");
}
AudioEffect* createEffectInstance(audioMasterCallback audioMaster){
return new nmVst2(audioMaster);
}
nmVst2::nmVst2(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 2, 2){
programs = new nmVst2Program[2];
fParam1 = 1.f;
fParam2 = 1.f;
programs[0].fParam1 = 1.;
programs[0].fParam2 = 1.;
programs[1].fParam1 = .5;
programs[1].fParam2 = .5;
if(programs){
// 現在のプログラムを 0 に
setProgram(0);
}
setNumInputs(2);
setNumOutputs(2);
setUniqueID ('nmV2');
resume ();
}
nmVst2::~nmVst2(){
if(programs){
delete [] programs;
}
}
void nmVst2::setProgram(VstInt32 program){
nmVst2Program* ap = &programs[program];
curProgram = program;
setParameter(kParam1, ap->fParam1);
setParameter(kParam2, ap->fParam2);
}
void nmVst2::setProgramName(char *name){
strcpy(programs[curProgram].name, name);
}
void nmVst2::getProgramName(char *name){
if(!strcmp (programs[curProgram].name, "Default")){
sprintf (name, "%s %02d", programs[curProgram].name, curProgram + 1);
}
else{
strcpy (name, programs[curProgram].name);
}
}
bool nmVst2::getProgramNameIndexed(VstInt32 category, VstInt32 index, char* text){
if(index < 2){
strcpy(text, programs[index].name);
return true;
}
return false;
}
void nmVst2::resume(){
AudioEffectX::resume();
}
void nmVst2::setParameter(VstInt32 index, float value){
nmVst2Program* ap = &programs[curProgram];
switch(index){
case kParam1:
fParam1 = ap->fParam1 = value;
break;
case kParam2:
fParam2 = ap->fParam2 = value;
break;
}
}
float nmVst2::getParameter(VstInt32 index){
float v = 0;
switch(index){
case kParam1:
v = fParam1;
break;
case kParam2:
v = fParam2;
break;
}
return v;
}
void nmVst2::getParameterName(VstInt32 index, char *label){
switch(index){
case kParam1:
strcpy(label, "Param1");
break;
case kParam2:
strcpy(label, "Param2");
break;
}
}
void nmVst2::getParameterDisplay (VstInt32 index, char *text){
switch(index){
case kParam1:
dB2string(fParam1, text, kVstMaxParamStrLen);
break;
case kParam2:
dB2string(fParam2, text, kVstMaxParamStrLen);
break;
}
}
void nmVst2::getParameterLabel(VstInt32 index, char *label){
switch(index){
case kParam1:
strcpy(label, "Param1");
break;
case kParam2:
strcpy(label, "Param2");
break;
}
}
void nmVst2::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames){
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
while (--sampleFrames >= 0){
(*out1++) = (*in1++) * fParam1 * fParam2;
(*out2++) = (*in2++) * fParam1 * fParam2;
}
}