4
4
// $Id: plugin.h,v 1.9.2.13 2009/12/06 01:25:21 terminator356 Exp $
6
6
// (C) Copyright 2000 Werner Schweer (ws@seh.de)
7
// (C) Copyright 2011 Tim E. Real (terminator356 on sourceforge)
9
// This program is free software; you can redistribute it and/or
10
// modify it under the terms of the GNU General Public License
11
// as published by the Free Software Foundation; version 2 of
12
// the License, or (at your option) any later version.
14
// This program is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
// GNU General Public License for more details.
19
// You should have received a copy of the GNU General Public License
20
// along with this program; if not, write to the Free Software
21
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
7
23
//=========================================================
9
25
#ifndef __PLUGIN_H__
52
73
class MidiController;
54
75
//---------------------------------------------------------
56
//---------------------------------------------------------
58
class PluginLoader : public QUiLoader
61
virtual QWidget* createWidget(const QString & className, QWidget * parent = 0, const QString & name = QString());
62
PluginLoader(QObject * parent = 0) : QUiLoader(parent) {}
66
//---------------------------------------------------------
68
//---------------------------------------------------------
73
void range(unsigned long i, float*, float*) const;
77
//---------------------------------------------------------
79
77
//---------------------------------------------------------
145
143
if (plugin && plugin->cleanup)
146
144
plugin->cleanup(handle);
148
//void connectPort(LADSPA_Handle handle, int port, float* value) {
149
void connectPort(LADSPA_Handle handle, unsigned long port, float* value) { // p4.0.21
146
void connectPort(LADSPA_Handle handle, unsigned long port, float* value) {
151
148
plugin->connect_port(handle, port, value);
153
//void apply(LADSPA_Handle handle, int n) {
154
void apply(LADSPA_Handle handle, unsigned long n) { // p4.0.21
150
void apply(LADSPA_Handle handle, unsigned long n) {
156
152
plugin->run(handle, n);
174
168
return plugin->PortRangeHints[i];
177
//double defaultValue(unsigned long port) const;
178
float defaultValue(unsigned long port) const; // p4.0.21
171
float defaultValue(unsigned long port) const;
179
172
void range(unsigned long i, float*, float*) const;
173
CtrlValueType ctrlValueType(unsigned long /*i*/) const;
174
CtrlList::Mode ctrlMode(unsigned long /*i*/) const;
181
176
const char* portName(unsigned long i) {
182
177
return plugin ? plugin->PortNames[i] : 0;
190
185
unsigned long controlInPorts() const { return _controlInPorts; }
191
186
unsigned long controlOutPorts() const { return _controlOutPorts; }
192
187
bool inPlaceCapable() const { return _inPlaceCapable; }
195
bool isLog(int k) const {
196
LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]];
197
return LADSPA_IS_HINT_LOGARITHMIC(r.HintDescriptor);
199
bool isBool(int k) const {
200
return LADSPA_IS_HINT_TOGGLED(plugin->PortRangeHints[pIdx[k]].HintDescriptor);
202
bool isInt(int k) const {
203
LADSPA_PortRangeHint r = plugin->PortRangeHints[pIdx[k]];
204
return LADSPA_IS_HINT_INTEGER(r.HintDescriptor);
209
190
typedef std::list<Plugin>::iterator iPlugin;
240
221
//---------------------------------------------------------
242
//---------------------------------------------------------
246
GUI_SLIDER, GUI_SWITCH, GUI_METER
252
QWidget* actuator; // Slider or Toggle Button (SWITCH)
255
//---------------------------------------------------------
257
//---------------------------------------------------------
261
SLIDER, DOUBLE_LABEL, QCHECKBOX, QCOMBOBOX
266
unsigned long param; // p4.0.21
276
bool on() const { return _on; }
277
void setOn(bool val) { _on = val; }
278
int pluginID() { return plugin()->id(); }
279
int id() { return _id; }
280
QString pluginLabel() const { return _plugin->label(); }
281
QString name() const { return _name; }
283
AudioTrack* track() { return _track; }
285
void enableController(int i, bool v = true) { controls[i].enCtrl = v; }
286
bool controllerEnabled(int i) const { return controls[i].enCtrl; }
287
bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; }
288
void updateControllers();
290
void writeConfiguration(int level, Xml& xml);
291
bool readConfiguration(Xml& xml, bool readPreset=false);
293
int parameters() const { return controlPorts; }
294
void setParam(int i, double val) { controls[i].tmpVal = val; }
295
double param(int i) const { return controls[i].val; }
296
const char* paramName(int i) { return _plugin->portName(controls[i].idx); }
297
LADSPA_PortRangeHint range(int i)
299
return _plugin->range(controls[i].idx);
304
//---------------------------------------------------------
306
223
//---------------------------------------------------------
330
246
virtual AudioTrack* track() = 0;
332
//virtual void enableController(int /*i*/, bool /*v*/ = true) = 0;
333
//virtual bool controllerEnabled(int /*i*/) const = 0;
334
//virtual bool controllerEnabled2(int /*i*/) const = 0;
335
virtual void enableController(unsigned long /*i*/, bool /*v*/ = true) = 0; // p4.0.21
248
virtual void enableController(unsigned long /*i*/, bool /*v*/ = true) = 0;
336
249
virtual bool controllerEnabled(unsigned long /*i*/) const = 0;
337
250
virtual bool controllerEnabled2(unsigned long /*i*/) const = 0;
338
251
virtual void updateControllers() = 0;
340
253
virtual void writeConfiguration(int /*level*/, Xml& /*xml*/) = 0;
341
254
virtual bool readConfiguration(Xml& /*xml*/, bool /*readPreset*/=false) = 0;
343
//virtual int parameters() const = 0;
344
//virtual void setParam(int /*i*/, double /*val*/) = 0;
345
//virtual double param(int /*i*/) const = 0;
346
//virtual const char* paramName(int /*i*/) = 0;
347
//virtual LADSPA_PortRangeHint range(int /*i*/) = 0;
348
virtual unsigned long parameters() const = 0; // p4.0.21
256
virtual unsigned long parameters() const = 0;
349
257
virtual unsigned long parametersOut() const = 0;
350
258
virtual void setParam(unsigned long /*i*/, float /*val*/) = 0;
351
259
virtual float param(unsigned long /*i*/) const = 0;
354
262
virtual const char* paramOutName(unsigned long /*i*/) = 0;
355
263
virtual LADSPA_PortRangeHint range(unsigned long /*i*/) = 0;
356
264
virtual LADSPA_PortRangeHint rangeOut(unsigned long /*i*/) = 0;
266
virtual CtrlValueType ctrlValueType(unsigned long /*i*/) const = 0;
267
virtual CtrlList::Mode ctrlMode(unsigned long /*i*/) const = 0;
357
268
QString dssi_ui_filename() const;
359
//virtual void showGui(bool) = 0; // p4.0.20
360
//virtual void showNativeGui(bool) = 0; //
361
PluginGui* gui() const { return _gui; }
270
MusEGui::PluginGui* gui() const { return _gui; }
362
271
void deleteGui();
365
//---------------------------------------------------------
367
//---------------------------------------------------------
369
class PluginGui : public QMainWindow {
372
//PluginI* plugin; // plugin instance
373
PluginIBase* plugin; // plugin instance
378
unsigned long nobj; // number of widgets in gw // p4.0.21
382
QWidget* mw; // main widget
385
void updateControls();
386
void getPluginConvertedValues(LADSPA_PortRangeHint range,
387
double &lower, double &upper, double &dlower, double &dupper, double &dval);
391
void bypassToggled(bool);
392
void sliderChanged(double, int);
393
void labelChanged(double, int);
394
void guiParamChanged(int);
395
void ctrlPressed(int);
396
void ctrlReleased(int);
397
void guiParamPressed(int);
398
void guiParamReleased(int);
399
void guiSliderPressed(int);
400
void guiSliderReleased(int);
401
void ctrlRightClicked(const QPoint &, int);
402
void guiSliderRightClicked(const QPoint &, int);
408
//PluginGui(PluginI*);
409
PluginGui(PluginIBase*);
278
bool on() const { return _on; }
279
void setOn(bool val) { _on = val; }
280
int pluginID() { return plugin()->id(); }
281
int id() { return _id; }
282
QString pluginLabel() const { return _plugin->label(); }
283
QString name() const { return _name; }
285
AudioTrack* track() { return _track; }
287
void enableController(int i, bool v = true) { controls[i].enCtrl = v; }
288
bool controllerEnabled(int i) const { return controls[i].enCtrl; }
289
bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; }
290
void updateControllers();
292
void writeConfiguration(int level, Xml& xml);
293
bool readConfiguration(Xml& xml, bool readPreset=false);
295
int parameters() const { return controlPorts; }
296
void setParam(int i, double val) { controls[i].tmpVal = val; }
297
double param(int i) const { return controls[i].val; }
298
const char* paramName(int i) { return _plugin->portName(controls[i].idx); }
299
LADSPA_PortRangeHint range(int i)
301
return _plugin->range(controls[i].idx);
416
306
//---------------------------------------------------------
469
356
void setTrack(AudioTrack* t) { _track = t; }
470
357
AudioTrack* track() { return _track; }
471
//int pluginID() { return _plugin->id(); }
472
unsigned long pluginID() { return _plugin->id(); } // p4.0.21
358
unsigned long pluginID() { return _plugin->id(); }
473
359
void setID(int i);
474
360
int id() { return _id; }
475
361
void updateControllers();
477
363
bool initPluginInstance(Plugin*, int channels);
478
364
void setChannels(int);
479
//void connect(int ports, float** src, float** dst);
481
//void connect(unsigned ports, float** src, float** dst);
482
//void apply(unsigned n);
483
void connect(unsigned long ports, unsigned long offset, float** src, float** dst); // p4.0.21
484
void apply(unsigned long n, unsigned long ports, float** bufIn, float** bufOut); //
365
void connect(unsigned long ports, unsigned long offset, float** src, float** dst);
366
void apply(unsigned long n, unsigned long ports, float** bufIn, float** bufOut);
486
//void enableController(int i, bool v = true) { controls[i].enCtrl = v; }
487
//bool controllerEnabled(int i) const { return controls[i].enCtrl; }
488
//void enable2Controller(int i, bool v = true) { controls[i].en2Ctrl = v; }
489
//bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; }
490
void enableController(unsigned long i, bool v = true) { controls[i].enCtrl = v; } // p4.0.21
368
void enableController(unsigned long i, bool v = true) { controls[i].enCtrl = v; }
491
369
bool controllerEnabled(unsigned long i) const { return controls[i].enCtrl; }
492
370
void enable2Controller(unsigned long i, bool v = true) { controls[i].en2Ctrl = v; }
493
371
bool controllerEnabled2(unsigned long i) const { return controls[i].en2Ctrl; }
522
399
void writeConfiguration(int level, Xml& xml);
523
400
bool readConfiguration(Xml& xml, bool readPreset=false);
524
401
bool loadControl(Xml& xml);
525
//bool setControl(const QString& s, double val);
526
bool setControl(const QString& s, float val); // p4.0.21
402
bool setControl(const QString& s, float val);
528
404
void showGui(bool);
529
405
bool isDssiPlugin() const { return _plugin->isDssiPlugin(); }
533
409
bool guiVisible();
534
410
bool nativeGuiVisible();
536
//int parameters() const { return controlPorts; }
537
//void setParam(int i, double val) { controls[i].tmpVal = val; }
538
//double param(int i) const { return controls[i].val; }
539
//double defaultValue(unsigned int param) const;
540
//const char* paramName(int i) { return _plugin->portName(controls[i].idx); }
541
//LADSPA_PortDescriptor portd(int i) const { return _plugin->portd(controls[i].idx); }
542
//void range(int i, float* min, float* max) const { _plugin->range(controls[i].idx, min, max); }
543
//bool isAudioIn(int k) { return (_plugin->portd(k) & AUDIO_IN) == AUDIO_IN; }
544
//bool isAudioOut(int k) { return (_plugin->portd(k) & AUDIO_OUT) == AUDIO_OUT; }
545
//LADSPA_PortRangeHint range(int i) { return _plugin->range(controls[i].idx); }
547
412
unsigned long parameters() const { return controlPorts; }
548
413
unsigned long parametersOut() const { return controlOutPorts; }
549
//void setParam(unsigned i, float val) { controls[i].tmpVal = val; }
550
414
void setParam(unsigned long i, float val);
551
415
float param(unsigned long i) const { return controls[i].val; }
552
416
float paramOut(unsigned long i) const { return controlsOut[i].val; }
592
456
void deleteAllGuis();
593
457
bool guiVisible(int);
594
458
bool nativeGuiVisible(int);
595
//void apply(int ports, unsigned long nframes, float** buffer);
596
void apply(unsigned long ports, unsigned long nframes, float** buffer); // p4.0.21
459
void apply(unsigned long ports, unsigned long nframes, float** buffer);
597
460
void move(int idx, bool up);
598
461
bool empty(int idx) const;
599
462
void setChannels(int);
602
465
typedef Pipeline::iterator iPluginI;
603
466
typedef Pipeline::const_iterator ciPluginI;
468
extern void initPlugins();
470
extern bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, unsigned long port, float* val);
471
extern void ladspaControlRange(const LADSPA_Descriptor* plugin, unsigned long port, float* min, float* max);
472
extern bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int* min, int* max, int* def);
473
extern float midi2LadspaValue(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int val);
474
extern CtrlValueType ladspaCtrlValueType(const LADSPA_Descriptor* plugin, int port);
475
extern CtrlList::Mode ladspaCtrlMode(const LADSPA_Descriptor* plugin, int port);
476
//extern MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum);
478
} // namespace MusECore
485
//---------------------------------------------------------
487
//---------------------------------------------------------
489
class PluginLoader : public QUiLoader
492
virtual QWidget* createWidget(const QString & className, QWidget * parent = 0, const QString & name = QString());
493
PluginLoader(QObject * parent = 0) : QUiLoader(parent) {}
496
//---------------------------------------------------------
498
//---------------------------------------------------------
502
GUI_SLIDER, GUI_SWITCH, GUI_METER
507
MusEGui::DoubleLabel* label;
508
QWidget* actuator; // Slider or Toggle Button (SWITCH)
511
//---------------------------------------------------------
513
//---------------------------------------------------------
517
SLIDER, DOUBLE_LABEL, QCHECKBOX, QCOMBOBOX
524
//---------------------------------------------------------
526
//---------------------------------------------------------
528
class PluginGui : public QMainWindow {
531
MusECore::PluginIBase* plugin; // plugin instance
535
unsigned long nobj; // number of widgets in gw
539
QWidget* mw; // main widget
542
void updateControls();
543
void getPluginConvertedValues(LADSPA_PortRangeHint range,
544
double &lower, double &upper, double &dlower, double &dupper, double &dval);
548
void bypassToggled(bool);
549
void sliderChanged(double, int);
550
void labelChanged(double, int);
551
void guiParamChanged(int);
552
void ctrlPressed(int);
553
void ctrlReleased(int);
554
void guiParamPressed(int);
555
void guiParamReleased(int);
556
void guiSliderPressed(int);
557
void guiSliderReleased(int);
558
void ctrlRightClicked(const QPoint &, int);
559
void guiSliderRightClicked(const QPoint &, int);
565
PluginGui(MusECore::PluginIBase*);
605
572
//---------------------------------------------------------
607
574
//---------------------------------------------------------
638
605
static QStringList sortItems;
641
extern void initPlugins();
642
extern PluginList plugins;
644
//extern bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, int port, float* val);
645
//extern void ladspaControlRange(const LADSPA_Descriptor* plugin, int i, float* min, float* max);
646
//extern bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, int port, int ctlnum, int* min, int* max, int* def);
647
//extern float midi2LadspaValue(const LADSPA_Descriptor* plugin, int port, int ctlnum, int val);
649
extern bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, unsigned long port, float* val);
650
extern void ladspaControlRange(const LADSPA_Descriptor* plugin, unsigned long port, float* min, float* max);
651
extern bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int* min, int* max, int* def);
652
extern float midi2LadspaValue(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int val);
653
//extern MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum);
611
namespace MusEGlobal {
612
extern MusECore::PluginList plugins;