Audacity  2.2.2
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
LadspaEffect Class Referencefinal

An Effect that calls up a LADSPA plug in, i.e. many possible effects from this one class. More...

#include <LadspaEffect.h>

Inheritance diagram for LadspaEffect:
EffectClientInterface EffectUIClientInterface EffectDefinitionInterface IdentInterface ParamsInterface

Public Member Functions

 LadspaEffect (const wxString &path, int index)
 
virtual ~LadspaEffect ()
 
wxString GetPath () override
 
IdentInterfaceSymbol GetSymbol () override
 
IdentInterfaceSymbol GetVendor () override
 
wxString GetVersion () override
 
wxString GetDescription () override
 
EffectType GetType () override
 
IdentInterfaceSymbol GetFamilyId () override
 
bool IsInteractive () override
 
bool IsDefault () override
 
bool IsLegacy () override
 
bool SupportsRealtime () override
 
bool SupportsAutomation () override
 
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 wxString &name) override
 
bool SaveUserPreset (const wxString &name) override
 
wxArrayString GetFactoryPresets () override
 
bool LoadFactoryPreset (int id) override
 
bool LoadFactoryDefaults () override
 
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
 
- Public Member Functions inherited from EffectClientInterface
virtual ~EffectClientInterface ()
 
- Public Member Functions inherited from EffectDefinitionInterface
virtual ~EffectDefinitionInterface ()
 
- Public Member Functions inherited from IdentInterface
virtual ~IdentInterface ()
 
const wxString & GetTranslatedName ()
 
- Public Member Functions inherited from ParamsInterface
virtual ~ParamsInterface ()
 
virtual bool DefineParams (ShuttleParams &WXUNUSED(S))
 
- Public Member Functions inherited from EffectUIClientInterface
virtual ~EffectUIClientInterface ()
 

Private Member Functions

bool Load ()
 
void Unload ()
 
bool LoadParameters (const wxString &group)
 
bool SaveParameters (const wxString &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 Attributes

wxString mPath
 
int mIndex
 
EffectHostInterfacemHost
 
wxDynamicLibrary mLib
 
const LADSPA_DescriptormData
 
wxString pluginName
 
bool mReady
 
LADSPA_Handle mMaster
 
double mSampleRate
 
size_t mBlockSize
 
bool mInteractive
 
unsigned mAudioIns
 
ArrayOf< unsigned long > mInputPorts
 
unsigned mAudioOuts
 
ArrayOf< unsigned long > mOutputPorts
 
int mNumInputControls
 
Floats mInputControls
 
int mNumOutputControls
 
Floats mOutputControls
 
bool mUseLatency
 
int mLatencyPort
 
bool mLatencyDone
 
std::vector< LADSPA_HandlemSlaves
 
EffectUIHostInterfacemUIHost
 
NumericTextCtrlmDuration
 
wxDialog * mDialog
 
wxWindow * mParent
 
ArrayOf< wxSlider * > mSliders
 
ArrayOf< wxTextCtrl * > mFields
 
ArrayOf< wxStaticText * > mLabels
 
ArrayOf< wxCheckBox * > mToggles
 
ArrayOf< LadspaEffectMeter * > mMeters
 

Friends

class LadspaEffectsModule
 

Detailed Description

An Effect that calls up a LADSPA plug in, i.e. many possible effects from this one class.

Definition at line 42 of file LadspaEffect.h.

Constructor & Destructor Documentation

LadspaEffect::LadspaEffect ( const wxString &  path,
int  index 
)

Definition at line 586 of file LadspaEffect.cpp.

References LadspaEffectsModule::mPath.

587 {
588  mPath = path;
589  mIndex = index;
590  mData = NULL;
591 
592  mHost = NULL;
593  mMaster = NULL;
594  mReady = false;
595 
596  mInteractive = false;
597 
598  mAudioIns = 0;
599  mAudioOuts = 0;
600  mNumInputControls = 0;
601  mNumOutputControls = 0;
602  mSampleRate = 44100;
603  mBlockSize = 0;
604 
605  mLatencyPort = -1;
606 
607  mDialog = NULL;
608  mParent = NULL;
609 }
unsigned mAudioIns
Definition: LadspaEffect.h:166
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
wxString mPath
Definition: LadspaEffect.h:148
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
size_t mBlockSize
Definition: LadspaEffect.h:162
unsigned mAudioOuts
Definition: LadspaEffect.h:169
wxWindow * mParent
Definition: LadspaEffect.h:188
wxDialog * mDialog
Definition: LadspaEffect.h:187
double mSampleRate
Definition: LadspaEffect.h:161
LADSPA_Handle mMaster
Definition: LadspaEffect.h:159
int mNumOutputControls
Definition: LadspaEffect.h:174
int mNumInputControls
Definition: LadspaEffect.h:172
LadspaEffect::~LadspaEffect ( )
virtual

Definition at line 611 of file LadspaEffect.cpp.

612 {
613 }

Member Function Documentation

bool LadspaEffect::CanExportPresets ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1516 of file LadspaEffect.cpp.

1517 {
1518  return false;
1519 }
bool LadspaEffect::CloseUI ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1500 of file LadspaEffect.cpp.

1501 {
1502  mParent->RemoveEventHandler(this);
1503 
1504  mToggles.reset();
1505  mSliders.reset();
1506  mFields.reset();
1507  mLabels.reset();
1508 
1509  mUIHost = NULL;
1510  mParent = NULL;
1511  mDialog = NULL;
1512 
1513  return true;
1514 }
ArrayOf< wxStaticText * > mLabels
Definition: LadspaEffect.h:191
ArrayOf< wxSlider * > mSliders
Definition: LadspaEffect.h:189
ArrayOf< wxTextCtrl * > mFields
Definition: LadspaEffect.h:190
EffectUIHostInterface * mUIHost
Definition: LadspaEffect.h:184
ArrayOf< wxCheckBox * > mToggles
Definition: LadspaEffect.h:192
wxWindow * mParent
Definition: LadspaEffect.h:188
wxDialog * mDialog
Definition: LadspaEffect.h:187
void LadspaEffect::ExportPresets ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1521 of file LadspaEffect.cpp.

1522 {
1523 }
void LadspaEffect::FreeInstance ( LADSPA_Handle  handle)
private

Definition at line 1662 of file LadspaEffect.cpp.

1663 {
1664  if (mData->deactivate)
1665  {
1666  mData->deactivate(handle);
1667  }
1668 
1669  mData->cleanup(handle);
1670 }
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
void(* cleanup)(LADSPA_Handle Instance)
Definition: ladspa.h:558
void(* deactivate)(LADSPA_Handle Instance)
Definition: ladspa.h:549
unsigned LadspaEffect::GetAudioInCount ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 864 of file LadspaEffect.cpp.

865 {
866  return mAudioIns;
867 }
unsigned mAudioIns
Definition: LadspaEffect.h:166
unsigned LadspaEffect::GetAudioOutCount ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 869 of file LadspaEffect.cpp.

870 {
871  return mAudioOuts;
872 }
unsigned mAudioOuts
Definition: LadspaEffect.h:169
bool LadspaEffect::GetAutomationParameters ( CommandParameters parms)
overridevirtual

Implements EffectClientInterface.

Definition at line 1071 of file LadspaEffect.cpp.

References LADSPA_IS_PORT_CONTROL, LADSPA_IS_PORT_INPUT, and LAT1CTOWX.

1072 {
1073  for (unsigned long p = 0; p < mData->PortCount; p++)
1074  {
1076 
1078  {
1079  if (!parms.Write(LAT1CTOWX(mData->PortNames[p]), mInputControls[p]))
1080  {
1081  return false;
1082  }
1083  }
1084  }
1085 
1086  return true;
1087 }
int LADSPA_PortDescriptor
Definition: ladspa.h:152
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LADSPA_IS_PORT_CONTROL(x)
Definition: ladspa.h:170
const char *const * PortNames
Definition: ladspa.h:415
Floats mInputControls
Definition: LadspaEffect.h:173
unsigned long PortCount
Definition: ladspa.h:406
#define LAT1CTOWX(X)
Definition: Internat.h:180
#define LADSPA_IS_PORT_INPUT(x)
Definition: ladspa.h:168
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
wxString LadspaEffect::GetDescription ( )
overridevirtual

Implements IdentInterface.

Definition at line 639 of file LadspaEffect.cpp.

References LAT1CTOWX.

640 {
641  return LAT1CTOWX(mData->Copyright);
642 }
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LAT1CTOWX(X)
Definition: Internat.h:180
const char * Copyright
Definition: ladspa.h:402
wxArrayString LadspaEffect::GetFactoryPresets ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 1128 of file LadspaEffect.cpp.

1129 {
1130  return wxArrayString();
1131 }
IdentInterfaceSymbol LadspaEffect::GetFamilyId ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 668 of file LadspaEffect.cpp.

References LADSPAEFFECTS_FAMILY.

669 {
670  return LADSPAEFFECTS_FAMILY;
671 }
#define LADSPAEFFECTS_FAMILY
Definition: LadspaEffect.h:32
sampleCount LadspaEffect::GetLatency ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 896 of file LadspaEffect.cpp.

897 {
898  if (mUseLatency && mLatencyPort >= 0 && !mLatencyDone)
899  {
900  mLatencyDone = true;
902  }
903 
904  return 0;
905 }
Floats mOutputControls
Definition: LadspaEffect.h:175
int LadspaEffect::GetMidiInCount ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 874 of file LadspaEffect.cpp.

875 {
876  return 0;
877 }
int LadspaEffect::GetMidiOutCount ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 879 of file LadspaEffect.cpp.

880 {
881  return 0;
882 }
wxString LadspaEffect::GetPath ( )
overridevirtual

Implements IdentInterface.

Definition at line 619 of file LadspaEffect.cpp.

References LadspaEffectsModule::mPath.

620 {
621  return wxString::Format(wxT("%s;%d"), mPath, mIndex);
622 }
wxString mPath
Definition: LadspaEffect.h:148
IdentInterfaceSymbol LadspaEffect::GetSymbol ( )
overridevirtual

Implements IdentInterface.

Definition at line 624 of file LadspaEffect.cpp.

References LAT1CTOWX.

625 {
626  return LAT1CTOWX(mData->Name);
627 }
const char * Name
Definition: ladspa.h:393
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LAT1CTOWX(X)
Definition: Internat.h:180
size_t LadspaEffect::GetTailSize ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 907 of file LadspaEffect.cpp.

908 {
909  return 0;
910 }
EffectType LadspaEffect::GetType ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 648 of file LadspaEffect.cpp.

References EffectTypeAnalyze, EffectTypeGenerate, EffectTypeProcess, and EffectTypeTool.

649 {
650  if (mAudioIns == 0 && mAudioOuts == 0)
651  {
652  return EffectTypeTool;
653  }
654 
655  if (mAudioIns == 0)
656  {
657  return EffectTypeGenerate;
658  }
659 
660  if (mAudioOuts == 0)
661  {
662  return EffectTypeAnalyze;
663  }
664 
665  return EffectTypeProcess;
666 }
unsigned mAudioIns
Definition: LadspaEffect.h:166
unsigned mAudioOuts
Definition: LadspaEffect.h:169
IdentInterfaceSymbol LadspaEffect::GetVendor ( )
overridevirtual

Implements IdentInterface.

Definition at line 629 of file LadspaEffect.cpp.

References LAT1CTOWX.

630 {
631  return { LAT1CTOWX(mData->Maker) };
632 }
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LAT1CTOWX(X)
Definition: Internat.h:180
const char * Maker
Definition: ladspa.h:397
wxString LadspaEffect::GetVersion ( )
overridevirtual

Implements IdentInterface.

Definition at line 634 of file LadspaEffect.cpp.

References _().

635 {
636  return _("n/a");
637 }
_("Move Track &Down")+wxT("\t")+(GetActiveProject() -> GetCommandManager() ->GetKeyFromName(wxT("TrackMoveDown")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveTopID, _("Move Track to &Top")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveTop")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveBottomID, _("Move Track to &Bottom")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveBottom")).Raw()), OnMoveTrack)#define SET_TRACK_NAME_PLUGIN_SYMBOLclass SetTrackNameCommand:public AudacityCommand
bool LadspaEffect::HasOptions ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1529 of file LadspaEffect.cpp.

1530 {
1531  return true;
1532 }
bool LadspaEffect::HideUI ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1495 of file LadspaEffect.cpp.

1496 {
1497  return true;
1498 }
void LadspaEffect::ImportPresets ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1525 of file LadspaEffect.cpp.

1526 {
1527 }
LADSPA_Handle LadspaEffect::InitInstance ( float  sampleRate)
private

Definition at line 1629 of file LadspaEffect.cpp.

References LADSPA_IS_PORT_CONTROL, and LADSPA_IS_PORT_INPUT.

1630 {
1631  /* Instantiate the plugin */
1632  LADSPA_Handle handle = mData->instantiate(mData, sampleRate);
1633  if (!handle)
1634  {
1635  return NULL;
1636  }
1637 
1638  for (unsigned long p = 0; p < mData->PortCount; p++)
1639  {
1641  if (LADSPA_IS_PORT_CONTROL(d))
1642  {
1643  if (LADSPA_IS_PORT_INPUT(d))
1644  {
1645  mData->connect_port(handle, p, &mInputControls[p]);
1646  }
1647  else
1648  {
1649  mData->connect_port(handle, p, &mOutputControls[p]);
1650  }
1651  }
1652  }
1653 
1654  if (mData->activate)
1655  {
1656  mData->activate(handle);
1657  }
1658 
1659  return handle;
1660 }
void * LADSPA_Handle
Definition: ladspa.h:363
int LADSPA_PortDescriptor
Definition: ladspa.h:152
void(* connect_port)(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data *DataLocation)
Definition: ladspa.h:466
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
void(* activate)(LADSPA_Handle Instance)
Definition: ladspa.h:489
#define LADSPA_IS_PORT_CONTROL(x)
Definition: ladspa.h:170
Floats mInputControls
Definition: LadspaEffect.h:173
unsigned long PortCount
Definition: ladspa.h:406
#define LADSPA_IS_PORT_INPUT(x)
Definition: ladspa.h:168
LADSPA_Handle(* instantiate)(const struct _LADSPA_Descriptor *Descriptor, unsigned long SampleRate)
Definition: ladspa.h:437
Floats mOutputControls
Definition: LadspaEffect.h:175
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
bool LadspaEffect::IsDefault ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 678 of file LadspaEffect.cpp.

679 {
680  return false;
681 }
bool LadspaEffect::IsGraphicalUI ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1475 of file LadspaEffect.cpp.

1476 {
1477  return false;
1478 }
bool LadspaEffect::IsInteractive ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 673 of file LadspaEffect.cpp.

674 {
675  return mInteractive;
676 }
bool LadspaEffect::IsLegacy ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 683 of file LadspaEffect.cpp.

684 {
685  return false;
686 }
bool LadspaEffect::IsReady ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 912 of file LadspaEffect.cpp.

913 {
914  return mReady;
915 }
bool LadspaEffect::Load ( )
private

Definition at line 1548 of file LadspaEffect.cpp.

References LadspaEffectsModule::mPath.

1549 {
1550  if (mLib.IsLoaded())
1551  {
1552  return true;
1553  }
1554 
1555  wxFileName ff = mPath;
1556  wxString envpath;
1557  bool hadpath = wxGetEnv(wxT("PATH"), &envpath);
1558  wxSetEnv(wxT("PATH"), ff.GetPath() + wxFILE_SEP_PATH + envpath);
1559  wxString saveOldCWD = ff.GetCwd();
1560  ff.SetCwd();
1561 
1562  LADSPA_Descriptor_Function mainFn = NULL;
1563 
1564  if (mLib.Load(mPath, wxDL_NOW))
1565  {
1566  wxLogNull logNo;
1567 
1568  mainFn = (LADSPA_Descriptor_Function) mLib.GetSymbol(wxT("ladspa_descriptor"));
1569  if (mainFn)
1570  {
1571  mData = mainFn(mIndex);
1572  return true;
1573  }
1574  }
1575 
1576  if (mLib.IsLoaded())
1577  {
1578  mLib.Unload();
1579  }
1580 
1581  wxSetWorkingDirectory(saveOldCWD);
1582  hadpath ? wxSetEnv(wxT("PATH"), envpath) : wxUnsetEnv(wxT("PATH"));
1583 
1584  return false;
1585 }
const LADSPA_Descriptor *(* LADSPA_Descriptor_Function)(unsigned long Index)
Definition: ladspa.h:593
wxString mPath
Definition: LadspaEffect.h:148
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
wxDynamicLibrary mLib
Definition: LadspaEffect.h:152
bool LadspaEffect::LoadFactoryDefaults ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 1138 of file LadspaEffect.cpp.

1139 {
1141  {
1142  return false;
1143  }
1144 
1145  RefreshControls();
1146 
1147  return true;
1148 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
virtual wxString GetFactoryDefaultsGroup()=0
void RefreshControls(bool outputOnly=false)
bool LoadParameters(const wxString &group)
bool LadspaEffect::LoadFactoryPreset ( int  id)
overridevirtual

Implements EffectClientInterface.

Definition at line 1133 of file LadspaEffect.cpp.

1134 {
1135  return true;
1136 }
bool LadspaEffect::LoadParameters ( const wxString &  group)
private

Definition at line 1595 of file LadspaEffect.cpp.

References CommandParameters::SetParameters().

1596 {
1597  wxString parms;
1598  if (!mHost->GetPrivateConfig(group, wxT("Parameters"), parms, wxEmptyString))
1599  {
1600  return false;
1601  }
1602 
1603  CommandParameters eap;
1604  if (!eap.SetParameters(parms))
1605  {
1606  return false;
1607  }
1608 
1609  return SetAutomationParameters(eap);
1610 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
CommandParameters, derived from wxFileConfig, is essentially doing the same things as the Shuttle cla...
virtual bool GetPrivateConfig(const wxString &group, const wxString &key, wxString &value, const wxString &defval)=0
bool SetParameters(const wxString &parms)
bool SetAutomationParameters(CommandParameters &parms) override
bool LadspaEffect::LoadUserPreset ( const wxString &  name)
overridevirtual

Implements EffectClientInterface.

Definition at line 1111 of file LadspaEffect.cpp.

1112 {
1113  if (!LoadParameters(name))
1114  {
1115  return false;
1116  }
1117 
1118  RefreshControls();
1119 
1120  return true;
1121 }
void RefreshControls(bool outputOnly=false)
bool LoadParameters(const wxString &group)
const wxChar * name
Definition: Distortion.cpp:94
void LadspaEffect::OnCheckBox ( wxCommandEvent &  evt)
private

Definition at line 1672 of file LadspaEffect.cpp.

References ID_Toggles.

1673 {
1674  int p = evt.GetId() - ID_Toggles;
1675 
1676  mInputControls[p] = mToggles[p]->GetValue();
1677 }
ArrayOf< wxCheckBox * > mToggles
Definition: LadspaEffect.h:192
Floats mInputControls
Definition: LadspaEffect.h:173
void LadspaEffect::OnSlider ( wxCommandEvent &  evt)
private

Definition at line 1679 of file LadspaEffect.cpp.

References _LADSPA_PortRangeHint::HintDescriptor, ID_Sliders, LADSPA_IS_HINT_BOUNDED_ABOVE, LADSPA_IS_HINT_BOUNDED_BELOW, LADSPA_IS_HINT_INTEGER, LADSPA_IS_HINT_SAMPLE_RATE, _LADSPA_PortRangeHint::LowerBound, Internat::ToDisplayString(), and _LADSPA_PortRangeHint::UpperBound.

1680 {
1681  int p = evt.GetId() - ID_Sliders;
1682 
1683  float val;
1684  float lower = float(0.0);
1685  float upper = float(10.0);
1686  float range;
1687  bool forceint = false;
1688 
1691  lower = hint.LowerBound;
1693  upper = hint.UpperBound;
1695  lower *= mSampleRate;
1696  upper *= mSampleRate;
1697  forceint = true;
1698  }
1699 
1700  range = upper - lower;
1701 
1702  val = (mSliders[p]->GetValue() / 1000.0) * range + lower;
1703 
1704  wxString str;
1705  if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor) || forceint)
1706  str.Printf(wxT("%d"), (int)(val + 0.5));
1707  else
1708  str = Internat::ToDisplayString(val);
1709 
1710  mFields[p]->SetValue(str);
1711 
1712  mInputControls[p] = val;
1713 }
#define LADSPA_IS_HINT_INTEGER(x)
Definition: ladspa.h:315
const LADSPA_PortRangeHint * PortRangeHints
Definition: ladspa.h:419
#define LADSPA_IS_HINT_BOUNDED_BELOW(x)
Definition: ladspa.h:310
#define LADSPA_IS_HINT_SAMPLE_RATE(x)
Definition: ladspa.h:313
ArrayOf< wxSlider * > mSliders
Definition: LadspaEffect.h:189
ArrayOf< wxTextCtrl * > mFields
Definition: LadspaEffect.h:190
LADSPA_PortRangeHintDescriptor HintDescriptor
Definition: ladspa.h:340
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
Floats mInputControls
Definition: LadspaEffect.h:173
_LADSPA_PortRangeHint is a structure that gives parameter validation information for a LADSPA (Linux ...
Definition: ladspa.h:337
LADSPA_Data LowerBound
Definition: ladspa.h:345
double mSampleRate
Definition: LadspaEffect.h:161
#define LADSPA_IS_HINT_BOUNDED_ABOVE(x)
Definition: ladspa.h:311
static wxString ToDisplayString(double numberToConvert, int digitsAfterDecimalPoint=-1)
Convert a number to a string, uses the user's locale's decimal separator.
Definition: Internat.cpp:149
LADSPA_Data UpperBound
Definition: ladspa.h:350
void LadspaEffect::OnTextCtrl ( wxCommandEvent &  evt)
private

Definition at line 1715 of file LadspaEffect.cpp.

References Internat::CompatibleToDouble(), ID_Texts, if(), LADSPA_IS_HINT_BOUNDED_ABOVE, LADSPA_IS_HINT_BOUNDED_BELOW, LADSPA_IS_HINT_SAMPLE_RATE, _LADSPA_PortRangeHint::LowerBound, mData, mFields, mSliders, and _LADSPA_Descriptor::PortRangeHints.

1716 {
1717  LadspaEffect *that = reinterpret_cast<LadspaEffect *>(this);
1718  int p = evt.GetId() - ID_Texts;
1719 
1720  float val;
1721  float lower = float(0.0);
1722  float upper = float(10.0);
1723  float range;
1724 
1725  val = Internat::CompatibleToDouble(that->mFields[p]->GetValue());
1726 
1727  LADSPA_PortRangeHint hint = that->mData->PortRangeHints[p];
1728  if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor))
1729  lower = hint.LowerBound;
1730  if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor))
1731  upper = hint.UpperBound;
1732  if (LADSPA_IS_HINT_SAMPLE_RATE(hint.HintDescriptor)) {
1733  lower *= mSampleRate;
1734  upper *= mSampleRate;
1735  }
1736  range = upper - lower;
1737 
1738  if (val < lower)
1739  val = lower;
1740  if (val > upper)
1741  val = upper;
1742 
1743  mInputControls[p] = val;
1744 
1745  that->mSliders[p]->SetValue((int)(((val-lower)/range) * 1000.0 + 0.5));
1746 }
An Effect that calls up a LADSPA plug in, i.e. many possible effects from this one class...
Definition: LadspaEffect.h:42
const LADSPA_PortRangeHint * PortRangeHints
Definition: ladspa.h:419
#define LADSPA_IS_HINT_BOUNDED_BELOW(x)
Definition: ladspa.h:310
#define LADSPA_IS_HINT_SAMPLE_RATE(x)
Definition: ladspa.h:313
ArrayOf< wxSlider * > mSliders
Definition: LadspaEffect.h:189
ArrayOf< wxTextCtrl * > mFields
Definition: LadspaEffect.h:190
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
static bool CompatibleToDouble(const wxString &stringToConvert, double *result)
Convert a string to a number.
Definition: Internat.cpp:122
Floats mInputControls
Definition: LadspaEffect.h:173
_LADSPA_PortRangeHint is a structure that gives parameter validation information for a LADSPA (Linux ...
Definition: ladspa.h:337
if(pTrack &&pTrack->GetDisplay()!=WaveTrack::Spectrum)
LADSPA_Data LowerBound
Definition: ladspa.h:345
double mSampleRate
Definition: LadspaEffect.h:161
#define LADSPA_IS_HINT_BOUNDED_ABOVE(x)
Definition: ladspa.h:311
bool LadspaEffect::PopulateUI ( wxWindow *  parent)
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1159 of file LadspaEffect.cpp.

References _(), NumericTextCtrl::Options::AutoPos(), EffectTypeGenerate, _LADSPA_PortRangeHint::HintDescriptor, ID_Duration, ID_Sliders, ID_Texts, ID_Toggles, LADSPA_IS_HINT_BOUNDED_ABOVE, LADSPA_IS_HINT_BOUNDED_BELOW, LADSPA_IS_HINT_INTEGER, LADSPA_IS_HINT_SAMPLE_RATE, LADSPA_IS_HINT_TOGGLED, LADSPA_IS_PORT_AUDIO, LADSPA_IS_PORT_INPUT, LADSPA_IS_PORT_OUTPUT, LAT1CTOWX, _LADSPA_PortRangeHint::LowerBound, safenew, NumericConverter::TIME, Internat::ToDisplayString(), and _LADSPA_PortRangeHint::UpperBound.

1160 {
1161  mParent = parent;
1162 
1163  mParent->PushEventHandler(this);
1164 
1167  mFields.reinit( mData->PortCount, true);
1170 
1171  wxASSERT(mParent); // To justify safenew
1172  wxScrolledWindow *const w = safenew wxScrolledWindow(mParent,
1173  wxID_ANY,
1174  wxDefaultPosition,
1175  wxDefaultSize,
1176  wxVSCROLL | wxTAB_TRAVERSAL);
1177 
1178  {
1179  auto mainSizer = std::make_unique<wxBoxSizer>(wxVERTICAL);
1180  w->SetScrollRate(0, 20);
1181 
1182  // This fools NVDA into not saying "Panel" when the dialog gets focus
1183  w->SetName(wxT("\a"));
1184  w->SetLabel(wxT("\a"));
1185 
1186  mainSizer->Add(w, 1, wxEXPAND);
1187  mParent->SetSizer(mainSizer.release());
1188  }
1189 
1190  wxSizer *marginSizer;
1191  {
1192  auto uMarginSizer = std::make_unique<wxBoxSizer>(wxVERTICAL);
1193  marginSizer = uMarginSizer.get();
1194 
1195  if (mNumInputControls)
1196  {
1197  auto paramSizer = std::make_unique<wxStaticBoxSizer>(wxVERTICAL, w, _("Effect Settings"));
1198 
1199  auto gridSizer = std::make_unique<wxFlexGridSizer>(5, 0, 0);
1200  gridSizer->AddGrowableCol(3);
1201 
1202  wxControl *item;
1203 
1204  // Add the duration control for generators
1205  if (GetType() == EffectTypeGenerate)
1206  {
1207  item = safenew wxStaticText(w, 0, _("Duration:"));
1208  gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
1209  mDuration = safenew
1213  mHost->GetDuration(),
1214  mSampleRate,
1216  .AutoPos(true));
1217  mDuration->SetName(_("Duration"));
1218  gridSizer->Add(mDuration, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
1219  gridSizer->Add(1, 1, 0);
1220  gridSizer->Add(1, 1, 0);
1221  gridSizer->Add(1, 1, 0);
1222  }
1223 
1224  for (unsigned long p = 0; p < mData->PortCount; p++)
1225  {
1228  {
1229  continue;
1230  }
1231 
1232  wxString labelText = LAT1CTOWX(mData->PortNames[p]);
1233  item = safenew wxStaticText(w, 0, labelText + wxT(":"));
1234  gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
1235 
1236  wxString fieldText;
1238 
1240  {
1241  mToggles[p] = safenew wxCheckBox(w, ID_Toggles + p, wxT(""));
1242  mToggles[p]->SetName(labelText);
1243  mToggles[p]->SetValue(mInputControls[p] > 0);
1244  gridSizer->Add(mToggles[p], 0, wxALL, 5);
1245 
1246  gridSizer->Add(1, 1, 0);
1247  gridSizer->Add(1, 1, 0);
1248  gridSizer->Add(1, 1, 0);
1249  continue;
1250  }
1251 
1252  wxString bound;
1253  float lower = -FLT_MAX;
1254  float upper = FLT_MAX;
1255  bool haslo = false;
1256  bool hashi = false;
1257  bool forceint = false;
1258 
1260  {
1261  lower = hint.LowerBound;
1262  haslo = true;
1263  }
1264 
1266  {
1267  upper = hint.UpperBound;
1268  hashi = true;
1269  }
1270 
1272  {
1273  lower *= mSampleRate;
1274  upper *= mSampleRate;
1275  forceint = true;
1276  }
1277 
1278  // Limit to the UI precision
1279  lower = ceilf(lower * 1000000.0) / 1000000.0;
1280  upper = floorf(upper * 1000000.0) / 1000000.0;
1281  mInputControls[p] = roundf(mInputControls[p] * 1000000.0) / 1000000.0;
1282 
1283  if (haslo && mInputControls[p] < lower)
1284  {
1285  mInputControls[p] = lower;
1286  }
1287 
1288  if (hashi && mInputControls[p] > upper)
1289  {
1290  mInputControls[p] = lower;
1291  }
1292 
1293  // Don't specify a value at creation time. This prevents unwanted events
1294  // being sent to the OnTextCtrl() handler before the associated slider
1295  // has been created.
1296  mFields[p] = safenew wxTextCtrl(w, ID_Texts + p);
1297  mFields[p]->SetName(labelText);
1298  gridSizer->Add(mFields[p], 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
1299 
1300  wxString str;
1301  if (haslo)
1302  {
1303  if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor) || forceint)
1304  {
1305  str.Printf(wxT("%d"), (int)(lower + 0.5));
1306  }
1307  else
1308  {
1309  str = Internat::ToDisplayString(lower);
1310  }
1311  item = safenew wxStaticText(w, 0, str);
1312  gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
1313  }
1314  else
1315  {
1316  gridSizer->Add(1, 1, 0);
1317  }
1318 
1319  mSliders[p] = safenew wxSlider(w, ID_Sliders + p,
1320  0, 0, 1000,
1321  wxDefaultPosition,
1322  wxSize(200, -1));
1323 #if wxUSE_ACCESSIBILITY
1324  // so that name can be set on a standard control
1325  mSliders[p]->SetAccessible(safenew WindowAccessible(mSliders[p]));
1326 #endif
1327  mSliders[p]->SetName(labelText);
1328  gridSizer->Add(mSliders[p], 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, 5);
1329 
1330  if (hashi)
1331  {
1332  if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor) || forceint)
1333  {
1334  str.Printf(wxT("%d"), (int)(upper + 0.5));
1335  }
1336  else
1337  {
1338  str = Internat::ToDisplayString(upper);
1339  }
1340  item = safenew wxStaticText(w, 0, str);
1341  gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, 5);
1342  }
1343  else
1344  {
1345  gridSizer->Add(1, 1, 0);
1346  }
1347 
1348  if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor) || forceint)
1349  {
1350  fieldText.Printf(wxT("%d"), (int)(mInputControls[p] + 0.5));
1351 
1352  IntegerValidator<float> vld(&mInputControls[p]);
1353  vld.SetRange(haslo ? lower : INT_MIN,
1354  hashi ? upper : INT_MAX);
1355  mFields[p]->SetValidator(vld);
1356  }
1357  else
1358  {
1359  fieldText = Internat::ToDisplayString(mInputControls[p]);
1360 
1361  // > 12 decimal places can cause rounding errors in display.
1362  FloatingPointValidator<float> vld(6, &mInputControls[p]);
1363  vld.SetRange(lower, upper);
1364 
1365  // Set number of decimal places
1366  if (upper - lower < 10.0)
1367  {
1368  vld.SetStyle(NumValidatorStyle::THREE_TRAILING_ZEROES);
1369  }
1370  else if (upper - lower < 100.0)
1371  {
1372  vld.SetStyle(NumValidatorStyle::TWO_TRAILING_ZEROES);
1373  }
1374  else
1375  {
1376  vld.SetStyle(NumValidatorStyle::ONE_TRAILING_ZERO);
1377  }
1378 
1379  mFields[p]->SetValidator(vld);
1380  }
1381 
1382  // Set the textctrl value. This will trigger an event so OnTextCtrl()
1383  // can update the slider.
1384  mFields[p]->SetValue(fieldText);
1385  }
1386 
1387  paramSizer->Add(gridSizer.release(), 0, wxEXPAND | wxALL, 5);
1388  marginSizer->Add(paramSizer.release(), 0, wxEXPAND | wxALL, 5);
1389  }
1390 
1391  if (mNumOutputControls > 0)
1392  {
1393  auto paramSizer = std::make_unique<wxStaticBoxSizer>(wxVERTICAL, w, _("Effect Output"));
1394 
1395  auto gridSizer = std::make_unique<wxFlexGridSizer>(2, 0, 0);
1396  gridSizer->AddGrowableCol(1);
1397 
1398  wxControl *item;
1399 
1400  for (unsigned long p = 0; p < mData->PortCount; p++)
1401  {
1404  {
1405  continue;
1406  }
1407 
1408  wxString labelText = LAT1CTOWX(mData->PortNames[p]);
1409  item = safenew wxStaticText(w, 0, labelText + wxT(":"));
1410  gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
1411 
1412  //LADSPA_PortRangeHint hint = mData->PortRangeHints[p];
1413 
1414  wxString bound;
1415  float lower = 0.0;
1416  float upper = 1.0;
1417 
1418  /*
1419  bool haslo = false;
1420  bool hashi = false;
1421  bool forceint = false;
1422 
1423  if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor))
1424  {
1425  lower = hint.LowerBound;
1426  haslo = true;
1427  }
1428 
1429  if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor))
1430  {
1431  upper = hint.UpperBound;
1432  hashi = true;
1433  }
1434 
1435  if (LADSPA_IS_HINT_SAMPLE_RATE(hint.HintDescriptor))
1436  {
1437  lower *= mSampleRate;
1438  upper *= mSampleRate;
1439  forceint = true;
1440  }
1441  */
1442 
1443  // Limit to the UI precision
1444  lower = ceilf(lower * 1000000.0) / 1000000.0;
1445  upper = floorf(upper * 1000000.0) / 1000000.0;
1446  mInputControls[p] = roundf(mInputControls[p] * 1000000.0) / 1000000.0;
1447 
1448  mMeters[p] = safenew LadspaEffectMeter(w, mOutputControls[p], lower, upper);
1449  mMeters[p]->SetLabel(labelText); // for screen readers
1450  gridSizer->Add(mMeters[p], 1, wxEXPAND | wxALIGN_CENTER_VERTICAL | wxALL, 5);
1451  }
1452 
1453  paramSizer->Add(gridSizer.release(), 0, wxEXPAND | wxALL, 5);
1454  marginSizer->Add(paramSizer.release(), 0, wxEXPAND | wxALL, 5);
1455 
1456  RefreshControls(true);
1457  }
1458 
1459  w->SetSizer(uMarginSizer.release());
1460  }
1461 
1462  w->Layout();
1463 
1464  // Try to give the window a sensible default/minimum size
1465  wxSize sz1 = marginSizer->GetMinSize();
1466  wxSize sz2 = mParent->GetMinSize();
1467  w->SetSizeHints(wxSize(wxMin(sz1.x, sz2.x), wxMin(sz1.y, sz2.y)));
1468 
1469  // And let the parent reduce to the NEW minimum if possible
1470  mParent->SetSizeHints(-1, -1);
1471 
1472  return true;
1473 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
EffectType GetType() override
void reinit(Integral count, bool initialize=false)
Definition: MemoryX.h:117
ArrayOf< LadspaEffectMeter * > mMeters
Definition: LadspaEffect.h:193
#define LADSPA_IS_HINT_TOGGLED(x)
Definition: ladspa.h:312
#define LADSPA_IS_HINT_INTEGER(x)
Definition: ladspa.h:315
const LADSPA_PortRangeHint * PortRangeHints
Definition: ladspa.h:419
int LADSPA_PortDescriptor
Definition: ladspa.h:152
#define LADSPA_IS_HINT_BOUNDED_BELOW(x)
Definition: ladspa.h:310
ArrayOf< wxStaticText * > mLabels
Definition: LadspaEffect.h:191
Options & AutoPos(bool enable)
#define LADSPA_IS_HINT_SAMPLE_RATE(x)
Definition: ladspa.h:313
#define safenew
Definition: Audacity.h:230
ArrayOf< wxSlider * > mSliders
Definition: LadspaEffect.h:189
ArrayOf< wxTextCtrl * > mFields
Definition: LadspaEffect.h:190
An alternative to using wxWindowAccessible, which in wxWidgets 3.1.1 contained GetParent() which was ...
LADSPA_PortRangeHintDescriptor HintDescriptor
Definition: ladspa.h:340
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
virtual double GetDuration()=0
void RefreshControls(bool outputOnly=false)
ArrayOf< wxCheckBox * > mToggles
Definition: LadspaEffect.h:192
const char *const * PortNames
Definition: ladspa.h:415
Floats mInputControls
Definition: LadspaEffect.h:173
_LADSPA_PortRangeHint is a structure that gives parameter validation information for a LADSPA (Linux ...
Definition: ladspa.h:337
unsigned long PortCount
Definition: ladspa.h:406
#define LAT1CTOWX(X)
Definition: Internat.h:180
#define LADSPA_IS_PORT_AUDIO(x)
Definition: ladspa.h:171
_("Move Track &Down")+wxT("\t")+(GetActiveProject() -> GetCommandManager() ->GetKeyFromName(wxT("TrackMoveDown")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveTopID, _("Move Track to &Top")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveTop")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveBottomID, _("Move Track to &Bottom")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveBottom")).Raw()), OnMoveTrack)#define SET_TRACK_NAME_PLUGIN_SYMBOLclass SetTrackNameCommand:public AudacityCommand
NumericTextCtrl * mDuration
Definition: LadspaEffect.h:186
#define LADSPA_IS_PORT_INPUT(x)
Definition: ladspa.h:168
wxWindow * mParent
Definition: LadspaEffect.h:188
LADSPA_Data LowerBound
Definition: ladspa.h:345
double mSampleRate
Definition: LadspaEffect.h:161
#define LADSPA_IS_HINT_BOUNDED_ABOVE(x)
Definition: ladspa.h:311
static wxString ToDisplayString(double numberToConvert, int digitsAfterDecimalPoint=-1)
Convert a number to a string, uses the user's locale's decimal separator.
Definition: Internat.cpp:149
int mNumOutputControls
Definition: LadspaEffect.h:174
#define LADSPA_IS_PORT_OUTPUT(x)
Definition: ladspa.h:169
LADSPA_Data UpperBound
Definition: ladspa.h:350
virtual NumericFormatId GetDurationFormat()=0
Floats mOutputControls
Definition: LadspaEffect.h:175
int mNumInputControls
Definition: LadspaEffect.h:172
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
size_t LadspaEffect::ProcessBlock ( float **  inBlock,
float **  outBlock,
size_t  blockLen 
)
overridevirtual

Implements EffectClientInterface.

Definition at line 948 of file LadspaEffect.cpp.

949 {
950  for (int i = 0; i < (int)mAudioIns; i++)
951  {
952  mData->connect_port(mMaster, mInputPorts[i], inBlock[i]);
953  }
954 
955  for (int i = 0; i < (int)mAudioOuts; i++)
956  {
957  mData->connect_port(mMaster, mOutputPorts[i], outBlock[i]);
958  }
959 
960  mData->run(mMaster, blockLen);
961 
962  RefreshControls(true);
963 
964  return blockLen;
965 }
unsigned mAudioIns
Definition: LadspaEffect.h:166
ArrayOf< unsigned long > mInputPorts
Definition: LadspaEffect.h:167
void(* connect_port)(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data *DataLocation)
Definition: ladspa.h:466
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
void RefreshControls(bool outputOnly=false)
void(* run)(LADSPA_Handle Instance, unsigned long SampleCount)
Definition: ladspa.h:505
unsigned mAudioOuts
Definition: LadspaEffect.h:169
LADSPA_Handle mMaster
Definition: LadspaEffect.h:159
ArrayOf< unsigned long > mOutputPorts
Definition: LadspaEffect.h:170
bool LadspaEffect::ProcessFinalize ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 935 of file LadspaEffect.cpp.

936 {
937  if (mReady)
938  {
939  mReady = false;
940 
942  mMaster = NULL;
943  }
944 
945  return true;
946 }
void FreeInstance(LADSPA_Handle handle)
LADSPA_Handle mMaster
Definition: LadspaEffect.h:159
bool LadspaEffect::ProcessInitialize ( sampleCount  totalLen,
ChannelNames  chanMap = NULL 
)
overridevirtual

Implements EffectClientInterface.

Definition at line 917 of file LadspaEffect.cpp.

918 {
919  /* Instantiate the plugin */
920  if (!mReady)
921  {
923  if (!mMaster)
924  {
925  return false;
926  }
927  mReady = true;
928  }
929 
930  mLatencyDone = false;
931 
932  return true;
933 }
LADSPA_Handle InitInstance(float sampleRate)
double mSampleRate
Definition: LadspaEffect.h:161
LADSPA_Handle mMaster
Definition: LadspaEffect.h:159
bool LadspaEffect::RealtimeAddProcessor ( unsigned  numChannels,
float  sampleRate 
)
overridevirtual

Implements EffectClientInterface.

Definition at line 972 of file LadspaEffect.cpp.

973 {
974  LADSPA_Handle slave = InitInstance(sampleRate);
975  if (!slave)
976  {
977  return false;
978  }
979 
980  mSlaves.push_back(slave);
981 
982  return true;
983 }
void * LADSPA_Handle
Definition: ladspa.h:363
LADSPA_Handle InitInstance(float sampleRate)
std::vector< LADSPA_Handle > mSlaves
Definition: LadspaEffect.h:182
bool LadspaEffect::RealtimeFinalize ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 985 of file LadspaEffect.cpp.

986 {
987  for (size_t i = 0, cnt = mSlaves.size(); i < cnt; i++)
988  {
989  FreeInstance(mSlaves[i]);
990  }
991  mSlaves.clear();
992 
993  return true;
994 }
void FreeInstance(LADSPA_Handle handle)
std::vector< LADSPA_Handle > mSlaves
Definition: LadspaEffect.h:182
bool LadspaEffect::RealtimeInitialize ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 967 of file LadspaEffect.cpp.

968 {
969  return true;
970 }
size_t LadspaEffect::RealtimeProcess ( int  group,
float **  inbuf,
float **  outbuf,
size_t  numSamples 
)
overridevirtual

Implements EffectClientInterface.

Definition at line 1011 of file LadspaEffect.cpp.

1015 {
1016  for (int i = 0; i < (int)mAudioIns; i++)
1017  {
1018  mData->connect_port(mSlaves[group], mInputPorts[i], inbuf[i]);
1019  }
1020 
1021  for (int i = 0; i < (int)mAudioOuts; i++)
1022  {
1023  mData->connect_port(mSlaves[group], mOutputPorts[i], outbuf[i]);
1024  }
1025 
1026  mData->run(mSlaves[group], numSamples);
1027 
1028  return numSamples;
1029 }
unsigned mAudioIns
Definition: LadspaEffect.h:166
ArrayOf< unsigned long > mInputPorts
Definition: LadspaEffect.h:167
void(* connect_port)(LADSPA_Handle Instance, unsigned long Port, LADSPA_Data *DataLocation)
Definition: ladspa.h:466
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
void(* run)(LADSPA_Handle Instance, unsigned long SampleCount)
Definition: ladspa.h:505
unsigned mAudioOuts
Definition: LadspaEffect.h:169
std::vector< LADSPA_Handle > mSlaves
Definition: LadspaEffect.h:182
ArrayOf< unsigned long > mOutputPorts
Definition: LadspaEffect.h:170
bool LadspaEffect::RealtimeProcessEnd ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 1031 of file LadspaEffect.cpp.

1032 {
1033  return true;
1034 }
bool LadspaEffect::RealtimeProcessStart ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 1006 of file LadspaEffect.cpp.

1007 {
1008  return true;
1009 }
bool LadspaEffect::RealtimeResume ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 1001 of file LadspaEffect.cpp.

1002 {
1003  return true;
1004 }
bool LadspaEffect::RealtimeSuspend ( )
overridevirtual

Implements EffectClientInterface.

Definition at line 996 of file LadspaEffect.cpp.

997 {
998  return true;
999 }
void LadspaEffect::RefreshControls ( bool  outputOnly = false)
private

Definition at line 1748 of file LadspaEffect.cpp.

References _LADSPA_PortRangeHint::HintDescriptor, LADSPA_IS_HINT_INTEGER, LADSPA_IS_HINT_SAMPLE_RATE, LADSPA_IS_HINT_TOGGLED, LADSPA_IS_PORT_CONTROL, LADSPA_IS_PORT_OUTPUT, and Internat::ToDisplayString().

1749 {
1750  if (!mParent)
1751  {
1752  return;
1753  }
1754 
1755  for (unsigned long p = 0; p < mData->PortCount; p++)
1756  {
1758  if (!(LADSPA_IS_PORT_CONTROL(d)))
1759  {
1760  continue;
1761  }
1762 
1763  wxString fieldText;
1765 
1766  bool forceint = false;
1768  {
1769  forceint = true;
1770  }
1771 
1772  if (LADSPA_IS_PORT_OUTPUT(d))
1773  {
1774  continue;
1775  }
1776 
1777  if (outputOnly)
1778  {
1779  continue;
1780  }
1781 
1783  {
1784  mToggles[p]->SetValue(mInputControls[p] > 0);
1785  continue;
1786  }
1787 
1788  if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor) || forceint)
1789  {
1790  fieldText.Printf(wxT("%d"), (int)(mInputControls[p] + 0.5));
1791  }
1792  else
1793  {
1794  fieldText = Internat::ToDisplayString(mInputControls[p]);
1795  }
1796 
1797  // Set the textctrl value. This will trigger an event so OnTextCtrl()
1798  // can update the slider.
1799  mFields[p]->SetValue(fieldText);
1800  }
1801 }
#define LADSPA_IS_HINT_TOGGLED(x)
Definition: ladspa.h:312
#define LADSPA_IS_HINT_INTEGER(x)
Definition: ladspa.h:315
const LADSPA_PortRangeHint * PortRangeHints
Definition: ladspa.h:419
int LADSPA_PortDescriptor
Definition: ladspa.h:152
#define LADSPA_IS_HINT_SAMPLE_RATE(x)
Definition: ladspa.h:313
ArrayOf< wxTextCtrl * > mFields
Definition: LadspaEffect.h:190
LADSPA_PortRangeHintDescriptor HintDescriptor
Definition: ladspa.h:340
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LADSPA_IS_PORT_CONTROL(x)
Definition: ladspa.h:170
ArrayOf< wxCheckBox * > mToggles
Definition: LadspaEffect.h:192
Floats mInputControls
Definition: LadspaEffect.h:173
_LADSPA_PortRangeHint is a structure that gives parameter validation information for a LADSPA (Linux ...
Definition: ladspa.h:337
unsigned long PortCount
Definition: ladspa.h:406
wxWindow * mParent
Definition: LadspaEffect.h:188
static wxString ToDisplayString(double numberToConvert, int digitsAfterDecimalPoint=-1)
Convert a number to a string, uses the user's locale's decimal separator.
Definition: Internat.cpp:149
#define LADSPA_IS_PORT_OUTPUT(x)
Definition: ladspa.h:169
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
bool LadspaEffect::SaveParameters ( const wxString &  group)
private

Definition at line 1612 of file LadspaEffect.cpp.

References CommandParameters::GetParameters().

1613 {
1614  CommandParameters eap;
1615  if (!GetAutomationParameters(eap))
1616  {
1617  return false;
1618  }
1619 
1620  wxString parms;
1621  if (!eap.GetParameters(parms))
1622  {
1623  return false;
1624  }
1625 
1626  return mHost->SetPrivateConfig(group, wxT("Parameters"), parms);
1627 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
bool GetAutomationParameters(CommandParameters &parms) override
CommandParameters, derived from wxFileConfig, is essentially doing the same things as the Shuttle cla...
bool GetParameters(wxString &parms)
virtual bool SetPrivateConfig(const wxString &group, const wxString &key, const wxString &value)=0
bool LadspaEffect::SaveUserPreset ( const wxString &  name)
overridevirtual

Implements EffectClientInterface.

Definition at line 1123 of file LadspaEffect.cpp.

1124 {
1125  return SaveParameters(name);
1126 }
bool SaveParameters(const wxString &group)
const wxChar * name
Definition: Distortion.cpp:94
bool LadspaEffect::SetAutomationParameters ( CommandParameters parms)
overridevirtual

Implements EffectClientInterface.

Definition at line 1089 of file LadspaEffect.cpp.

References LADSPA_IS_PORT_CONTROL, LADSPA_IS_PORT_INPUT, and LAT1CTOWX.

1090 {
1091  for (unsigned long p = 0; p < mData->PortCount; p++)
1092  {
1094 
1096  {
1097  wxString labelText = LAT1CTOWX(mData->PortNames[p]);
1098  double d = 0.0;
1099  if (!parms.Read(labelText, &d))
1100  {
1101  return false;
1102  }
1103 
1104  mInputControls[p] = d;
1105  }
1106  }
1107 
1108  return true;
1109 }
int LADSPA_PortDescriptor
Definition: ladspa.h:152
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LADSPA_IS_PORT_CONTROL(x)
Definition: ladspa.h:170
const char *const * PortNames
Definition: ladspa.h:415
Floats mInputControls
Definition: LadspaEffect.h:173
unsigned long PortCount
Definition: ladspa.h:406
#define LAT1CTOWX(X)
Definition: Internat.h:180
#define LADSPA_IS_PORT_INPUT(x)
Definition: ladspa.h:168
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
size_t LadspaEffect::SetBlockSize ( size_t  maxBlockSize)
overridevirtual

Implements EffectClientInterface.

Definition at line 889 of file LadspaEffect.cpp.

890 {
891  mBlockSize = maxBlockSize;
892 
893  return mBlockSize;
894 }
size_t mBlockSize
Definition: LadspaEffect.h:162
bool LadspaEffect::SetHost ( EffectHostInterface host)
overridevirtual

Implements EffectClientInterface.

Definition at line 702 of file LadspaEffect.cpp.

References _LADSPA_PortRangeHint::HintDescriptor, LADSPA_IS_HINT_BOUNDED_ABOVE, LADSPA_IS_HINT_BOUNDED_BELOW, LADSPA_IS_HINT_DEFAULT_0, LADSPA_IS_HINT_DEFAULT_1, LADSPA_IS_HINT_DEFAULT_100, LADSPA_IS_HINT_DEFAULT_440, LADSPA_IS_HINT_DEFAULT_HIGH, LADSPA_IS_HINT_DEFAULT_LOW, LADSPA_IS_HINT_DEFAULT_MAXIMUM, LADSPA_IS_HINT_DEFAULT_MIDDLE, LADSPA_IS_HINT_DEFAULT_MINIMUM, LADSPA_IS_HINT_LOGARITHMIC, LADSPA_IS_HINT_SAMPLE_RATE, LADSPA_IS_PORT_AUDIO, LADSPA_IS_PORT_CONTROL, LADSPA_IS_PORT_INPUT, LADSPA_IS_PORT_OUTPUT, _LADSPA_PortRangeHint::LowerBound, and _LADSPA_PortRangeHint::UpperBound.

Referenced by LadspaEffectsModule::DiscoverPluginsAtPath().

703 {
704  mHost = host;
705 
706  if (!Load())
707  {
708  return false;
709  }
710 
715 
716  for (unsigned long p = 0; p < mData->PortCount; p++)
717  {
719 
720  // Collect the audio ports
721  if (LADSPA_IS_PORT_AUDIO(d))
722  {
723  if (LADSPA_IS_PORT_INPUT(d))
724  {
725  mInputPorts[mAudioIns++] = p;
726  }
727  else if (LADSPA_IS_PORT_OUTPUT(d))
728  {
729  mOutputPorts[mAudioOuts++] = p;
730  }
731  }
732  // Determine the port's default value
734  {
735  mInteractive = true;
736 
738  float val = float(1.0);
739  float lower = hint.LowerBound;
740  float upper = hint.UpperBound;
741 
743  {
744  lower *= mSampleRate;
745  upper *= mSampleRate;
746  }
747 
748  if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor) && val < lower)
749  {
750  val = lower;
751  }
752 
753  if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor) && val > upper)
754  {
755  val = upper;
756  }
757 
759  {
760  val = lower;
761  }
762 
764  {
765  val = upper;
766  }
767 
769  {
771  {
772  val = exp(log(lower) * 0.75f + log(upper) * 0.25f);
773  }
774  else
775  {
776  val = lower * 0.75f + upper * 0.25f;
777  }
778  }
779 
781  {
783  {
784  val = exp(log(lower) * 0.5f + log(upper) * 0.5f);
785  }
786  else
787  {
788  val = lower * 0.5f + upper * 0.5f;
789  }
790  }
791 
793  {
795  {
796  val = exp(log(lower) * 0.25f + log(upper) * 0.75f);
797  }
798  else
799  {
800  val = lower * 0.25f + upper * 0.75f;
801  }
802  }
803 
805  {
806  val = 0.0f;
807  }
808 
810  {
811  val = 1.0f;
812  }
813 
815  {
816  val = 100.0f;
817  }
818 
820  {
821  val = 440.0f;
822  }
823 
825  mInputControls[p] = val;
826  }
828  {
829  mOutputControls[p] = 0.0;
830 
831  // LADSPA effects have a convention of providing latency on an output
832  // control port whose name is "latency".
833  if (strcmp(mData->PortNames[p], "latency") == 0)
834  {
835  mLatencyPort = p;
836  }
837  else
838  {
839  mInteractive = true;
841  }
842  }
843  }
844 
845  // mHost will be null during registration
846  if (mHost)
847  {
848  mHost->GetSharedConfig(wxT("Options"), wxT("UseLatency"), mUseLatency, true);
849 
850  bool haveDefaults;
851  mHost->GetPrivateConfig(mHost->GetFactoryDefaultsGroup(), wxT("Initialized"), haveDefaults, false);
852  if (!haveDefaults)
853  {
855  mHost->SetPrivateConfig(mHost->GetFactoryDefaultsGroup(), wxT("Initialized"), true);
856  }
857 
859  }
860 
861  return true;
862 }
#define LADSPA_IS_HINT_DEFAULT_LOW(x)
Definition: ladspa.h:320
unsigned mAudioIns
Definition: LadspaEffect.h:166
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
bool SaveParameters(const wxString &group)
void reinit(Integral count, bool initialize=false)
Definition: MemoryX.h:117
const LADSPA_PortRangeHint * PortRangeHints
Definition: ladspa.h:419
int LADSPA_PortDescriptor
Definition: ladspa.h:152
virtual wxString GetFactoryDefaultsGroup()=0
#define LADSPA_IS_HINT_DEFAULT_100(x)
Definition: ladspa.h:332
#define LADSPA_IS_HINT_BOUNDED_BELOW(x)
Definition: ladspa.h:310
ArrayOf< unsigned long > mInputPorts
Definition: LadspaEffect.h:167
#define LADSPA_IS_HINT_DEFAULT_HIGH(x)
Definition: ladspa.h:324
virtual wxString GetCurrentSettingsGroup()=0
#define LADSPA_IS_HINT_SAMPLE_RATE(x)
Definition: ladspa.h:313
LADSPA_PortRangeHintDescriptor HintDescriptor
Definition: ladspa.h:340
const LADSPA_Descriptor * mData
Definition: LadspaEffect.h:153
#define LADSPA_IS_HINT_DEFAULT_MIDDLE(x)
Definition: ladspa.h:322
#define LADSPA_IS_HINT_DEFAULT_0(x)
Definition: ladspa.h:328
#define LADSPA_IS_PORT_CONTROL(x)
Definition: ladspa.h:170
#define LADSPA_IS_HINT_DEFAULT_440(x)
Definition: ladspa.h:334
virtual bool GetSharedConfig(const wxString &group, const wxString &key, wxString &value, const wxString &defval)=0
const char *const * PortNames
Definition: ladspa.h:415
Floats mInputControls
Definition: LadspaEffect.h:173
virtual bool GetPrivateConfig(const wxString &group, const wxString &key, wxString &value, const wxString &defval)=0
_LADSPA_PortRangeHint is a structure that gives parameter validation information for a LADSPA (Linux ...
Definition: ladspa.h:337
unsigned long PortCount
Definition: ladspa.h:406
#define LADSPA_IS_HINT_DEFAULT_MINIMUM(x)
Definition: ladspa.h:318
#define LADSPA_IS_PORT_AUDIO(x)
Definition: ladspa.h:171
bool LoadParameters(const wxString &group)
#define LADSPA_IS_HINT_DEFAULT_MAXIMUM(x)
Definition: ladspa.h:326
unsigned mAudioOuts
Definition: LadspaEffect.h:169
#define LADSPA_IS_PORT_INPUT(x)
Definition: ladspa.h:168
LADSPA_Data LowerBound
Definition: ladspa.h:345
double mSampleRate
Definition: LadspaEffect.h:161
#define LADSPA_IS_HINT_BOUNDED_ABOVE(x)
Definition: ladspa.h:311
#define LADSPA_IS_HINT_LOGARITHMIC(x)
Definition: ladspa.h:314
virtual bool SetPrivateConfig(const wxString &group, const wxString &key, const wxString &value)=0
int mNumOutputControls
Definition: LadspaEffect.h:174
#define LADSPA_IS_PORT_OUTPUT(x)
Definition: ladspa.h:169
LADSPA_Data UpperBound
Definition: ladspa.h:350
#define LADSPA_IS_HINT_DEFAULT_1(x)
Definition: ladspa.h:330
Floats mOutputControls
Definition: LadspaEffect.h:175
int mNumInputControls
Definition: LadspaEffect.h:172
const LADSPA_PortDescriptor * PortDescriptors
Definition: ladspa.h:410
ArrayOf< unsigned long > mOutputPorts
Definition: LadspaEffect.h:170
void LadspaEffect::SetHostUI ( EffectUIHostInterface host)
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1154 of file LadspaEffect.cpp.

1155 {
1156  mUIHost = host;
1157 }
EffectUIHostInterface * mUIHost
Definition: LadspaEffect.h:184
void LadspaEffect::SetSampleRate ( double  rate)
overridevirtual

Implements EffectClientInterface.

Definition at line 884 of file LadspaEffect.cpp.

885 {
886  mSampleRate = rate;
887 }
double mSampleRate
Definition: LadspaEffect.h:161
bool LadspaEffect::ShowInterface ( wxWindow *  parent,
bool  forceModal = false 
)
overridevirtual

Implements EffectClientInterface.

Definition at line 1036 of file LadspaEffect.cpp.

References EffectTypeAnalyze, and valueRestorer().

1037 {
1038  if (mDialog)
1039  {
1040  if ( mDialog->Close(true) )
1041  mDialog = nullptr;
1042  return false;
1043  }
1044 
1045  // mDialog is null
1046  auto cleanup = valueRestorer( mDialog );
1047 
1048  mDialog = mHost->CreateUI(parent, this);
1049  if (!mDialog)
1050  {
1051  return false;
1052  }
1053 
1054  mDialog->Layout();
1055  mDialog->Fit();
1056  mDialog->SetMinSize(mDialog->GetSize());
1057 
1058  if ((SupportsRealtime() || GetType() == EffectTypeAnalyze) && !forceModal)
1059  {
1060  mDialog->Show();
1061  cleanup.release();
1062 
1063  return false;
1064  }
1065 
1066  bool res = mDialog->ShowModal() != 0;
1067 
1068  return res;
1069 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
EffectType GetType() override
ValueRestorer< T > valueRestorer(T &var)
Definition: MemoryX.h:494
wxDialog * mDialog
Definition: LadspaEffect.h:187
virtual wxDialog * CreateUI(wxWindow *parent, EffectUIClientInterface *client)=0
bool SupportsRealtime() override
void LadspaEffect::ShowOptions ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1534 of file LadspaEffect.cpp.

1535 {
1537  if (dlg.ShowModal())
1538  {
1539  // Reinitialize configuration options
1540  mHost->GetSharedConfig(wxT("Options"), wxT("UseLatency"), mUseLatency, true);
1541  }
1542 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
virtual bool GetSharedConfig(const wxString &group, const wxString &key, wxString &value, const wxString &defval)=0
wxWindow * mParent
Definition: LadspaEffect.h:188
bool LadspaEffect::SupportsAutomation ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 693 of file LadspaEffect.cpp.

694 {
695  return mNumInputControls > 0;
696 }
int mNumInputControls
Definition: LadspaEffect.h:172
bool LadspaEffect::SupportsRealtime ( )
overridevirtual

Implements EffectDefinitionInterface.

Definition at line 688 of file LadspaEffect.cpp.

References EffectTypeGenerate.

689 {
690  return GetType() != EffectTypeGenerate;
691 }
EffectType GetType() override
void LadspaEffect::Unload ( )
private

Definition at line 1587 of file LadspaEffect.cpp.

1588 {
1589  if (mLib.IsLoaded())
1590  {
1591  mLib.Unload();
1592  }
1593 }
wxDynamicLibrary mLib
Definition: LadspaEffect.h:152
bool LadspaEffect::ValidateUI ( )
overridevirtual

Implements EffectUIClientInterface.

Definition at line 1480 of file LadspaEffect.cpp.

References EffectTypeGenerate.

1481 {
1482  if (!mParent->Validate())
1483  {
1484  return false;
1485  }
1486 
1487  if (GetType() == EffectTypeGenerate)
1488  {
1490  }
1491 
1492  return true;
1493 }
EffectHostInterface * mHost
Definition: LadspaEffect.h:150
EffectType GetType() override
NumericTextCtrl * mDuration
Definition: LadspaEffect.h:186
wxWindow * mParent
Definition: LadspaEffect.h:188
virtual void SetDuration(double seconds)=0

Friends And Related Function Documentation

friend class LadspaEffectsModule
friend

Definition at line 197 of file LadspaEffect.h.

Member Data Documentation

unsigned LadspaEffect::mAudioIns
private

Definition at line 166 of file LadspaEffect.h.

unsigned LadspaEffect::mAudioOuts
private

Definition at line 169 of file LadspaEffect.h.

size_t LadspaEffect::mBlockSize
private

Definition at line 162 of file LadspaEffect.h.

const LADSPA_Descriptor* LadspaEffect::mData
private

Definition at line 153 of file LadspaEffect.h.

Referenced by OnTextCtrl().

wxDialog* LadspaEffect::mDialog
private

Definition at line 187 of file LadspaEffect.h.

NumericTextCtrl* LadspaEffect::mDuration
private

Definition at line 186 of file LadspaEffect.h.

ArrayOf<wxTextCtrl*> LadspaEffect::mFields
private

Definition at line 190 of file LadspaEffect.h.

Referenced by OnTextCtrl().

EffectHostInterface* LadspaEffect::mHost
private

Definition at line 150 of file LadspaEffect.h.

int LadspaEffect::mIndex
private

Definition at line 149 of file LadspaEffect.h.

Floats LadspaEffect::mInputControls
private

Definition at line 173 of file LadspaEffect.h.

ArrayOf<unsigned long> LadspaEffect::mInputPorts
private

Definition at line 167 of file LadspaEffect.h.

bool LadspaEffect::mInteractive
private

Definition at line 164 of file LadspaEffect.h.

ArrayOf<wxStaticText*> LadspaEffect::mLabels
private

Definition at line 191 of file LadspaEffect.h.

bool LadspaEffect::mLatencyDone
private

Definition at line 179 of file LadspaEffect.h.

int LadspaEffect::mLatencyPort
private

Definition at line 178 of file LadspaEffect.h.

wxDynamicLibrary LadspaEffect::mLib
private

Definition at line 152 of file LadspaEffect.h.

LADSPA_Handle LadspaEffect::mMaster
private

Definition at line 159 of file LadspaEffect.h.

ArrayOf<LadspaEffectMeter *> LadspaEffect::mMeters
private

Definition at line 193 of file LadspaEffect.h.

int LadspaEffect::mNumInputControls
private

Definition at line 172 of file LadspaEffect.h.

int LadspaEffect::mNumOutputControls
private

Definition at line 174 of file LadspaEffect.h.

Floats LadspaEffect::mOutputControls
private

Definition at line 175 of file LadspaEffect.h.

ArrayOf<unsigned long> LadspaEffect::mOutputPorts
private

Definition at line 170 of file LadspaEffect.h.

wxWindow* LadspaEffect::mParent
private

Definition at line 188 of file LadspaEffect.h.

wxString LadspaEffect::mPath
private

Definition at line 148 of file LadspaEffect.h.

bool LadspaEffect::mReady
private

Definition at line 157 of file LadspaEffect.h.

double LadspaEffect::mSampleRate
private

Definition at line 161 of file LadspaEffect.h.

std::vector<LADSPA_Handle> LadspaEffect::mSlaves
private

Definition at line 182 of file LadspaEffect.h.

ArrayOf<wxSlider*> LadspaEffect::mSliders
private

Definition at line 189 of file LadspaEffect.h.

Referenced by OnTextCtrl().

ArrayOf<wxCheckBox*> LadspaEffect::mToggles
private

Definition at line 192 of file LadspaEffect.h.

EffectUIHostInterface* LadspaEffect::mUIHost
private

Definition at line 184 of file LadspaEffect.h.

bool LadspaEffect::mUseLatency
private

Definition at line 177 of file LadspaEffect.h.

wxString LadspaEffect::pluginName
private

Definition at line 155 of file LadspaEffect.h.


The documentation for this class was generated from the following files: