@@ -26,7 +26,7 @@ extern "C" { | |||
// Simple plugins | |||
void carla_register_native_plugin_bypass(); | |||
void carla_register_native_plugin_lfo(); | |||
void carla_register_native_plugin_midiSequencer(); | |||
void carla_register_native_plugin_midiGain(); | |||
void carla_register_native_plugin_midiSplit(); | |||
void carla_register_native_plugin_midiThrough(); | |||
void carla_register_native_plugin_midiTranspose(); | |||
@@ -58,7 +58,9 @@ void carla_register_native_plugin_PingPongPan(); | |||
//void carla_register_native_plugin_StereoEnhancer(); | |||
#endif | |||
// DISTRHO plugins (Qt) | |||
// DISTRHO plugins (PyQt) | |||
void carla_register_native_plugin_BigMeter(); | |||
void carla_register_native_plugin_BigMeterM(); | |||
void carla_register_native_plugin_Notes(); | |||
#ifdef WANT_ZYNADDSUBFX | |||
@@ -72,7 +74,7 @@ void carla_register_all_plugins() | |||
// Simple plugins | |||
carla_register_native_plugin_bypass(); | |||
carla_register_native_plugin_lfo(); | |||
//carla_register_native_plugin_midiSequencer(); // unfinished | |||
carla_register_native_plugin_midiGain(); | |||
carla_register_native_plugin_midiSplit(); | |||
carla_register_native_plugin_midiThrough(); | |||
carla_register_native_plugin_midiTranspose(); | |||
@@ -104,8 +106,10 @@ void carla_register_all_plugins() | |||
//carla_register_native_plugin_StereoEnhancer(); // unfinished | |||
#endif | |||
// DISTRHO plugins (Qt) | |||
carla_register_native_plugin_Notes(); // unfinished | |||
// DISTRHO plugins (PyQt) | |||
carla_register_native_plugin_BigMeter(); | |||
carla_register_native_plugin_BigMeterM(); | |||
carla_register_native_plugin_Notes(); | |||
#ifdef WANT_ZYNADDSUBFX | |||
// ZynAddSubFX | |||
@@ -72,11 +72,11 @@ endif | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml zlib) | |||
ifeq ($(HAVE_ZYN_UI_DEPS),true) | |||
LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||
LINK_FLAGS += $(shell pkg-config --libs ntk_images ntk) | |||
endif | |||
endif | |||
EXTRA_LIBS = -ldl | |||
EXTRA_LIBS = -ldl -lfreetype | |||
LINK_FLAGS += $(EXTRA_LIBS) | |||
ifneq ($(MACOS),true) | |||
@@ -84,7 +84,7 @@ if __name__ == '__main__': | |||
app.setWindowIcon(QIcon(":/scalable/carla.svg")) | |||
libName = carla_library_filename | |||
libPath = carla_library_filename.replace(carla_libname, "") | |||
libPath = os.path.join(carla_library_filename.replace(carla_libname, ""), "..", "modules", "carla_native", "resources") | |||
# Init backend | |||
print("libName:", libName, ":", carla_libname) | |||
@@ -23,10 +23,10 @@ from copy import deepcopy | |||
from subprocess import Popen, PIPE | |||
try: | |||
from PyQt5.QtCore import Qt, QThread, QSettings | |||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QThread, QSettings | |||
from PyQt5.QtWidgets import QDialog, QTableWidgetItem | |||
except: | |||
from PyQt4.QtCore import Qt, QThread, QSettings | |||
from PyQt4.QtCore import pyqtSignal, pyqtSlot, Qt, QThread, QSettings | |||
from PyQt4.QtGui import QDialog, QTableWidgetItem | |||
# ------------------------------------------------------------------------------------------------------------ | |||
@@ -20,11 +20,11 @@ | |||
# Imports (Global) | |||
try: | |||
from PyQt5.QtCore import QByteArray, QSettings | |||
from PyQt5.QtCore import pyqtSlot, QByteArray, QSettings | |||
from PyQt5.QtGui import QColor, QCursor, QFontMetrics, QPainter, QPainterPath | |||
from PyQt5.QtWidgets import QDialog, QFrame, QInputDialog, QLineEdit, QMenu, QVBoxLayout, QWidget | |||
except: | |||
from PyQt4.QtCore import QByteArray, QSettings | |||
from PyQt4.QtCore import pyqtSlot, QByteArray, QSettings | |||
from PyQt4.QtGui import QColor, QCursor, QFontMetrics, QPainter, QPainterPath | |||
from PyQt4.QtGui import QDialog, QFrame, QInputDialog, QLineEdit, QMenu, QVBoxLayout, QWidget | |||
@@ -23,11 +23,11 @@ import os | |||
import sys | |||
try: | |||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, qCritical, qFatal, qWarning | |||
from PyQt5.QtCore import qFatal, qWarning | |||
from PyQt5.QtGui import QIcon | |||
from PyQt5.QtWidgets import QFileDialog, QMessageBox | |||
except: | |||
from PyQt4.QtCore import pyqtSignal, pyqtSlot, qCritical, qFatal, qWarning | |||
from PyQt4.QtCore import qFatal, qWarning | |||
from PyQt4.QtGui import QIcon | |||
from PyQt4.QtGui import QFileDialog, QMessageBox | |||
@@ -84,6 +84,8 @@ endif | |||
# DISTRHO plugins (PyQt) | |||
OBJS += \ | |||
distrho-bigmeter.cpp.o \ | |||
distrho-bigmeterM.cpp.o \ | |||
distrho-notes.cpp.o | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
@@ -178,6 +180,12 @@ distrho-pingpongpan.cpp.o: distrho-pingpongpan.cpp pingpongpan/*.cpp pingpongpan | |||
distrho-stereoenhancer.cpp.o: distrho-stereoenhancer.cpp stereoenhancer/*.cpp stereoenhancer/*.h stereoenhancer/*.hpp distrho/DistrhoPluginCarla.cpp $(CXXDEPS) | |||
$(CXX) $< $(GL_CXX_FLAGS) -Istereoenhancer -DDISTRHO_NAMESPACE=DISTRHO_StereoEnhancer -c -o $@ | |||
distrho-bigmeter.cpp.o: distrho-bigmeter.cpp bigmeter/*.cpp bigmeter/*.h bigmeter/*.hpp distrho/DistrhoPluginCarla.cpp $(CXXDEPS) | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -Ibigmeter -DDISTRHO_NAMESPACE=DISTRHO_BigMeter -c -o $@ | |||
distrho-bigmeterM.cpp.o: distrho-bigmeterM.cpp bigmeterM/*.cpp bigmeterM/*.h bigmeterM/*.hpp distrho/DistrhoPluginCarla.cpp $(CXXDEPS) | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -IbigmeterM -DDISTRHO_NAMESPACE=DISTRHO_BigMeterM -c -o $@ | |||
distrho-notes.cpp.o: distrho-notes.cpp notes/*.cpp notes/*.h notes/*.hpp distrho/DistrhoPluginCarla.cpp $(CXXDEPS) | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -Inotes -DDISTRHO_NAMESPACE=DISTRHO_Notes -c -o $@ | |||
@@ -0,0 +1,147 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "DistrhoPluginBigMeter.hpp" | |||
#include <cmath> | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
DistrhoPluginBigMeter::DistrhoPluginBigMeter() | |||
: Plugin(3, 0, 0), // 3 parameters, 0 programs, 0 states | |||
fColor(0), | |||
fOutLeft(0.0f), | |||
fOutRight(0.0f) | |||
{ | |||
} | |||
DistrhoPluginBigMeter::~DistrhoPluginBigMeter() | |||
{ | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Init | |||
void DistrhoPluginBigMeter::d_initParameter(uint32_t index, Parameter& parameter) | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
parameter.hints = PARAMETER_IS_AUTOMABLE | PARAMETER_IS_INTEGER; | |||
parameter.name = "Color"; | |||
parameter.symbol = "color"; | |||
parameter.ranges.def = 0; | |||
parameter.ranges.min = 0; | |||
parameter.ranges.max = 1; | |||
parameter.ranges.step = 1; | |||
parameter.ranges.stepSmall = 1; | |||
parameter.ranges.stepLarge = 1; | |||
break; | |||
case 1: | |||
parameter.hints = PARAMETER_IS_AUTOMABLE | PARAMETER_IS_OUTPUT; | |||
parameter.name = "Out Left"; | |||
parameter.symbol = "outleft"; | |||
parameter.ranges.def = 0.0f; | |||
parameter.ranges.min = 0.0f; | |||
parameter.ranges.max = 1.0f; | |||
break; | |||
case 2: | |||
parameter.hints = PARAMETER_IS_AUTOMABLE | PARAMETER_IS_OUTPUT; | |||
parameter.name = "Out Right"; | |||
parameter.symbol = "outright"; | |||
parameter.ranges.def = 0.0f; | |||
parameter.ranges.min = 0.0f; | |||
parameter.ranges.max = 1.0f; | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Internal data | |||
float DistrhoPluginBigMeter::d_getParameterValue(uint32_t index) const | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
return (float)fColor; | |||
case 1: | |||
return fOutLeft; | |||
case 2: | |||
return fOutRight; | |||
default: | |||
return 0.0f; | |||
} | |||
} | |||
void DistrhoPluginBigMeter::d_setParameterValue(uint32_t index, float value) | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
fColor = (int)value; | |||
break; | |||
case 1: | |||
fOutLeft = value; | |||
break; | |||
case 2: | |||
fOutRight = value; | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Process | |||
void DistrhoPluginBigMeter::d_run(float** inputs, float**, uint32_t frames, const MidiEvent*, uint32_t) | |||
{ | |||
float tmp, tmpLeft, tmpRight; | |||
tmpLeft = tmpRight = 0.0f; | |||
for (uint32_t i=0; i < frames; ++i) | |||
{ | |||
tmp = std::abs(inputs[0][i]); | |||
if (tmp > tmpLeft) | |||
tmpLeft = tmp; | |||
tmp = std::abs(inputs[1][i]); | |||
if (tmp > tmpRight) | |||
tmpRight = tmp; | |||
} | |||
fOutLeft = tmpLeft; | |||
fOutRight = tmpRight; | |||
} | |||
// ----------------------------------------------------------------------- | |||
Plugin* createPlugin() | |||
{ | |||
return new DistrhoPluginBigMeter(); | |||
} | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO |
@@ -0,0 +1,89 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED | |||
#define DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED | |||
#include "DistrhoPlugin.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
class DistrhoPluginBigMeter : public Plugin | |||
{ | |||
public: | |||
DistrhoPluginBigMeter(); | |||
~DistrhoPluginBigMeter() override; | |||
protected: | |||
// ------------------------------------------------------------------- | |||
// Information | |||
const char* d_getLabel() const noexcept override | |||
{ | |||
return "BigMeter"; | |||
} | |||
const char* d_getMaker() const noexcept override | |||
{ | |||
return "DISTRHO"; | |||
} | |||
const char* d_getLicense() const noexcept override | |||
{ | |||
return "GPL v2+"; | |||
} | |||
uint32_t d_getVersion() const noexcept override | |||
{ | |||
return 0x1000; | |||
} | |||
long d_getUniqueId() const noexcept override | |||
{ | |||
return d_cconst('D', 'B', 'M', 't'); | |||
} | |||
// ------------------------------------------------------------------- | |||
// Init | |||
void d_initParameter(uint32_t index, Parameter& parameter) override; | |||
// ------------------------------------------------------------------- | |||
// Internal data | |||
float d_getParameterValue(uint32_t index) const override; | |||
void d_setParameterValue(uint32_t index, float value) override; | |||
// ------------------------------------------------------------------- | |||
// Process | |||
void d_run(float** inputs, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount) override; | |||
// ------------------------------------------------------------------- | |||
private: | |||
int fColor; | |||
float fOutLeft, fOutRight; | |||
}; | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO | |||
#endif // DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED |
@@ -0,0 +1,38 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
#define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
#define DISTRHO_PLUGIN_NAME "BigMeter" | |||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||
#define DISTRHO_PLUGIN_IS_SYNTH 0 | |||
#define DISTRHO_PLUGIN_NUM_INPUTS 2 | |||
#define DISTRHO_PLUGIN_NUM_OUTPUTS 0 | |||
#define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||
#define DISTRHO_PLUGIN_WANT_STATE 0 | |||
#define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/BigMeter" | |||
#define DISTRHO_UI_EXTERNAL | |||
#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED |
@@ -0,0 +1,38 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "DistrhoUIBigMeter.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
DistrhoUIBigMeter::DistrhoUIBigMeter() | |||
: ExternalUI() | |||
{ | |||
} | |||
// ----------------------------------------------------------------------- | |||
UI* createUI() | |||
{ | |||
return new DistrhoUIBigMeter(); | |||
} | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO |
@@ -0,0 +1,46 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_UI_BIGMETER_HPP_INCLUDED | |||
#define DISTRHO_UI_BIGMETER_HPP_INCLUDED | |||
#include "DistrhoUIExternal.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
class DistrhoUIBigMeter : public ExternalUI | |||
{ | |||
public: | |||
DistrhoUIBigMeter(); | |||
protected: | |||
// ------------------------------------------------------------------- | |||
// Information (External) | |||
const char* d_getExternalFilename() const override | |||
{ | |||
return "bigmeter-ui"; | |||
} | |||
}; | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO | |||
#endif // DISTRHO_UI_BIGMETER_HPP_INCLUDED |
@@ -0,0 +1,125 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "DistrhoPluginBigMeter.hpp" | |||
#include <cmath> | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
DistrhoPluginBigMeter::DistrhoPluginBigMeter() | |||
: Plugin(1+DISTRHO_PLUGIN_NUM_INPUTS, 0, 0), // many parameters, 0 programs, 0 states | |||
fColor(0) | |||
{ | |||
std::memset(fOuts, 0, sizeof(float)*DISTRHO_PLUGIN_NUM_INPUTS); | |||
} | |||
DistrhoPluginBigMeter::~DistrhoPluginBigMeter() | |||
{ | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Init | |||
void DistrhoPluginBigMeter::d_initParameter(uint32_t index, Parameter& parameter) | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
parameter.hints = PARAMETER_IS_AUTOMABLE | PARAMETER_IS_INTEGER; | |||
parameter.name = "Color"; | |||
parameter.symbol = "color"; | |||
parameter.ranges.def = 0; | |||
parameter.ranges.min = 0; | |||
parameter.ranges.max = 1; | |||
parameter.ranges.step = 1; | |||
parameter.ranges.stepSmall = 1; | |||
parameter.ranges.stepLarge = 1; | |||
break; | |||
default: | |||
parameter.hints = PARAMETER_IS_AUTOMABLE | PARAMETER_IS_OUTPUT; | |||
parameter.name = "Out " + d_string(index); | |||
parameter.symbol = "out" + d_string(index); | |||
parameter.ranges.def = 0.0f; | |||
parameter.ranges.min = 0.0f; | |||
parameter.ranges.max = 1.0f; | |||
break; | |||
} | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Internal data | |||
float DistrhoPluginBigMeter::d_getParameterValue(uint32_t index) const | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
return (float)fColor; | |||
default: | |||
return fOuts[index-1]; | |||
} | |||
} | |||
void DistrhoPluginBigMeter::d_setParameterValue(uint32_t index, float value) | |||
{ | |||
switch (index) | |||
{ | |||
case 0: | |||
fColor = (int)value; | |||
break; | |||
default: | |||
fOuts[index-1] = value; | |||
break; | |||
} | |||
} | |||
// ----------------------------------------------------------------------- | |||
// Process | |||
void DistrhoPluginBigMeter::d_run(float** inputs, float**, uint32_t frames, const MidiEvent*, uint32_t) | |||
{ | |||
float tmp, tmp32[DISTRHO_PLUGIN_NUM_INPUTS]; | |||
std::memset(tmp32, 0, sizeof(float)*DISTRHO_PLUGIN_NUM_INPUTS); | |||
for (uint32_t i=0; i < frames; ++i) | |||
{ | |||
for (int j=0; j < DISTRHO_PLUGIN_NUM_INPUTS; ++j) | |||
{ | |||
tmp = std::abs(inputs[j][i]); | |||
if (tmp > tmp32[j]) | |||
tmp32[j] = tmp; | |||
} | |||
} | |||
std::memcpy(fOuts, tmp32, sizeof(float)*DISTRHO_PLUGIN_NUM_INPUTS); | |||
} | |||
// ----------------------------------------------------------------------- | |||
Plugin* createPlugin() | |||
{ | |||
return new DistrhoPluginBigMeter(); | |||
} | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO |
@@ -0,0 +1,89 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED | |||
#define DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED | |||
#include "DistrhoPlugin.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
class DistrhoPluginBigMeter : public Plugin | |||
{ | |||
public: | |||
DistrhoPluginBigMeter(); | |||
~DistrhoPluginBigMeter() override; | |||
protected: | |||
// ------------------------------------------------------------------- | |||
// Information | |||
const char* d_getLabel() const noexcept override | |||
{ | |||
return "BigMeterM"; | |||
} | |||
const char* d_getMaker() const noexcept override | |||
{ | |||
return "DISTRHO"; | |||
} | |||
const char* d_getLicense() const noexcept override | |||
{ | |||
return "GPL v2+"; | |||
} | |||
uint32_t d_getVersion() const noexcept override | |||
{ | |||
return 0x1000; | |||
} | |||
long d_getUniqueId() const noexcept override | |||
{ | |||
return d_cconst('D', 'B', 'M', 'M'); | |||
} | |||
// ------------------------------------------------------------------- | |||
// Init | |||
void d_initParameter(uint32_t index, Parameter& parameter) override; | |||
// ------------------------------------------------------------------- | |||
// Internal data | |||
float d_getParameterValue(uint32_t index) const override; | |||
void d_setParameterValue(uint32_t index, float value) override; | |||
// ------------------------------------------------------------------- | |||
// Process | |||
void d_run(float** inputs, float** outputs, uint32_t frames, const MidiEvent* midiEvents, uint32_t midiEventCount) override; | |||
// ------------------------------------------------------------------- | |||
private: | |||
int fColor; | |||
float fOuts[DISTRHO_PLUGIN_NUM_INPUTS]; | |||
}; | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO | |||
#endif // DISTRHO_PLUGIN_BIGMETER_HPP_INCLUDED |
@@ -0,0 +1,38 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
#define DISTRHO_PLUGIN_INFO_H_INCLUDED | |||
#define DISTRHO_PLUGIN_NAME "BigMeter (many)" | |||
#define DISTRHO_PLUGIN_HAS_UI 1 | |||
#define DISTRHO_PLUGIN_IS_SYNTH 0 | |||
#define DISTRHO_PLUGIN_NUM_INPUTS 6 | |||
#define DISTRHO_PLUGIN_NUM_OUTPUTS 0 | |||
#define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 0 | |||
#define DISTRHO_PLUGIN_WANT_STATE 0 | |||
#define DISTRHO_PLUGIN_WANT_TIMEPOS 0 | |||
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/plugins/BigMeterM" | |||
#define DISTRHO_UI_EXTERNAL | |||
#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED |
@@ -0,0 +1,38 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "DistrhoUIBigMeter.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
DistrhoUIBigMeter::DistrhoUIBigMeter() | |||
: ExternalUI() | |||
{ | |||
} | |||
// ----------------------------------------------------------------------- | |||
UI* createUI() | |||
{ | |||
return new DistrhoUIBigMeter(); | |||
} | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO |
@@ -0,0 +1,46 @@ | |||
/* | |||
* DISTRHO BigMeter Plugin | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#ifndef DISTRHO_UI_BIGMETER_HPP_INCLUDED | |||
#define DISTRHO_UI_BIGMETER_HPP_INCLUDED | |||
#include "DistrhoUIExternal.hpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
class DistrhoUIBigMeter : public ExternalUI | |||
{ | |||
public: | |||
DistrhoUIBigMeter(); | |||
protected: | |||
// ------------------------------------------------------------------- | |||
// Information (External) | |||
const char* d_getExternalFilename() const override | |||
{ | |||
return "bigmeterM-ui"; | |||
} | |||
}; | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DISTRHO | |||
#endif // DISTRHO_UI_BIGMETER_HPP_INCLUDED |
@@ -0,0 +1,59 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "CarlaNative.hpp" | |||
// Plugin Code | |||
#include "bigmeter/DistrhoPluginBigMeter.cpp" | |||
#include "bigmeter/DistrhoUIBigMeter.cpp" | |||
// Carla DISTRHO Plugin | |||
#include "distrho/DistrhoPluginCarla.cpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
static const PluginDescriptor bigMeterDesc = { | |||
/* category */ PLUGIN_CATEGORY_UTILITY, | |||
/* hints */ static_cast<PluginHints>(PLUGIN_IS_RTSAFE|PLUGIN_HAS_GUI), | |||
/* supports */ static_cast<PluginSupports>(0x0), | |||
/* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | |||
/* midiIns */ 0, | |||
/* midiOuts */ 0, | |||
/* paramIns */ 1, | |||
/* paramOuts */ 2, | |||
/* name */ DISTRHO_PLUGIN_NAME, | |||
/* label */ "BigMeter", | |||
/* maker */ "falkTX", | |||
/* copyright */ "GPL v2+", | |||
PluginDescriptorFILL(PluginCarla) | |||
}; | |||
END_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
CARLA_EXPORT | |||
void carla_register_native_plugin_BigMeter() | |||
{ | |||
USE_NAMESPACE_DISTRHO | |||
carla_register_native_plugin(&bigMeterDesc); | |||
} | |||
// ----------------------------------------------------------------------- |
@@ -0,0 +1,59 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012-2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
* published by the Free Software Foundation; either version 2 of | |||
* the License, or any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the doc/GPL.txt file. | |||
*/ | |||
#include "CarlaNative.hpp" | |||
// Plugin Code | |||
#include "bigmeterM/DistrhoPluginBigMeter.cpp" | |||
#include "bigmeterM/DistrhoUIBigMeter.cpp" | |||
// Carla DISTRHO Plugin | |||
#include "distrho/DistrhoPluginCarla.cpp" | |||
START_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
static const PluginDescriptor bigMeterMDesc = { | |||
/* category */ PLUGIN_CATEGORY_UTILITY, | |||
/* hints */ static_cast<PluginHints>(PLUGIN_IS_RTSAFE|PLUGIN_HAS_GUI), | |||
/* supports */ static_cast<PluginSupports>(0x0), | |||
/* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | |||
/* midiIns */ 0, | |||
/* midiOuts */ 0, | |||
/* paramIns */ 1, | |||
/* paramOuts */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* name */ DISTRHO_PLUGIN_NAME, | |||
/* label */ "BigMeter (many)", | |||
/* maker */ "falkTX", | |||
/* copyright */ "GPL v2+", | |||
PluginDescriptorFILL(PluginCarla) | |||
}; | |||
END_NAMESPACE_DISTRHO | |||
// ----------------------------------------------------------------------- | |||
CARLA_EXPORT | |||
void carla_register_native_plugin_BigMeterM() | |||
{ | |||
USE_NAMESPACE_DISTRHO | |||
carla_register_native_plugin(&bigMeterMDesc); | |||
} | |||
// ----------------------------------------------------------------------- |
@@ -0,0 +1,108 @@ | |||
#!/usr/bin/env python3 | |||
# -*- coding: utf-8 -*- | |||
# DISTRHO BigMeter Plugin | |||
# Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
# | |||
# This program is free software; you can redistribute it and/or | |||
# modify it under the terms of the GNU General Public License as | |||
# published by the Free Software Foundation; either version 2 of | |||
# the License, or any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# For a full copy of the GNU General Public License see the GPL.txt file | |||
# ------------------------------------------------------------------------------------------------------------ | |||
# Imports (Global) | |||
from numpy import rint | |||
from sys import argv, exit | |||
try: | |||
from PyQt5.QtWidgets import QApplication | |||
except: | |||
from PyQt4.QtGui import QApplication | |||
# ----------------------------------------------------------------------- | |||
# Imports (ExternalUI) | |||
from externalui import ExternalUI | |||
from digitalpeakmeter import DigitalPeakMeter | |||
# ----------------------------------------------------------------------- | |||
# External UI | |||
class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI): | |||
def __init__(self): | |||
DigitalPeakMeter.__init__(self, None) | |||
ExternalUI.__init__(self) | |||
channels = 6 if argv[0].endswith("bigmeterM-ui") else 2 | |||
self.setChannels(channels) | |||
self.setColor(self.GREEN) | |||
self.setOrientation(self.VERTICAL) | |||
#self.setSmoothRelease(0) # till 5 | |||
self.resize(30, 400) | |||
self.setWindowTitle(self.fUiName) | |||
self.fIdleTimer = self.startTimer(30) | |||
self.showUiIfTesting() | |||
# ------------------------------------------------------------------- | |||
# DSP Callbacks | |||
def d_parameterChanged(self, index, value): | |||
if index == 0: | |||
color = rint(value)+1 | |||
if not color in (self.GREEN, self.BLUE): | |||
return | |||
self.setColor(color) | |||
else: | |||
self.displayMeter(index, value) | |||
# ------------------------------------------------------------------- | |||
# ExternalUI Callbacks | |||
def d_uiShow(self): | |||
self.show() | |||
def d_uiHide(self): | |||
self.hide() | |||
def d_uiQuit(self): | |||
self.close() | |||
app.quit() | |||
def d_uiTitleChanged(self, uiTitle): | |||
self.setWindowTitle(uiTitle) | |||
# ------------------------------------------------------------------- | |||
# Qt events | |||
def timerEvent(self, event): | |||
if event.timerId() == self.fIdleTimer and not self.idleExternalUI(): | |||
self.d_uiQuit() | |||
DigitalPeakMeter.timerEvent(self, event) | |||
def closeEvent(self, event): | |||
self.closeExternalUI() | |||
DigitalPeakMeter.closeEvent(self, event) | |||
#--------------- main ------------------ | |||
if __name__ == '__main__': | |||
app = QApplication(argv) | |||
#app... | |||
gui = DistrhoUIBigMeter() | |||
exit(app.exec_()) |
@@ -0,0 +1 @@ | |||
bigmeter-ui |
@@ -0,0 +1 @@ | |||
../../../widgets/digitalpeakmeter.py |
@@ -33,19 +33,31 @@ class ExternalUI(object): | |||
self.fPipeSend = None | |||
self.fQuitReceived = False | |||
self.fSampleRate = float(argv[1]) | |||
self.fUiName = argv[2] | |||
self.fPipeRecvFd = int(argv[3]) | |||
self.fPipeSendFd = int(argv[4]) | |||
if len(argv) > 1: | |||
self.fSampleRate = float(argv[1]) | |||
self.fUiName = argv[2] | |||
self.fPipeRecvFd = int(argv[3]) | |||
self.fPipeSendFd = int(argv[4]) | |||
fcntl(self.fPipeRecvFd, F_SETFL, fcntl(self.fPipeRecvFd, F_GETFL) | O_NONBLOCK) | |||
fcntl(self.fPipeRecvFd, F_SETFL, fcntl(self.fPipeRecvFd, F_GETFL) | O_NONBLOCK) | |||
self.fPipeRecv = fdopen(self.fPipeRecvFd, 'r') | |||
self.fPipeSend = fdopen(self.fPipeSendFd, 'w') | |||
self.fPipeRecv = fdopen(self.fPipeRecvFd, 'r') | |||
self.fPipeSend = fdopen(self.fPipeSendFd, 'w') | |||
else: | |||
self.fSampleRate = 44100.0 | |||
self.fUiName = "TestUI" | |||
self.fPipeRecv = None | |||
self.fPipeSend = None | |||
# send empty line (just newline char) | |||
self.send([""]) | |||
def showUiIfTesting(self): | |||
if self.fPipeRecv is None: | |||
self.d_uiShow() | |||
# ------------------------------------------------------------------- | |||
# Host DSP State | |||
@@ -110,54 +122,55 @@ class ExternalUI(object): | |||
self.fPipeSend = None | |||
def idleExternalUI(self): | |||
if self.fPipeRecv is None: | |||
return False | |||
try: | |||
msg = self.fPipeRecv.readline().strip() | |||
except IOError: | |||
return False | |||
if not msg: | |||
return True | |||
elif msg == "control": | |||
index = int(self.fPipeRecv.readline()) | |||
value = float(self.fPipeRecv.readline()) | |||
self.d_parameterChanged(index, value) | |||
elif msg == "program": | |||
index = int(self.fPipeRecv.readline()) | |||
self.d_programChanged(index) | |||
elif msg == "configure": | |||
key = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
value = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
self.d_stateChanged(key, value) | |||
elif msg == "note": | |||
onOff = bool(self.fPipeRecv.readline().strip() == "true") | |||
channel = int(self.fPipeRecv.readline()) | |||
note = int(self.fPipeRecv.readline()) | |||
velocity = int(self.fPipeRecv.readline()) | |||
self.d_noteReceived(onOff, channel, note, velocity) | |||
elif msg == "show": | |||
self.d_uiShow() | |||
while True: | |||
if self.fPipeRecv is None: | |||
return True | |||
elif msg == "hide": | |||
self.d_uiHide() | |||
try: | |||
msg = self.fPipeRecv.readline().strip() | |||
except IOError: | |||
return False | |||
elif msg == "quit": | |||
self.fQuitReceived = True | |||
self.d_uiQuit() | |||
if not msg: | |||
return True | |||
elif msg == "uiTitle": | |||
uiTitle = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
self.d_uiTitleChanged(uiTitle) | |||
elif msg == "control": | |||
index = int(self.fPipeRecv.readline()) | |||
value = float(self.fPipeRecv.readline()) | |||
self.d_parameterChanged(index, value) | |||
else: | |||
print("unknown message: \"" + msg + "\"") | |||
elif msg == "program": | |||
index = int(self.fPipeRecv.readline()) | |||
self.d_programChanged(index) | |||
elif msg == "configure": | |||
key = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
value = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
self.d_stateChanged(key, value) | |||
elif msg == "note": | |||
onOff = bool(self.fPipeRecv.readline().strip() == "true") | |||
channel = int(self.fPipeRecv.readline()) | |||
note = int(self.fPipeRecv.readline()) | |||
velocity = int(self.fPipeRecv.readline()) | |||
self.d_noteReceived(onOff, channel, note, velocity) | |||
elif msg == "show": | |||
self.d_uiShow() | |||
elif msg == "hide": | |||
self.d_uiHide() | |||
elif msg == "quit": | |||
self.fQuitReceived = True | |||
self.d_uiQuit() | |||
elif msg == "uiTitle": | |||
uiTitle = self.fPipeRecv.readline().strip().replace("\r", "\n") | |||
self.d_uiTitleChanged(uiTitle) | |||
else: | |||
print("unknown message: \"" + msg + "\"") | |||
return True | |||
@@ -78,15 +78,17 @@ class DistrhoUINotes(QWidget, ExternalUI): | |||
self.fGridLayout.addWidget(self.fSpacer, 1, 2, 1, 1) | |||
self.fGridLayout.setContentsMargins(0, 0, 0, 0) | |||
self.resize(300, 200) | |||
self.setWindowTitle(self.fUiName) | |||
self.fButton.clicked.connect(self.slot_buttonClicked) | |||
self.fProgressBar.valueChanged.connect(self.slot_progressBarValueChanged) | |||
self.fTextEdit.textChanged.connect(self.slot_textChanged) | |||
self.resize(300, 200) | |||
self.setWindowTitle(self.fUiName) | |||
self.fIdleTimer = self.startTimer(50) | |||
self.showUiIfTesting() | |||
def saveCurrentTextState(self): | |||
pageKey = "pageText %i" % self.fCurPage | |||
pageValue = self.fTextEdit.toPlainText() | |||