mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-01 08:29:27 +02:00
Fix (hopefully final) for bug #1010.
This commit is contained in:
parent
60956bad79
commit
1b369be614
@ -56,7 +56,7 @@ class PluginManagerInterface
|
|||||||
public:
|
public:
|
||||||
virtual ~PluginManagerInterface() {};
|
virtual ~PluginManagerInterface() {};
|
||||||
|
|
||||||
virtual bool IsPluginRegistered(const PluginID & ID) = 0;
|
virtual bool IsPluginRegistered(const wxString & path) = 0;
|
||||||
|
|
||||||
virtual const PluginID & RegisterPlugin(ModuleInterface *module) = 0;
|
virtual const PluginID & RegisterPlugin(ModuleInterface *module) = 0;
|
||||||
virtual const PluginID & RegisterPlugin(ModuleInterface *provider, EffectIdentInterface *effect) = 0;
|
virtual const PluginID & RegisterPlugin(ModuleInterface *provider, EffectIdentInterface *effect) = 0;
|
||||||
|
@ -53,6 +53,14 @@ effects from this one class.
|
|||||||
#include "../../ShuttleGui.h"
|
#include "../../ShuttleGui.h"
|
||||||
#include "../../widgets/valnum.h"
|
#include "../../widgets/valnum.h"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// List of effects that ship with Audacity. These will be autoregistered.
|
||||||
|
// ============================================================================
|
||||||
|
const static wxChar *kShippedEffects[] =
|
||||||
|
{
|
||||||
|
wxT("sc4_1882.dll"),
|
||||||
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Module registration entry point
|
// Module registration entry point
|
||||||
//
|
//
|
||||||
@ -144,34 +152,36 @@ void LadspaEffectsModule::Terminate()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LadspaEffectsModule::AutoRegisterPlugins(PluginManagerInterface & WXUNUSED(pm))
|
bool LadspaEffectsModule::AutoRegisterPlugins(PluginManagerInterface & pm)
|
||||||
{
|
{
|
||||||
|
// Autoregister effects that we "think" are ones that have been shipped with
|
||||||
|
// Audacity. A little simplistic, but it should suffice for now.
|
||||||
|
wxArrayString pathList = GetSearchPaths();
|
||||||
|
wxArrayString files;
|
||||||
|
|
||||||
|
for (int i = 0; i < WXSIZEOF(kShippedEffects); i++)
|
||||||
|
{
|
||||||
|
files.Clear();
|
||||||
|
pm.FindFilesInPathList(kShippedEffects[i], pathList, files);
|
||||||
|
for (size_t j = 0, cnt = files.GetCount(); j < cnt; j++)
|
||||||
|
{
|
||||||
|
if (!pm.IsPluginRegistered(files[j]))
|
||||||
|
{
|
||||||
|
RegisterPlugin(pm, files[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We still want to be called during the normal registration process
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxArrayString LadspaEffectsModule::FindPlugins(PluginManagerInterface & pm)
|
wxArrayString LadspaEffectsModule::FindPlugins(PluginManagerInterface & pm)
|
||||||
{
|
{
|
||||||
wxArrayString pathList;
|
wxArrayString pathList = GetSearchPaths();
|
||||||
wxArrayString files;
|
wxArrayString files;
|
||||||
wxString pathVar;
|
|
||||||
|
|
||||||
// Check for the LADSPA_PATH environment variable
|
|
||||||
pathVar = wxString::FromUTF8(getenv("LADSPA_PATH"));
|
|
||||||
if (!pathVar.empty())
|
|
||||||
{
|
|
||||||
wxStringTokenizer tok(pathVar);
|
|
||||||
while (tok.HasMoreTokens())
|
|
||||||
{
|
|
||||||
pathList.Add(tok.GetNextToken());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__WXMAC__)
|
#if defined(__WXMAC__)
|
||||||
#define LADSPAPATH wxT("/Library/Audio/Plug-Ins/LADSPA")
|
|
||||||
|
|
||||||
// Look in ~/Library/Audio/Plug-Ins/LADSPA and /Library/Audio/Plug-Ins/LADSPA
|
|
||||||
pathList.Add(wxGetHomeDir() + wxFILE_SEP_PATH + LADSPAPATH);
|
|
||||||
pathList.Add(LADSPAPATH);
|
|
||||||
|
|
||||||
// Recursively scan for all shared objects
|
// Recursively scan for all shared objects
|
||||||
pm.FindFilesInPathList(wxT("*.so"), pathList, files, true);
|
pm.FindFilesInPathList(wxT("*.so"), pathList, files, true);
|
||||||
@ -183,11 +193,6 @@ wxArrayString LadspaEffectsModule::FindPlugins(PluginManagerInterface & pm)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
pathList.Add(wxGetHomeDir() + wxFILE_SEP_PATH + wxT(".ladspa"));
|
|
||||||
pathList.Add(wxT("/usr/local/lib/ladspa"));
|
|
||||||
pathList.Add(wxT("/usr/lib/ladspa"));
|
|
||||||
pathList.Add(wxT(LIBDIR) wxT("/ladspa"));
|
|
||||||
|
|
||||||
// Recursively scan for all shared objects
|
// Recursively scan for all shared objects
|
||||||
pm.FindFilesInPathList(wxT("*.so"), pathList, files, true);
|
pm.FindFilesInPathList(wxT("*.so"), pathList, files, true);
|
||||||
|
|
||||||
@ -270,6 +275,46 @@ void LadspaEffectsModule::DeleteInstance(IdentInterface *instance)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxArrayString LadspaEffectsModule::GetSearchPaths()
|
||||||
|
{
|
||||||
|
wxArrayString pathList;
|
||||||
|
wxArrayString files;
|
||||||
|
wxString pathVar;
|
||||||
|
|
||||||
|
// Check for the LADSPA_PATH environment variable
|
||||||
|
pathVar = wxString::FromUTF8(getenv("LADSPA_PATH"));
|
||||||
|
if (!pathVar.empty())
|
||||||
|
{
|
||||||
|
wxStringTokenizer tok(pathVar);
|
||||||
|
while (tok.HasMoreTokens())
|
||||||
|
{
|
||||||
|
pathList.Add(tok.GetNextToken());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__WXMAC__)
|
||||||
|
#define LADSPAPATH wxT("/Library/Audio/Plug-Ins/LADSPA")
|
||||||
|
|
||||||
|
// Look in ~/Library/Audio/Plug-Ins/LADSPA and /Library/Audio/Plug-Ins/LADSPA
|
||||||
|
pathList.Add(wxGetHomeDir() + wxFILE_SEP_PATH + LADSPAPATH);
|
||||||
|
pathList.Add(LADSPAPATH);
|
||||||
|
|
||||||
|
#elif defined(__WXMSW__)
|
||||||
|
|
||||||
|
// No special paths...probably should look in %CommonProgramFiles%\LADSPA
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
pathList.Add(wxGetHomeDir() + wxFILE_SEP_PATH + wxT(".ladspa"));
|
||||||
|
pathList.Add(wxT("/usr/local/lib/ladspa"));
|
||||||
|
pathList.Add(wxT("/usr/lib/ladspa"));
|
||||||
|
pathList.Add(wxT(LIBDIR) wxT("/ladspa"));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return pathList;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// LadspaEffectOptionsDialog
|
// LadspaEffectOptionsDialog
|
||||||
|
@ -233,7 +233,7 @@ public:
|
|||||||
|
|
||||||
// LadspaEffectModule implementation
|
// LadspaEffectModule implementation
|
||||||
|
|
||||||
static void Check(const wchar_t *path);
|
wxArrayString GetSearchPaths();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ModuleManagerInterface *mModMan;
|
ModuleManagerInterface *mModMan;
|
||||||
|
@ -16,6 +16,37 @@
|
|||||||
|
|
||||||
#include "LoadNyquist.h"
|
#include "LoadNyquist.h"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// List of effects that ship with Audacity. These will be autoregistered.
|
||||||
|
// ============================================================================
|
||||||
|
const static wxChar *kShippedEffects[] =
|
||||||
|
{
|
||||||
|
wxT("adjustable-fade.ny"),
|
||||||
|
wxT("beat.ny"),
|
||||||
|
wxT("clicktrack.ny"),
|
||||||
|
wxT("clipfix.ny"),
|
||||||
|
wxT("crossfadeclips.ny"),
|
||||||
|
wxT("crossfadetracks.ny"),
|
||||||
|
wxT("delay.ny"),
|
||||||
|
wxT("equalabel.ny"),
|
||||||
|
wxT("highpass.ny"),
|
||||||
|
wxT("limiter.ny"),
|
||||||
|
wxT("lowpass.ny"),
|
||||||
|
wxT("notch.ny"),
|
||||||
|
wxT("pluck.ny"),
|
||||||
|
wxT("rissetdrum.ny"),
|
||||||
|
wxT("sample-data-export.ny"),
|
||||||
|
wxT("SilenceMarker.ny"),
|
||||||
|
wxT("SoundFinder.ny"),
|
||||||
|
wxT("SpectralEditMulti.ny"),
|
||||||
|
wxT("SpectralEditParametricEQ.ny"),
|
||||||
|
wxT("SpectralEditShelves.ny"),
|
||||||
|
wxT("StudioFadeOut.ny"),
|
||||||
|
wxT("tremolo.ny"),
|
||||||
|
wxT("vocalremover.ny"),
|
||||||
|
wxT("vocoder.ny"),
|
||||||
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Module registration entry point
|
// Module registration entry point
|
||||||
//
|
//
|
||||||
@ -125,9 +156,32 @@ void NyquistEffectsModule::Terminate()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NyquistEffectsModule::AutoRegisterPlugins(PluginManagerInterface & WXUNUSED(pm))
|
bool NyquistEffectsModule::AutoRegisterPlugins(PluginManagerInterface & pm)
|
||||||
{
|
{
|
||||||
// Nothing to do here
|
// Autoregister effects that we "think" are ones that have been shipped with
|
||||||
|
// Audacity. A little simplistic, but it should suffice for now.
|
||||||
|
wxArrayString pathList = NyquistEffect::GetNyquistSearchPath();
|
||||||
|
wxArrayString files;
|
||||||
|
|
||||||
|
if (!pm.IsPluginRegistered(NYQUIST_PROMPT_ID))
|
||||||
|
{
|
||||||
|
RegisterPlugin(pm, NYQUIST_PROMPT_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < WXSIZEOF(kShippedEffects); i++)
|
||||||
|
{
|
||||||
|
files.Clear();
|
||||||
|
pm.FindFilesInPathList(kShippedEffects[i], pathList, files);
|
||||||
|
for (size_t j = 0, cnt = files.GetCount(); j < cnt; j++)
|
||||||
|
{
|
||||||
|
if (!pm.IsPluginRegistered(files[j]))
|
||||||
|
{
|
||||||
|
RegisterPlugin(pm, files[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We still want to be called during the normal registration process
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user