hydrogen 1.2.3
LadspaFX.h
Go to the documentation of this file.
1/*
2 * Hydrogen
3 * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net]
4 * Copyright(c) 2008-2024 The hydrogen development team [hydrogen-devel@lists.sourceforge.net]
5 *
6 * http://www.hydrogen-music.org
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY, without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see https://www.gnu.org/licenses
20 *
21 */
22#ifndef LADSPA_FX_H
23#define LADSPA_FX_H
24
25#include <core/config.h>
26#if defined(H2CORE_HAVE_LADSPA) || _DOXYGEN_
27
28#include <QLibrary>
29
30#include <vector>
31#include <list>
32#include "ladspa.h"
33#include <core/Object.h>
34
35namespace H2Core
36{
37
39class LadspaFXInfo : public H2Core::Object<LadspaFXInfo>
40{
42public:
43 LadspaFXInfo( const QString& sName );
45
46 QString m_sFilename;
47 QString m_sID;
48 QString m_sLabel;
49 QString m_sName;
50 QString m_sMaker;
51 QString m_sCopyright;
52 unsigned m_nICPorts;
53 unsigned m_nOCPorts;
54 unsigned m_nIAPorts;
55 unsigned m_nOAPorts;
56 static bool alphabeticOrder( LadspaFXInfo* a, LadspaFXInfo* b );
57};
58
59
60
62class LadspaFXGroup : public H2Core::Object<LadspaFXGroup>
63{
65public:
66 LadspaFXGroup( const QString& sName );
68
69 const QString& getName() const {
70 return m_sName;
71 }
72
73 void addLadspaInfo( LadspaFXInfo *pInfo );
74 std::vector<LadspaFXInfo*> getLadspaInfo() const {
75 return m_ladspaList;
76 }
77
78 void addChild( LadspaFXGroup *pChild );
79 std::vector<LadspaFXGroup*> getChildList() const {
80 return m_childGroups;
81 }
82
83 void clear();
84
86 void sort();
87
88
89private:
90 QString m_sName;
91 std::vector<LadspaFXInfo*> m_ladspaList;
92 std::vector<LadspaFXGroup*> m_childGroups;
93};
94
95
96
98class LadspaControlPort : public H2Core::Object<LadspaControlPort>
99{
101public:
102 QString sName;
103 bool isToggle = false;
104 bool m_bIsInteger = false;
105 LADSPA_Data fDefaultValue = 0.0;
106 LADSPA_Data fControlValue = 0.0;
107 LADSPA_Data fLowerBound = 0.0;
108 LADSPA_Data fUpperBound = 0.0;
109
111};
112
113
114
116class LadspaFX : public H2Core::Object<LadspaFX>
117{
119public:
120 enum {
124 };
125
126 //unsigned m_nBufferSize;
127
130
131 std::vector<LadspaControlPort*> inputControlPorts;
132 std::vector<LadspaControlPort*> outputControlPorts;
133
134 ~LadspaFX();
135
136 void connectAudioPorts( float* pIn_L, float* pIn_R, float* pOut_L, float* pOut_R );
137 void activate();
138 void deactivate();
139 void processFX( unsigned nFrames );
140
141
142 const QString& getPluginLabel() const {
143 return m_sLabel;
144 }
145
146 const QString& getPluginName() const {
147 return m_sName;
148 }
149 void setPluginName( const QString& sName );
150
151 const QString& getLibraryPath() const {
152 return m_sLibraryPath;
153 }
154
155 bool isEnabled() const {
156 return m_bEnabled;
157 }
158 void setEnabled( bool bEnabled );
159
160 static LadspaFX* load( const QString& sLibraryPath, const QString& sPluginLabel, long nSampleRate );
161
162 int getPluginType() const {
163 return m_pluginType;
164 }
165
166 float getVolume() const {
167 return m_fVolume;
168 }
169 void setVolume( float fVolume );
170
171
172private:
175 bool m_bActivated; // Guard against plugins that can't be deactivated before being activated (
176 QString m_sLabel;
177 QString m_sName;
179
180 QLibrary *m_pLibrary;
181
182 const LADSPA_Descriptor * m_d;
183 LADSPA_Handle m_handle;
185
186 unsigned m_nICPorts;
187 unsigned m_nOCPorts;
188 unsigned m_nIAPorts;
189 unsigned m_nOAPorts;
190
191
192 LadspaFX( const QString& sLibraryPath, const QString& sPluginLabel );
193};
194
195};
196
197#endif
198
199#endif // H2CORE_HAVE_LADSPA
#define H2_OBJECT(name)
Definition Object.h:224
LADSPA_Data fDefaultValue
Definition LadspaFX.h:105
LADSPA_Data fControlValue
Definition LadspaFX.h:106
std::vector< LadspaFXInfo * > getLadspaInfo() const
Definition LadspaFX.h:74
const QString & getName() const
Definition LadspaFX.h:69
void addChild(LadspaFXGroup *pChild)
Definition LadspaFx.cpp:71
void addLadspaInfo(LadspaFXInfo *pInfo)
Definition LadspaFx.cpp:64
std::vector< LadspaFXInfo * > m_ladspaList
Definition LadspaFX.h:91
static bool alphabeticOrder(LadspaFXGroup *, LadspaFXGroup *)
Definition LadspaFx.cpp:77
LadspaFXGroup(const QString &sName)
Definition LadspaFx.cpp:40
std::vector< LadspaFXGroup * > m_childGroups
Definition LadspaFX.h:92
std::vector< LadspaFXGroup * > getChildList() const
Definition LadspaFX.h:79
QString m_sFilename
plugin filename
Definition LadspaFX.h:46
unsigned m_nIAPorts
input audio port
Definition LadspaFX.h:54
unsigned m_nOAPorts
output audio port
Definition LadspaFX.h:55
LadspaFXInfo(const QString &sName)
Definition LadspaFx.cpp:94
static bool alphabeticOrder(LadspaFXInfo *a, LadspaFXInfo *b)
Definition LadspaFx.cpp:112
unsigned m_nICPorts
input control port
Definition LadspaFX.h:52
unsigned m_nOCPorts
output control port
Definition LadspaFX.h:53
LADSPA_Handle m_handle
Definition LadspaFX.h:183
std::vector< LadspaControlPort * > inputControlPorts
Definition LadspaFX.h:131
QString m_sName
Definition LadspaFX.h:177
float * m_pBuffer_L
Definition LadspaFX.h:128
const LADSPA_Descriptor * m_d
Definition LadspaFX.h:182
void setEnabled(bool bEnabled)
Definition LadspaFx.cpp:201
int getPluginType() const
Definition LadspaFX.h:162
const QString & getPluginName() const
Definition LadspaFX.h:146
const QString & getLibraryPath() const
Definition LadspaFX.h:151
unsigned m_nIAPorts
input audio port
Definition LadspaFX.h:188
unsigned m_nOAPorts
output audio port
Definition LadspaFX.h:189
float * m_pBuffer_R
Definition LadspaFX.h:129
void setVolume(float fVolume)
Definition LadspaFx.cpp:472
const QString & getPluginLabel() const
Definition LadspaFX.h:142
std::vector< LadspaControlPort * > outputControlPorts
Definition LadspaFX.h:132
unsigned m_nICPorts
input control port
Definition LadspaFX.h:186
LadspaFX(const QString &sLibraryPath, const QString &sPluginLabel)
Definition LadspaFx.cpp:122
bool isEnabled() const
Definition LadspaFX.h:155
void setPluginName(const QString &sName)
Definition LadspaFx.cpp:194
void connectAudioPorts(float *pIn_L, float *pIn_R, float *pOut_L, float *pOut_R)
Definition LadspaFx.cpp:399
float getVolume() const
Definition LadspaFX.h:166
QLibrary * m_pLibrary
Definition LadspaFX.h:180
QString m_sLabel
Definition LadspaFX.h:176
unsigned m_nOCPorts
output control port
Definition LadspaFX.h:187
void processFX(unsigned nFrames)
Definition LadspaFx.cpp:439
QString m_sLibraryPath
Definition LadspaFX.h:178
static LadspaFX * load(const QString &sLibraryPath, const QString &sPluginLabel, long nSampleRate)
Definition LadspaFx.cpp:211