/********************************************************************** Audacity: A Digital Audio Editor LadspaEffect.h Dominic Mazzoni **********************************************************************/ class wxSlider; class wxStaticText; class wxTextCtrl; class wxCheckBox; class NumericTextCtrl; #include // member variable #include // to inherit #include "audacity/EffectInterface.h" #include "audacity/ModuleInterface.h" #include "audacity/PluginInterface.h" #include "ladspa.h" #include "../../SampleFormat.h" #define LADSPAEFFECTS_VERSION wxT("1.0.0.0") /* i18n-hint: abbreviates "Linux Audio Developer's Simple Plugin API" (Application programming interface) */ #define LADSPAEFFECTS_FAMILY XO("LADSPA") /////////////////////////////////////////////////////////////////////////////// // // LadspaEffect // /////////////////////////////////////////////////////////////////////////////// class LadspaEffectMeter; class LadspaEffect final : public wxEvtHandler, public EffectClientInterface, public EffectUIClientInterface { public: LadspaEffect(const wxString & path, int index); virtual ~LadspaEffect(); // ComponentInterface implementation PluginPath GetPath() override; ComponentInterfaceSymbol GetSymbol() override; VendorSymbol GetVendor() override; wxString GetVersion() override; wxString GetDescription() override; // EffectDefinitionInterface implementation EffectType GetType() override; EffectFamilySymbol GetFamily() override; bool IsInteractive() override; bool IsDefault() override; bool IsLegacy() override; bool SupportsRealtime() override; bool SupportsAutomation() override; // EffectClientInterface implementation bool SetHost(EffectHostInterface *host) override; unsigned GetAudioInCount() override; unsigned GetAudioOutCount() override; int GetMidiInCount() override; int GetMidiOutCount() override; void SetSampleRate(double rate) override; size_t SetBlockSize(size_t maxBlockSize) override; sampleCount GetLatency() override; size_t GetTailSize() override; bool IsReady() override; bool ProcessInitialize(sampleCount totalLen, ChannelNames chanMap = NULL) override; bool ProcessFinalize() override; size_t ProcessBlock(float **inBlock, float **outBlock, size_t blockLen) override; bool RealtimeInitialize() override; bool RealtimeAddProcessor(unsigned numChannels, float sampleRate) override; bool RealtimeFinalize() override; bool RealtimeSuspend() override; bool RealtimeResume() override; bool RealtimeProcessStart() override; size_t RealtimeProcess(int group, float **inbuf, float **outbuf, size_t numSamples) override; bool RealtimeProcessEnd() override; bool ShowInterface(wxWindow *parent, bool forceModal = false) override; bool GetAutomationParameters(CommandParameters & parms) override; bool SetAutomationParameters(CommandParameters & parms) override; bool LoadUserPreset(const RegistryPath & name) override; bool SaveUserPreset(const RegistryPath & name) override; RegistryPaths GetFactoryPresets() override; bool LoadFactoryPreset(int id) override; bool LoadFactoryDefaults() override; // EffectUIClientInterface implementation void SetHostUI(EffectUIHostInterface *host) override; bool PopulateUI(wxWindow *parent) override; bool IsGraphicalUI() override; bool ValidateUI() override; bool HideUI() override; bool CloseUI() override; bool CanExportPresets() override; void ExportPresets() override; void ImportPresets() override; bool HasOptions() override; void ShowOptions() override; // LadspaEffect implementation private: bool Load(); void Unload(); bool LoadParameters(const RegistryPath & group); bool SaveParameters(const RegistryPath & group); LADSPA_Handle InitInstance(float sampleRate); void FreeInstance(LADSPA_Handle handle); void OnCheckBox(wxCommandEvent & evt); void OnSlider(wxCommandEvent & evt); void OnTextCtrl(wxCommandEvent & evt); void RefreshControls(bool outputOnly = false); private: wxString mPath; int mIndex; EffectHostInterface *mHost; wxDynamicLibrary mLib; const LADSPA_Descriptor *mData; wxString pluginName; bool mReady; LADSPA_Handle mMaster; double mSampleRate; size_t mBlockSize; bool mInteractive; unsigned mAudioIns; ArrayOf mInputPorts; unsigned mAudioOuts; ArrayOf mOutputPorts; int mNumInputControls; Floats mInputControls; int mNumOutputControls; Floats mOutputControls; bool mUseLatency; int mLatencyPort; bool mLatencyDone; // Realtime processing std::vector mSlaves; EffectUIHostInterface *mUIHost; NumericTextCtrl *mDuration; wxDialog *mDialog; wxWindow *mParent; ArrayOf mSliders; ArrayOf mFields; ArrayOf mLabels; ArrayOf mToggles; ArrayOf mMeters; DECLARE_EVENT_TABLE() friend class LadspaEffectsModule; }; /////////////////////////////////////////////////////////////////////////////// // // LadspaEffectsModule // /////////////////////////////////////////////////////////////////////////////// class LadspaEffectsModule final : public ModuleInterface { public: LadspaEffectsModule(ModuleManagerInterface *moduleManager, const wxString *path); virtual ~LadspaEffectsModule(); // ComponentInterface implementation PluginPath GetPath() override; ComponentInterfaceSymbol GetSymbol() override; VendorSymbol GetVendor() override; wxString GetVersion() override; wxString GetDescription() override; // ModuleInterface implementation bool Initialize() override; void Terminate() override; const FileExtensions &GetFileExtensions() override; FilePath InstallPath() override; bool AutoRegisterPlugins(PluginManagerInterface & pm) override; PluginPaths FindPluginPaths(PluginManagerInterface & pm) override; unsigned DiscoverPluginsAtPath( const PluginPath & path, wxString &errMsg, const RegistrationCallback &callback) override; bool IsPluginValid(const PluginPath & path, bool bFast) override; ComponentInterface *CreateInstance(const PluginPath & path) override; void DeleteInstance(ComponentInterface *instance) override; // LadspaEffectModule implementation FilePaths GetSearchPaths(); private: ModuleManagerInterface *mModMan; wxString mPath; };