diff options
| -rw-r--r-- | muse/ChangeLog | 5 | ||||
| -rw-r--r-- | muse/muse/plugingui.cpp | 2 | ||||
| -rw-r--r-- | muse/plugins/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | muse/plugins/freeverb/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | muse/synti/deicsonze/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonze.cpp | 318 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonze.h | 60 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonzegui.cpp | 270 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonzegui.h | 60 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonzegui.ui | 2164 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonzepreset.cpp | 2 | ||||
| -rw-r--r-- | muse/synti/deicsonze/deicsonzepreset.h | 2 | 
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>&Presets</string> +       <string>&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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin       </widget>       <widget class="QWidget" name="FunctionsTab" >        <attribute name="title" > -       <string>&Functions</string> +       <string>&Func</string>        </attribute>        <layout class="QGridLayout" >         <property name="margin" > @@ -5567,9 +4952,303 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin         </item>        </layout>       </widget> +     <widget class="QWidget" name="chorusTab" > +      <attribute name="title" > +       <string>C&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>&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>&Configure (global)</string> +       <string>&Config</string>        </attribute>        <layout class="QGridLayout" >         <property name="margin" > @@ -6000,24 +5679,857 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</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  // | 
