Plaster

clike
// VirtualFilter.hpp class VirtualFilter : public Filter { public: unsigned int classID; static void (*mFilter)(unsigned int, unsigned int, unsigned int, float, time); static void (*mFilterChannel)(unsigned int, unsigned int, float, time, unsigned int, unsigned int); virtual FilterInstance *createInstance(); VirtualFilter(unsigned int classID); }; class VirtualFilterInstance : public FilterInstance { private: VirtualFilter *mParent; public: virtual void filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime); virtual void filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels); VirtualFilterInstance(VirtualFilter *parent); }; // VirtualFilter.cpp VirtualFilter::VirtualFilter(unsigned int classID){ this->classID = classID; } FilterInstance *VirtualFilter::createInstance(){ return new VirtualFilterInstance(this); } void VirtualFilterInstance::filter(float *aBuffer, unsigned int aSamples, unsigned int aChannels, float aSamplerate, time aTime){ this->mParent->mFilter(this->mParent->classID, aBuffer, aSamples, aChannels, aSamplerate, aTime); } void VirtualFilterInstance::filterChannel(float *aBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels){ this->mParent->mFilterChannel(this->mParent->classID, aBuffer, aSamples, aSamplerate, aTime, aChannel, aChannels); } // soloud_c.c void *VirtualFilter_create(unsigned int classID){ return (void *)new VirtualFilter(classID); } void VirtualFilter_destroy(void *virtualFilter){ delete (VirtualFilter *)virtualFilter; } void VirtualFilter_setFilterCallback(void *virtualFilter, void (*filter)){ ((VirtualFilter *)virtualFilter)->mFilter = filter; } void VirtualFilter_setFilterChannelCallback(void *virtualFilter, void (*filterChannel)){ ((VirtualFilter *)virtualFilter)->mFilterChannel = filterChannel; }