| @@ -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() | |||