C++ VST C++;嵌套类-构造和包含
我需要一些嵌套类的帮助。这是我问的一个问题引起的 基本上我有一个类“myPlugin”。这个类是我程序的主要部分,包括“processReplacing”函数 在ProcessReplacement中,我需要使用DSP对信号进行滤波,目前我使用11个滤波器,这导致11个滤波器(以及所有缓冲器)被硬编码到ProcessReplacement中 但是,现在我决定创建一个过滤器类,这样我就可以为每个过滤器创建一个新实例,根据需要调用,并提高代码效率 到目前为止,我几乎没有成功。但现在我使用的是嵌套类,如果我能开始工作,这意味着所有其他类都应该效仿 标题中的类定义包括:C++ VST C++;嵌套类-构造和包含,c++,class,function,nested,vst,C++,Class,Function,Nested,Vst,我需要一些嵌套类的帮助。这是我问的一个问题引起的 基本上我有一个类“myPlugin”。这个类是我程序的主要部分,包括“processReplacing”函数 在ProcessReplacement中,我需要使用DSP对信号进行滤波,目前我使用11个滤波器,这导致11个滤波器(以及所有缓冲器)被硬编码到ProcessReplacement中 但是,现在我决定创建一个过滤器类,这样我就可以为每个过滤器创建一个新实例,根据需要调用,并提高代码效率 到目前为止,我几乎没有成功。但现在我使用的是嵌套类,
class myPlugin : public AudioEffectX
{
公众:
myPlugin(AudioMasterCallbackAudioMaster);
~myPlugin()
})#恩迪夫
我的问题是无法正确初始化筛选器类。“myPlugin”的构造函数如下所示(请记住,这是实际构造函数的一个非常简化的版本)
:AudioEffectX(audioMaster,1,1)//1个程序,仅1个参数
{
}
myPlugin::~myPlugin()
{
}
然后,当我尝试在ProcessReplacement中使用my_aFilter1L etc时,它会抛出错误:“错误C2065:‘my_aFilter1L’:未声明的标识符”和“错误C2227:“->aFilterMethodL”的左侧必须指向class/struct/union/generic type”
我尝试过初始化myPlugin构造函数中过滤器类中存储的值。我尝试过创建过滤器构造函数,即myPlugin::aFilter1L()或aFilter1L::aFilter1L(),但这些都会导致更多错误
不太确定我能做什么。我以前使用过类/函数,但从未使用过嵌套类,所以有点丢失。我在网上看到了很多帖子,但每个答案都不太适用;或者我尝试了我找到的解决方案,但都不起作用。您必须将它们添加到效果实例中,就像这样(复制到您的编辑器并在此处搜索LOOK):
嵌套类只是一个声明(有点像一个名称空间,但是您有一些关于可见性的附加选项)。在此范围内声明类不会自动添加过滤器,您仍然需要将它们声明为类的任何静态或实例变量。非常感谢!这似乎解决了问题!一旦我有了名声,我一定会投票支持你的答案!
// Processing
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
virtual void midiOutNoteOn (int iKey, int iVel);
virtual void midiOutNoteOff (int iKey, int iVel);
// Program
virtual void setProgramName (char* name);
virtual void getProgramName (char* name);
// Parameters
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 bool getEffectName (char* name);
virtual bool getVendorString (char* text);
virtual bool getProductString (char* text);
virtual VstInt32 getVendorVersion ();
virtual VstInt32 canDo (char* text);
class aFilterL
{
friend class myPlugin;
public:
aFilterL ();
~aFilterL ();
float fOut1_l;
float filterOut1_l;
float Out_1_l;
float Out_2_l;
float* buffer_Out_1_l;
float* buffer_Out_2_l;
virtual float aFilterMethodL (float a0, float a1, float a2, float b1, float b2, float inputL, float prevInput1L, float prevInput2L)
{
Out_1_l = buffer_Out_1_l[0];
Out_2_l = buffer_Out_2_l[0];
filterOut1_l = (a0 * inputL) + (a1 * prevInput1L) + (a2 * prevInput2L) - (b1 * Out_1_l) - (b2 * Out_2_l) + 1.0E-25;
fOut1_l = filterOut1_l;
buffer_Out_2_l[0] = buffer_Out_1_l[0];
buffer_Out_1_l[0] = fOut1_l;
return fOut1_l;
}
};
class aFilterR
{
friend class myPlugin;
public:
aFilterR ();
~aFilterR ();
float fOut1_r;
float filterOut1_r;
float Out_1_r;
float Out_2_r;
float* buffer_Out_1_r;
float* buffer_Out_2_r;
virtual float aFilterMethodR (float a0, float a1, float a2, float b1, float b2, float inputR, float prevInput1R, float prevInput2R)
{
Out_1_r = buffer_Out_1_r[0];
Out_2_r = buffer_Out_2_r[0];
filterOut1_r = (a0 * inputR) + (a1 * prevInput1R) + (a2 * prevInput2R) - (b1 * Out_1_r) - (b2 * Out_2_r) + 1.0E-25;
fOut1_r = filterOut1_r;
buffer_Out_2_r[0] = buffer_Out_1_r[0];
buffer_Out_1_r[0] = fOut1_r;
return fOut1_r;
}
};
myPlugin::myPlugin (audioMasterCallback audioMaster)
setNumInputs (2); // stereo in
setNumOutputs (2); // stereo out
setUniqueID ('Gain'); // identify
canProcessReplacing (); // supports replacing output
canDoubleReplacing (); // supports double precision processing
myPlugin *my_aFilter1L = new aFilterL();
myPlugin *my_aFilter1R = new aFilterR();
class myPlugin : public AudioEffectX {
public:
myPlugin (audioMasterCallback audioMaster);
~myPlugin ();
// Processing
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
virtual void midiOutNoteOn (int iKey, int iVel);
virtual void midiOutNoteOff (int iKey, int iVel);
// Program
virtual void setProgramName (char* name);
virtual void getProgramName (char* name);
// Parameters
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 bool getEffectName (char* name);
virtual bool getVendorString (char* text);
virtual bool getProductString (char* text);
virtual VstInt32 getVendorVersion ();
virtual VstInt32 canDo (char* text);
class aFilterL
{
friend class myPlugin;
public:
aFilterL ();
~aFilterL ();
float fOut1_l;
float filterOut1_l;
float Out_1_l;
float Out_2_l;
float* buffer_Out_1_l;
float* buffer_Out_2_l;
virtual float aFilterMethodL (float a0, float a1, float a2, float b1, float b2, float inputL, float prevInput1L, float prevInput2L)
{
Out_1_l = buffer_Out_1_l[0];
Out_2_l = buffer_Out_2_l[0];
filterOut1_l = (a0 * inputL) + (a1 * prevInput1L) + (a2 * prevInput2L) - (b1 * Out_1_l) - (b2 * Out_2_l) + 1.0E-25;
fOut1_l = filterOut1_l;
buffer_Out_2_l[0] = buffer_Out_1_l[0];
buffer_Out_1_l[0] = fOut1_l;
return fOut1_l;
}
};
class aFilterR
{
friend class myPlugin;
public:
aFilterR ();
~aFilterR ();
float fOut1_r;
float filterOut1_r;
float Out_1_r;
float Out_2_r;
float* buffer_Out_1_r;
float* buffer_Out_2_r;
virtual float aFilterMethodR (float a0, float a1, float a2, float b1, float b2, float inputR, float prevInput1R, float prevInput2R)
{
Out_1_r = buffer_Out_1_r[0];
Out_2_r = buffer_Out_2_r[0];
filterOut1_r = (a0 * inputR) + (a1 * prevInput1R) + (a2 * prevInput2R) - (b1 * Out_1_r) - (b2 * Out_2_r) + 1.0E-25;
fOut1_r = filterOut1_r;
buffer_Out_2_r[0] = buffer_Out_1_r[0];
buffer_Out_1_r[0] = fOut1_r;
return fOut1_r;
}
};
/* LOOK HERE */
private:
aFilterL filterL;
aFilterR filterR;
};
myPlugin::myPlugin (audioMasterCallback audioMaster) : AudioEffectX (audioMaster, 1, 1), filterL(), /* LOOK HERE */ filterR() /* LOOK HERE */ {
setNumInputs (2); // stereo in
setNumOutputs (2); // stereo out
setUniqueID ('Gain'); // identify
canProcessReplacing (); // supports replacing output
canDoubleReplacing (); // supports double precision processing
/* LOOK HERE */
//myPlugin *my_aFilter1L = new aFilterL();
//myPlugin *my_aFilter1R = new aFilterR();
}