2010-01-23 19:44:49 +00:00
|
|
|
/**********************************************************************
|
|
|
|
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
|
|
|
|
PluginManager.h
|
|
|
|
|
|
|
|
Leland Lucius
|
|
|
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#ifndef __AUDACITY_PLUGINMANAGER_H__
|
|
|
|
#define __AUDACITY_PLUGINMANAGER_H__
|
|
|
|
|
|
|
|
#include <wx/defs.h>
|
|
|
|
#include <wx/dynarray.h>
|
|
|
|
#include <wx/fileconf.h>
|
|
|
|
#include <wx/string.h>
|
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
#include <map>
|
|
|
|
|
|
|
|
#include "audacity/EffectInterface.h"
|
|
|
|
#include "audacity/ImporterInterface.h"
|
|
|
|
#include "audacity/ModuleInterface.h"
|
|
|
|
#include "audacity/PluginInterface.h"
|
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// PluginManager
|
|
|
|
//
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
PluginTypeNone,
|
|
|
|
PluginTypeEffect,
|
|
|
|
PluginTypeExporter,
|
|
|
|
PluginTypeImporter,
|
|
|
|
PluginTypeModule,
|
2010-01-23 19:44:49 +00:00
|
|
|
} PluginType;
|
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
// TODO: Convert this to multiple derived classes
|
|
|
|
class PluginDescriptor
|
2010-01-23 19:44:49 +00:00
|
|
|
{
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
public:
|
|
|
|
PluginDescriptor();
|
|
|
|
virtual ~PluginDescriptor();
|
|
|
|
|
|
|
|
void *GetInstance();
|
|
|
|
void SetInstance(void *instance);
|
|
|
|
|
|
|
|
PluginType GetPluginType() const;
|
|
|
|
void SetPluginType(PluginType type);
|
|
|
|
|
|
|
|
// All plugins
|
|
|
|
const wxString & GetID() const;
|
|
|
|
const wxString & GetPath() const;
|
|
|
|
const wxString & GetName() const;
|
|
|
|
const wxString & GetVersion() const;
|
|
|
|
const wxString & GetVendor() const;
|
|
|
|
const wxString & GetDescription() const;
|
|
|
|
const wxString & GetProviderID() const;
|
|
|
|
const wxString & GetDateTime() const;
|
|
|
|
bool IsEnabled() const;
|
|
|
|
|
|
|
|
void SetID(const PluginID & ID);
|
|
|
|
void SetPath(const wxString & path);
|
|
|
|
void SetName(const wxString & name);
|
|
|
|
void SetVersion(const wxString & version);
|
|
|
|
void SetVendor(const wxString & vendor);
|
|
|
|
void SetDescription(const wxString & description);
|
|
|
|
void SetProviderID(const PluginID & providerID);
|
|
|
|
void SetDateTime(const wxString & dateTime);
|
|
|
|
void SetEnabled(bool enable);
|
|
|
|
|
|
|
|
wxString GetMenuName() const;
|
|
|
|
|
|
|
|
// Effect plugins only
|
|
|
|
|
|
|
|
EffectType GetEffectType() const;
|
|
|
|
const wxString & GetEffectFamily() const;
|
|
|
|
bool IsEffectDefault() const;
|
|
|
|
bool IsEffectInteractive() const;
|
|
|
|
bool IsEffectLegacy() const;
|
|
|
|
bool IsEffectRealtimeCapable() const;
|
|
|
|
|
|
|
|
void SetEffectType(EffectType type);
|
|
|
|
void SetEffectFamily(const wxString & family);
|
|
|
|
void SetEffectDefault(bool dflt);
|
|
|
|
void SetEffectInteractive(bool interactive);
|
|
|
|
void SetEffectLegacy(bool legacy);
|
|
|
|
void SetEffectRealtimeCapable(bool realtime);
|
|
|
|
|
|
|
|
// Importer plugins only
|
|
|
|
|
|
|
|
const wxString & GetImporterIdentifier() const;
|
|
|
|
const wxString & GetImporterFilterDescription() const;
|
|
|
|
const wxArrayString & GetImporterExtensions() const;
|
|
|
|
|
|
|
|
void SetImporterIdentifier(const wxString & identifier);
|
|
|
|
void SetImporterFilterDescription(const wxString & filterDesc);
|
|
|
|
void SetImporterExtensions(const wxArrayString & extensions);
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
// Common
|
|
|
|
|
|
|
|
void *mInstance;
|
|
|
|
|
|
|
|
PluginType mPluginType;
|
|
|
|
|
|
|
|
wxString mID;
|
|
|
|
wxString mPath;
|
|
|
|
wxString mName;
|
|
|
|
wxString mVersion;
|
|
|
|
wxString mVendor;
|
|
|
|
wxString mDescription;
|
|
|
|
wxString mProviderID;
|
|
|
|
wxString mDateTime;
|
|
|
|
bool mEnabled;
|
|
|
|
|
|
|
|
// Effects
|
|
|
|
|
|
|
|
wxString mEffectFamily;
|
|
|
|
EffectType mEffectType;
|
|
|
|
bool mEffectInteractive;
|
|
|
|
bool mEffectDefault;
|
|
|
|
bool mEffectLegacy;
|
|
|
|
bool mEffectRealtimeCapable;
|
|
|
|
|
|
|
|
// Importers
|
|
|
|
wxString mImporterIdentifier;
|
|
|
|
wxString mImporterFilterDesc;
|
|
|
|
wxArrayString mImporterExtensions;
|
|
|
|
};
|
|
|
|
|
|
|
|
//WX_DECLARE_STRING_HASH_MAP(PluginDescriptor, PluginMap);
|
|
|
|
typedef std::map<PluginID, PluginDescriptor> PluginMap;
|
|
|
|
typedef wxArrayString PluginIDList;
|
|
|
|
|
|
|
|
class PluginManager : public PluginManagerInterface
|
|
|
|
{
|
|
|
|
public:
|
2010-01-23 19:44:49 +00:00
|
|
|
PluginManager();
|
|
|
|
virtual ~PluginManager();
|
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
// PluginManagerInterface implementation
|
|
|
|
|
|
|
|
void RegisterModulePlugin(IdentInterface *module);
|
|
|
|
void RegisterEffectPlugin(IdentInterface *provider, EffectIdentInterface *effect);
|
|
|
|
void RegisterImporterPlugin(IdentInterface *provider, ImporterInterface *importer);
|
|
|
|
|
|
|
|
void FindFilesInPathList(const wxString & pattern,
|
|
|
|
const wxArrayString & pathList,
|
|
|
|
wxArrayString & files,
|
|
|
|
bool directories = false);
|
|
|
|
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, wxString & value, const wxString & defval = _T(""));
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, int & value, int defval = 0);
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, bool & value, bool defval = false);
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, float & value, float defval = 0.0);
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, double & value, double defval = 0.0);
|
|
|
|
virtual bool GetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, sampleCount & value, sampleCount defval = 0);
|
|
|
|
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const wxString & value);
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const int & value);
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const bool & value);
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const float & value);
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const double & value);
|
|
|
|
virtual bool SetSharedConfig(const PluginID & ID, const wxString & group, const wxString & key, const sampleCount & value);
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, wxString & value, const wxString & defval = _T(""));
|
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, int & value, int defval = 0);
|
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, bool & value, bool defval = false);
|
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, float & value, float defval = 0.0);
|
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, double & value, double defval = 0.0);
|
|
|
|
virtual bool GetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, sampleCount & value, sampleCount defval = 0);
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const wxString & value);
|
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const int & value);
|
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const bool & value);
|
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const float & value);
|
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const double & value);
|
|
|
|
virtual bool SetPrivateConfig(const PluginID & ID, const wxString & group, const wxString & key, const sampleCount & value);
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
// PluginManager implementation
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
void Initialize();
|
|
|
|
void Terminate();
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
static PluginManager & Get();
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
bool HasType(PluginType type);
|
|
|
|
void PurgeType(PluginType type);
|
2010-01-23 19:44:49 +00:00
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
int GetPluginCount(PluginType type);
|
|
|
|
const PluginDescriptor *GetPlugin(const PluginID & ID);
|
|
|
|
|
|
|
|
const PluginDescriptor *GetFirstPlugin(PluginType type);
|
|
|
|
const PluginDescriptor *GetNextPlugin(PluginType type);
|
|
|
|
|
|
|
|
const PluginDescriptor *GetFirstPluginForProvider(const PluginID & ID);
|
|
|
|
const PluginDescriptor *GetNextPluginForProvider(const PluginID & ID);
|
|
|
|
|
|
|
|
const PluginDescriptor *GetFirstPluginForEffectType(EffectType type);
|
|
|
|
const PluginDescriptor *GetNextPluginForEffectType(EffectType type);
|
|
|
|
|
|
|
|
const PluginDescriptor *GetFirstPluginForEffectFamily(const PluginID & ID);
|
|
|
|
const PluginDescriptor *GetNextPluginForEffectFamily(const PluginID & ID);
|
|
|
|
|
|
|
|
bool IsRegistered(const PluginID & ID);
|
2010-01-23 19:44:49 +00:00
|
|
|
void RegisterPlugin(const wxString & type, const wxString & path);
|
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
bool IsPluginEnabled(const PluginID & ID);
|
|
|
|
void EnablePlugin(const PluginID & ID, bool enable);
|
|
|
|
|
|
|
|
const wxString & GetName(const PluginID & ID);
|
|
|
|
void *GetInstance(const PluginID & ID);
|
|
|
|
void SetInstance(const PluginID & ID, void *instance); // TODO: Remove after conversion
|
|
|
|
|
|
|
|
//
|
|
|
|
const PluginID & RegisterLegacyEffectPlugin(EffectIdentInterface *effect);
|
|
|
|
|
|
|
|
void CheckForUpdates();
|
2010-01-23 19:44:49 +00:00
|
|
|
|
|
|
|
private:
|
2014-11-03 06:48:54 +00:00
|
|
|
bool Load();
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
void LoadGroup(const wxChar *group, PluginType type);
|
|
|
|
void Save();
|
|
|
|
void SaveGroup(const wxChar *group, PluginType type);
|
|
|
|
|
|
|
|
void RemoveMissing();
|
|
|
|
wxArrayString IsNewOrUpdated(const wxArrayString & paths);
|
|
|
|
|
|
|
|
PluginDescriptor & CreatePlugin(IdentInterface *ident, PluginType type);
|
|
|
|
wxString GetDateTime(const wxString & path);
|
|
|
|
|
|
|
|
bool GetConfig(const wxString & key, wxString & value, const wxString & defval = L"");
|
|
|
|
bool GetConfig(const wxString & key, int & value, int defval = 0);
|
|
|
|
bool GetConfig(const wxString & key, bool & value, bool defval = false);
|
|
|
|
bool GetConfig(const wxString & key, float & value, float defval = 0.0);
|
|
|
|
bool GetConfig(const wxString & key, double & value, double defval = 0.0);
|
|
|
|
bool GetConfig(const wxString & key, sampleCount & value, sampleCount defval = 0);
|
|
|
|
|
|
|
|
bool SetConfig(const wxString & key, const wxString & value);
|
|
|
|
bool SetConfig(const wxString & key, const int & value);
|
|
|
|
bool SetConfig(const wxString & key, const bool & value);
|
|
|
|
bool SetConfig(const wxString & key, const float & value);
|
|
|
|
bool SetConfig(const wxString & key, const double & value);
|
|
|
|
bool SetConfig(const wxString & key, const sampleCount & value);
|
|
|
|
|
|
|
|
wxString SharedKey(const PluginID & ID, const wxString & group, const wxString & key);
|
|
|
|
wxString PrivateKey(const PluginID & ID, const wxString & group, const wxString & key);
|
2014-11-07 11:00:12 +00:00
|
|
|
wxString ConvertID(const PluginID & ID);
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
static PluginManager mInstance;
|
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
bool IsDirty();
|
|
|
|
void SetDirty(bool dirty = true);
|
|
|
|
wxFileConfig *mConfig;
|
|
|
|
|
|
|
|
bool mDirty;
|
|
|
|
int mCurrentIndex;
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
|
|
|
|
PluginMap mPlugins;
|
|
|
|
PluginMap::iterator mPluginsIter;
|
2010-01-23 19:44:49 +00:00
|
|
|
};
|
|
|
|
|
The fabled realtime effects...
I've made it where you can enable and disable via experimentals:
EXPERIMENTAL_REALTIME_EFFECTS
EXPERIMENTAL_EFFECTS_RACK
You will notice that, as of now, the only effects currently set up for
realtime are VSTs. Now that this is in, I will start converting the
rest.
As I start to convert the effects, the astute of you may notice that
they no longer directly access tracks or any "internal" Audacity
objects. This isolates the effects from changes in Audacity and makes
it much easier to add new ones.
Anyway, all 3 platforms can now display VST effects in graphical mode.
Yes, that means Linux too. There are quite a few VSTs for Linux if
you search for them.
The so-called "rack" definitely needs some discussion, work, and attention
from someone much better at graphics than me. I'm not really sure it should
stay in as-is. I'd originally planned for it to be simply a utility window
where you can store your (preconfigured) favorite effects. It should probably
revert back to that idea.
You may notice that this DOES include the API work I did. The realtime effects
were too tied to it and I didn't want to redo the whole thing. As I mentioned
elsewhere, the API stuff may or may not be very future proof.
So, let the critter complaints commence. I absolute KNOW there will be some.
(I know I'll be hearing from the Linux peeps pretty darn quickly. ;-))
2014-10-26 03:24:10 +00:00
|
|
|
#endif /* __AUDACITY_PLUGINMANAGER_H__ */
|