summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNil Geisweiller <a-lin@sourceforge.net>2007-01-06 21:42:45 +0000
committerNil Geisweiller <a-lin@sourceforge.net>2007-01-06 21:42:45 +0000
commita9639d6bcc6603b31c233a11c6aec29aca80f2ed (patch)
treefbcc35d8f2aa65ec1bd756846e6569c0243a0c73
parenta271de08004bc45eba8fc5f766d58b1090abfd2b (diff)
see ChangeLog
-rw-r--r--muse/ChangeLog8
-rw-r--r--muse/plugins/CMakeLists.txt2
-rw-r--r--muse/plugins/doublechorus/doublechorusmodel.h18
-rw-r--r--muse/plugins/pandelay/CMakeLists.txt33
-rw-r--r--muse/plugins/pandelay/ladspapandelay.cpp95
-rw-r--r--muse/plugins/pandelay/ladspapandelay.h55
-rw-r--r--muse/plugins/pandelay/pandelay.cpp167
-rw-r--r--muse/plugins/pandelay/pandelaymodel.cpp142
-rw-r--r--muse/plugins/pandelay/pandelaymodel.h84
-rw-r--r--muse/synti/deicsonze/CMakeLists.txt2
-rw-r--r--muse/synti/deicsonze/deicsonze.cpp200
-rw-r--r--muse/synti/deicsonze/deicsonze.h45
-rw-r--r--muse/synti/deicsonze/deicsonzegui.cpp254
-rw-r--r--muse/synti/deicsonze/deicsonzegui.h24
-rw-r--r--muse/synti/deicsonze/deicsonzegui.ui1417
-rw-r--r--muse/synti/deicsonze/deicsonzeplugin.cpp82
-rw-r--r--muse/synti/deicsonze/deicsonzeplugin.h1
17 files changed, 1926 insertions, 703 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog
index 6612d080..16350ec4 100644
--- a/muse/ChangeLog
+++ b/muse/ChangeLog
@@ -1,3 +1,11 @@
+06.01 (ng)
+ - added panDelay plugin FX
+ - added panDelay in DeicsOnze
+
+***********************
+* Happy new year 2007 *
+***********************
+
29.12 (ng)
- fixed sync LFO Deicsonze
- update II miditracker (not working yet)
diff --git a/muse/plugins/CMakeLists.txt b/muse/plugins/CMakeLists.txt
index e62f25ad..1293902f 100644
--- a/muse/plugins/CMakeLists.txt
+++ b/muse/plugins/CMakeLists.txt
@@ -18,5 +18,5 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#=============================================================================
-subdirs( freeverb doublechorus )
+subdirs( freeverb doublechorus pandelay )
diff --git a/muse/plugins/doublechorus/doublechorusmodel.h b/muse/plugins/doublechorus/doublechorusmodel.h
index 6dc7f3ac..40ce9f3f 100644
--- a/muse/plugins/doublechorus/doublechorusmodel.h
+++ b/muse/plugins/doublechorus/doublechorusmodel.h
@@ -49,15 +49,15 @@ class DoubleChorusModel {
DoubleChorusModel(unsigned long samplerate);
~DoubleChorusModel();
- void processMix(long numsamples);
- void processReplace(long numsamples);
- void setPan1(float value);
- void setLFOFreq1(float value);
- void setDepth1(float value);
- void setPan2(float value);
- void setLFOFreq2(float value);
- void setDepth2(float value);
- void setDryWet(float value);
+ void processMix(long numsamples);
+ void processReplace(long numsamples);
+ void setPan1(float value);
+ void setLFOFreq1(float value);
+ void setDepth1(float value);
+ void setPan2(float value);
+ void setLFOFreq2(float value);
+ void setDepth2(float value);
+ void setDryWet(float value);
float getPan1();
float getLFOFreq1();
float getDepth1();
diff --git a/muse/plugins/pandelay/CMakeLists.txt b/muse/plugins/pandelay/CMakeLists.txt
new file mode 100644
index 00000000..5ebb08a0
--- /dev/null
+++ b/muse/plugins/pandelay/CMakeLists.txt
@@ -0,0 +1,33 @@
+#=============================================================================
+# MusE
+# Linux Music Editor
+# $Id:$
+#
+# Copyright (C) 2002-2006 by Werner Schweer and others
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#=============================================================================
+
+add_library ( pandelay SHARED
+ pandelay.cpp ladspapandelay.cpp pandelaymodel.cpp
+ )
+
+# tell cmake to name the target pandelay.so instead of
+# libpandelay.so
+#
+set_target_properties (pandelay
+ PROPERTIES PREFIX ""
+ #COMPILE_FLAGS "-O3"
+ )
+
+install_targets ( /lib/${MusE_INSTALL_NAME}/plugins pandelay)
diff --git a/muse/plugins/pandelay/ladspapandelay.cpp b/muse/plugins/pandelay/ladspapandelay.cpp
new file mode 100644
index 00000000..8c1caa20
--- /dev/null
+++ b/muse/plugins/pandelay/ladspapandelay.cpp
@@ -0,0 +1,95 @@
+//===========================================================================
+//
+// ladspapandelay
+//
+// Version 0.0.1
+//
+//
+//
+//
+// Copyright (c) 2006 Nil Geisweiller
+//
+//
+//
+// 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 (at your option) 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.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA or point your web browser to http://www.gnu.org.
+//===========================================================================
+
+#include "ladspapandelay.h"
+
+//---------------------------------------------------------
+// PanDelay
+//---------------------------------------------------------
+
+LADSPAPanDelay::LADSPAPanDelay(unsigned long samplerate)
+ : PanDelayModel(samplerate) {
+ //TODO init param
+}
+
+LADSPAPanDelay::~LADSPAPanDelay() {
+}
+
+//---------------------------------------------------------
+// activate
+//---------------------------------------------------------
+
+void LADSPAPanDelay::activate() {
+ *port[4] = param[0];
+ *port[5] = param[1];
+ *port[6] = param[2];
+ *port[7] = param[3];
+ *port[8] = param[4];
+}
+
+void LADSPAPanDelay::updateParameters() {
+ if (param[0] != *port[4]) {
+ param[0] = *port[4];
+ setDelayTime(param[0]);
+ }
+ if (param[1] != *port[5]) {
+ param[1] = *port[5];
+ setFeedback(param[1]);
+ }
+ if (param[2] != *port[6]) {
+ param[2] = *port[6];
+ setPanLFOFreq(param[2]);
+ }
+ if (param[3] != *port[7]) {
+ param[3] = *port[7];
+ setPanLFODepth(param[3]);
+ }
+ if (param[4] != *port[8]) {
+ param[4] = *port[8];
+ setDryWet(param[4]);
+ }
+}
+
+//---------------------------------------------------------
+// processReplace
+//---------------------------------------------------------
+
+void LADSPAPanDelay::processReplace(long n) {
+ updateParameters();
+ PanDelayModel::processReplace(port[0], port[1], port[2], port[3], n);
+}
+
+//---------------------------------------------------------
+// processMix
+//---------------------------------------------------------
+
+void LADSPAPanDelay::processMix(long n) {
+ updateParameters();
+ PanDelayModel::processMix(port[0], port[1], port[2], port[3], n);
+}
diff --git a/muse/plugins/pandelay/ladspapandelay.h b/muse/plugins/pandelay/ladspapandelay.h
new file mode 100644
index 00000000..1918895c
--- /dev/null
+++ b/muse/plugins/pandelay/ladspapandelay.h
@@ -0,0 +1,55 @@
+//===========================================================================
+//
+// ladspapandelay
+//
+// Version 0.0.1
+//
+//
+//
+//
+// Copyright (c) 2006 Nil Geisweiller
+//
+//
+//
+// 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 (at your option) 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.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA or point your web browser to http://www.gnu.org.
+//===========================================================================
+
+#ifndef __LADSPAPANDELAY_H
+#define __LADSPAPANDELAY_H
+
+#include "pandelaymodel.h"
+#include "../../muse/ladspa.h"
+
+#define NBRPARAM 5
+
+class LADSPAPanDelay : public PanDelayModel {
+ private:
+
+ public:
+ LADSPAPanDelay(unsigned long samplerate);
+ ~LADSPAPanDelay();
+
+ LADSPA_Data* port[NBRPARAM + 4];
+ float param[NBRPARAM];
+
+ void updateParameters();
+ void processMix(long numsamples);
+ void processReplace(long numsamples);
+
+ void activate();
+};
+
+#endif
diff --git a/muse/plugins/pandelay/pandelay.cpp b/muse/plugins/pandelay/pandelay.cpp
new file mode 100644
index 00000000..401e03af
--- /dev/null
+++ b/muse/plugins/pandelay/pandelay.cpp
@@ -0,0 +1,167 @@
+//=========================================================
+// PanDelay for MusE
+//
+// (C) Copyright 2006 Nil Geisweiller
+//=========================================================
+
+#include "ladspapandelay.h"
+#include <stdio.h>
+
+//---------------------------------------------------------
+// instantiate pandelay
+// Construct a new plugin instance.
+//---------------------------------------------------------
+
+LADSPA_Handle instantiate(const LADSPA_Descriptor* /*Descriptor*/,
+ unsigned long samplerate)
+{
+ return new LADSPAPanDelay(samplerate);
+}
+
+//---------------------------------------------------------
+// connect PortTo pandelay
+// Connect a port to a data location.
+//---------------------------------------------------------
+
+void connect(LADSPA_Handle Instance, unsigned long port,
+ LADSPA_Data* data)
+{
+ ((LADSPAPanDelay*)Instance)->port[port] = data;
+}
+
+//---------------------------------------------------------
+// activate
+//---------------------------------------------------------
+
+void activate(LADSPA_Handle instance)
+{
+ ((LADSPAPanDelay*)instance)->activate();
+}
+
+//---------------------------------------------------------
+// deactivate
+//---------------------------------------------------------
+
+void deactivate(LADSPA_Handle /*Instance*/)
+{
+}
+
+//---------------------------------------------------------
+// run pandelay
+//---------------------------------------------------------
+
+void run(LADSPA_Handle Instance, unsigned long n)
+{
+ ((LADSPAPanDelay*)Instance)->processReplace(n);
+}
+
+//---------------------------------------------------------
+// runAdding pandelay
+// *ADD* the output to the output buffer.
+//---------------------------------------------------------
+
+void runAdding(LADSPA_Handle Instance, unsigned long n)
+{
+ ((LADSPAPanDelay*)Instance)->processMix(n);
+}
+
+//---------------------------------------------------------
+// set pandelay RunAddingGain
+//---------------------------------------------------------
+
+void setGain(LADSPA_Handle /*Instance*/, LADSPA_Data /*Gain*/)
+{
+ printf("TEST setGain\n");
+ // ((LADSPAPanDelay*)Instance)->m_fRunAddingGain = Gain;
+}
+
+//---------------------------------------------------------
+// cleanup pandelay
+//---------------------------------------------------------
+
+void cleanup(LADSPA_Handle Instance)
+{
+ delete (LADSPAPanDelay*)Instance;
+}
+
+static const char* portNames[] = {
+ "Input (Left)",
+ "Input (Right)",
+ "Output (Left)",
+ "Output (Right)",
+ "Delay Time (ms)",
+ "Feedback",
+ "Pan LFO Freq",
+ "Pan LFO Depth",
+ "Dry/Wet"
+};
+
+LADSPA_PortDescriptor portDescriptors[] = {
+ LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
+ LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO,
+ LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
+ LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO,
+ LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
+ LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
+ LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
+ LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL,
+ LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL
+};
+
+LADSPA_PortRangeHint portRangeHints[] = {
+ { 0, 0.0, 0.0 },
+ { 0, 0.0, 0.0 },
+ { 0, 0.0, 0.0 },
+ { 0, 0.0, 0.0 },
+ { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_LOW, MINDELAYTIME, MAXDELAYTIME },
+ { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, -1.0, 1.0 },
+ { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_LOGARITHMIC | LADSPA_HINT_DEFAULT_HIGH, MINFREQ, MAXFREQ },
+ { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_HIGH, 0.0, 1.0 },
+ { LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_DEFAULT_MIDDLE, 0.0, 1.0 }
+};
+
+LADSPA_Descriptor descriptor = {
+ 1052,
+ "pandelay",
+ LADSPA_PROPERTY_HARD_RT_CAPABLE,
+ "PanDelay",
+ "Nil Geisweiller",
+ "GPL",
+ NBRPARAM + 4,
+ portDescriptors,
+ portNames,
+ portRangeHints,
+ 0, // impl. data
+ instantiate,
+ connect,
+ activate,
+ run,
+ runAdding,
+ setGain,
+ deactivate,
+ cleanup
+};
+
+//---------------------------------------------------------
+// _init
+// called automatically when the plugin library is first
+// loaded.
+//---------------------------------------------------------
+void _init() {
+}
+
+//---------------------------------------------------------
+// _fini
+// called automatically when the library is unloaded.
+//---------------------------------------------------------
+void _fini() {
+}
+
+//---------------------------------------------------------
+// ladspa_descriptor
+// Return a descriptor of the requested plugin type.
+//---------------------------------------------------------
+const LADSPA_Descriptor* ladspa_descriptor(unsigned long i) {
+ return (i == 0) ? &descriptor : 0;
+}
+
diff --git a/muse/plugins/pandelay/pandelaymodel.cpp b/muse/plugins/pandelay/pandelaymodel.cpp
new file mode 100644
index 00000000..b3ce16a7
--- /dev/null
+++ b/muse/plugins/pandelay/pandelaymodel.cpp
@@ -0,0 +1,142 @@
+//===========================================================================
+//
+// PanDelay, panoramic rotating delay
+//
+// version 0.0.1
+//
+// pandelaymodel.cpp
+//
+//
+// Copyright (c) 2006 Nil Geisweiller
+//
+//
+//
+// 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 (at your option) 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.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA or point your web browser to http://www.gnu.org.
+//===========================================================================
+
+#include "pandelaymodel.h"
+
+PanDelayModel::PanDelayModel(int samplerate) {
+ for(int i = 0; i < MAXBUFFERLENGTH; i++) {
+ _leftBuffer[i] = 0.0;
+ _rightBuffer[i] = 0.0;
+ }
+ _bufferPointer = 0;
+ _inc = 0.0;
+ _l = 1.0;
+ _r = 1.0;
+
+ _samplerate = samplerate;
+ setPanDelay();
+}
+
+PanDelayModel::~PanDelayModel() {
+}
+
+void PanDelayModel::setSamplerate(int sr) {
+ _samplerate = sr;
+ setPanDelay();
+}
+
+void PanDelayModel::setDelayTime(float dt) {
+ if(dt < MINDELAYTIME) _delayTime = MINDELAYTIME;
+ else if(dt > MAXDELAYTIME) _delayTime = MAXDELAYTIME;
+ else _delayTime = dt;
+ setPanDelay();
+}
+
+void PanDelayModel::setFeedback(float fb) {
+ _feedback = fb;
+ setPanDelay();
+}
+
+void PanDelayModel::setPanLFOFreq(float pf) {
+ _panLFOFreq = pf;
+ setPanDelay();
+}
+
+void PanDelayModel::setPanLFODepth(float pd) {
+ _panLFODepth = pd;
+ setPanDelay();
+}
+
+void PanDelayModel::setDryWet(float dw) {
+ _dryWet = dw;
+}
+
+void PanDelayModel::setPanDelay() {
+ float numLFOSample = (1.0/_panLFOFreq) * (float)_samplerate;
+ _inc = 2.0 / numLFOSample;
+ _delaySampleSize = (int)(_delayTime * (float)_samplerate);
+ _lBound = 1.0 - _panLFODepth;
+ _rBound = 1.0 + _panLFODepth;
+}
+
+void PanDelayModel::processMix(float* leftSamplesIn, float* rightSamplesIn,
+ float* leftSamplesOut, float* rightSamplesOut,
+ unsigned n) {
+ float ls, rs, p;
+ p = 1.0 - _dryWet;
+ for(unsigned i = 0; i < n; i++) {
+ //read buffer
+ ls = _leftBuffer[_bufferPointer];
+ rs = _rightBuffer[_bufferPointer];
+ //write buffer
+ _leftBuffer[_bufferPointer] *= _feedback;
+ _leftBuffer[_bufferPointer] += leftSamplesIn[i];
+ _rightBuffer[_bufferPointer] *= _feedback;
+ _rightBuffer[_bufferPointer] += rightSamplesIn[i];
+ //write out
+ leftSamplesOut[i] += _l * _dryWet * ls + p * leftSamplesIn[i];
+ rightSamplesOut[i] += _r * _dryWet * rs + p * rightSamplesIn[i];
+ //update _bufferPointer
+ _bufferPointer++;
+ _bufferPointer%=_delaySampleSize;
+ //update _l _r
+ _r += _inc;
+ _l -= _inc;
+ //update _inc
+ if(_r > _rBound || _r < _lBound) _inc = -_inc;
+ }
+}
+
+void PanDelayModel::processReplace(float* leftSamplesIn, float* rightSamplesIn,
+ float* leftSamplesOut,
+ float* rightSamplesOut, unsigned n) {
+ float ls, rs, p;
+ p = 1.0 - _dryWet;
+ for(unsigned i = 0; i < n; i++) {
+ //read buffer
+ ls = _leftBuffer[_bufferPointer];
+ rs = _rightBuffer[_bufferPointer];
+ //write buffer
+ _leftBuffer[_bufferPointer] *= _feedback;
+ _leftBuffer[_bufferPointer] += leftSamplesIn[i];
+ _rightBuffer[_bufferPointer] *= _feedback;
+ _rightBuffer[_bufferPointer] += rightSamplesIn[i];
+ //write out
+ leftSamplesOut[i] = _l * _dryWet * ls + p * leftSamplesIn[i];
+ rightSamplesOut[i] = _r * _dryWet * rs + p * rightSamplesIn[i];
+ //update _bufferPointer
+ _bufferPointer++;
+ _bufferPointer%=_delaySampleSize;
+ //update _l _r
+ _r += _inc;
+ _l -= _inc;
+ //update _inc
+ if(_r > _rBound || _r < _lBound) _inc = -_inc;
+ }
+}
diff --git a/muse/plugins/pandelay/pandelaymodel.h b/muse/plugins/pandelay/pandelaymodel.h
new file mode 100644
index 00000000..ed4255e2
--- /dev/null
+++ b/muse/plugins/pandelay/pandelaymodel.h
@@ -0,0 +1,84 @@
+//===========================================================================
+//
+// PanDelay, panoramic rotating delay
+//
+// version 0.0.1
+//
+// pandelaymodel.h
+//
+//
+// Copyright (c) 2006 Nil Geisweiller
+//
+//
+//
+// 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 (at your option) 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.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA or point your web browser to http://www.gnu.org.
+//===========================================================================
+
+#ifndef __PANDELAYMODEL_H
+#define __PANDELAYMODEL_H
+
+#include <math.h>
+
+#define MAXBUFFERLENGTH 192000
+#define MINFREQ 0.1 //in Hz
+#define MAXFREQ 10.0 //in Hz
+#define MINDELAYTIME 0.01 //in second
+#define MAXDELAYTIME 2.0 //in second
+
+#define NBRPARAM 5
+
+class PanDelayModel {
+ private:
+ int _samplerate;
+
+ float _delayTime;
+ float _feedback;
+ float _panLFOFreq;
+ float _panLFODepth;
+ float _dryWet; //0.0 : dry, 1.0 : wet
+
+ int _delaySampleSize;
+ float _lBound;
+ float _rBound;
+ float _inc;
+ float _l;
+ float _r;
+
+ float _leftBuffer[MAXBUFFERLENGTH];
+ float _rightBuffer[MAXBUFFERLENGTH];
+ int _bufferPointer;
+
+ public:
+ PanDelayModel(int samplerate);
+ ~PanDelayModel();
+
+ void setSamplerate(int sr);
+ void setDelayTime(float dt);
+ void setFeedback(float dt);
+ void setPanLFOFreq(float pf);
+ void setPanLFODepth(float pd);
+ void setDryWet(float dw);
+ void setPanDelay();
+
+ void processMix(float* leftInSamples, float* rightInSamples,
+ float* leftOutSamples, float* rightOutSamples,
+ unsigned n);
+ void processReplace(float* leftInSamples, float* rightInSamples,
+ float* leftOutSamples, float* rightOutSamples,
+ unsigned n);
+};
+
+#endif /* __PANDELAYMODEL_H */
diff --git a/muse/synti/deicsonze/CMakeLists.txt b/muse/synti/deicsonze/CMakeLists.txt
index 63a88744..6f0d0e4e 100644
--- a/muse/synti/deicsonze/CMakeLists.txt
+++ b/muse/synti/deicsonze/CMakeLists.txt
@@ -39,7 +39,7 @@ target_link_libraries( deicsonze synti )
#
set_target_properties ( deicsonze
PROPERTIES PREFIX ""
- #COMPILE_FLAGS "-O3 -include ${PROJECT_BINARY_DIR}/all-pic.h"
+ #COMPILE_FLAGS "-O2 -include ${PROJECT_BINARY_DIR}/all-pic.h"
COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h"
)
diff --git a/muse/synti/deicsonze/deicsonze.cpp b/muse/synti/deicsonze/deicsonze.cpp
index dbbba68f..660c41e4 100644
--- a/muse/synti/deicsonze/deicsonze.cpp
+++ b/muse/synti/deicsonze/deicsonze.cpp
@@ -89,15 +89,21 @@ DeicsOnze::DeicsOnze() : Mess(2) {
tempInputChorus = (float**) malloc(sizeof(float*)*NBRFXINPUTS);
for(int i = 0; i < NBRFXINPUTS; i++)
tempInputChorus[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
- tempInputReverb = (float**) malloc(sizeof(float*)*NBRFXINPUTS);
- for(int i = 0; i < NBRFXINPUTS; i++)
- tempInputReverb[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
tempOutputChorus = (float**) malloc(sizeof(float*)*NBRFXOUTPUTS);
for(int i = 0; i < NBRFXOUTPUTS; i++)
tempOutputChorus[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
+ tempInputReverb = (float**) malloc(sizeof(float*)*NBRFXINPUTS);
+ for(int i = 0; i < NBRFXINPUTS; i++)
+ tempInputReverb[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
tempOutputReverb = (float**) malloc(sizeof(float*)*NBRFXOUTPUTS);
for(int i = 0; i < NBRFXOUTPUTS; i++)
tempOutputReverb[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
+ tempInputDelay = (float**) malloc(sizeof(float*)*NBRFXINPUTS);
+ for(int i = 0; i < NBRFXINPUTS; i++)
+ tempInputDelay[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
+ tempOutputDelay = (float**) malloc(sizeof(float*)*NBRFXOUTPUTS);
+ for(int i = 0; i < NBRFXOUTPUTS; i++)
+ tempOutputDelay[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
srand(time(0)); // initialize random number generator
@@ -123,14 +129,17 @@ DeicsOnze::DeicsOnze() : Mess(2) {
//FX
_pluginIReverb = NULL;
- _pluginIChorus = NULL;
initPluginReverb(plugins.find("freeverb", "freeverb1"));
+ _pluginIChorus = NULL;
initPluginChorus(plugins.find("doublechorus", "doublechorus1"));
+ _pluginIDelay = NULL;
+ initPluginDelay(plugins.find("pandelay", "pandelay"));
//Filter
_dryFilter = new LowFilter();
_chorusFilter = new LowFilter();
_reverbFilter = new LowFilter();
+ _delayFilter = new LowFilter();
//Load configuration
QString defaultConf = (QString(getenv("HOME")) + QString("/." DEICSONZESTR ".dco"));
@@ -173,6 +182,13 @@ DeicsOnze::DeicsOnze() : Mess(2) {
dataChorusRet[1]=(unsigned char)getChorusReturn();
MidiEvent evChorusRet(0,ME_SYSEX,(const unsigned char*)dataChorusRet, 2);
_gui->writeEvent(evChorusRet);
+ unsigned char *dataDelayRet = new unsigned char[2];
+ dataDelayRet[0]=SYSEX_DELAYRETURN;
+ dataDelayRet[1]=(unsigned char)getDelayReturn();
+ //printf("DELAY RET = %d, REVERB RET = %d\n",
+ //getDelayReturn(), getReverbReturn());
+ MidiEvent evDelayRet(0,ME_SYSEX,(const unsigned char*)dataDelayRet, 2);
+ _gui->writeEvent(evDelayRet);
//update font size
unsigned char *dataFontSize = new unsigned char[2];
dataFontSize[0]=SYSEX_FONTSIZE;
@@ -199,12 +215,16 @@ DeicsOnze::~DeicsOnze()
//dealloc temp buffers chorus and reverb
for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputChorus[i]);
free(tempInputChorus);
- for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputReverb[i]);
- free(tempInputReverb);
for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputChorus[i]);
free(tempOutputChorus);
+ for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputReverb[i]);
+ free(tempInputReverb);
for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputReverb[i]);
free(tempOutputReverb);
+ for(int i = 0; i < NBRFXINPUTS; i++) free(tempInputDelay[i]);
+ free(tempInputDelay);
+ for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputDelay[i]);
+ free(tempOutputDelay);
}
//---------------------------------------------------------
@@ -248,6 +268,7 @@ void DeicsOnze::setSampleRate(int sr) {
_dryFilter->setSamplerate(sr);
_chorusFilter->setSamplerate(sr);
_reverbFilter->setSamplerate(sr);
+ _delayFilter->setSamplerate(sr);
setQuality(_global.quality);
}
@@ -518,6 +539,8 @@ void DeicsOnze::initGlobal() {
_global.chorusReturn = level2amp(INITFXRETURN);
_global.isReverbActivated = false;
_global.reverbReturn = level2amp(INITFXRETURN);
+ _global.isDelayActivated = false;
+ _global.delayReturn = level2amp(INITFXRETURN);
initChannels();
}
@@ -542,6 +565,7 @@ void DeicsOnze::initChannel(int c) {
_global.channel[c].isLastNote = false;
_global.channel[c].chorusAmount = 0.0;
_global.channel[c].reverbAmount = 0.0;
+ _global.channel[c].delayAmount = 0.0;
applyChannelAmp(c);
initVoices(c);
}
@@ -748,6 +772,12 @@ void DeicsOnze::setChannelReverb(int c, int r) {
void DeicsOnze::setChannelChorus(int c, int val) {
_global.channel[c].chorusAmount = (float)lowlevel2amp(val);
}
+//----------------------------------------------------------------
+// setChannelDelay
+//----------------------------------------------------------------
+void DeicsOnze::setChannelDelay(int c, int val) {
+ _global.channel[c].delayAmount = (float)lowlevel2amp(val);
+}
//----------------------------------------------------------------
// setChorusReturn
@@ -764,6 +794,13 @@ void DeicsOnze::setReverbReturn(int val) {
}
//----------------------------------------------------------------
+// setDelayReturn
+//----------------------------------------------------------------
+void DeicsOnze::setDelayReturn(int val) {
+ _global.delayReturn = 2.0*(float)level2amp(val); //beware MAXFXRETURN==255
+}
+
+//----------------------------------------------------------------
// getNbrVoices
//----------------------------------------------------------------
int DeicsOnze::getNbrVoices(int c) const {
@@ -845,6 +882,12 @@ int DeicsOnze::getChannelChorus(int c) const {
return(amp2lowlevel(_global.channel[c].chorusAmount));
}
//----------------------------------------------------------------
+// getChannelDelay
+//----------------------------------------------------------------
+int DeicsOnze::getChannelDelay(int c) const {
+ return(amp2lowlevel(_global.channel[c].delayAmount));
+}
+//----------------------------------------------------------------
// getChorusReturn
//----------------------------------------------------------------
int DeicsOnze::getChorusReturn() const {
@@ -856,6 +899,12 @@ int DeicsOnze::getChorusReturn() const {
int DeicsOnze::getReverbReturn() const {
return(amp2level(_global.reverbReturn/2.0));
}
+//----------------------------------------------------------------
+// getReverbReturn
+//----------------------------------------------------------------
+int DeicsOnze::getDelayReturn() const {
+ return(amp2level(_global.delayReturn/2.0));
+}
//----------------------------------------------------------------
// setLfo
@@ -1022,6 +1071,7 @@ void DeicsOnze::setQuality(Quality q) {
_dryFilter->setCutoff(_global.deiSampleRate/4.0);
_reverbFilter->setCutoff(_global.deiSampleRate/4.0);
_chorusFilter->setCutoff(_global.deiSampleRate/4.0);
+ _delayFilter->setCutoff(_global.deiSampleRate/4.0);
}
//-----------------------------------------------------------------
@@ -2238,6 +2288,7 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) {
buffer[NUM_CHANNEL_RELEASE + c] = (unsigned char) getChannelRelease(c);
buffer[NUM_CHANNEL_REVERB + c] = (unsigned char) getChannelReverb(c);
buffer[NUM_CHANNEL_CHORUS + c] = (unsigned char) getChannelChorus(c);
+ buffer[NUM_CHANNEL_DELAY + c] = (unsigned char) getChannelDelay(c);
buffer[NUM_CURRENTPROG + c] = (unsigned char) _preset[c]->prog;
buffer[NUM_CURRENTLBANK + c] =
(unsigned char) _preset[c]->_subcategory->_lbank;
@@ -2273,6 +2324,7 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) {
MAXSTRLENGTHBACKGROUNDPIXPATH);
}
//FX
+ //reverb
buffer[NUM_IS_REVERB_ON]=(unsigned char)_global.isReverbActivated;
buffer[NUM_REVERB_RETURN]=(unsigned char)getReverbReturn();
buffer[NUM_REVERB_PARAM_NBR]=
@@ -2283,6 +2335,7 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) {
strncpy((char*)&buffer[NUM_REVERB_LABEL],
_pluginIReverb->plugin()->label().toLatin1().data(),
MAXSTRLENGTHFXLABEL);
+ //chorus
buffer[NUM_IS_CHORUS_ON]=(unsigned char)_global.isChorusActivated;
buffer[NUM_CHORUS_RETURN]=(unsigned char)getChorusReturn();
buffer[NUM_CHORUS_PARAM_NBR]=
@@ -2293,6 +2346,9 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) {
strncpy((char*)&buffer[NUM_CHORUS_LABEL],
_pluginIChorus->plugin()->label().toLatin1().data(),
MAXSTRLENGTHFXLABEL);
+ //delay
+ buffer[NUM_IS_DELAY_ON]=(unsigned char)_global.isDelayActivated;
+ buffer[NUM_DELAY_RETURN]=(unsigned char)getDelayReturn();
//save FX parameters
//reverb
for(int i = 0; i < _pluginIReverb->plugin()->parameter(); i++) {
@@ -2306,6 +2362,12 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) {
+ sizeof(float)*_pluginIReverb->plugin()->parameter()
+ sizeof(float)*i], &val, sizeof(float));
}
+ //delay
+ buffer[NUM_DELAY_TIME] = (unsigned char)getDelayTime();
+ buffer[NUM_DELAY_FEEDBACK] = (unsigned char)getDelayFeedback();
+ buffer[NUM_DELAY_LFO_FREQ] = (unsigned char)getDelayLFOFreq();
+ buffer[NUM_DELAY_LFO_DEPTH] = (unsigned char)getDelayLFODepth();
+
//save set data
for(int i = NUM_CONFIGLENGTH
+ sizeof(float)*_pluginIReverb->plugin()->parameter()
@@ -2402,6 +2464,12 @@ void DeicsOnze::parseInitData(int length, const unsigned char* data) {
evChChorus(0, c, ME_CONTROLLER,
CTRL_CHORUS_SEND, data[NUM_CHANNEL_CHORUS + c]);
_gui->writeEvent(evChChorus);
+ //channel delay
+ setChannelDelay(c, data[NUM_CHANNEL_DELAY + c]);
+ MidiEvent
+ evChDelay(0, c, ME_CONTROLLER,
+ CTRL_VARIATION_SEND, data[NUM_CHANNEL_DELAY + c]);
+ _gui->writeEvent(evChDelay);
}
//load configuration
_saveConfig = (bool)data[NUM_SAVECONFIG];
@@ -2533,6 +2601,49 @@ void DeicsOnze::parseInitData(int length, const unsigned char* data) {
MidiEvent evSysexBuildCho(0,ME_SYSEX,
(const unsigned char*)&dataBuildCho, 1);
_gui->writeEvent(evSysexBuildCho);
+ //delay
+ _global.isDelayActivated = (bool)data[NUM_IS_DELAY_ON];
+ unsigned char *dataDelayAct = new unsigned char[2];
+ dataDelayAct[0]=SYSEX_DELAYACTIV;
+ dataDelayAct[1]=(unsigned char)_global.isDelayActivated;
+ MidiEvent evDelayAct(0,ME_SYSEX,(const unsigned char*)dataDelayAct, 2);
+ _gui->writeEvent(evDelayAct);
+ setDelayReturn((int)data[NUM_DELAY_RETURN]);
+ unsigned char *dataDelayRet = new unsigned char[2];
+ dataDelayRet[0]=SYSEX_DELAYRETURN;
+ dataDelayRet[1]=(unsigned char)getDelayReturn();
+ MidiEvent evDelayRet(0,ME_SYSEX,(const unsigned char*)dataDelayRet, 2);
+ _gui->writeEvent(evDelayRet);
+ //initPluginDelay(plugins.find("pandelay", "pandelay"));
+ setDelayTime((int)data[NUM_DELAY_TIME]);
+ char dataDelayTime[2];
+ dataDelayTime[0] = SYSEX_DELAYTIME;
+ dataDelayTime[1] = (unsigned char)getDelayTime();
+ MidiEvent evSysexDelayTime(0,ME_SYSEX,
+ (const unsigned char*)dataDelayTime, 2);
+ _gui->writeEvent(evSysexDelayTime);
+ setDelayFeedback((int)data[NUM_DELAY_FEEDBACK]);
+ char dataDelayFeedback[2];
+ dataDelayFeedback[0] = SYSEX_DELAYFEEDBACK;
+ dataDelayFeedback[1] = (unsigned char)getDelayFeedback();
+ MidiEvent evSysexDelayFeedback(0,ME_SYSEX,
+ (const unsigned char*)dataDelayFeedback, 2);
+ _gui->writeEvent(evSysexDelayFeedback);
+ setDelayLFOFreq((int)data[NUM_DELAY_LFO_FREQ]);
+ char dataDelayLFOFreq[2];
+ dataDelayLFOFreq[0] = SYSEX_DELAYLFOFREQ;
+ dataDelayLFOFreq[1] = (unsigned char)getDelayLFOFreq();
+ MidiEvent evSysexDelayLFOFreq(0,ME_SYSEX,
+ (const unsigned char*)dataDelayLFOFreq, 2);
+ _gui->writeEvent(evSysexDelayLFOFreq);
+ setDelayLFODepth((int)data[NUM_DELAY_LFO_DEPTH]);
+ char dataDelayLFODepth[2];
+ dataDelayLFODepth[0] = SYSEX_DELAYLFODEPTH;
+ dataDelayLFODepth[1] = (unsigned char)getDelayLFODepth();
+ MidiEvent evSysexDelayLFODepth(0,ME_SYSEX,
+ (const unsigned char*)dataDelayLFODepth, 2);
+ _gui->writeEvent(evSysexDelayLFODepth);
+
//load set
FILE* tmp;
char* tmpname;
@@ -2750,6 +2861,13 @@ bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {
_gui->writeEvent(evSysex);
}
break;
+ case SYSEX_DELAYACTIV:
+ _global.isDelayActivated = (bool)data[1];
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
case SYSEX_CHORUSRETURN:
setChorusReturn((int)data[1]);
if(!fromGui) {
@@ -2764,6 +2882,13 @@ bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {
_gui->writeEvent(evSysex);
}
break;
+ case SYSEX_DELAYRETURN:
+ setDelayReturn((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
case SYSEX_SELECTREVERB:
Plugin* pluginReverb;
memcpy(&pluginReverb, &data[1], sizeof(Plugin*));
@@ -2774,6 +2899,34 @@ bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {
memcpy(&pluginChorus, &data[1], sizeof(Plugin*));
initPluginChorus(pluginChorus);
break;
+ case SYSEX_DELAYTIME:
+ setDelayTime((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_DELAYFEEDBACK:
+ setDelayFeedback((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_DELAYLFOFREQ:
+ setDelayLFOFreq((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_DELAYLFODEPTH:
+ setDelayLFODepth((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
default:
break;
}
@@ -3359,6 +3512,13 @@ bool DeicsOnze::setController(int ch, int ctrl, int val, bool fromGui) {
_gui->writeEvent(ev);
}
break;
+ case CTRL_VARIATION_SEND:
+ setChannelDelay(ch, val);
+ if(!fromGui) {
+ MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_VARIATION_SEND, val);
+ _gui->writeEvent(ev);
+ }
+ break;
case CTRL_SUSTAIN:
setSustain(ch, val);
break;
@@ -3792,6 +3952,8 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
_global.lastInputRightChorusSample = 0.0;
_global.lastInputLeftReverbSample = 0.0;
_global.lastInputRightReverbSample = 0.0;
+ _global.lastInputLeftDelaySample = 0.0;
+ _global.lastInputRightDelaySample = 0.0;
//per channel
for(int c = 0; c < NBRCHANNELS; c++) {
tempChannelOutput = 0.0;
@@ -4054,6 +4216,12 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
_global.lastInputRightReverbSample += tempChannelRightOutput *
_global.channel[c].reverbAmount;
}
+ if(_global.isDelayActivated) {
+ _global.lastInputLeftDelaySample += tempChannelLeftOutput *
+ _global.channel[c].delayAmount;
+ _global.lastInputRightDelaySample += tempChannelRightOutput *
+ _global.channel[c].delayAmount;
+ }
tempLeftOutput += tempChannelLeftOutput;
tempRightOutput += tempChannelRightOutput;
}
@@ -4072,6 +4240,10 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
tempInputReverb[0][i] = _global.lastInputLeftReverbSample;
tempInputReverb[1][i] = _global.lastInputRightReverbSample;
}
+ if(_global.isDelayActivated) {
+ tempInputDelay[0][i] = _global.lastInputLeftDelaySample;
+ tempInputDelay[1][i] = _global.lastInputRightDelaySample;
+ }
_global.qualityCounter++;
_global.qualityCounter %= _global.qualityCounterTop;
@@ -4097,7 +4269,7 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
//apply Filter
if(_global.filter) _reverbFilter->process(tempOutputReverb[0],
tempOutputReverb[1], n);
- //apply Chorus
+ //apply Reverb
_pluginIReverb->apply(n, 2, tempInputReverb, tempOutputReverb);
for(int i = 0; i < n; i++) {
leftOutput[i] +=
@@ -4106,6 +4278,20 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
tempOutputReverb[1][i] * _global.reverbReturn * _global.masterVolume;
}
}
+ //Delay
+ if(_global.isDelayActivated) {
+ //apply Filter
+ if(_global.filter) _delayFilter->process(tempOutputDelay[0],
+ tempOutputDelay[1], n);
+ //apply Delay
+ _pluginIDelay->apply(n, 2, tempInputDelay, tempOutputDelay);
+ for(int i = 0; i < n; i++) {
+ leftOutput[i] +=
+ tempOutputDelay[0][i] * _global.delayReturn * _global.masterVolume;
+ rightOutput[i] +=
+ tempOutputDelay[1][i] * _global.delayReturn * _global.masterVolume;
+ }
+ }
}
diff --git a/muse/synti/deicsonze/deicsonze.h b/muse/synti/deicsonze/deicsonze.h
index 6102eb34..4bc49b16 100644
--- a/muse/synti/deicsonze/deicsonze.h
+++ b/muse/synti/deicsonze/deicsonze.h
@@ -149,6 +149,13 @@
#define SYSEX_BUILDGUICHORUS 85
#define SYSEX_FILTER 90
#define FILTERSTR "Filter"
+#define SYSEX_DELAYACTIV 91
+#define SYSEX_DELAYRETURN 92
+#define SYSEX_DELAYTIME 93
+#define SYSEX_DELAYFEEDBACK 94
+#define SYSEX_DELAYLFOFREQ 95
+#define SYSEX_DELAYLFODEPTH 96
+
//REVERB PARAMETERS
#define DEFAULTVOL 200
@@ -165,7 +172,8 @@ enum {
NUM_CHANNEL_RELEASE = NUM_CHANNEL_ATTACK + NBRCHANNELS + 1,
NUM_CHANNEL_REVERB = NUM_CHANNEL_RELEASE + NBRCHANNELS + 1,
NUM_CHANNEL_CHORUS = NUM_CHANNEL_REVERB + NBRCHANNELS + 1,
- NUM_CURRENTPROG = NUM_CHANNEL_CHORUS + NBRCHANNELS + 1,
+ NUM_CHANNEL_DELAY = NUM_CHANNEL_CHORUS + NBRCHANNELS + 1,
+ NUM_CURRENTPROG = NUM_CHANNEL_DELAY + NBRCHANNELS + 1,
NUM_CURRENTLBANK = NUM_CURRENTPROG + NBRCHANNELS + 1,
NUM_CURRENTHBANK = NUM_CURRENTLBANK + NBRCHANNELS + 1,
NUM_NBRVOICES = NUM_CURRENTHBANK + NBRCHANNELS + 1,
@@ -200,7 +208,13 @@ enum {
NUM_CHORUS_PARAM_NBR,
NUM_CHORUS_LIB,
NUM_CHORUS_LABEL = NUM_CHORUS_LIB + MAXSTRLENGTHFXLIB + 1,
- NUM_CONFIGLENGTH = NUM_CHORUS_LABEL + MAXSTRLENGTHFXLABEL + 1
+ NUM_IS_DELAY_ON = NUM_CHORUS_LABEL + MAXSTRLENGTHFXLABEL + 1,
+ NUM_DELAY_RETURN,
+ NUM_DELAY_TIME,
+ NUM_DELAY_FEEDBACK,
+ NUM_DELAY_LFO_FREQ,
+ NUM_DELAY_LFO_DEPTH,
+ NUM_CONFIGLENGTH = NUM_DELAY_LFO_DEPTH + 1
};
class DeicsOnzeGui;
@@ -370,6 +384,7 @@ struct Channel {
//FX
float chorusAmount; //between 0.0 and 1.0
float reverbAmount; //between 0.0 and 1.0
+ float delayAmount; //between 0.0 and 1.0
};
//---------------------------------------------------------
@@ -396,11 +411,15 @@ struct Global {
float lastInputRightChorusSample;
float lastInputLeftReverbSample;
float lastInputRightReverbSample;
+ float lastInputLeftDelaySample;
+ float lastInputRightDelaySample;
Channel channel[NBRCHANNELS];
bool isChorusActivated;
float chorusReturn;
bool isReverbActivated;
float reverbReturn;
+ bool isDelayActivated;
+ float delayReturn;
};
//---------------------------------------------------------
@@ -419,9 +438,11 @@ class DeicsOnze : public Mess {
public:
float** tempInputChorus;
- float** tempInputReverb;
float** tempOutputChorus;
+ float** tempInputReverb;
float** tempOutputReverb;
+ float** tempInputDelay;
+ float** tempOutputDelay;
float* getSinusWaveTable();
@@ -441,19 +462,31 @@ class DeicsOnze : public Mess {
//FX
PluginI* _pluginIReverb;
PluginI* _pluginIChorus;
+ PluginI* _pluginIDelay;
void initPluginReverb(Plugin*);
void initPluginChorus(Plugin*);
+ void initPluginDelay(Plugin*);
void setReverbParam(int i, double val);
- void setChorusParam(int i, double val);
double getReverbParam(int i);
+ void setChorusParam(int i, double val);
double getChorusParam(int i);
+ void setDelayTime(int val); //0-255
+ void setDelayFeedback(int val); //0-255
+ void setDelayLFOFreq(int val); //0-255
+ void setDelayLFODepth(int val); //0-255
+ void setDelayDryWet(int val); //0-255
+ int getDelayTime();
+ int getDelayFeedback();
+ int getDelayLFOFreq();
+ int getDelayLFODepth();
//Filter
LowFilter* _dryFilter;
LowFilter* _chorusFilter;
LowFilter* _reverbFilter;
+ LowFilter* _delayFilter;
mutable MidiPatch _patch;
mutable int _numPatchProg; //used by getPatchInfo
@@ -507,8 +540,10 @@ class DeicsOnze : public Mess {
void setChannelRelease(int c, int r);
void setChannelReverb(int c, int r);
void setChannelChorus(int c, int val);
+ void setChannelDelay(int c, int val);
void setChorusReturn(int val);
void setReverbReturn(int val);
+ void setDelayReturn(int val);
bool getChannelEnable(int c) const;
int getNbrVoices(int c) const;
int getMasterVol(void) const;
@@ -522,8 +557,10 @@ class DeicsOnze : public Mess {
int getChannelRelease(int c) const;
int getChannelReverb(int c) const;
int getChannelChorus(int c) const;
+ int getChannelDelay(int c) const;
int getChorusReturn(void) const;
int getReverbReturn(void) const;
+ int getDelayReturn(void) const;
void setPitchBendCoef(int c, int val);
void setModulation(int c, int val); //TODO check between setChannelModulation
void setSustain(int c, int val);
diff --git a/muse/synti/deicsonze/deicsonzegui.cpp b/muse/synti/deicsonze/deicsonzegui.cpp
index 25089b75..364ba5c2 100644
--- a/muse/synti/deicsonze/deicsonzegui.cpp
+++ b/muse/synti/deicsonze/deicsonzegui.cpp
@@ -32,6 +32,7 @@
#include "config.h"
#include "plugin.h"
#include "plugingui.h"
+#include "plugins/pandelay/pandelaymodel.h"
#include "deicsonzegui.h"
@@ -216,8 +217,8 @@ DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
this, SLOT(setLfoAmpSens(int)));
connect(transposeSlider, SIGNAL(valueChanged(int)),
this, SLOT(setTranspose(int)));
- connect(channelDetuneSlider, SIGNAL(valueChanged(int)),
- this, SLOT(setChannelDetune(int)));
+ //connect(channelDetuneSlider, SIGNAL(valueChanged(int)),
+ // this, SLOT(setChannelDetune(int)));
connect(algorithmComboBox, SIGNAL(activated(int)),
this, SLOT(setAlgorithm(int)));
connect(pitchBendRangeSlider, SIGNAL(valueChanged(int)),
@@ -256,8 +257,8 @@ DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
this, SLOT(setAtPitchBias(int)));
connect(atEgBiasSpinBox, SIGNAL(valueChanged(int)),
this, SLOT(setAtEgBias(int)));
- connect(reverbSpinBox, SIGNAL(valueChanged(int)),
- this, SLOT(setReverbRate(int)));
+ //connect(reverbSpinBox, SIGNAL(valueChanged(int)),
+ // this, SLOT(setReverbRate(int)));
connect(polyMonoComboBox, SIGNAL(activated(int)),
this, SLOT(setPolyMode(int)));
connect(PortFingerFullComboBox, SIGNAL(activated(int)),
@@ -355,6 +356,29 @@ DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
this, SLOT(setWaveForm3(int)));
connect(WaveForm4ComboBox, SIGNAL(activated(int)),
this, SLOT(setWaveForm4(int)));
+ //PanDelay
+ connect(delayActivCheckBox, SIGNAL(toggled(bool)), this,
+ SLOT(setActivDelay(bool)));
+ connect(delayReturnSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setDelayReturn(int)));
+ connect(chDelaySlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setChannelDelay(int)));
+ connect(delayTimeSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setDelayTime(int)));
+ connect(delayTimeFloatentry, SIGNAL(valueChanged(double, int)), this,
+ SLOT(setDelayTime(double)));
+ connect(delayFeedbackSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setDelayFeedback(int)));
+ connect(delayFeedbackFloatentry, SIGNAL(valueChanged(double, int)), this,
+ SLOT(setDelayFeedback(double)));
+ connect(delayPanLFOFreqSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setDelayPanLFOFreq(int)));
+ connect(delayPanLFOFreqFloatentry, SIGNAL(valueChanged(double, int)), this,
+ SLOT(setdelayPanLFOFreq(double)));
+ connect(delayPanLFODepthSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(setDelayPanLFODepth(int)));
+ connect(delayPanLFODepthFloatentry, SIGNAL(valueChanged(double, int)), this,
+ SLOT(setDelayPanLFODepth(double)));
//category subcategory preset
connect(categoryListView,
SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
@@ -783,10 +807,10 @@ void DeicsOnzeGui::setTextColor(const QColor & c) {
DetWaveEGS4GroupBox->setPalette(p);
sensitivity4groupBox->setPalette(p);
transposeGroupBox->setPalette(p);
- detuneGroupBox->setPalette(p);
- footSWGroupBox->setPalette(p);
+ //detuneGroupBox->setPalette(p);
+ //footSWGroupBox->setPalette(p);
pitchBendRangeGroupBox->setPalette(p);
- reverbGroupBox->setPalette(p);
+ //reverbGroupBox->setPalette(p);
modeGroupBox->setPalette(p);
portamentoGroupBox->setPalette(p);
colorGroupBox->setPalette(p);
@@ -803,6 +827,12 @@ void DeicsOnzeGui::setTextColor(const QColor & c) {
channelChorusGroupBox->setPalette(p);
parametersChorusGroupBox->setPalette(p);
fontSizeGroupBox->setPalette(p);
+ delayTimeGroupBox->setPalette(p);
+ delayFeedbackGroupBox->setPalette(p);
+ delayPanLFOGroupBox->setPalette(p);
+ delayPanDepthGroupBox->setPalette(p);
+ delayReturnGroupBox->setPalette(p);
+ channelDelayGroupBox->setPalette(p);
}
void DeicsOnzeGui::setBackgroundColor(const QColor & c) {
@@ -848,10 +878,10 @@ void DeicsOnzeGui::setEditTextColor(const QColor & c) {
DetWaveEGS4GroupBox->setPalette(p);
sensitivity4groupBox->setPalette(p);
transposeGroupBox->setPalette(p);
- detuneGroupBox->setPalette(p);
- footSWGroupBox->setPalette(p);
+ //detuneGroupBox->setPalette(p);
+ //footSWGroupBox->setPalette(p);
pitchBendRangeGroupBox->setPalette(p);
- reverbGroupBox->setPalette(p);
+ //reverbGroupBox->setPalette(p);
modeGroupBox->setPalette(p);
portamentoGroupBox->setPalette(p);
colorGroupBox->setPalette(p);
@@ -910,10 +940,10 @@ void DeicsOnzeGui::setEditBackgroundColor(const QColor & c) {
DetWaveEGS4GroupBox->setPalette(p);
sensitivity4groupBox->setPalette(p);
transposeGroupBox->setPalette(p);
- detuneGroupBox->setPalette(p);
- footSWGroupBox->setPalette(p);
+ //detuneGroupBox->setPalette(p);
+ //footSWGroupBox->setPalette(p);
pitchBendRangeGroupBox->setPalette(p);
- reverbGroupBox->setPalette(p);
+ //reverbGroupBox->setPalette(p);
modeGroupBox->setPalette(p);
portamentoGroupBox->setPalette(p);
colorGroupBox->setPalette(p);
@@ -1401,7 +1431,7 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
case CTRL_FIXRANGE+3*DECAPAR2: updateFIXRANGE(3, val); break;
case CTRL_OSW+3*DECAPAR2: updateOSW(3, val); break;
case CTRL_SHFT+3*DECAPAR2: updateSHFT(3, val); break;
- case CTRL_REVERBRATE: updateReverbRate(val); break;
+ case CTRL_REVERBRATE: /*updateReverbRate(val);*/ break;
case CTRL_FCPITCH: updateFcPitch(val); break;
case CTRL_FCAMPLITUDE: updateFcAmplitude(val); break;
case CTRL_CHANNELENABLE:
@@ -1416,6 +1446,7 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
case CTRL_RELEASE_TIME: updateRelease(val); break;
case CTRL_CHORUS_SEND: updateChannelChorus(val); break;
case CTRL_REVERB_SEND: updateChannelReverb(val); break;
+ case CTRL_VARIATION_SEND: updateChannelDelay(val); break;
case CTRL_MODULATION: updateModulation(val); break;
case CTRL_PROGRAM :
int hbank = (val & 0xff0000) >> 16;
@@ -1473,6 +1504,24 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
case SYSEX_CHORUS2DEPTH :
updateDepthChorus2((int)data[1]);
break;*/
+ case SYSEX_DELAYACTIV :
+ updateDelayActiv((bool)data[1]);
+ break;
+ case SYSEX_DELAYRETURN :
+ updateDelayReturn((int)data[1]);
+ break;
+ case SYSEX_DELAYTIME :
+ updateDelayTime((int) data[1]);
+ break;
+ case SYSEX_DELAYFEEDBACK :
+ updateDelayFeedback((int) data[1]);
+ break;
+ case SYSEX_DELAYLFOFREQ :
+ updateDelayPanLFOFreq((int) data[1]);
+ break;
+ case SYSEX_DELAYLFODEPTH :
+ updateDelayPanLFODepth((int) data[1]);
+ break;
case SYSEX_QUALITY :
updateQuality((int)data[1]);
break;
@@ -2541,7 +2590,8 @@ void DeicsOnzeGui::setModulationKnob(double val) {
(int)(val*(double)MAXMODULATION));
}
void DeicsOnzeGui::setDetuneKnob(double val) {
- channelDetuneSlider->setValue((int)((2.0*val-1.0)*(double)MAXCHANNELDETUNE));
+ //channelDetuneSlider->setValue((int)((2.0*val-1.0)*(double)MAXCHANNELDETUNE));
+ setChannelDetune((int)((2.0*val-1.0)*(double)MAXCHANNELDETUNE));
}
void DeicsOnzeGui::setAttackKnob(double val) {
sendController(_currentChannel, CTRL_ATTACK_TIME,
@@ -2935,6 +2985,86 @@ void DeicsOnzeGui::setWaveForm4(int w) {
sendController(_currentChannel, CTRL_OSW+3*DECAPAR2, w);
}
//--------------------------------------------------------------
+// set delay
+//--------------------------------------------------------------
+void DeicsOnzeGui::setActivDelay(bool a) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYACTIV;
+ message[1]=(unsigned char)a;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setDelayReturn(int r) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYRETURN;
+ message[1]=(unsigned char)r;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setChannelDelay(int d) {
+ sendController(_currentChannel, CTRL_VARIATION_SEND, (unsigned char)d);
+}
+void DeicsOnzeGui::setDelayTime(int t) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYTIME;
+ message[1]=(unsigned char)t;
+ sendSysex(message, 2);
+ updateDelayTime(t);
+}
+void DeicsOnzeGui::setDelayTime(double t) {
+ int it = (int)(((t - MINDELAYTIME) / (MAXDELAYTIME - MINDELAYTIME))*255.0);
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYTIME;
+ message[1]=(unsigned char)it;
+ sendSysex(message, 2);
+ updateDelayTime(it);
+}
+void DeicsOnzeGui::setDelayFeedback(int f) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYFEEDBACK;
+ message[1]=(unsigned char)f;
+ sendSysex(message, 2);
+ updateDelayFeedback(f);
+}
+void DeicsOnzeGui::setDelayFeedback(double f) {
+ int idf = (int)(f*128.0+128.0);
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYFEEDBACK;
+ message[1]=(unsigned char)idf;
+ sendSysex(message, 2);
+ updateDelayFeedback(idf);
+}
+void DeicsOnzeGui::setDelayPanLFOFreq(int pf) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYLFOFREQ;
+ message[1]=(unsigned char)pf;
+ sendSysex(message, 2);
+ updateDelayPanLFOFreq(pf);
+}
+void DeicsOnzeGui::setDelayPanLFOFreq(double pf) {
+ int ipf = (int)(((pf - MINFREQ) / (MAXFREQ - MINFREQ))*255.0);
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYLFOFREQ;
+ message[1]=(unsigned char)ipf;
+ sendSysex(message, 2);
+ updateDelayPanLFOFreq(ipf);
+}
+void DeicsOnzeGui::setDelayPanLFODepth(int pd) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYLFODEPTH;
+ message[1]=(unsigned char)pd;
+ sendSysex(message, 2);
+ updateDelayPanLFODepth(pd);
+}
+void DeicsOnzeGui::setDelayPanLFODepth(double pd) {
+ int ipd = (int)(pd*255.0);
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_DELAYLFODEPTH;
+ message[1]=(unsigned char)ipd;
+ sendSysex(message, 2);
+ updateDelayPanLFODepth(ipd);
+}
+
+
+//--------------------------------------------------------------
// setSet
// Display the set, that is the category list
//--------------------------------------------------------------
@@ -3039,6 +3169,8 @@ void DeicsOnzeGui::setEnabledPreset(bool b) {
Op3Tab->setEnabled(b);
Op4Tab->setEnabled(b);
FunctionsTab->setEnabled(b);
+ chorusTab->setEnabled(b);
+ reverbTab->setEnabled(b);
_enabledPreset=b;
}
@@ -3163,6 +3295,60 @@ void DeicsOnzeGui::updateLadspaChorusLineEdit(QString s) {
selectLadspaChorusLineEdit->blockSignals(false);
}
+void DeicsOnzeGui::updateDelayActiv(bool a) {
+ delayActivCheckBox->blockSignals(true);
+ delayActivCheckBox->setChecked(a);
+ delayActivCheckBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateChannelDelay(int r) {
+ chDelaySlider->blockSignals(true);
+ chDelaySlider->setValue(r);
+ chDelaySlider->blockSignals(false);
+ chDelaySpinBox->blockSignals(true);
+ chDelaySpinBox->setValue(r);
+ chDelaySpinBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateDelayReturn(int r) {
+ delayReturnSlider->blockSignals(true);
+ delayReturnSlider->setValue(r);
+ delayReturnSlider->blockSignals(false);
+}
+void DeicsOnzeGui::updateDelayPanLFOFreq(int plf) {
+ delayPanLFOFreqSlider->blockSignals(true);
+ delayPanLFOFreqSlider->setValue(plf);
+ delayPanLFOFreqSlider->blockSignals(false);
+ delayPanLFOFreqFloatentry->blockSignals(true);
+ delayPanLFOFreqFloatentry->setValue(MINFREQ + (MAXFREQ - MINFREQ)
+ *((float)plf/255.0));
+ delayPanLFOFreqFloatentry->blockSignals(false);
+}
+void DeicsOnzeGui::updateDelayTime(int dt) {
+ delayTimeSlider->blockSignals(true);
+ delayTimeSlider->setValue(dt);
+ delayTimeSlider->blockSignals(false);
+ delayTimeFloatentry->blockSignals(true);
+ delayTimeFloatentry->setValue(MINDELAYTIME +
+ (MAXDELAYTIME - MINDELAYTIME)
+ *((float)dt/255.0));
+ delayTimeFloatentry->blockSignals(false);
+}
+void DeicsOnzeGui::updateDelayFeedback(int df) {
+ delayFeedbackSlider->blockSignals(true);
+ delayFeedbackSlider->setValue(df);
+ delayFeedbackSlider->blockSignals(false);
+ delayFeedbackFloatentry->blockSignals(true);
+ delayFeedbackFloatentry->setValue((float)(df - 128)/128.0);
+ delayFeedbackFloatentry->blockSignals(false);
+}
+void DeicsOnzeGui::updateDelayPanLFODepth(int dpd) {
+ delayPanLFODepthSlider->blockSignals(true);
+ delayPanLFODepthSlider->setValue(dpd);
+ delayPanLFODepthSlider->blockSignals(false);
+ delayPanLFODepthFloatentry->blockSignals(true);
+ delayPanLFODepthFloatentry->setValue((float)dpd/255.0);
+ delayPanLFODepthFloatentry->blockSignals(false);
+}
+
void DeicsOnzeGui::applyFontSize(int fs) {
QFont f = font();
f.setPointSize(fs);
@@ -3317,14 +3503,14 @@ void DeicsOnzeGui::updateAtEgBias(int val) {
atEgBiasSlider->setValue(val);
atEgBiasSlider->blockSignals(false);
}
-void DeicsOnzeGui::updateReverbRate(int val) {
- reverbSpinBox->blockSignals(true);
- reverbSpinBox->setValue(val);
- reverbSpinBox->blockSignals(false);
- reverbSlider->blockSignals(true);
- reverbSlider->setValue(val);
- reverbSlider->blockSignals(false);
-}
+//void DeicsOnzeGui::updateReverbRate(int val) {
+ //reverbSpinBox->blockSignals(true);
+ //reverbSpinBox->setValue(val);
+ //reverbSpinBox->blockSignals(false);
+ //reverbSlider->blockSignals(true);
+ //reverbSlider->setValue(val);
+ //reverbSlider->blockSignals(false);
+//}
//Envelope
void DeicsOnzeGui::updateAR(int op, int val) {
Eg* _eg=&(_deicsOnze->_preset[_currentChannel]->eg[op]);
@@ -3910,7 +4096,7 @@ void DeicsOnzeGui::updateFIXRANGE(int op, int val) {
case 0:
Freq1SpinBox->blockSignals(true);
Freq1SpinBox->setValue(val/100);
- //val/100 because it is still a coarse display
+ //val/100 because it is still a coarse display
Freq1SpinBox->blockSignals(false);
break;
case 1:
@@ -3983,21 +4169,21 @@ void DeicsOnzeGui::updateSHFT(int op, int val) {
}
void DeicsOnzeGui::updateChannelDetune(int val) {
updateChannelDetuneKnob(val);
- updateChannelDetuneSlider(val);
+ //updateChannelDetuneSlider(val);
}
void DeicsOnzeGui::updateChannelDetuneKnob(int val) {
detuneKnob->blockSignals(true);
detuneKnob->setValue((((double)val)/((double)MAXCHANNELDETUNE))/2.0+0.5);
detuneKnob->blockSignals(false);
}
-void DeicsOnzeGui::updateChannelDetuneSlider(int val) {
- channelDetuneSlider->blockSignals(true);
- channelDetuneSlider->setValue(val);
- channelDetuneSlider->blockSignals(false);
- channelDetuneSpinBox->blockSignals(true);
- channelDetuneSpinBox->setValue(val);
- channelDetuneSpinBox->blockSignals(false);
-}
+//void DeicsOnzeGui::updateChannelDetuneSlider(int val) {
+ //channelDetuneSlider->blockSignals(true);
+ //channelDetuneSlider->setValue(val);
+ //channelDetuneSlider->blockSignals(false);
+ //channelDetuneSpinBox->blockSignals(true);
+ //channelDetuneSpinBox->setValue(val);
+ //channelDetuneSpinBox->blockSignals(false);
+//}
void DeicsOnzeGui::updateChannelVolume(int val) {
channelVolumeKnob->blockSignals(true);
channelVolumeKnob->setValue(((double)val)/(double)MAXCHANNELVOLUME);
@@ -4159,7 +4345,7 @@ void DeicsOnzeGui::updatePreset(Preset* p) {
updateAtAmplitude(p->function.atAmplitude);
updateAtPitchBias(p->function.atPitchBias);
updateAtEgBias(p->function.atEgBias);
- updateReverbRate(p->function.reverbRate);
+ //updateReverbRate(p->function.reverbRate);
updatePOLYMODE((int)p->function.mode);
updatePORTAMODE((int)p->function.portamento);
updatePORTATIME((int)p->function.portamentoTime);
diff --git a/muse/synti/deicsonze/deicsonzegui.h b/muse/synti/deicsonze/deicsonzegui.h
index 18a28929..fbbdaccd 100644
--- a/muse/synti/deicsonze/deicsonzegui.h
+++ b/muse/synti/deicsonze/deicsonzegui.h
@@ -31,6 +31,7 @@
#define __DEICSONZEGUI_H
#include "deicsonze.h"
+
#include "deicsonzepreset.h"
#include "ui_deicsonzegui.h"
#include "libsynti/gui.h"
@@ -332,6 +333,18 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void setWaveForm2(int);
void setWaveForm3(int);
void setWaveForm4(int);
+ //Delay
+ void setActivDelay(bool);
+ void setDelayReturn(int);
+ void setChannelDelay(int);
+ void setDelayTime(int);
+ void setDelayTime(double);
+ void setDelayFeedback(int);
+ void setDelayFeedback(double);
+ void setDelayPanLFOFreq(int);
+ void setDelayPanLFOFreq(double);
+ void setDelayPanLFODepth(int);
+ void setDelayPanLFODepth(double);
//category subcategory preset
void setSet(void); //display the set, that is the category list
void setCategory(Category*);
@@ -365,6 +378,13 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void updateReverbReturn(int r);
void updateLadspaReverbLineEdit(QString s);
void updateLadspaChorusLineEdit(QString s);
+ void updateDelayActiv(bool a);
+ void updateChannelDelay(int r);
+ void updateDelayReturn(int r);
+ void updateDelayPanLFOFreq(int plf);
+ void updateDelayTime(int dt);
+ void updateDelayFeedback(int df);
+ void updateDelayPanLFODepth(int dpd);
void addPluginCheckBox(int index, QString text, bool toggled,
QWidget* parent, QGridLayout* grid, bool isReverb);
void addPluginIntSlider(int index, QString text, double min, double max,
@@ -414,7 +434,7 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void updateAtAmplitude(int val);
void updateAtPitchBias(int val);
void updateAtEgBias(int val);
- void updateReverbRate(int val);
+ //void updateReverbRate(int val);
//update envelope
void updateAR(int op, int val);
void updateD1R(int op, int val);
@@ -452,7 +472,7 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void updateSHFT(int op, int val);
void updateChannelDetune(int val);
void updateChannelDetuneKnob(int val);
- void updateChannelDetuneSlider(int val);
+ //void updateChannelDetuneSlider(int val);
void updateChannelVolume(int val);
void updateCategoryName(QString cn, bool enable);
void updateSubcategoryName(QString sn, bool enable);
diff --git a/muse/synti/deicsonze/deicsonzegui.ui b/muse/synti/deicsonze/deicsonzegui.ui
index 0c9be940..d649195c 100644
--- a/muse/synti/deicsonze/deicsonzegui.ui
+++ b/muse/synti/deicsonze/deicsonzegui.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>740</width>
- <height>590</height>
+ <width>672</width>
+ <height>522</height>
</rect>
</property>
<property name="windowTitle" >
@@ -26,233 +26,6 @@
<property name="spacing" >
<number>6</number>
</property>
- <item rowspan="3" row="0" column="4" >
- <widget class="QGroupBox" name="channelCtrlGroupBox" >
- <property name="minimumSize" >
- <size>
- <width>96</width>
- <height>16</height>
- </size>
- </property>
- <property name="title" >
- <string>Channel Ctrl</string>
- </property>
- <layout class="QGridLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item row="2" column="0" >
- <widget class="Awl::VolKnob" name="channelPanKnob" >
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- <property name="minValue" >
- <double>0.000000000000000</double>
- </property>
- <property name="maxValue" >
- <double>1.000000000000000</double>
- </property>
- <property name="lineStep" >
- <double>0.100000000000000</double>
- </property>
- <property name="pageStep" >
- <double>0.200000000000000</double>
- </property>
- <property name="log" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="13" column="0" >
- <widget class="QLabel" name="releaseLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Release</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="12" column="0" >
- <widget class="Awl::Knob" name="releaseKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- </widget>
- </item>
- <item row="11" column="0" >
- <widget class="QLabel" name="attackTimeLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Attack</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="10" column="0" >
- <widget class="Awl::Knob" name="attackKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- </widget>
- </item>
- <item row="9" column="0" >
- <widget class="QLabel" name="detuneLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Detune</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="8" column="0" >
- <widget class="Awl::Knob" name="detuneKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- </widget>
- </item>
- <item row="7" column="0" >
- <widget class="QLabel" name="brightnessLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Brightness</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="6" column="0" >
- <widget class="Awl::Knob" name="brightnessKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- </widget>
- </item>
- <item row="5" column="0" >
- <widget class="QLabel" name="modulationLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Modulation</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="4" column="0" >
- <widget class="Awl::Knob" name="modulationKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- </widget>
- </item>
- <item row="3" column="0" >
- <widget class="QLabel" name="channelPanLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Pan</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="0" >
- <widget class="QLabel" name="channelVolumeLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Volume</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="0" >
- <widget class="Awl::Knob" name="channelVolumeKnob" >
- <property name="minimumSize" >
- <size>
- <width>32</width>
- <height>32</height>
- </size>
- </property>
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- <property name="maxValue" >
- <double>1.000000000000000</double>
- </property>
- <property name="lineStep" >
- <double>0.100000000000000</double>
- </property>
- <property name="pageStep" >
- <double>0.200000000000000</double>
- </property>
- <property name="scaleSize" >
- <number>270</number>
- </property>
- <property name="markSize" >
- <number>6</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
<item row="2" column="0" colspan="4" >
<widget class="QTabWidget" name="deicsOnzeTabWidget" >
<property name="sizePolicy" >
@@ -4185,7 +3958,298 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<property name="spacing" >
<number>6</number>
</property>
- <item row="0" column="0" colspan="3" >
+ <item row="2" column="0" colspan="2" >
+ <widget class="QGroupBox" name="delayTimeGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay Time (ms) </string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" >
+ <widget class="Awl::FloatEntry" name="delayTimeFloatentry" >
+ <property name="maximumSize" >
+ <size>
+ <width>48</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="minValue" >
+ <double>0.010000000000000</double>
+ </property>
+ <property name="maxValue" >
+ <double>2.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="delayTimeSlider" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="whatsThis" >
+ <string>Channel Chorus</string>
+ </property>
+ <property name="maximum" >
+ <number>255</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="3" colspan="2" >
+ <widget class="QGroupBox" name="delayPanDepthGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay Pan Depth</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" >
+ <widget class="Awl::FloatEntry" name="delayPanLFODepthFloatentry" >
+ <property name="maximumSize" >
+ <size>
+ <width>48</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="delayPanLFODepthSlider" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="whatsThis" >
+ <string>Channel Chorus</string>
+ </property>
+ <property name="maximum" >
+ <number>255</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="2" >
+ <widget class="QGroupBox" name="delayFeedbackGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay Feedback</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" >
+ <widget class="Awl::FloatEntry" name="delayFeedbackFloatentry" >
+ <property name="maximumSize" >
+ <size>
+ <width>48</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="minValue" >
+ <double>-1.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="delayFeedbackSlider" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="whatsThis" >
+ <string>Channel Chorus</string>
+ </property>
+ <property name="maximum" >
+ <number>255</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="3" colspan="2" >
+ <widget class="QGroupBox" name="delayPanLFOGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay Pan LFO Freq</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="delayPanLFOFreqSlider" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="whatsThis" >
+ <string>Channel Chorus</string>
+ </property>
+ <property name="maximum" >
+ <number>255</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="Awl::FloatEntry" name="delayPanLFOFreqFloatentry" >
+ <property name="maximumSize" >
+ <size>
+ <width>48</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="minValue" >
+ <double>0.100000000000000</double>
+ </property>
+ <property name="maxValue" >
+ <double>10.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2" >
+ <widget class="QGroupBox" name="delayReturnGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay On/Off, Return Level</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="0" >
+ <widget class="QCheckBox" name="delayActivCheckBox" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="text" >
+ <string>On</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QSlider" name="delayReturnSlider" >
+ <property name="maximum" >
+ <number>255</number>
+ </property>
+ <property name="value" >
+ <number>128</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="2" >
+ <widget class="QGroupBox" name="channelDelayGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Delay Ch Send Level </string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" >
+ <widget class="QSpinBox" name="chDelaySpinBox" >
+ <property name="maximum" >
+ <number>127</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="chDelaySlider" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="whatsThis" >
+ <string>Channel Chorus</string>
+ </property>
+ <property name="maximum" >
+ <number>127</number>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="5" >
<widget class="QTabWidget" name="controlTabWidget" >
<property name="currentIndex" >
<number>0</number>
@@ -4868,139 +4932,7 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</widget>
</widget>
</item>
- <item row="1" column="0" colspan="3" >
- <widget class="QGroupBox" name="detuneGroupBox" >
- <property name="title" >
- <string>Detune</string>
- </property>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>10</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QSlider" name="channelDetuneSlider" >
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- <property name="toolTip" >
- <string>Detune</string>
- </property>
- <property name="minimum" >
- <number>-63</number>
- </property>
- <property name="maximum" >
- <number>63</number>
- </property>
- <property name="pageStep" >
- <number>1</number>
- </property>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="channelDetuneSpinBox" >
- <property name="toolTip" >
- <string>Detune</string>
- </property>
- <property name="maximum" >
- <number>63</number>
- </property>
- <property name="minimum" >
- <number>-61</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0" >
- <widget class="QGroupBox" name="footSWGroupBox" >
- <property name="title" >
- <string>Foot Switch</string>
- </property>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>10</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QComboBox" name="footSWComboBox" >
- <property name="enabled" >
- <bool>false</bool>
- </property>
- <item>
- <property name="text" >
- <string>Sustain</string>
- </property>
- </item>
- <item>
- <property name="text" >
- <string>Portamento</string>
- </property>
- </item>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="1" >
- <widget class="QGroupBox" name="pitchBendRangeGroupBox" >
- <property name="title" >
- <string>Pitch Bend Range</string>
- </property>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>10</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QSlider" name="pitchBendRangeSlider" >
- <property name="cursor" >
- <cursor>13</cursor>
- </property>
- <property name="toolTip" >
- <string>Pitch Bend Range</string>
- </property>
- <property name="minimum" >
- <number>0</number>
- </property>
- <property name="maximum" >
- <number>12</number>
- </property>
- <property name="pageStep" >
- <number>1</number>
- </property>
- <property name="value" >
- <number>0</number>
- </property>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="pitchBendRangeSpinBox" >
- <property name="toolTip" >
- <string>Pitch Bend Range</string>
- </property>
- <property name="maximum" >
- <number>12</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="3" column="1" colspan="2" >
+ <item row="3" column="1" colspan="3" >
<widget class="QGroupBox" name="portamentoGroupBox" >
<property name="title" >
<string>Potamento</string>
@@ -5092,13 +5024,10 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</layout>
</widget>
</item>
- <item row="2" column="2" >
- <widget class="QGroupBox" name="reverbGroupBox" >
- <property name="enabled" >
- <bool>false</bool>
- </property>
+ <item row="3" column="4" >
+ <widget class="QGroupBox" name="pitchBendRangeGroupBox" >
<property name="title" >
- <string>Reverb</string>
+ <string>Pitch Bend Range</string>
</property>
<layout class="QHBoxLayout" >
<property name="margin" >
@@ -5108,37 +5037,37 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<number>6</number>
</property>
<item>
- <widget class="QSlider" name="reverbSlider" >
+ <widget class="QSlider" name="pitchBendRangeSlider" >
<property name="cursor" >
<cursor>13</cursor>
</property>
<property name="toolTip" >
- <string>Detune</string>
+ <string>Pitch Bend Range</string>
</property>
<property name="minimum" >
<number>0</number>
</property>
<property name="maximum" >
- <number>7</number>
+ <number>12</number>
</property>
<property name="pageStep" >
<number>1</number>
</property>
+ <property name="value" >
+ <number>0</number>
+ </property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
- <widget class="QSpinBox" name="reverbSpinBox" >
+ <widget class="QSpinBox" name="pitchBendRangeSpinBox" >
<property name="toolTip" >
- <string>Detune</string>
+ <string>Pitch Bend Range</string>
</property>
<property name="maximum" >
- <number>7</number>
- </property>
- <property name="minimum" >
- <number>0</number>
+ <number>12</number>
</property>
</widget>
</item>
@@ -5919,6 +5848,233 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</widget>
</widget>
</item>
+ <item rowspan="3" row="0" column="4" >
+ <widget class="QGroupBox" name="channelCtrlGroupBox" >
+ <property name="minimumSize" >
+ <size>
+ <width>96</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Channel Ctrl</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="2" column="0" >
+ <widget class="Awl::VolKnob" name="channelPanKnob" >
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="minValue" >
+ <double>0.000000000000000</double>
+ </property>
+ <property name="maxValue" >
+ <double>1.000000000000000</double>
+ </property>
+ <property name="lineStep" >
+ <double>0.100000000000000</double>
+ </property>
+ <property name="pageStep" >
+ <double>0.200000000000000</double>
+ </property>
+ <property name="log" >
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="13" column="0" >
+ <widget class="QLabel" name="releaseLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Release</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="12" column="0" >
+ <widget class="Awl::Knob" name="releaseKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ </widget>
+ </item>
+ <item row="11" column="0" >
+ <widget class="QLabel" name="attackTimeLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Attack</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="0" >
+ <widget class="Awl::Knob" name="attackKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="0" >
+ <widget class="QLabel" name="detuneLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Detune</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0" >
+ <widget class="Awl::Knob" name="detuneKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0" >
+ <widget class="QLabel" name="brightnessLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Brightness</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0" >
+ <widget class="Awl::Knob" name="brightnessKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" >
+ <widget class="QLabel" name="modulationLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Modulation</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" >
+ <widget class="Awl::Knob" name="modulationKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QLabel" name="channelPanLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Pan</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="channelVolumeLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Volume</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="Awl::Knob" name="channelVolumeKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ <property name="cursor" >
+ <cursor>13</cursor>
+ </property>
+ <property name="maxValue" >
+ <double>1.000000000000000</double>
+ </property>
+ <property name="lineStep" >
+ <double>0.100000000000000</double>
+ </property>
+ <property name="pageStep" >
+ <double>0.200000000000000</double>
+ </property>
+ <property name="scaleSize" >
+ <number>270</number>
+ </property>
+ <property name="markSize" >
+ <number>6</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item rowspan="2" row="0" column="1" >
<widget class="Awl::VolKnob" name="masterVolKnob" >
<property name="minimumSize" >
@@ -5928,7 +6084,7 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</size>
</property>
<property name="value" >
- <double>-28.009242824902255</double>
+ <double>-31.287818861687722</double>
</property>
<property name="minValue" >
<double>0.000000000000000</double>
@@ -7037,15 +7193,20 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<layoutdefault spacing="6" margin="11" />
<customwidgets>
<customwidget>
- <class>Awl::VolKnob</class>
- <extends>Awl::Knob</extends>
- <header>awl/volknob.h</header>
- </customwidget>
- <customwidget>
<class>Awl::Knob</class>
<extends>QWidget</extends>
<header>awl/knob.h</header>
</customwidget>
+ <customwidget>
+ <class>Awl::FloatEntry</class>
+ <extends>QLineEdit</extends>
+ <header>awl/floatentry.h</header>
+ </customwidget>
+ <customwidget>
+ <class>Awl::VolKnob</class>
+ <extends>Awl::Knob</extends>
+ <header>awl/volknob.h</header>
+ </customwidget>
</customwidgets>
<tabstops>
<tabstop>deicsOnzeTabWidget</tabstop>
@@ -7177,12 +7338,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>445</x>
- <y>170</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>606</x>
- <y>173</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7193,12 +7354,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>606</x>
- <y>173</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>445</x>
- <y>170</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7209,12 +7370,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>252</x>
- <y>270</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>304</x>
- <y>273</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7225,12 +7386,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>273</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>252</x>
- <y>270</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7241,12 +7402,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>252</x>
- <y>301</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>304</x>
- <y>304</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7257,12 +7418,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>304</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>252</x>
- <y>301</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7273,12 +7434,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>335</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>332</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7289,12 +7450,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>366</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>363</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7305,12 +7466,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>194</x>
- <y>394</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>304</x>
- <y>397</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7321,12 +7482,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>397</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>394</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7337,12 +7498,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>194</x>
- <y>425</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>304</x>
- <y>428</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7353,12 +7514,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>304</x>
- <y>428</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>425</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -7369,12 +7530,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>194</x>
- <y>332</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>304</x>
- <y>335</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -8425,12 +8586,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>240</x>
- <y>207</y>
+ <x>262</x>
+ <y>163</y>
</hint>
<hint type="destinationlabel" >
- <x>607</x>
- <y>210</y>
+ <x>515</x>
+ <y>166</y>
</hint>
</hints>
</connection>
@@ -8441,12 +8602,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>607</x>
- <y>210</y>
+ <x>515</x>
+ <y>166</y>
</hint>
<hint type="destinationlabel" >
- <x>240</x>
- <y>207</y>
+ <x>262</x>
+ <y>163</y>
</hint>
</hints>
</connection>
@@ -8457,12 +8618,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>240</x>
- <y>329</y>
+ <x>262</x>
+ <y>209</y>
</hint>
<hint type="destinationlabel" >
- <x>596</x>
- <y>332</y>
+ <x>504</x>
+ <y>212</y>
</hint>
</hints>
</connection>
@@ -8473,12 +8634,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>596</x>
- <y>332</y>
+ <x>504</x>
+ <y>212</y>
</hint>
<hint type="destinationlabel" >
- <x>240</x>
- <y>329</y>
+ <x>262</x>
+ <y>209</y>
</hint>
</hints>
</connection>
@@ -8489,12 +8650,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>596</x>
- <y>439</y>
+ <x>504</x>
+ <y>258</y>
</hint>
<hint type="destinationlabel" >
- <x>240</x>
- <y>442</y>
+ <x>262</x>
+ <y>255</y>
</hint>
</hints>
</connection>
@@ -8505,44 +8666,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>240</x>
- <y>442</y>
+ <x>262</x>
+ <y>255</y>
</hint>
<hint type="destinationlabel" >
- <x>596</x>
- <y>439</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>channelDetuneSpinBox</sender>
- <signal>valueChanged(int)</signal>
- <receiver>channelDetuneSlider</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- <hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>channelDetuneSlider</sender>
- <signal>valueChanged(int)</signal>
- <receiver>channelDetuneSpinBox</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- <hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>504</x>
+ <y>258</y>
</hint>
</hints>
</connection>
@@ -8553,12 +8682,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>485</x>
+ <y>484</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>537</x>
+ <y>487</y>
</hint>
</hints>
</connection>
@@ -8569,44 +8698,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- <hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>reverbSlider</sender>
- <signal>valueChanged(int)</signal>
- <receiver>reverbSpinBox</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- <hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>reverbSpinBox</sender>
- <signal>valueChanged(int)</signal>
- <receiver>reverbSlider</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>537</x>
+ <y>487</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>485</x>
+ <y>484</y>
</hint>
</hints>
</connection>
@@ -8617,12 +8714,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>329</x>
+ <y>484</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>381</x>
+ <y>487</y>
</hint>
</hints>
</connection>
@@ -8633,12 +8730,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>381</x>
+ <y>487</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>329</x>
+ <y>484</y>
</hint>
</hints>
</connection>
@@ -8649,12 +8746,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8665,12 +8762,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8681,12 +8778,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8697,12 +8794,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8713,12 +8810,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8729,12 +8826,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8745,12 +8842,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8761,12 +8858,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8777,12 +8874,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8793,12 +8890,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8809,12 +8906,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8825,12 +8922,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8841,12 +8938,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8857,12 +8954,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8873,12 +8970,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8889,12 +8986,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8905,12 +9002,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8921,12 +9018,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8937,12 +9034,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8953,12 +9050,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8969,12 +9066,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -8985,12 +9082,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>121</x>
+ <y>149</y>
</hint>
</hints>
</connection>
@@ -9017,12 +9114,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>486</x>
+ <y>150</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>538</x>
+ <y>153</y>
</hint>
</hints>
</connection>
@@ -9033,12 +9130,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>110</x>
- <y>115</y>
+ <x>538</x>
+ <y>153</y>
</hint>
<hint type="destinationlabel" >
- <x>110</x>
- <y>115</y>
+ <x>486</x>
+ <y>150</y>
</hint>
</hints>
</connection>
@@ -9081,12 +9178,12 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>203</x>
- <y>163</y>
+ <x>110</x>
+ <y>115</y>
</hint>
<hint type="destinationlabel" >
- <x>287</x>
- <y>171</y>
+ <x>110</x>
+ <y>115</y>
</hint>
</hints>
</connection>
@@ -9097,12 +9194,44 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel" >
- <x>270</x>
- <y>156</y>
+ <x>110</x>
+ <y>115</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>110</x>
+ <y>115</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>chDelaySlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chDelaySpinBox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>302</x>
+ <y>339</y>
</hint>
<hint type="destinationlabel" >
- <x>169</x>
- <y>157</y>
+ <x>344</x>
+ <y>343</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>chDelaySpinBox</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chDelaySlider</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>346</x>
+ <y>329</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>278</x>
+ <y>329</y>
</hint>
</hints>
</connection>
diff --git a/muse/synti/deicsonze/deicsonzeplugin.cpp b/muse/synti/deicsonze/deicsonzeplugin.cpp
index 8788d152..5d882ff5 100644
--- a/muse/synti/deicsonze/deicsonzeplugin.cpp
+++ b/muse/synti/deicsonze/deicsonzeplugin.cpp
@@ -84,6 +84,46 @@ void DeicsOnze::initPluginChorus(Plugin* pluginChorus) {
_gui->writeEvent(evSysex);
}
+void DeicsOnze::initPluginDelay(Plugin* pluginDelay) {
+ if(_pluginIDelay) delete(_pluginIDelay);
+ _pluginIDelay = new PluginI(NULL);
+
+ _pluginIDelay->initPluginInstance(pluginDelay, 2);
+
+ for(int i = 0; i < pluginDelay->parameter(); i++) {
+ Ctrl* c = new Ctrl();
+ c->setCurVal((float)pluginDelay->defaultValue(i));
+ _pluginIDelay->setControllerList(c);
+ //setChorusParam(i, pluginDelay->defaultValue(i));
+ }
+ setDelayDryWet(255);
+
+ char dataDelayTime[2];
+ dataDelayTime[0] = SYSEX_DELAYTIME;
+ dataDelayTime[1] = (unsigned char)getDelayTime();
+ MidiEvent evSysexDelayTime(0,ME_SYSEX,
+ (const unsigned char*)dataDelayTime, 2);
+ _gui->writeEvent(evSysexDelayTime);
+ char dataDelayFeedback[2];
+ dataDelayFeedback[0] = SYSEX_DELAYFEEDBACK;
+ dataDelayFeedback[1] = (unsigned char)getDelayFeedback();
+ MidiEvent evSysexDelayFeedback(0,ME_SYSEX,
+ (const unsigned char*)dataDelayFeedback, 2);
+ _gui->writeEvent(evSysexDelayFeedback);
+ char dataDelayLFOFreq[2];
+ dataDelayLFOFreq[0] = SYSEX_DELAYLFOFREQ;
+ dataDelayLFOFreq[1] = (unsigned char)getDelayLFOFreq();
+ MidiEvent evSysexDelayLFOFreq(0,ME_SYSEX,
+ (const unsigned char*)dataDelayLFOFreq, 2);
+ _gui->writeEvent(evSysexDelayLFOFreq);
+ char dataDelayLFODepth[2];
+ dataDelayLFODepth[0] = SYSEX_DELAYLFODEPTH;
+ dataDelayLFODepth[1] = (unsigned char)getDelayLFODepth();
+ MidiEvent evSysexDelayLFODepth(0,ME_SYSEX,
+ (const unsigned char*)dataDelayLFODepth, 2);
+ _gui->writeEvent(evSysexDelayLFODepth);
+}
+
void DeicsOnze::setReverbParam(int index, double val) {
_pluginIReverb->controller(index)->setCurVal((float)val);
}
@@ -290,7 +330,7 @@ void DeicsOnzeGui::setReverbCheckBox(double v, int i) {
//of the parameter because it sends a double and does not
//change any thing
void DeicsOnzeGui::setChorusCheckBox(double v, int i) {
- float f = (float)v;
+ float f = (float)v;
unsigned char* message = new unsigned char[2+sizeof(float)];
message[0]=SYSEX_CHORUSPARAM;
if(i<256) {
@@ -355,3 +395,43 @@ void DeicsOnzeGui::updateChorusFloatEntry(double v, int i) {
_chorusFloatEntryVector[i]->blockSignals(false);
}
}
+
+//-------------------------------------------------------------
+// set Delay
+//-------------------------------------------------------------
+void DeicsOnze::setDelayTime(int val) {
+ float res = MINDELAYTIME + (MAXDELAYTIME - MINDELAYTIME)*((float)val/255.0);
+ _pluginIDelay->controller(0)->setCurVal(res);
+}
+int DeicsOnze::getDelayTime() {
+ float dtf = _pluginIDelay->controller(0)->curVal().f;
+ return (int)(((dtf - MINDELAYTIME) / (MAXDELAYTIME - MINDELAYTIME))*255.0);
+}
+void DeicsOnze::setDelayFeedback(int val) {
+ float res = (float)(val - 128)/128.0;
+ _pluginIDelay->controller(1)->setCurVal(res);
+}
+int DeicsOnze::getDelayFeedback() {
+ float dtf = _pluginIDelay->controller(1)->curVal().f;
+ return (int)(dtf*128.0+128.0);
+}
+void DeicsOnze::setDelayLFOFreq(int val) {
+ float res = MINFREQ + (MAXFREQ - MINFREQ)*((float)val/255.0);
+ _pluginIDelay->controller(2)->setCurVal(res);
+}
+int DeicsOnze::getDelayLFOFreq() {
+ float dtf = _pluginIDelay->controller(2)->curVal().f;
+ return (int)(((dtf - MINFREQ) / (MAXFREQ - MINFREQ))*255.0);
+}
+void DeicsOnze::setDelayLFODepth(int val) {
+ float res = (float)val/255.0;
+ _pluginIDelay->controller(3)->setCurVal(res);
+}
+int DeicsOnze::getDelayLFODepth() {
+ float dtd = _pluginIDelay->controller(3)->curVal().f;
+ return (int)(dtd*255.0);
+}
+void DeicsOnze::setDelayDryWet(int val) {
+ float res = (float)val/255.0;
+ _pluginIDelay->controller(4)->setCurVal(res);
+}
diff --git a/muse/synti/deicsonze/deicsonzeplugin.h b/muse/synti/deicsonze/deicsonzeplugin.h
index a6b2aa45..d9527e23 100644
--- a/muse/synti/deicsonze/deicsonzeplugin.h
+++ b/muse/synti/deicsonze/deicsonzeplugin.h
@@ -32,6 +32,7 @@
#include "deicsonze.h"
#include "deicsonzegui.h"
+#include "plugins/pandelay/pandelaymodel.h"
class DeicsOnze;
class DeicsOnzeGui;