diff --git a/src/effects/LoadEffects.cpp b/src/effects/LoadEffects.cpp index 1e9961478..fc9c56d3e 100644 --- a/src/effects/LoadEffects.cpp +++ b/src/effects/LoadEffects.cpp @@ -12,6 +12,7 @@ #include "../Prefs.h" #include "LoadEffects.h" +#include "../MemoryX.h" #include "EffectManager.h" @@ -64,8 +65,8 @@ // #if defined(USE_SOUNDTOUCH) #define SOUNDTOUCH_EFFECTS \ - EFFECT( CHANGEPITCH, EffectChangePitch() ) \ - EFFECT( CHANGETEMPO, EffectChangeTempo() ) + EFFECT( CHANGEPITCH, EffectChangePitch, () ) \ + EFFECT( CHANGETEMPO, EffectChangeTempo, () ) #else #define SOUNDTOUCH_EFFECTS #endif @@ -75,7 +76,7 @@ // #if defined(EXPERIMENTAL_NOISE_REDUCTION) #define NOISEREDUCTION_EFFECT \ - EFFECT( NOISEREDUCTION, EffectNoiseReduction() ) + EFFECT( NOISEREDUCTION, EffectNoiseReduction, () ) #else #define NOISEREDUCTION_EFFECT \ EFFECT( NOISEREMOVAL, EffectNoiseRemoval() ) @@ -86,7 +87,7 @@ // #if defined(EXPERIMENTAL_SCIENCE_FILTERS) #define CLASSICFILTER_EFFECT \ - EFFECT( CLASSICFILTERS, EffectScienFilter() ) + EFFECT( CLASSICFILTERS, EffectScienFilter, () ) #else #define CLASSICFILTER_EFFECT #endif @@ -96,7 +97,7 @@ // #if defined(USE_SBSMS) #define SBSMS_EFFECTS \ - EFFECT( TIMESCALE, EffectTimeScale() ) + EFFECT( TIMESCALE, EffectTimeScale, () ) #else #define SBSMS_EFFECTS #endif @@ -105,36 +106,36 @@ // Define the list of effects that will be autoregistered and how to instantiate each // #define EFFECT_LIST \ - EFFECT( CHIRP, EffectToneGen(true) ) \ - EFFECT( DTMFTONES, EffectDtmf() ) \ - EFFECT( NOISE, EffectNoise() ) \ - EFFECT( SILENCE, EffectSilence() ) \ - EFFECT( TONE, EffectToneGen(false) ) \ - EFFECT( AMPLIFY, EffectAmplify() ) \ - EFFECT( BASSTREBLE, EffectBassTreble() ) \ - EFFECT( CHANGESPEED, EffectChangeSpeed() ) \ - EFFECT( CLICKREMOVAL, EffectClickRemoval() ) \ - EFFECT( COMPRESSOR, EffectCompressor() ) \ - EFFECT( ECHO, EffectEcho() ) \ - EFFECT( EQUALIZATION, EffectEqualization() ) \ - EFFECT( FADEIN, EffectFade(true) ) \ - EFFECT( FADEOUT, EffectFade(false) ) \ - EFFECT( INVERT, EffectInvert() ) \ - EFFECT( NORMALIZE, EffectNormalize() ) \ - EFFECT( PHASER, EffectPhaser() ) \ - EFFECT( REPAIR, EffectRepair() ) \ - EFFECT( REPEAT, EffectRepeat() ) \ - EFFECT( REVERB, EffectReverb() ) \ - EFFECT( REVERSE, EffectReverse() ) \ - EFFECT( STEREOTOMONO, EffectStereoToMono() ) \ - EFFECT( TRUNCATESILENCE, EffectTruncSilence() ) \ - EFFECT( WAHWAH, EffectWahwah() ) \ - EFFECT( FINDCLIPPING, EffectFindClipping() ) \ + EFFECT( CHIRP, EffectToneGen, (true) ) \ + EFFECT( DTMFTONES, EffectDtmf, () ) \ + EFFECT( NOISE, EffectNoise, () ) \ + EFFECT( SILENCE, EffectSilence, () ) \ + EFFECT( TONE, EffectToneGen, (false) ) \ + EFFECT( AMPLIFY, EffectAmplify, () ) \ + EFFECT( BASSTREBLE, EffectBassTreble, () ) \ + EFFECT( CHANGESPEED, EffectChangeSpeed, () ) \ + EFFECT( CLICKREMOVAL, EffectClickRemoval, () ) \ + EFFECT( COMPRESSOR, EffectCompressor, () ) \ + EFFECT( ECHO, EffectEcho, () ) \ + EFFECT( EQUALIZATION, EffectEqualization, () ) \ + EFFECT( FADEIN, EffectFade, (true) ) \ + EFFECT( FADEOUT, EffectFade, (false) ) \ + EFFECT( INVERT, EffectInvert, () ) \ + EFFECT( NORMALIZE, EffectNormalize, () ) \ + EFFECT( PHASER, EffectPhaser, () ) \ + EFFECT( REPAIR, EffectRepair, () ) \ + EFFECT( REPEAT, EffectRepeat, () ) \ + EFFECT( REVERB, EffectReverb, () ) \ + EFFECT( REVERSE, EffectReverse, () ) \ + EFFECT( STEREOTOMONO, EffectStereoToMono, () ) \ + EFFECT( TRUNCATESILENCE, EffectTruncSilence, () ) \ + EFFECT( WAHWAH, EffectWahwah, () ) \ + EFFECT( FINDCLIPPING, EffectFindClipping, () ) \ NOISEREDUCTION_EFFECT \ SOUNDTOUCH_EFFECTS \ - EFFECT( AUTODUCK, EffectAutoDuck() ) \ - EFFECT( LEVELLER, EffectLeveller() ) \ - EFFECT( PAULSTRETCH, EffectPaulstretch() ) \ + EFFECT( AUTODUCK, EffectAutoDuck, () ) \ + EFFECT( LEVELLER, EffectLeveller, () ) \ + EFFECT( PAULSTRETCH, EffectPaulstretch, () ) \ SBSMS_EFFECTS // @@ -146,7 +147,7 @@ // // Define the EFFECT() macro to generate enum names // -#define EFFECT(n, i) ENUM_ ## n, +#define EFFECT(n, i, args) ENUM_ ## n, // // Create the enum for the list of effects (will be used in a switch statement) @@ -161,7 +162,7 @@ enum // Redefine EFFECT() to add the effect's name to an array // #undef EFFECT -#define EFFECT(n, i) n ## _PLUGIN_SYMBOL, +#define EFFECT(n, i, args) n ## _PLUGIN_SYMBOL, // // Create the effect name array @@ -183,7 +184,7 @@ static const wxChar *kExcludedNames[] = // Redefine EFFECT() to generate a case statement for the lookup switch // #undef EFFECT -#define EFFECT(n, i) case ENUM_ ## n: return new i; +#define EFFECT(n, i, args) case ENUM_ ## n: return std::make_unique args; // ============================================================================ // Module registration entry point @@ -309,11 +310,10 @@ wxArrayString BuiltinEffectsModule::FindPlugins(PluginManagerInterface & WXUNUSE bool BuiltinEffectsModule::RegisterPlugin(PluginManagerInterface & pm, const wxString & path) { - Effect *effect = Instantiate(path); + auto effect = Instantiate(path); if (effect) { - pm.RegisterPlugin(this, effect); - delete effect; + pm.RegisterPlugin(this, effect.get()); return true; } @@ -329,7 +329,7 @@ IdentInterface *BuiltinEffectsModule::CreateInstance(const wxString & path) { // Acquires a resource for the application. // Safety of this depends on complementary calls to DeleteInstance on the module manager side. - return Instantiate(path); + return Instantiate(path).release(); } void BuiltinEffectsModule::DeleteInstance(IdentInterface *instance) @@ -344,7 +344,7 @@ void BuiltinEffectsModule::DeleteInstance(IdentInterface *instance) // BuiltinEffectsModule implementation // ============================================================================ -Effect *BuiltinEffectsModule::Instantiate(const wxString & path) +std::unique_ptr BuiltinEffectsModule::Instantiate(const wxString & path) { wxASSERT(path.StartsWith(BUILTIN_EFFECT_PREFIX)); wxASSERT(mNames.Index(path) != wxNOT_FOUND); diff --git a/src/effects/LoadEffects.h b/src/effects/LoadEffects.h index 7693357bc..566983095 100644 --- a/src/effects/LoadEffects.h +++ b/src/effects/LoadEffects.h @@ -13,6 +13,7 @@ #include "audacity/PluginInterface.h" #include "Effect.h" +#include "../MemoryX.h" /////////////////////////////////////////////////////////////////////////////// // @@ -52,7 +53,7 @@ public: private: // BuiltinEffectModule implementation - Effect *Instantiate(const wxString & path); + std::unique_ptr Instantiate(const wxString & path); private: ModuleManagerInterface *mModMan;