J'ai besoin d'aide dans les classes imbriquées. Cela est issu d'une question que j'ai posée hereVST Classes imbriquées C++ - Construction et inclusion
Essentiellement, j'ai une classe 'myPlugin'. Cette classe est l'essentiel de mon programme et inclut la fonction 'processReplacing'.
Dans processReplacing j'ai besoin de filtrer le signal en utilisant DSP, actuellement j'utilise 11 filtres et cela a conduit à 11 filtres (et tous les tampons) codés en dur dans processReplacing.
Cependant, maintenant j'ai décidé de créer une classe de filtre, donc je peux créer une nouvelle instance pour chaque filtre, appeler si nécessaire et améliorer l'efficacité de mon code.
Jusqu'ici j'ai eu peu de succès. Mais maintenant j'utilise des classes imbriquées qui, si je peux me mettre au travail, devraient signifier que tout le reste devrait suivre.
définitions de classe dans l'en-tête sont:
class myPlugin : public AudioEffectX
{
public: myPlugin (audioMasterCallback AudioMaster); ~ monPlugin();
// 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;
}
};
}; # endif
Mon problème est alors que je ne peux pas initialiser correctement la classe de filtre. Le constructeur de 'myPlugin' ressemble à ceci (S'il vous plaît garder à l'esprit que ceci est une version très simplifiée du constructeur réel)
myPlugin::myPlugin (audioMasterCallback audioMaster)
: AudioEffectX (AudioMaster, 1, 1) // 1 programme, 1 paramètre seulement {
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();
}
myPlugin :: ~ myPlugin()
{}
Lorsque je tente ensuite et utiliser my_aFilter1L etc dans ProcessReplacing il jette l'erreur: « Erreur C2065: « my_aFilter1L »: identificateur non déclaré » et « erreur C2227: à gauche « -> aFilterMethodL » doit pointer vers la classe/struct/union/type générique "
J'ai essayé d'initialiser des valeurs stockées dans les classes de filtre du constructeur myPlugin. J'ai essayé de créer le constructeur de filtre myPlugin :: aFilter1L() ou aFilter1L :: aFilter1L() mais ceux-ci ont causé plus d'erreurs.
Vous ne savez pas exactement ce que je peux faire. J'ai déjà travaillé avec des classes/fonctions, mais jamais des classes imbriquées, donc un peu perdu. J'ai vu beaucoup de discussions en ligne et chaque réponse ne s'applique pas tout à fait; ou j'ai essayé les solutions que j'ai trouvées et elles n'ont pas fonctionné.
merci beaucoup! cela semble l'avoir résolu! veillera à voter votre réponse une fois que j'ai la réputation! –
@ Forge_13 de rien. codage heureux – justin