Effects managed with smart pointers

This commit is contained in:
Paul Licameli 2016-03-31 09:24:26 -04:00
parent a9afad17ca
commit 54402bf00d
2 changed files with 43 additions and 42 deletions

View File

@ -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<i> 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<Effect> BuiltinEffectsModule::Instantiate(const wxString & path)
{
wxASSERT(path.StartsWith(BUILTIN_EFFECT_PREFIX));
wxASSERT(mNames.Index(path) != wxNOT_FOUND);

View File

@ -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<Effect> Instantiate(const wxString & path);
private:
ModuleManagerInterface *mModMan;