summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNil Geisweiller <a-lin@sourceforge.net>2006-10-15 12:36:50 +0000
committerNil Geisweiller <a-lin@sourceforge.net>2006-10-15 12:36:50 +0000
commita661bf5562f02d776b335fd9d3d256ee448acc8d (patch)
tree22280d705cdef5d25178d13ff08ba04f27104a86
parent3a3c7cc80ba01dc7d0c32935ccd23325139f1ecf (diff)
see ChangeLog
-rw-r--r--muse/ChangeLog5
-rw-r--r--muse/muse/plugingui.cpp2
-rw-r--r--muse/plugins/CMakeLists.txt2
-rw-r--r--muse/plugins/freeverb/CMakeLists.txt3
-rw-r--r--muse/synti/deicsonze/CMakeLists.txt8
-rw-r--r--muse/synti/deicsonze/deicsonze.cpp318
-rw-r--r--muse/synti/deicsonze/deicsonze.h60
-rw-r--r--muse/synti/deicsonze/deicsonzegui.cpp270
-rw-r--r--muse/synti/deicsonze/deicsonzegui.h60
-rw-r--r--muse/synti/deicsonze/deicsonzegui.ui2164
-rw-r--r--muse/synti/deicsonze/deicsonzepreset.cpp2
-rw-r--r--muse/synti/deicsonze/deicsonzepreset.h2
12 files changed, 2028 insertions, 868 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog
index 282d5768..12f39d09 100644
--- a/muse/ChangeLog
+++ b/muse/ChangeLog
@@ -1,3 +1,8 @@
+15.10 (ng)
+ - DeicsOnze 0.5, add FX send
+ - fix installation path for freeverb
+ - fix ladspa checkbox parameter
+ - add LADSPA plugin doublechorus
12.10 (ws)
- added post fader plugins for mixer
- removed special aux send track type. Aux send is now implemented as
diff --git a/muse/muse/plugingui.cpp b/muse/muse/plugingui.cpp
index c452eb80..b0441f8c 100644
--- a/muse/muse/plugingui.cpp
+++ b/muse/muse/plugingui.cpp
@@ -425,7 +425,7 @@ printf("build gui from ui <path><%s>\n", path.toLatin1().data());
CheckBox* cb = new CheckBox(mw);
cb->setId(i);
cb->setText(QString(plugin->getParameterName(i)));
- cb->setChecked(plugin->param(i) > 0.5);
+ cb->setChecked(plugin->param(i) > 0.0);
cb->setFixedHeight(h);
cb->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum));
diff --git a/muse/plugins/CMakeLists.txt b/muse/plugins/CMakeLists.txt
index 21630660..e62f25ad 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 )
+subdirs( freeverb doublechorus )
diff --git a/muse/plugins/freeverb/CMakeLists.txt b/muse/plugins/freeverb/CMakeLists.txt
index e5ccc677..5e4aa13c 100644
--- a/muse/plugins/freeverb/CMakeLists.txt
+++ b/muse/plugins/freeverb/CMakeLists.txt
@@ -27,6 +27,7 @@ add_library ( freeverb SHARED
#
set_target_properties (freeverb
PROPERTIES PREFIX ""
+ #COMPILE_FLAGS "-O3"
)
-install_files( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_PATH}/plugins freeverb)
+install_targets ( /lib/${MusE_INSTALL_NAME}/plugins freeverb)
diff --git a/muse/synti/deicsonze/CMakeLists.txt b/muse/synti/deicsonze/CMakeLists.txt
index 9266f9ce..a738a812 100644
--- a/muse/synti/deicsonze/CMakeLists.txt
+++ b/muse/synti/deicsonze/CMakeLists.txt
@@ -22,8 +22,9 @@ QT4_WRAP_CPP ( deicsonze_mocs deicsonzegui.h )
QT4_WRAP_UI ( deicsonze_uis deicsonzegui.ui )
add_library ( deicsonze SHARED
- deicsonze.cpp
+ deicsonze.cpp
deicsonzepreset.cpp
+ deicsonzeplugin.cpp
deicsonzegui.cpp
deicsonzegui.h
${deicsonze_mocs}
@@ -37,7 +38,8 @@ target_link_libraries( deicsonze synti )
#
set_target_properties ( deicsonze
PROPERTIES PREFIX ""
- COMPILE_FLAGS "-O3 -include ${PROJECT_BINARY_DIR}/all-pic.h"
+ #COMPILE_FLAGS "-O3 -include ${PROJECT_BINARY_DIR}/all-pic.h"
+ COMPILE_FLAGS "-include ${PROJECT_BINARY_DIR}/all-pic.h"
)
target_link_libraries(deicsonze
@@ -47,4 +49,4 @@ target_link_libraries(deicsonze
install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ deicsonze )
-install_files ( /share/${MusE_INSTALL_NAME}/presets/deicsonze SutulaBank.dei ) \ No newline at end of file
+install_files ( /share/${MusE_INSTALL_NAME}/presets/deicsonze SutulaBank.dei )
diff --git a/muse/synti/deicsonze/deicsonze.cpp b/muse/synti/deicsonze/deicsonze.cpp
index b7d6adca..c7c4d9c5 100644
--- a/muse/synti/deicsonze/deicsonze.cpp
+++ b/muse/synti/deicsonze/deicsonze.cpp
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
//
//
@@ -34,6 +34,7 @@
#include "muse/midi.h"
#include "libsynti/mess.h"
+#include "plugin.h"
#include "muse/midictrl.h"
#include "deicsonze.h"
#include "config.h"
@@ -48,42 +49,55 @@ int DeicsOnze::useCount = 0;
// DeicsOnze
//---------------------------------------------------------
-DeicsOnze::DeicsOnze() : Mess(2)
-{
- if (useCount++ == 0) {
- // create sinus wave table, W1
- for(int i = 0; i < RESOLUTION; i++)
- waveTable[W1][i] =
- (float)(sin((i * 2.0 * M_PI) / (double)RESOLUTION));
- // create sinus*abs(sinus) wave table, W2
- for(int i = 0; i < RESOLUTION; i++){
- double t = (i * 2.0 * M_PI) / (double)RESOLUTION;
- waveTable[W2][i] = (float)(ABS(sin(t))*sin(t));}
- // create halfsinus_ wave table, W3
- for(int i = 0; i < RESOLUTION; i++)
- waveTable[W3][i] = (float)
- (i<RESOLUTION/2?sin((i*2.0*M_PI)/(double)RESOLUTION):0.0);
- // create halfsinus*abs(sinus)_ wave table, W4
- for(int i = 0; i < RESOLUTION; i++){
- double t = (i * 2.0 * M_PI) / (double)RESOLUTION;
- waveTable[W4][i] = (float)(i<RESOLUTION/2?ABS(sin(t))*sin(t):0.0);}
- // create sinus_ wave table, W5
- for(int i = 0; i < RESOLUTION; i++)
- waveTable[W5][i] = (float)
- (i<RESOLUTION/2?sin((i*4.0*M_PI) / (double)RESOLUTION):0.0);
- // create sinus*abs(sinus)_ wave table, W6
- for(int i = 0; i < RESOLUTION; i++){
- double t = (i*4.0*M_PI) / (double)RESOLUTION;
- waveTable[W6][i] = (float)(i<RESOLUTION/2?ABS(sin(t))*sin(t):0.0);}
+DeicsOnze::DeicsOnze() : Mess(2) {
+ if (useCount++ == 0) {
+ // create sinus wave table, W1
+ for(int i = 0; i < RESOLUTION; i++)
+ waveTable[W1][i] =
+ (float)(sin((i * 2.0 * M_PI) / (double)RESOLUTION));
+ // create sinus*abs(sinus) wave table, W2
+ for(int i = 0; i < RESOLUTION; i++){
+ double t = (i * 2.0 * M_PI) / (double)RESOLUTION;
+ waveTable[W2][i] = (float)(ABS(sin(t))*sin(t));}
+ // create halfsinus_ wave table, W3
+ for(int i = 0; i < RESOLUTION; i++)
+ waveTable[W3][i] = (float)
+ (i<RESOLUTION/2?sin((i*2.0*M_PI)/(double)RESOLUTION):0.0);
+ // create halfsinus*abs(sinus)_ wave table, W4
+ for(int i = 0; i < RESOLUTION; i++){
+ double t = (i * 2.0 * M_PI) / (double)RESOLUTION;
+ waveTable[W4][i] = (float)(i<RESOLUTION/2?ABS(sin(t))*sin(t):0.0);}
+ // create sinus_ wave table, W5
+ for(int i = 0; i < RESOLUTION; i++)
+ waveTable[W5][i] = (float)
+ (i<RESOLUTION/2?sin((i*4.0*M_PI) / (double)RESOLUTION):0.0);
+ // create sinus*abs(sinus)_ wave table, W6
+ for(int i = 0; i < RESOLUTION; i++){
+ double t = (i*4.0*M_PI) / (double)RESOLUTION;
+ waveTable[W6][i] = (float)(i<RESOLUTION/2?ABS(sin(t))*sin(t):0.0);}
// create 2halfsinus_ wave table, W7
- for(int i = 0; i < RESOLUTION; i++)
- waveTable[W7][i] = (float)
- (i<RESOLUTION/2?ABS(sin((i*4.0*M_PI)/(double)RESOLUTION)):0.0);
- // create 2halfsinus*abs(sinus)_ wave table, W8
- for(int i = 0; i < RESOLUTION; i++){
- double t = (i * 4.0 * M_PI) / (double)RESOLUTION;
- waveTable[W8][i] = (float)(i<RESOLUTION/2?sin(t)*sin(t):0.0);}
- }
+ for(int i = 0; i < RESOLUTION; i++)
+ waveTable[W7][i] = (float)
+ (i<RESOLUTION/2?ABS(sin((i*4.0*M_PI)/(double)RESOLUTION)):0.0);
+ // create 2halfsinus*abs(sinus)_ wave table, W8
+ for(int i = 0; i < RESOLUTION; i++){
+ double t = (i * 4.0 * M_PI) / (double)RESOLUTION;
+ waveTable[W8][i] = (float)(i<RESOLUTION/2?sin(t)*sin(t):0.0);}
+ }
+
+ //alloc temp buffers chorus and reverb
+ 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);
+ tempOutputReverb = (float**) malloc(sizeof(float*)*NBRFXOUTPUTS);
+ for(int i = 0; i < NBRFXOUTPUTS; i++)
+ tempOutputReverb[i] = (float*) malloc(sizeof(float*)*MAXFXBUFFERSIZE);
srand(time(0)); // initialize random number generator
@@ -100,13 +114,17 @@ DeicsOnze::DeicsOnze() : Mess(2)
//INSTPREFIX + "/share/" + PACKAGEVERSION + "/presets/deicsonze/ARCH_ALIN";
_isBackgroundPix = true; //false if an initial bank must be download
_backgroundPixPath = INSTPREFIX "/share/muse-" VERSION "/wallpapers/paper2.jpg";
- //"/usr/local/share/muse-1.0pre1/wallpapers/abstractdeicsonze1.jpg";
+ //"/usr/local/share/muse-1.0pre1/wallpapers/abstractdeicsonze1.jpg";
//initialization GUI
_gui = new DeicsOnzeGui(this);
_gui->hide(); // to avoid flicker during MusE startup
_gui->setWindowTitle(QString("DeicsOnze"));
+ //FX
+ initPluginReverb(plugins.find("freeverb", "freeverb1"));
+ initPluginChorus(plugins.find("doublechorus", "doublechorus1"));
+
//Load configuration
QString defaultConf = (QString(getenv("HOME")) + QString("/." DEICSONZESTR ".dco"));
FILE* f;
@@ -146,6 +164,22 @@ DeicsOnze::~DeicsOnze()
{
//if (--useCount == 0)
//delete[] sine_table;
+ //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 < NBRFXOUTPUTS; i++) free(tempOutputReverb[i]);
+ free(tempOutputReverb);
+}
+
+//---------------------------------------------------------
+// getSinusWaveTable
+//---------------------------------------------------------
+float* DeicsOnze::getSinusWaveTable() {
+ return waveTable[W1];
}
//---------------------------------------------------------
@@ -444,6 +478,10 @@ void DeicsOnze::initGlobal() {
setMasterVol(INITMASTERVOL);
_global.quality = high;
_global.fontSize = 9;
+ _global.isChorusActivated = false;
+ _global.chorusReturn = 128.0/(float)MAXFXRETURN;
+ _global.isReverbActivated = false;
+ _global.reverbReturn = 128.0/(float)MAXFXRETURN;
initChannels();
}
@@ -466,6 +504,8 @@ void DeicsOnze::initChannel(int c) {
_global.channel[c].lfoIndex = 0;
_global.channel[c].nbrVoices = 8;
_global.channel[c].isLastNote = false;
+ _global.channel[c].chorusAmount = 0.0;
+ _global.channel[c].reverbAmount = 0.0;
applyChannelAmp(c);
initVoices(c);
}
@@ -623,38 +663,65 @@ void DeicsOnze::applyChannelAmp(int c) {
// setChannelPan
//----------------------------------------------------------------
void DeicsOnze::setChannelPan(int c, int p) {
- _global.channel[c].pan = p;
+ _global.channel[c].pan = p;
}
//----------------------------------------------------------------
// setChannelDetune
//----------------------------------------------------------------
void DeicsOnze::setChannelDetune(int c, int p) {
- _global.channel[c].detune = p;
+ _global.channel[c].detune = p;
}
//----------------------------------------------------------------
// setChannelBrightness
//----------------------------------------------------------------
void DeicsOnze::setChannelBrightness(int c, int b) {
- _global.channel[c].brightness = b;
+ _global.channel[c].brightness = b;
}
//----------------------------------------------------------------
// setChannelModulation
//----------------------------------------------------------------
void DeicsOnze::setChannelModulation(int c, int m) {
- _global.channel[c].modulation = m;
+ _global.channel[c].modulation = m;
}
//----------------------------------------------------------------
// setChannelAttack
//----------------------------------------------------------------
void DeicsOnze::setChannelAttack(int c, int a) {
- _global.channel[c].attack = a;
+ _global.channel[c].attack = a;
}
//----------------------------------------------------------------
// setChannelRelease
//----------------------------------------------------------------
void DeicsOnze::setChannelRelease(int c, int r) {
- _global.channel[c].release = r;
+ _global.channel[c].release = r;
+}
+//----------------------------------------------------------------
+// setChannelReverb
+//----------------------------------------------------------------
+void DeicsOnze::setChannelReverb(int c, int r) {
+ _global.channel[c].reverbAmount = (float)r/127.0;
+}
+//----------------------------------------------------------------
+// setChannelChorus
+//----------------------------------------------------------------
+void DeicsOnze::setChannelChorus(int c, int val) {
+ _global.channel[c].chorusAmount = (float)val/127.0;
}
+
+//----------------------------------------------------------------
+// setChorusReturn
+//----------------------------------------------------------------
+void DeicsOnze::setChorusReturn(int val) {
+ _global.chorusReturn = 2.0*(float)val/(float)MAXFXRETURN;
+}
+
+//----------------------------------------------------------------
+// setReverbReturn
+//----------------------------------------------------------------
+void DeicsOnze::setReverbReturn(int val) {
+ _global.reverbReturn = 2.0*(float)val/(float)MAXFXRETURN;
+}
+
//----------------------------------------------------------------
// getNbrVoices
//----------------------------------------------------------------
@@ -718,6 +785,30 @@ int DeicsOnze::getChannelAttack(int c) const {
int DeicsOnze::getChannelRelease(int c) const {
return(_global.channel[c].release);
}
+//----------------------------------------------------------------
+// getChannelReverb
+//----------------------------------------------------------------
+int DeicsOnze::getChannelReverb(int c) const {
+ return((int)(_global.channel[c].reverbAmount*127.0));
+}
+//----------------------------------------------------------------
+// getChannelChorus
+//----------------------------------------------------------------
+int DeicsOnze::getChannelChorus(int c) const {
+ return((int)(_global.channel[c].chorusAmount*127.0));
+}
+//----------------------------------------------------------------
+// getChorusReturn
+//----------------------------------------------------------------
+int DeicsOnze::getChorusReturn() const {
+ return((int)(_global.chorusReturn*(float)MAXFXRETURN/2.0));
+}
+//----------------------------------------------------------------
+// getReturnReturn
+//----------------------------------------------------------------
+int DeicsOnze::getReverbReturn() const {
+ return((int)(_global.reverbReturn*(float)MAXFXRETURN/2.0));
+}
//----------------------------------------------------------------
// setLfo
@@ -848,6 +939,10 @@ void DeicsOnze::setQuality(Quality q) {
_global.deiSampleRate = (double)sampleRate()
/ (double)_global.qualityCounterTop;
_global.qualityCounter = 0;
+ /* TODO
+ _chorus1->setSampleRate(_global.deiSampleRate);
+ _chorus2->setSampleRate(_global.deiSampleRate);
+ */
}
//-----------------------------------------------------------------
@@ -1028,8 +1123,8 @@ void DeicsOnze::loadSutulaPresets()
int k;
int nhBank, nlBank, nPreset;
Preset* presetTemp;
- Subcategory* subcategoryTemp;
- Category* categoryTemp;
+ Subcategory* subcategoryTemp = NULL;
+ Category* categoryTemp = NULL;
if(!_set) _set=new Set("Sutula Bank");
@@ -2293,6 +2388,8 @@ bool DeicsOnze::sysex(int length, const unsigned char* data) {
}
bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {
int cmd=data[0];
+ int index;
+ float f;
switch(cmd) {
case SYSEX_INIT_DATA:
parseInitData(length, data);
@@ -2369,6 +2466,66 @@ bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {
break;
case SYSEX_PANIC:
resetVoices();
+ break;
+ case SYSEX_CHORUSACTIV:
+ _global.isChorusActivated = (bool)data[1];
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_CHORUSPARAM:
+ index = (int)data[1];
+ memcpy(&f, &data[2], sizeof(float));
+ printf("Chorus, param %d, value %f\n", index, f);
+ _pluginIChorus->setParam(index, (double)f);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_REVERBACTIV:
+ _global.isReverbActivated = (bool)data[1];
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_REVERBPARAM:
+ index = (int)data[1];
+ memcpy(&f, &data[2], sizeof(float));
+ printf("Reverb, param %d, value %f\n", index, f);
+ _pluginIReverb->setParam(index, (double)f);
+ printf("param value %f\n", _pluginIReverb->param(index));
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_CHORUSRETURN:
+ setChorusReturn((int)data[1]);
+ if(!fromGui) {
+ MidiEvent evSysex(0, ME_SYSEX, data, length);
+ _gui->writeEvent(evSysex);
+ }
+ break;
+ case SYSEX_REVERBRETURN:
+ setReverbReturn((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*));
+ initPluginReverb(pluginReverb);
+ break;
+ case SYSEX_SELECTCHORUS:
+ Plugin* pluginChorus;
+ memcpy(&pluginChorus, &data[1], sizeof(Plugin*));
+ initPluginChorus(pluginChorus);
+ break;
default:
break;
}
@@ -2938,6 +3095,20 @@ bool DeicsOnze::setController(int ch, int ctrl, int val, bool fromGui) {
_gui->writeEvent(ev);
}
break;
+ case CTRL_REVERB_SEND:
+ setChannelReverb(ch, val);
+ if(!fromGui) {
+ MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_REVERB_SEND, val);
+ _gui->writeEvent(ev);
+ }
+ break;
+ case CTRL_CHORUS_SEND:
+ setChannelChorus(ch, val);
+ if(!fromGui) {
+ MidiEvent ev(0,ch, ME_CONTROLLER, CTRL_CHORUS_SEND, val);
+ _gui->writeEvent(ev);
+ }
+ break;
case CTRL_SUSTAIN:
setSustain(ch, val);
break;
@@ -3279,6 +3450,8 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
float tempLeftOutput;
float tempRightOutput;
float tempChannelOutput;
+ float tempChannelLeftOutput;
+ float tempChannelRightOutput;
float tempIncChannel; //for optimization
float sampleOp[NBROP];
float ampOp[NBROP];
@@ -3286,6 +3459,10 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
if(_global.qualityCounter == 0) {
tempLeftOutput = 0.0;
tempRightOutput = 0.0;
+ tempInputChorus[0][i] = 0.0;
+ tempInputChorus[1][i] = 0.0;
+ tempInputReverb[0][i] = 0.0;
+ tempInputReverb[1][i] = 0.0;
//per channel
for(int c = 0; c < NBRCHANNELS; c++) {
tempChannelOutput = 0.0;
@@ -3532,18 +3709,55 @@ void DeicsOnze::process(float** buffer, int offset, int n) {
}
//printf("left out = %f, temp out = %f, left amp = %f\n",
//tempLeftOutput, tempChannelOutput, _global.channel[c].ampLeft);
- tempLeftOutput += tempChannelOutput*_global.channel[c].ampLeft;
- tempRightOutput += tempChannelOutput*_global.channel[c].ampRight;
+
+ tempChannelLeftOutput = tempChannelOutput*_global.channel[c].ampLeft;
+ tempChannelRightOutput=tempChannelOutput*_global.channel[c].ampRight;
+
+ if(_global.isChorusActivated) {
+ tempInputChorus[0][i] += tempChannelLeftOutput *
+ _global.channel[c].chorusAmount;
+ tempInputChorus[1][i] += tempChannelRightOutput *
+ _global.channel[c].chorusAmount;
+ }
+ if(_global.isReverbActivated) {
+ tempInputReverb[0][i] += tempChannelLeftOutput *
+ _global.channel[c].reverbAmount;
+ tempInputReverb[0][i] += tempChannelRightOutput *
+ _global.channel[c].reverbAmount;
+ }
+ tempLeftOutput += tempChannelLeftOutput;
+ tempRightOutput += tempChannelRightOutput;
}
}
- _global.lastLeftSample = tempLeftOutput*_global.masterVolume;
- _global.lastRightSample = tempRightOutput*_global.masterVolume;
+ _global.lastLeftSample = tempLeftOutput;
+ _global.lastRightSample = tempRightOutput;
}
- leftOutput[i] += _global.lastLeftSample;
- rightOutput[i] += _global.lastRightSample;
+ leftOutput[i] += _global.lastLeftSample * _global.masterVolume;
+ rightOutput[i] += _global.lastRightSample * _global.masterVolume;
+
_global.qualityCounter++;
_global.qualityCounter %= _global.qualityCounterTop;
}
+ //Chorus
+ if(_global.isChorusActivated) {
+ _pluginIChorus->apply(n, 2, tempInputChorus, tempOutputChorus);
+ for(int i = 0; i < n; i++) {
+ leftOutput[i] +=
+ tempOutputChorus[0][i] * _global.chorusReturn * _global.masterVolume;
+ rightOutput[i] +=
+ tempOutputChorus[1][i] * _global.chorusReturn * _global.masterVolume;
+ }
+ }
+ //Reverb
+ if(_global.isReverbActivated) {
+ _pluginIReverb->apply(n, 2, tempInputReverb, tempOutputReverb);
+ for(int i = 0; i < n; i++) {
+ leftOutput[i] +=
+ tempOutputReverb[0][i] * _global.reverbReturn * _global.masterVolume;
+ rightOutput[i] +=
+ tempOutputReverb[1][i] * _global.reverbReturn * _global.masterVolume;
+ }
+ }
}
@@ -3564,7 +3778,7 @@ extern "C" {
static MESS descriptor = {
"DeicsOnze",
"DeicsOnze FM DX11/TX81Z emulator",
- "0.4.5", // version string
+ "0.5", // version string
MESS_MAJOR_VERSION, MESS_MINOR_VERSION,
instantiate
};
diff --git a/muse/synti/deicsonze/deicsonze.h b/muse/synti/deicsonze/deicsonze.h
index dd6353b1..8a975e0f 100644
--- a/muse/synti/deicsonze/deicsonze.h
+++ b/muse/synti/deicsonze/deicsonze.h
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
//
//
@@ -35,13 +35,19 @@
#include "deicsonzepreset.h"
#include "deicsonzegui.h"
+#include "deicsonzeplugin.h"
#include "libsynti/mess.h"
+#include "plugin.h"
#define DEICSONZESTR "deicsonze"
#define MAXPITCHBENDVALUE 8191
-#define RESOLUTION 96000
+#define RESOLUTION 96000
+
+#define MAXFXBUFFERSIZE 48000
+#define NBRFXINPUTS 2
+#define NBRFXOUTPUTS 2
#define NBRCTRLS 127
@@ -126,6 +132,18 @@
#define COLORSYSEXLENGTH 12
#define SYSEX_UPDATESETGUI 25
#define SYSEX_PANIC 30
+#define SYSEX_CHORUSACTIV 40
+#define SYSEX_CHORUSPARAM 41
+#define SYSEX_REVERBACTIV 60
+#define SYSEX_REVERBPARAM 61
+#define SYSEX_CHORUSRETURN 80
+#define SYSEX_REVERBRETURN 81
+#define MAXFXRETURN 255
+#define SYSEX_SELECTREVERB 82
+#define SYSEX_SELECTCHORUS 83
+#define SYSEX_BUILDGUIREVERB 84
+#define SYSEX_BUILDGUICHORUS 85
+//REVERB PARAMETERS
enum {
NUMMASTERVOL = SAVEINITLENGTH,
@@ -165,6 +183,7 @@ enum {
};
class DeicsOnzeGui;
+class DeicsOnzePlugin;
//---------------------------------------------------------
// outLevel2Amp, Amp for amplitude //between 0.0 and 2.0 or more
@@ -303,6 +322,9 @@ struct Channel {
std::list<int> lastVoiceKeyOn; //stack of the voice number
int lastVoiceKeyOff;
bool isLastNote;
+ //FX
+ float chorusAmount; //between 0.0 and 1.0
+ float reverbAmount; //between 0.0 and 1.0
};
//---------------------------------------------------------
@@ -325,6 +347,10 @@ struct Global {
float lastLeftSample;
float lastRightSample;
Channel channel[NBRCHANNELS];
+ bool isChorusActivated;
+ float chorusReturn;
+ bool isReverbActivated;
+ float reverbReturn;
};
//---------------------------------------------------------
@@ -333,17 +359,24 @@ struct Global {
class DeicsOnze : public Mess {
DeicsOnzeGui* _gui;
-
+
static int useCount;
static float waveTable[NBRWAVES][RESOLUTION];
-
+
private:
void parseInitData(int length, const unsigned char* data);
void loadConfiguration(QString fileName);
-
+
public:
+ float** tempInputChorus;
+ float** tempInputReverb;
+ float** tempOutputChorus;
+ float** tempOutputReverb;
+
+ float* getSinusWaveTable();
+
int nbrCtrl;
-
+
QString _initSetPath;
bool _isInitSet;
QString _backgroundPixPath;
@@ -354,6 +387,13 @@ class DeicsOnze : public Mess {
Global _global;
Preset* _preset[NBRCHANNELS];
Preset* _initialPreset;
+
+ //FX
+ PluginI* _pluginIReverb;
+ PluginI* _pluginIChorus;
+
+ void initPluginReverb(Plugin*);
+ void initPluginChorus(Plugin*);
mutable MidiPatch _patch;
int _numPatch; //what is this? TODO
@@ -402,6 +442,10 @@ class DeicsOnze : public Mess {
void setChannelModulation(int c, int m);
void setChannelAttack(int c, int a);
void setChannelRelease(int c, int r);
+ void setChannelReverb(int c, int r);
+ void setChannelChorus(int c, int val);
+ void setChorusReturn(int val);
+ void setReverbReturn(int val);
bool getChannelEnable(int c) const;
int getNbrVoices(int c) const;
int getMasterVol(void) const;
@@ -412,6 +456,10 @@ class DeicsOnze : public Mess {
int getChannelModulation(int c) const;
int getChannelAttack(int c) const;
int getChannelRelease(int c) const;
+ int getChannelReverb(int c) const;
+ int getChannelChorus(int c) const;
+ int getChorusReturn(void) const;
+ int getReverbReturn(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 05855d4b..9d614008 100644
--- a/muse/synti/deicsonze/deicsonzegui.cpp
+++ b/muse/synti/deicsonze/deicsonzegui.cpp
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
// deicsonzegui.cpp
//
@@ -30,9 +30,13 @@
#include "muse/midi.h"
#include "muse/midictrl.h"
#include "config.h"
+#include "plugin.h"
+#include "plugingui.h"
#include "deicsonzegui.h"
+class PluginDialog;
+
DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
: QDialog(0),
MessGui()
@@ -43,6 +47,10 @@ DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
_currentChannel = 0;
+ //FX
+ _chorusSuperWidget = NULL;
+ _reverbSuperWidget = NULL;
+
tColor = new TCOLOR;
bColor = new BCOLOR;
etColor = new ETCOLOR;
@@ -66,6 +74,35 @@ DeicsOnzeGui::DeicsOnzeGui(DeicsOnze* deicsOnze)
this, SLOT(setMasterVolKnob(double)));
//Panic
connect(panicButton, SIGNAL(pressed()), this, SLOT(setPanic()));
+ //FX
+ connect(chorusActivCheckBox, SIGNAL(toggled(bool)),
+ this, SLOT(setChorusActiv(bool)));
+ connect(chChorusSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setChannelChorus(int)));
+ connect(returnChorusSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setChorusReturn(int)));
+ connect(selectLadspaChorusPushButton, SIGNAL(pressed()),
+ this, SLOT(setSelectChorusPlugin()));
+ /*connect(panChorus1Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setPanChorus1(double)));
+ connect(LFOFreqChorus1Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setLFOFreqChorus1(double)));
+ connect(depthChorus1Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setDepthChorus1(double)));
+ connect(panChorus2Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setPanChorus2(double)));
+ connect(LFOFreqChorus2Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setLFOFreqChorus2(double)));
+ connect(depthChorus2Knob, SIGNAL(valueChanged(double, int)),
+ this, SLOT(setDepthChorus2(double)));*/
+ connect(reverbActivCheckBox, SIGNAL(toggled(bool)),
+ this, SLOT(setReverbActiv(bool)));
+ connect(chReverbSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setChannelReverb(int)));
+ connect(returnReverbSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setReverbReturn(int)));
+ connect(selectLadspaReverbPushButton, SIGNAL(pressed()),
+ this, SLOT(setSelectReverbPlugin()));
//Quick edit
connect(channelVolumeKnob, SIGNAL(valueChanged(double, int)),
this, SLOT(setChannelVolKnob(double)));
@@ -726,6 +763,14 @@ void DeicsOnzeGui::setTextColor(const QColor & c) {
qualityGroupBox->setPalette(p);
saveModeButtonGroup->setPalette(p);
fileGroupBox->setPalette(p);
+ onReverbGroupBox->setPalette(p);
+ selectLadspaReverbGroupBox->setPalette(p);
+ channelReverbGroupBox->setPalette(p);
+ parametersReverbGroupBox->setPalette(p);
+ onChorusGroupBox->setPalette(p);
+ selectLadspaChorusGroupBox->setPalette(p);
+ channelChorusGroupBox->setPalette(p);
+ parametersChorusGroupBox->setPalette(p);
}
void DeicsOnzeGui::setBackgroundColor(const QColor & c) {
if(imageCheckBox->checkState()==Qt::Unchecked) {
@@ -789,6 +834,10 @@ void DeicsOnzeGui::setEditTextColor(const QColor & c) {
detuneKnob->setScaleValueColor(c);
attackKnob->setScaleValueColor(c);
releaseKnob->setScaleValueColor(c);
+ for(int i=0; i < (int)_chorusSliderVector.size(); i++)
+ if(_chorusSliderVector[i]) _chorusSliderVector[i]->setScaleValueColor(c);
+ for(int i=0; i < (int)_reverbSliderVector.size(); i++)
+ if(_reverbSliderVector[i]) _reverbSliderVector[i]->setScaleValueColor(c);
//p.setColor(QPalette::WindowText, c);
//presetNameLabel->setPalette(p);
}
@@ -862,6 +911,10 @@ void DeicsOnzeGui::setEditBackgroundColor(const QColor & c) {
detuneKnob->setScaleColor(c);
attackKnob->setScaleColor(c);
releaseKnob->setScaleColor(c);
+ for(int i=0; i < (int)_chorusSliderVector.size(); i++)
+ if(_chorusSliderVector[i]) _chorusSliderVector[i]->setScaleColor(c);
+ for(int i=0; i < (int)_reverbSliderVector.size(); i++)
+ if(_reverbSliderVector[i]) _reverbSliderVector[i]->setScaleColor(c);
}
//-----------------------------------------------------------
@@ -1328,6 +1381,8 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
case CTRL_FINEBRIGHTNESS: updateBrightness(val); break;
case CTRL_ATTACK_TIME: updateAttack(val); break;
case CTRL_RELEASE_TIME: updateRelease(val); break;
+ case CTRL_CHORUS_SEND: updateChannelChorus(val); break;
+ case CTRL_REVERB_SEND: updateChannelReverb(val); break;
case CTRL_PROGRAM :
int hbank = (val & 0xff0000) >> 16;
int lbank = (val & 0xff00) >> 8;
@@ -1354,6 +1409,36 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
unsigned char* data = ev.data();
int cmd = *data;
switch (cmd) {
+ case SYSEX_CHORUSACTIV :
+ updateChorusActiv((bool)data[1]);
+ break;
+ case SYSEX_CHORUSRETURN :
+ updateChorusReturn((int)data[1]);
+ break;
+ case SYSEX_REVERBACTIV :
+ updateReverbActiv((bool)data[1]);
+ break;
+ case SYSEX_REVERBRETURN :
+ updateReverbReturn((int)data[1]);
+ break;
+ /*case SYSEX_CHORUS1PAN :
+ updatePanChorus1((int)data[1]);
+ break;
+ case SYSEX_CHORUS1LFOFREQ :
+ updateLFOFreqChorus1((int)data[1]);
+ break;
+ case SYSEX_CHORUS1DEPTH :
+ updateDepthChorus1((int)data[1]);
+ break;
+ case SYSEX_CHORUS2PAN :
+ updatePanChorus2((int)data[1]);
+ break;
+ case SYSEX_CHORUS2LFOFREQ :
+ updateLFOFreqChorus2((int)data[1]);
+ break;
+ case SYSEX_CHORUS2DEPTH :
+ updateDepthChorus2((int)data[1]);
+ break;*/
case SYSEX_QUALITY :
updateQuality((int)data[1]);
break;
@@ -1406,6 +1491,12 @@ void DeicsOnzeGui::processEvent(const MidiEvent& ev) {
progSpinBox->setEnabled(false);
updatePresetName("INITVOICE", false);
break;
+ case SYSEX_BUILDGUIREVERB :
+ buildGuiReverb();
+ break;
+ case SYSEX_BUILDGUICHORUS :
+ buildGuiChorus();
+ break;
case SYSEX_LOADSET :
//printf("LoadSet\n");
// read the XML file and create DOM tree
@@ -2310,6 +2401,94 @@ void DeicsOnzeGui::setBrowseBackgroundPixPath() {
}
}
//-----------------------------------------------------------
+// FX
+//-----------------------------------------------------------
+void DeicsOnzeGui::setChorusActiv(bool a) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUSACTIV;
+ message[1]=(unsigned char)a;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setChannelChorus(int c) {
+ sendController(_currentChannel, CTRL_CHORUS_SEND, c);
+}
+void DeicsOnzeGui::setChorusReturn(int val) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUSRETURN;
+ message[1]=(unsigned char)val;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setSelectChorusPlugin() {
+ Plugin* pluginChorus = PluginDialog::getPlugin(this);
+ if(pluginChorus) {
+ unsigned char* message = new unsigned char[1+sizeof(Plugin*)];
+ message[0]=SYSEX_SELECTCHORUS;
+ memcpy(&message[1], &pluginChorus, sizeof(Plugin*));
+ sendSysex(message, 1+sizeof(Plugin*));
+ }
+}
+/*void DeicsOnzeGui::setPanChorus1(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS1PAN;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setLFOFreqChorus1(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS1LFOFREQ;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setDepthChorus1(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS1DEPTH;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setPanChorus2(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS2PAN;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setLFOFreqChorus2(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS2LFOFREQ;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setDepthChorus2(double i) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_CHORUS2DEPTH;
+ message[1]=(unsigned char)(i*(double)MAXCHORUSPARAM);
+ sendSysex(message, 2);
+ }*/
+void DeicsOnzeGui::setReverbActiv(bool a) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_REVERBACTIV;
+ message[1]=(unsigned char)a;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setChannelReverb(int r) {
+ sendController(_currentChannel, CTRL_REVERB_SEND, r);
+}
+void DeicsOnzeGui::setReverbReturn(int val) {
+ unsigned char* message = new unsigned char[2];
+ message[0]=SYSEX_REVERBRETURN;
+ message[1]=(unsigned char)val;
+ sendSysex(message, 2);
+}
+void DeicsOnzeGui::setSelectReverbPlugin() {
+ Plugin* pluginReverb = PluginDialog::getPlugin(this);
+ if(pluginReverb) {
+ unsigned char* message = new unsigned char[1+sizeof(Plugin*)];
+ message[0]=SYSEX_SELECTREVERB;
+ memcpy(&message[1], &pluginReverb, sizeof(Plugin*));
+ sendSysex(message, 1+sizeof(Plugin*));
+ }
+}
+
+//-----------------------------------------------------------
// Quick Edit
//-----------------------------------------------------------
void DeicsOnzeGui::setChannelVolKnob(double val) {
@@ -2862,6 +3041,84 @@ void DeicsOnzeGui::updateFontSize(int val) {
fontSizeSpinBox->setValue(val);
fontSizeSpinBox->blockSignals(false);
}
+//FX
+void DeicsOnzeGui::updateChorusActiv(bool a) {
+ chorusActivCheckBox->blockSignals(true);
+ chorusActivCheckBox->setChecked(a);
+ chorusActivCheckBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateChannelChorus(int c) {
+ chChorusSlider->blockSignals(true);
+ chChorusSlider->setValue(c);
+ chChorusSlider->blockSignals(false);
+ chChorusSpinBox->blockSignals(true);
+ chChorusSpinBox->setValue(c);
+ chChorusSpinBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateChorusReturn(int r) {
+ returnChorusSlider->blockSignals(true);
+ returnChorusSlider->setValue(r);
+ returnChorusSlider->blockSignals(false);
+}
+/*void DeicsOnzeGui::updatePanChorus1(int c) {
+ panChorus1Knob->blockSignals(true);
+ panChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ panChorus1Knob->blockSignals(false);
+}
+void DeicsOnzeGui::updateLFOFreqChorus1(int c) {
+ LFOFreqChorus1Knob->blockSignals(true);
+ LFOFreqChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ LFOFreqChorus1Knob->blockSignals(false);
+}
+void DeicsOnzeGui::updateDepthChorus1(int c) {
+ depthChorus1Knob->blockSignals(true);
+ depthChorus1Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ depthChorus1Knob->blockSignals(false);
+}
+void DeicsOnzeGui::updatePanChorus2(int c) {
+ panChorus2Knob->blockSignals(true);
+ panChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ panChorus2Knob->blockSignals(false);
+}
+void DeicsOnzeGui::updateLFOFreqChorus2(int c) {
+ LFOFreqChorus2Knob->blockSignals(true);
+ LFOFreqChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ LFOFreqChorus2Knob->blockSignals(false);
+}
+void DeicsOnzeGui::updateDepthChorus2(int c) {
+ depthChorus2Knob->blockSignals(true);
+ depthChorus2Knob->setValue((double)c/(double)MAXCHORUSPARAM);
+ depthChorus2Knob->blockSignals(false);
+ }*/
+void DeicsOnzeGui::updateReverbActiv(bool a) {
+ reverbActivCheckBox->blockSignals(true);
+ reverbActivCheckBox->setChecked(a);
+ reverbActivCheckBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateChannelReverb(int r) {
+ chReverbSlider->blockSignals(true);
+ chReverbSlider->setValue(r);
+ chReverbSlider->blockSignals(false);
+ chReverbSpinBox->blockSignals(true);
+ chReverbSpinBox->setValue(r);
+ chReverbSpinBox->blockSignals(false);
+}
+void DeicsOnzeGui::updateReverbReturn(int r) {
+ returnReverbSlider->blockSignals(true);
+ returnReverbSlider->setValue(r);
+ returnReverbSlider->blockSignals(false);
+}
+void DeicsOnzeGui::updateLadspaReverbLineEdit(QString s) {
+ selectLadspaReverbLineEdit->blockSignals(true);
+ selectLadspaReverbLineEdit->setText(s);
+ selectLadspaReverbLineEdit->blockSignals(false);
+}
+void DeicsOnzeGui::updateLadspaChorusLineEdit(QString s) {
+ selectLadspaChorusLineEdit->blockSignals(true);
+ selectLadspaChorusLineEdit->setText(s);
+ selectLadspaChorusLineEdit->blockSignals(false);
+}
+
void DeicsOnzeGui::applyFontSize(int fs) {
QFont f = font();
f.setPointSize(fs);
@@ -3812,6 +4069,8 @@ void DeicsOnzeGui::updateQuickEdit() {
updateChannelDetune(_deicsOnze->getChannelDetune(_currentChannel));
updateAttack(_deicsOnze->getChannelAttack(_currentChannel));
updateRelease(_deicsOnze->getChannelRelease(_currentChannel));
+ updateChannelReverb(_deicsOnze->getChannelReverb(_currentChannel));
+ updateChannelChorus(_deicsOnze->getChannelChorus(_currentChannel));
}
//--------------------------------------------------------------
// updatePreset
@@ -3890,20 +4149,20 @@ void DeicsOnzeGui::updatePreset(Preset* p) {
updateOSW(k, (int)p->oscWave[0]);
}
}
-void DeicsOnzeGui::updateCurrentChannel() {
+/*void DeicsOnzeGui::updateCurrentChannel() {
updateBrightness(_deicsOnze->_global.channel[_currentChannel].brightness);
updateModulation(_deicsOnze->_global.channel[_currentChannel].modulation);
updateChannelDetune(_deicsOnze->_global.channel[_currentChannel].detune);
updateAttack(_deicsOnze->_global.channel[_currentChannel].attack);
updateRelease(_deicsOnze->_global.channel[_currentChannel].release);
-}
+ }*/
void DeicsOnzeGui::updatePreset() {
updatePreset(_deicsOnze->_preset[_currentChannel]);
}
void DeicsOnzeGui::updateSelectPreset(int hbank, int lbank, int prog) {
- QTreeWidgetItem* cat = categoryListView->currentItem();
- QTreeWidgetItem* sub = subcategoryListView->currentItem();
+ //QTreeWidgetItem* cat = categoryListView->currentItem();
+ //QTreeWidgetItem* sub = subcategoryListView->currentItem();
QTreeWidgetItem* pre = presetListView->currentItem();
//select category, subcategory, preset
//category
@@ -3984,3 +4243,4 @@ void DeicsOnzeGui::updateSelectPreset(int hbank, int lbank, int prog) {
// setEnabledPreset(false);
//}
}
+
diff --git a/muse/synti/deicsonze/deicsonzegui.h b/muse/synti/deicsonze/deicsonzegui.h
index 12accbcf..964c7d96 100644
--- a/muse/synti/deicsonze/deicsonzegui.h
+++ b/muse/synti/deicsonze/deicsonzegui.h
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
// deicsonzegui.h
//
@@ -34,6 +34,13 @@
#include "deicsonzepreset.h"
#include "ui_deicsonzegui.h"
#include "libsynti/gui.h"
+#include "awl/floatentry.h"
+#include "awl/slider.h"
+#include "awl/checkbox.h"
+
+using Awl::FloatEntry;
+using Awl::Slider;
+using Awl::CheckBox;
//Envelope Gui constants
#define XOFFSET 2
@@ -114,9 +121,18 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
QFramePitchEnvelope* pitchEnvelopeGraph;
QFrameEnvelope* envelopeGraph[NBROP];
+ QWidget* _chorusSuperWidget;
+ QWidget* _reverbSuperWidget;
+ std::vector<Slider*> _chorusSliderVector;
+ std::vector<FloatEntry*> _chorusFloatEntryVector;
+ std::vector<CheckBox*> _chorusCheckBoxVector;
+ std::vector<Slider*> _reverbSliderVector;
+ std::vector<FloatEntry*> _reverbFloatEntryVector;
+ std::vector<CheckBox*> _reverbCheckBoxVector;
+
Q_OBJECT
QString lastDir;
- private slots:
+ private slots:
void readMessage(int);
void setEnabledChannel(bool);
void setChangeChannel(int);
@@ -140,6 +156,21 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void setIsBackgroundPix(bool);
void setBackgroundPixPath(const QString&);
void setBrowseBackgroundPixPath();
+ //FX
+ void setChorusActiv(bool a);
+ void setChannelChorus(int c);
+ void setChorusReturn(int al);
+ void setSelectChorusPlugin();
+ void setReverbCheckBox(double v, int i);
+ void setChorusCheckBox(double v, int i);
+ void setReverbActiv(bool a);
+ void setChannelReverb(int r);
+ void setReverbReturn(int val);
+ void setSelectReverbPlugin();
+ void setReverbFloatEntry(double v, int i);
+ void setReverbSlider(double v, int i);
+ void setChorusFloatEntry(double v, int i);
+ void setChorusSlider(double v, int i);
//quick edit
void setChannelVolKnob(double val);
void setChannelPan(double val);
@@ -322,6 +353,29 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void applyFontSize(int fs);
void updateSaveOnlyUsed(bool);
void updateSaveConfig(bool);
+ //FX
+ void updateChorusActiv(bool a);
+ void updateChannelChorus(int c);
+ void updateChorusReturn(int r);
+ void updateReverbActiv(bool a);
+ void updateChannelReverb(int r);
+ void updateReverbReturn(int r);
+ void updateLadspaReverbLineEdit(QString s);
+ void updateLadspaChorusLineEdit(QString s);
+ void addPluginCheckBox(int index, QString text, bool toggled,
+ QWidget* parent, QGridLayout* grid, bool isReverb);
+ void addPluginIntSlider(int index, QString text, double min, double max,
+ double val, QWidget* parent, QGridLayout* grid,
+ bool isReverb);
+ void addPluginSlider(int index, QString text, bool isLog, double min,
+ double max, double val, QWidget* parent,
+ QGridLayout* grid, bool isReverb);
+ void buildGuiReverb();
+ void buildGuiChorus();
+ void updateReverbSlider(double v, int i);
+ void updateReverbFloatEntry(double v, int i);
+ void updateChorusSlider(double v, int i);
+ void updateChorusFloatEntry(double v, int i);
//update load init set
void updateInitSetCheckBox(bool);
void updateInitSetPath(QString);
@@ -406,7 +460,7 @@ class DeicsOnzeGui : public QDialog, public Ui::DeicsOnzeGuiBase, public MessGui
void updateProg(int prog, bool enable);
void updatePreset(Preset* p);
void updatePreset(void); //update gui following the current preset
- void updateCurrentChannel(); //update gui channel attributes
+ //void updateCurrentChannel(); //update gui channel attributes
QString num3Digits(int);
DeicsOnzeGui(DeicsOnze*);
diff --git a/muse/synti/deicsonze/deicsonzegui.ui b/muse/synti/deicsonze/deicsonzegui.ui
index 3e3b5bd6..60d634f2 100644
--- a/muse/synti/deicsonze/deicsonzegui.ui
+++ b/muse/synti/deicsonze/deicsonzegui.ui
@@ -1,15 +1,13 @@
<ui version="4.0" >
<author>Nil Geisweiller</author>
- <comment></comment>
- <exportmacro></exportmacro>
<class>DeicsOnzeGuiBase</class>
<widget class="QDialog" name="DeicsOnzeGuiBase" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
- <width>688</width>
- <height>575</height>
+ <width>741</width>
+ <height>590</height>
</rect>
</property>
<property name="windowTitle" >
@@ -28,619 +26,6 @@
<property name="spacing" >
<number>6</number>
</property>
- <item rowspan="2" 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="minValue" >
- <double>0</double>
- </property>
- <property name="maxValue" >
- <double>1</double>
- </property>
- <property name="lineStep" >
- <double>0.1</double>
- </property>
- <property name="pageStep" >
- <double>0.2</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>
- </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>
- </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>
- </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>
- </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>
- </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="maxValue" >
- <double>1</double>
- </property>
- <property name="lineStep" >
- <double>0.1</double>
- </property>
- <property name="pageStep" >
- <double>0.2</double>
- </property>
- <property name="scaleSize" >
- <number>270</number>
- </property>
- <property name="markSize" >
- <number>6</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="3" >
- <widget class="QPushButton" name="panicButton" >
- <property name="maximumSize" >
- <size>
- <width>1000</width>
- <height>1000</height>
- </size>
- </property>
- <property name="palette" >
- <palette>
- <active>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>237</red>
- <green>237</green>
- <blue>237</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>166</red>
- <green>166</green>
- <blue>166</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>255</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>255</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- </active>
- <inactive>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>237</red>
- <green>237</green>
- <blue>237</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>166</red>
- <green>166</green>
- <blue>166</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>255</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>255</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- </inactive>
- <disabled>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>237</red>
- <green>237</green>
- <blue>237</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>166</red>
- <green>166</green>
- <blue>166</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>255</red>
- <green>255</green>
- <blue>255</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>0</blue>
- </color>
- <color>
- <red>121</red>
- <green>125</green>
- <blue>121</blue>
- </color>
- <color>
- <red>207</red>
- <green>207</green>
- <blue>207</blue>
- </color>
- <color>
- <red>0</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>255</red>
- <green>0</green>
- <blue>255</blue>
- </color>
- <color>
- <red>231</red>
- <green>231</green>
- <blue>231</blue>
- </color>
- </disabled>
- </palette>
- </property>
- <property name="font" >
- <font>
- <family>Sans Serif</family>
- <pointsize>10</pointsize>
- <weight>75</weight>
- <italic>false</italic>
- <bold>true</bold>
- <underline>false</underline>
- <strikeout>false</strikeout>
- </font>
- </property>
- <property name="text" >
- <string>Panic!</string>
- </property>
- </widget>
- </item>
- <item row="0" column="2" >
- <widget class="QGroupBox" name="generalBox" >
- <property name="title" >
- <string/>
- </property>
- <layout class="QGridLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item row="0" column="4" >
- <widget class="QSpinBox" name="nbrVoicesSpinBox" >
- <property name="enabled" >
- <bool>true</bool>
- </property>
- <property name="toolTip" >
- <string>Number of Voices</string>
- </property>
- <property name="maximum" >
- <number>64</number>
- </property>
- <property name="minimum" >
- <number>1</number>
- </property>
- <property name="value" >
- <number>8</number>
- </property>
- </widget>
- </item>
- <item row="0" column="3" >
- <widget class="QLabel" name="numberVoicesLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Number of voices</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="2" >
- <widget class="QCheckBox" name="ChannelCheckBox" >
- <property name="text" >
- <string>Enable</string>
- </property>
- <property name="checked" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="1" >
- <widget class="QSpinBox" name="ChannelNumSpinBox" >
- <property name="maximum" >
- <number>16</number>
- </property>
- <property name="minimum" >
- <number>1</number>
- </property>
- </widget>
- </item>
- <item row="0" column="0" >
- <widget class="QLabel" name="channelNumLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Channel</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="0" >
- <widget class="QLabel" name="masterVolumeLabel" >
- <property name="frameShape" >
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="text" >
- <string>Vol</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item row="0" column="1" >
- <widget class="Awl::VolKnob" name="masterVolKnob" >
- <property name="minimumSize" >
- <size>
- <width>40</width>
- <height>40</height>
- </size>
- </property>
- <property name="minValue" >
- <double>0</double>
- </property>
- <property name="maxValue" >
- <double>1</double>
- </property>
- <property name="lineStep" >
- <double>0.1</double>
- </property>
- <property name="pageStep" >
- <double>0.2</double>
- </property>
- <property name="log" >
- <bool>false</bool>
- </property>
- </widget>
- </item>
<item row="1" column="0" colspan="4" >
<widget class="QTabWidget" name="deicsOnzeTabWidget" >
<property name="sizePolicy" >
@@ -668,7 +53,7 @@
</property>
<widget class="QWidget" name="PresetsTab" >
<attribute name="title" >
- <string>&amp;Presets</string>
+ <string>&amp;Preset</string>
</attribute>
<layout class="QGridLayout" >
<property name="margin" >
@@ -868,7 +253,7 @@
<enum>QFrame::Plain</enum>
</property>
<property name="text" >
- <string>DeicsOnze v0.4.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence.</string>
+ <string>DeicsOnze v0.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence.</string>
</property>
</widget>
</item>
@@ -4564,7 +3949,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 class="QWidget" name="FunctionsTab" >
<attribute name="title" >
- <string>&amp;Functions</string>
+ <string>&amp;Func</string>
</attribute>
<layout class="QGridLayout" >
<property name="margin" >
@@ -5567,9 +4952,303 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</item>
</layout>
</widget>
+ <widget class="QWidget" name="chorusTab" >
+ <attribute name="title" >
+ <string>C&amp;horus</string>
+ </attribute>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="1" column="0" colspan="3" >
+ <widget class="QGroupBox" name="parametersChorusGroupBox" >
+ <property name="title" >
+ <string>Chorus Parameters</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QGroupBox" name="channelChorusGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Channel 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="chChorusSpinBox" >
+ <property name="maximum" >
+ <number>127</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="chChorusSlider" >
+ <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="1" >
+ <widget class="QGroupBox" name="onChorusGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>On/Off and 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="chorusActivCheckBox" >
+ <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="returnChorusSlider" >
+ <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="0" column="0" >
+ <widget class="QGroupBox" name="selectLadspaChorusGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Select LADSPA plugin</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="QPushButton" name="selectLadspaChorusPushButton" >
+ <property name="text" >
+ <string>Change plugin</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLineEdit" name="selectLadspaChorusLineEdit" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="reverbTab" >
+ <attribute name="title" >
+ <string>&amp;Reverb</string>
+ </attribute>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" >
+ <widget class="QGroupBox" name="onReverbGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>On/Off and 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="reverbActivCheckBox" >
+ <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="returnReverbSlider" >
+ <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="0" column="0" >
+ <widget class="QGroupBox" name="selectLadspaReverbGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Select LADSPA plugin</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="QPushButton" name="selectLadspaReverbPushButton" >
+ <property name="text" >
+ <string>Change plugin</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLineEdit" name="selectLadspaReverbLineEdit" >
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QGroupBox" name="channelReverbGroupBox" >
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property name="title" >
+ <string>Channel 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="chReverbSpinBox" >
+ <property name="maximum" >
+ <number>127</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QSlider" name="chReverbSlider" >
+ <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="1" column="0" colspan="3" >
+ <widget class="QGroupBox" name="parametersReverbGroupBox" >
+ <property name="title" >
+ <string>Reverb Parameters</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
<widget class="QWidget" name="ConfigureTab" >
<attribute name="title" >
- <string>&amp;Configure (global)</string>
+ <string>&amp;Config</string>
</attribute>
<layout class="QGridLayout" >
<property name="margin" >
@@ -6000,24 +5679,857 @@ 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="0" column="1" >
+ <widget class="Awl::VolKnob" name="masterVolKnob" >
+ <property name="minimumSize" >
+ <size>
+ <width>40</width>
+ <height>40</height>
+ </size>
+ </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>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="masterVolumeLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Vol</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QGroupBox" name="generalBox" >
+ <property name="title" >
+ <string/>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="4" >
+ <widget class="QSpinBox" name="nbrVoicesSpinBox" >
+ <property name="enabled" >
+ <bool>true</bool>
+ </property>
+ <property name="toolTip" >
+ <string>Number of Voices</string>
+ </property>
+ <property name="maximum" >
+ <number>64</number>
+ </property>
+ <property name="minimum" >
+ <number>1</number>
+ </property>
+ <property name="value" >
+ <number>8</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3" >
+ <widget class="QLabel" name="numberVoicesLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Number of voices</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QCheckBox" name="ChannelCheckBox" >
+ <property name="text" >
+ <string>Enable</string>
+ </property>
+ <property name="checked" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QSpinBox" name="ChannelNumSpinBox" >
+ <property name="maximum" >
+ <number>16</number>
+ </property>
+ <property name="minimum" >
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="channelNumLabel" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="text" >
+ <string>Channel</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="3" >
+ <widget class="QPushButton" name="panicButton" >
+ <property name="maximumSize" >
+ <size>
+ <width>1000</width>
+ <height>1000</height>
+ </size>
+ </property>
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>237</red>
+ <green>237</green>
+ <blue>237</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>166</red>
+ <green>166</green>
+ <blue>166</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Highlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="HighlightedText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Link" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="LinkVisited" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>237</red>
+ <green>237</green>
+ <blue>237</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>166</red>
+ <green>166</green>
+ <blue>166</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Highlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="HighlightedText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Link" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="LinkVisited" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>237</red>
+ <green>237</green>
+ <blue>237</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>166</red>
+ <green>166</green>
+ <blue>166</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Highlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>121</red>
+ <green>125</green>
+ <blue>121</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="HighlightedText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>207</red>
+ <green>207</green>
+ <blue>207</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Link" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="LinkVisited" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>0</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>231</red>
+ <green>231</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="font" >
+ <font>
+ <family>Sans Serif</family>
+ <pointsize>10</pointsize>
+ <weight>75</weight>
+ <italic>false</italic>
+ <bold>true</bold>
+ <underline>false</underline>
+ <strikeout>false</strikeout>
+ </font>
+ </property>
+ <property name="text" >
+ <string>Panic!</string>
+ </property>
+ </widget>
+ </item>
+ <item rowspan="2" 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>
</layout>
</widget>
<layoutdefault spacing="6" margin="11" />
- <pixmapfunction></pixmapfunction>
<customwidgets>
<customwidget>
<class>Awl::Knob</class>
<extends>QWidget</extends>
<header>awl/knob.h</header>
- <container>0</container>
- <pixmap></pixmap>
</customwidget>
<customwidget>
<class>Awl::VolKnob</class>
<extends>Awl::Knob</extends>
<header>awl/volknob.h</header>
- <container>0</container>
- <pixmap></pixmap>
</customwidget>
</customwidgets>
<tabstops>
@@ -7302,12 +7814,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>453</x>
- <y>144</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>147</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7318,12 +7830,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>554</x>
- <y>147</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>453</x>
- <y>144</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7334,12 +7846,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>453</x>
- <y>183</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>186</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7350,12 +7862,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>554</x>
- <y>186</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>453</x>
- <y>183</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7366,12 +7878,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>453</x>
- <y>222</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>225</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7382,12 +7894,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>554</x>
- <y>225</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>453</x>
- <y>222</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7398,12 +7910,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>167</y>
+ <x>229</x>
+ <y>208</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>170</y>
+ <x>596</x>
+ <y>211</y>
</hint>
</hints>
</connection>
@@ -7414,12 +7926,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>554</x>
- <y>170</y>
+ <x>596</x>
+ <y>211</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>167</y>
+ <x>229</x>
+ <y>208</y>
</hint>
</hints>
</connection>
@@ -7430,12 +7942,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>223</y>
+ <x>240</x>
+ <y>329</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>226</y>
+ <x>596</x>
+ <y>332</y>
</hint>
</hints>
</connection>
@@ -7446,12 +7958,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>554</x>
- <y>226</y>
+ <x>596</x>
+ <y>332</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>223</y>
+ <x>240</x>
+ <y>329</y>
</hint>
</hints>
</connection>
@@ -7462,12 +7974,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>554</x>
- <y>282</y>
+ <x>596</x>
+ <y>439</y>
</hint>
<hint type="destinationlabel" >
- <x>194</x>
- <y>279</y>
+ <x>240</x>
+ <y>442</y>
</hint>
</hints>
</connection>
@@ -7478,12 +7990,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>279</y>
+ <x>240</x>
+ <y>442</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>282</y>
+ <x>596</x>
+ <y>439</y>
</hint>
</hints>
</connection>
@@ -7494,12 +8006,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>553</x>
- <y>380</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>377</x>
- <y>377</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7510,12 +8022,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>377</x>
- <y>377</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>553</x>
- <y>380</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7526,12 +8038,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>277</x>
- <y>457</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>337</x>
- <y>460</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7542,12 +8054,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>337</x>
- <y>460</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>277</x>
- <y>457</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7558,12 +8070,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>493</x>
- <y>457</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>553</x>
- <y>460</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7574,12 +8086,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>553</x>
- <y>460</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>493</x>
- <y>457</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7590,12 +8102,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>493</x>
- <y>537</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>553</x>
- <y>540</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7606,12 +8118,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>553</x>
- <y>540</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>493</x>
- <y>537</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7622,12 +8134,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7638,12 +8150,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7654,12 +8166,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7670,12 +8182,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7686,12 +8198,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7702,12 +8214,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7718,12 +8230,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7734,12 +8246,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7750,12 +8262,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7766,12 +8278,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7782,12 +8294,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>210</x>
- <y>156</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>159</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7798,12 +8310,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>554</x>
- <y>204</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>210</x>
- <y>201</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7814,12 +8326,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>210</x>
- <y>201</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>204</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7830,12 +8342,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>210</x>
- <y>246</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>249</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7846,12 +8358,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>554</x>
- <y>249</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>210</x>
- <y>246</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7862,12 +8374,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>210</x>
- <y>291</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>554</x>
- <y>294</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7878,12 +8390,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>554</x>
- <y>159</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>210</x>
- <y>156</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7894,12 +8406,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>554</x>
- <y>294</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>210</x>
- <y>291</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7910,12 +8422,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7926,12 +8438,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7942,12 +8454,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7958,12 +8470,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>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
<hint type="destinationlabel" >
- <x>121</x>
- <y>143</y>
+ <x>110</x>
+ <y>116</y>
</hint>
</hints>
</connection>
@@ -7983,5 +8495,69 @@ Wave form 8 = &lt;i>if &lt;b>t&lt;/b>&amp;#060 pi then sin(2*&lt;b>t&lt;/b>)*sin
</hint>
</hints>
</connection>
+ <connection>
+ <sender>chChorusSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chChorusSpinBox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>110</x>
+ <y>116</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>110</x>
+ <y>116</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>chChorusSpinBox</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chChorusSlider</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>110</x>
+ <y>116</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>110</x>
+ <y>116</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>chReverbSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chReverbSpinBox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>544</x>
+ <y>142</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>581</x>
+ <y>135</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>chReverbSpinBox</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>chReverbSlider</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>575</x>
+ <y>149</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>495</x>
+ <y>148</y>
+ </hint>
+ </hints>
+ </connection>
</connections>
</ui>
diff --git a/muse/synti/deicsonze/deicsonzepreset.cpp b/muse/synti/deicsonze/deicsonzepreset.cpp
index afa43e93..d01dd959 100644
--- a/muse/synti/deicsonze/deicsonzepreset.cpp
+++ b/muse/synti/deicsonze/deicsonzepreset.cpp
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
// deicsonzepreset.cpp
//
diff --git a/muse/synti/deicsonze/deicsonzepreset.h b/muse/synti/deicsonze/deicsonzepreset.h
index 6b05939e..5039ddf7 100644
--- a/muse/synti/deicsonze/deicsonzepreset.h
+++ b/muse/synti/deicsonze/deicsonzepreset.h
@@ -2,7 +2,7 @@
//
// DeicsOnze an emulator of the YAMAHA DX11 synthesizer
//
-// Version 0.4.5
+// Version 0.5
//
// deicsonzepreset.h
//