diff options
| author | Florian Jung <flo@windfisch.org> | 2011-06-28 12:38:56 +0000 | 
|---|---|---|
| committer | Florian Jung <flo@windfisch.org> | 2011-06-28 12:38:56 +0000 | 
| commit | 1ee2c8cb621fdc9b165b891f6d8d4607dadabf9b (patch) | |
| tree | 27174350316c57d48f8ecaad54f7919f0ba106e1 /muse2/synti/deicsonze | |
| parent | 2f4a98c62adf7241944ea7949d4b6a50d4b4af36 (diff) | |
| parent | 933aeb536f3d90eb38bc96308de628eeedd81755 (diff) | |
merged with current trunk. i hope this works...
Diffstat (limited to 'muse2/synti/deicsonze')
| -rw-r--r-- | muse2/synti/deicsonze/common_defs.h | 10 | ||||
| -rw-r--r-- | muse2/synti/deicsonze/deicsonze.cpp | 381 | ||||
| -rw-r--r-- | muse2/synti/deicsonze/deicsonze.h | 20 | ||||
| -rw-r--r-- | muse2/synti/deicsonze/deicsonzegui.cpp | 370 | 
4 files changed, 506 insertions, 275 deletions
| diff --git a/muse2/synti/deicsonze/common_defs.h b/muse2/synti/deicsonze/common_defs.h new file mode 100644 index 00000000..3c433e2a --- /dev/null +++ b/muse2/synti/deicsonze/common_defs.h @@ -0,0 +1,10 @@ +#ifndef __DEICSONZE_UNIQUE_ID_H +#define __DEICSONZE_UNIQUE_ID_H + +// Make sure this number is unique among all the MESS synths. +#define DEICSONZE_UNIQUE_ID      5 + +//#define DEICSONZE_DEBUG + +#endif + diff --git a/muse2/synti/deicsonze/deicsonze.cpp b/muse2/synti/deicsonze/deicsonze.cpp index 1da9fbc4..b723e925 100644 --- a/muse2/synti/deicsonze/deicsonze.cpp +++ b/muse2/synti/deicsonze/deicsonze.cpp @@ -37,6 +37,7 @@  #include "muse/midi.h"  #include "libsynti/mess.h" +//#include "common_defs.h"  #include "deicsonze.h"  #include "plugin.h" @@ -91,6 +92,9 @@ DeicsOnze::DeicsOnze() : Mess(2) {        waveTable[W8][i] = (float)(i<RESOLUTION/2?sin(t)*sin(t):0.0);}    } +  initBuffer  = 0; +  initLen     = 0; +          //alloc temp buffers chorus and reverb    tempInputChorus = (float**) malloc(sizeof(float*)*NBRFXINPUTS);    for(int i = 0; i < NBRFXINPUTS; i++) @@ -236,6 +240,9 @@ DeicsOnze::DeicsOnze() : Mess(2) {  DeicsOnze::~DeicsOnze()  { +  if(_gui)         +    delete _gui;  // p4.0.27 +        //if (--useCount == 0)    //delete[] sine_table;    //dealloc temp buffers chorus and reverb @@ -251,8 +258,18 @@ DeicsOnze::~DeicsOnze()    free(tempInputDelay);    for(int i = 0; i < NBRFXOUTPUTS; i++) free(tempOutputDelay[i]);    free(tempOutputDelay); +   +  if (initBuffer) +        delete [] initBuffer;  } +int DeicsOnze::oldMidiStateHeader(const unsigned char** data) const  +{ +  unsigned char const d[2] = {MUSE_SYNTH_SYSEX_MFG_ID, DEICSONZE_UNIQUE_ID}; +  *data = &d[0]; +  return 2;  +} +          //---------------------------------------------------------  // getSinusWaveTable  //--------------------------------------------------------- @@ -2266,9 +2283,23 @@ void DeicsOnze::writeConfiguration(AL::Xml* xml) {  }  //--------------------------------------------------------- +// getInitBuffer +//--------------------------------------------------------- +void DeicsOnze::setupInitBuffer(int len) +{ +  if (len > initLen) { +        if (initBuffer) +              delete [] initBuffer; +        initBuffer = new unsigned char[len]; +        initLen = len;     +        } +} + +//---------------------------------------------------------  // getInitData  //--------------------------------------------------------- -void DeicsOnze::getInitData(int* length, const unsigned char** data) const { +//void DeicsOnze::getInitData(int* length, const unsigned char** data) const { +void DeicsOnze::getInitData(int* length, const unsigned char** data) {    //write the set in a temporary file and in a QByteArray    QTemporaryFile file;    file.open(); @@ -2284,141 +2315,150 @@ void DeicsOnze::getInitData(int* length, const unsigned char** data) const {    //save the set    *length = NUM_CONFIGLENGTH                        +  //*length = 2 + NUM_CONFIGLENGTH     // 2 for Header                        ///+ (_pluginIReverb?sizeof(float)*_pluginIReverb->plugin()->parameter():0)       + (_pluginIReverb?sizeof(float)*_pluginIReverb->plugin()->controlInPorts():0)       ///+ (_pluginIChorus?sizeof(float)*_pluginIChorus->plugin()->parameter():0)      + (_pluginIChorus?sizeof(float)*_pluginIChorus->plugin()->controlInPorts():0)      + baComp.size(); -  unsigned char* buffer = new unsigned char[*length]; +  ///unsigned char* buffer = new unsigned char[*length]; +  setupInitBuffer(*length);   +      //save init data -  buffer[0]=SYSEX_INIT_DATA; -  buffer[1]=SYSEX_INIT_DATA_VERSION; +   +  ///buffer[0]=SYSEX_INIT_DATA; +  initBuffer[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  initBuffer[1]=DEICSONZE_UNIQUE_ID; +  initBuffer[2]=SYSEX_INIT_DATA; +  initBuffer[3]=SYSEX_INIT_DATA_VERSION;    //save global data -  buffer[NUM_MASTERVOL] = (unsigned char) getMasterVol(); +  initBuffer[NUM_MASTERVOL] = (unsigned char) getMasterVol();    for(int c = 0; c < NBRCHANNELS; c++) { -    buffer[NUM_CHANNEL_ENABLE + c] = (unsigned char) getChannelEnable(c); -    buffer[NUM_CHANNEL_VOL + c] = (unsigned char) getChannelVol(c); -    buffer[NUM_CHANNEL_PAN + c] = (unsigned char) getChannelPan(c); +    initBuffer[NUM_CHANNEL_ENABLE + c] = (unsigned char) getChannelEnable(c); +    initBuffer[NUM_CHANNEL_VOL + c] = (unsigned char) getChannelVol(c); +    initBuffer[NUM_CHANNEL_PAN + c] = (unsigned char) getChannelPan(c);      int b = getChannelBrightness(c); -    buffer[NUM_CHANNEL_BRIGHTNESS + 2*c] = (unsigned char) (b%256); -    buffer[NUM_CHANNEL_BRIGHTNESS + 2*c + 1] = (unsigned char) (b/256); -    buffer[NUM_CHANNEL_MODULATION + c] = +    initBuffer[NUM_CHANNEL_BRIGHTNESS + 2*c] = (unsigned char) (b%256); +    initBuffer[NUM_CHANNEL_BRIGHTNESS + 2*c + 1] = (unsigned char) (b/256); +    initBuffer[NUM_CHANNEL_MODULATION + c] =        (unsigned char) getChannelModulation(c); -    buffer[NUM_CHANNEL_DETUNE + c] = +    initBuffer[NUM_CHANNEL_DETUNE + c] =        (unsigned char) getChannelDetune(c) + MAXCHANNELDETUNE; -    buffer[NUM_CHANNEL_ATTACK + c] = (unsigned char) getChannelAttack(c); -    buffer[NUM_CHANNEL_RELEASE + c] = (unsigned char) getChannelRelease(c); -    buffer[NUM_CHANNEL_REVERB + c] = (unsigned char) getChannelReverb(c); -    buffer[NUM_CHANNEL_CHORUS + c] = (unsigned char) getChannelChorus(c);     -    buffer[NUM_CHANNEL_DELAY + c] = (unsigned char) getChannelDelay(c);     -    buffer[NUM_CURRENTPROG + c] = (unsigned char) _preset[c]->prog; -    buffer[NUM_CURRENTLBANK + c] = +    initBuffer[NUM_CHANNEL_ATTACK + c] = (unsigned char) getChannelAttack(c); +    initBuffer[NUM_CHANNEL_RELEASE + c] = (unsigned char) getChannelRelease(c); +    initBuffer[NUM_CHANNEL_REVERB + c] = (unsigned char) getChannelReverb(c); +    initBuffer[NUM_CHANNEL_CHORUS + c] = (unsigned char) getChannelChorus(c);     +    initBuffer[NUM_CHANNEL_DELAY + c] = (unsigned char) getChannelDelay(c);     +    initBuffer[NUM_CURRENTPROG + c] = (unsigned char) _preset[c]->prog; +    initBuffer[NUM_CURRENTLBANK + c] =        (unsigned char) _preset[c]->_subcategory->_lbank; -    buffer[NUM_CURRENTHBANK + c] = +    initBuffer[NUM_CURRENTHBANK + c] =        (unsigned char) _preset[c]->_subcategory->_category->_hbank; -    buffer[NUM_NBRVOICES + c] = (unsigned char) getNbrVoices(c); +    initBuffer[NUM_NBRVOICES + c] = (unsigned char) getNbrVoices(c);    } -  buffer[NUM_SAVEONLYUSED]=(unsigned char) _saveOnlyUsed; -  buffer[NUM_SAVECONFIG]=(unsigned char) _saveConfig; +  initBuffer[NUM_SAVEONLYUSED]=(unsigned char) _saveOnlyUsed; +  initBuffer[NUM_SAVECONFIG]=(unsigned char) _saveConfig;    //save config data    if(_saveConfig) { -    buffer[NUM_QUALITY]=(unsigned char)_global.quality; -    buffer[NUM_FILTER]=(unsigned char)getFilter(); -    buffer[NUM_FONTSIZE]=(unsigned char)_global.fontSize; -    buffer[NUM_RED_TEXT]=(unsigned char)_gui->tColor->red(); -    buffer[NUM_GREEN_TEXT]=(unsigned char)_gui->tColor->green(); -    buffer[NUM_BLUE_TEXT]=(unsigned char)_gui->tColor->blue(); -    buffer[NUM_RED_BACKGROUND]=(unsigned char)_gui->bColor->red(); -    buffer[NUM_GREEN_BACKGROUND]=(unsigned char)_gui->bColor->green(); -    buffer[NUM_BLUE_BACKGROUND]=(unsigned char)_gui->bColor->blue(); -    buffer[NUM_RED_EDITTEXT]=(unsigned char)_gui->etColor->red(); -    buffer[NUM_GREEN_EDITTEXT]=(unsigned char)_gui->etColor->green(); -    buffer[NUM_BLUE_EDITTEXT]=(unsigned char)_gui->etColor->blue(); -    buffer[NUM_RED_EDITBACKGROUND]=(unsigned char)_gui->ebColor->red(); -    buffer[NUM_GREEN_EDITBACKGROUND]=(unsigned char)_gui->ebColor->green(); -    buffer[NUM_BLUE_EDITBACKGROUND]=(unsigned char)_gui->ebColor->blue(); -    buffer[NUM_ISINITSET]=(unsigned char)_isInitSet; -    strncpy((char*)&buffer[NUM_INITSETPATH], +    initBuffer[NUM_QUALITY]=(unsigned char)_global.quality; +    initBuffer[NUM_FILTER]=(unsigned char)getFilter(); +    initBuffer[NUM_FONTSIZE]=(unsigned char)_global.fontSize; +    initBuffer[NUM_RED_TEXT]=(unsigned char)_gui->tColor->red(); +    initBuffer[NUM_GREEN_TEXT]=(unsigned char)_gui->tColor->green(); +    initBuffer[NUM_BLUE_TEXT]=(unsigned char)_gui->tColor->blue(); +    initBuffer[NUM_RED_BACKGROUND]=(unsigned char)_gui->bColor->red(); +    initBuffer[NUM_GREEN_BACKGROUND]=(unsigned char)_gui->bColor->green(); +    initBuffer[NUM_BLUE_BACKGROUND]=(unsigned char)_gui->bColor->blue(); +    initBuffer[NUM_RED_EDITTEXT]=(unsigned char)_gui->etColor->red(); +    initBuffer[NUM_GREEN_EDITTEXT]=(unsigned char)_gui->etColor->green(); +    initBuffer[NUM_BLUE_EDITTEXT]=(unsigned char)_gui->etColor->blue(); +    initBuffer[NUM_RED_EDITBACKGROUND]=(unsigned char)_gui->ebColor->red(); +    initBuffer[NUM_GREEN_EDITBACKGROUND]=(unsigned char)_gui->ebColor->green(); +    initBuffer[NUM_BLUE_EDITBACKGROUND]=(unsigned char)_gui->ebColor->blue(); +    initBuffer[NUM_ISINITSET]=(unsigned char)_isInitSet; +    strncpy((char*)&initBuffer[NUM_INITSETPATH],  	    _initSetPath.toLatin1().constData(), MAXSTRLENGTHINITSETPATH); -    buffer[NUM_ISBACKGROUNDPIX]=(unsigned char)_isBackgroundPix; -    strncpy((char*)&buffer[NUM_BACKGROUNDPIXPATH], +    initBuffer[NUM_ISBACKGROUNDPIX]=(unsigned char)_isBackgroundPix; +    strncpy((char*)&initBuffer[NUM_BACKGROUNDPIXPATH],  	    _backgroundPixPath.toLatin1().constData(),  	    MAXSTRLENGTHBACKGROUNDPIXPATH);    }    //FX    //reverb -  buffer[NUM_IS_REVERB_ON]=(unsigned char)_global.isReverbActivated; -  buffer[NUM_REVERB_RETURN]=(unsigned char)getReverbReturn(); -  buffer[NUM_REVERB_PARAM_NBR]=                                          +  initBuffer[NUM_IS_REVERB_ON]=(unsigned char)_global.isReverbActivated; +  initBuffer[NUM_REVERB_RETURN]=(unsigned char)getReverbReturn(); +  initBuffer[NUM_REVERB_PARAM_NBR]=                                               ///(_pluginIReverb?(unsigned char)_pluginIReverb->plugin()->parameter() : 0);      (_pluginIReverb?(unsigned char)_pluginIReverb->plugin()->controlInPorts() : 0); -  strncpy((char*)&buffer[NUM_REVERB_LIB], +  strncpy((char*)&initBuffer[NUM_REVERB_LIB],  	  (_pluginIReverb?  	   _pluginIReverb->plugin()->lib().toLatin1().constData() : "\0"),  	  MAXSTRLENGTHFXLIB); -  strncpy((char*)&buffer[NUM_REVERB_LABEL], +  strncpy((char*)&initBuffer[NUM_REVERB_LABEL],  	  (_pluginIReverb?  	   _pluginIReverb->plugin()->label().toLatin1().constData() : "\0"),  	  MAXSTRLENGTHFXLABEL);    //chorus -  buffer[NUM_IS_CHORUS_ON]=(unsigned char)_global.isChorusActivated; -  buffer[NUM_CHORUS_RETURN]=(unsigned char)getChorusReturn(); -  buffer[NUM_CHORUS_PARAM_NBR]=                                          +  initBuffer[NUM_IS_CHORUS_ON]=(unsigned char)_global.isChorusActivated; +  initBuffer[NUM_CHORUS_RETURN]=(unsigned char)getChorusReturn(); +  initBuffer[NUM_CHORUS_PARAM_NBR]=                                               ///(_pluginIChorus?(unsigned char)_pluginIChorus->plugin()->parameter() : 0);      (_pluginIChorus?(unsigned char)_pluginIChorus->plugin()->controlInPorts() : 0); -  strncpy((char*)&buffer[NUM_CHORUS_LIB], +  strncpy((char*)&initBuffer[NUM_CHORUS_LIB],  	  (_pluginIChorus?  	   _pluginIChorus->plugin()->lib().toLatin1().constData() : "\0"),  	  MAXSTRLENGTHFXLIB); -  strncpy((char*)&buffer[NUM_CHORUS_LABEL], +  strncpy((char*)&initBuffer[NUM_CHORUS_LABEL],  	  (_pluginIChorus?  	   _pluginIChorus->plugin()->label().toLatin1().constData() : "\0"),  	  MAXSTRLENGTHFXLABEL);    //delay -  buffer[NUM_IS_DELAY_ON]=(unsigned char)_global.isDelayActivated; -  buffer[NUM_DELAY_RETURN]=(unsigned char)getDelayReturn(); +  initBuffer[NUM_IS_DELAY_ON]=(unsigned char)_global.isDelayActivated; +  initBuffer[NUM_DELAY_RETURN]=(unsigned char)getDelayReturn();    //save FX parameters    //reverb -  for(int i = 0; i < (int)buffer[NUM_REVERB_PARAM_NBR]; i++) { +  for(int i = 0; i < (int)initBuffer[NUM_REVERB_PARAM_NBR]; i++) {      float val = (float)getReverbParam(i); -    memcpy(&buffer[NUM_CONFIGLENGTH + sizeof(float)*i], &val, sizeof(float)); +    memcpy(&initBuffer[NUM_CONFIGLENGTH + sizeof(float)*i], &val, sizeof(float));    }    //chorus -  for(int i = 0; i < (int)buffer[NUM_CHORUS_PARAM_NBR]; i++) { +  for(int i = 0; i < (int)initBuffer[NUM_CHORUS_PARAM_NBR]; i++) {      float val = (float)getChorusParam(i); -    memcpy(&buffer[NUM_CONFIGLENGTH -		   + sizeof(float)*(int)buffer[NUM_REVERB_PARAM_NBR] +    memcpy(&initBuffer[NUM_CONFIGLENGTH +		   + sizeof(float)*(int)initBuffer[NUM_REVERB_PARAM_NBR]  		   + sizeof(float)*i], &val, sizeof(float));    }    //delay    float delayfloat;    delayfloat = getDelayBPM(); -  memcpy(&buffer[NUM_DELAY_BPM], &delayfloat, 4); +  memcpy(&initBuffer[NUM_DELAY_BPM], &delayfloat, 4);    delayfloat = getDelayBeatRatio(); -  memcpy(&buffer[NUM_DELAY_BEATRATIO], &delayfloat, sizeof(float)); +  memcpy(&initBuffer[NUM_DELAY_BEATRATIO], &delayfloat, sizeof(float));    delayfloat = getDelayFeedback(); -  memcpy(&buffer[NUM_DELAY_FEEDBACK], &delayfloat, sizeof(float)); +  memcpy(&initBuffer[NUM_DELAY_FEEDBACK], &delayfloat, sizeof(float));    delayfloat = getDelayLFOFreq(); -  memcpy(&buffer[NUM_DELAY_LFO_FREQ], &delayfloat, sizeof(float)); +  memcpy(&initBuffer[NUM_DELAY_LFO_FREQ], &delayfloat, sizeof(float));    delayfloat = getDelayLFODepth(); -  memcpy(&buffer[NUM_DELAY_LFO_DEPTH], &delayfloat, sizeof(float)); +  memcpy(&initBuffer[NUM_DELAY_LFO_DEPTH], &delayfloat, sizeof(float));    //save set data    int offset =      NUM_CONFIGLENGTH -    + sizeof(float)*(int)buffer[NUM_REVERB_PARAM_NBR] -    + sizeof(float)*(int)buffer[NUM_CHORUS_PARAM_NBR]; +    + sizeof(float)*(int)initBuffer[NUM_REVERB_PARAM_NBR] +    + sizeof(float)*(int)initBuffer[NUM_CHORUS_PARAM_NBR];    for(int i = offset; i < *length; i++) -    buffer[i]=(unsigned char)baComp.at(i - offset); +    initBuffer[i]=(unsigned char)baComp.at(i - offset); -  *data=buffer; +  ///*data=buffer; +  *data=initBuffer;  }  //---------------------------------------------------------  // parseInitData  //---------------------------------------------------------  void DeicsOnze::parseInitData(int length, const unsigned char* data) { -  if(data[1]==SYSEX_INIT_DATA_VERSION) { +  ///if(data[1]==SYSEX_INIT_DATA_VERSION) { +  if(data[3]==SYSEX_INIT_DATA_VERSION) {      //load global parameters      //master volume      setMasterVol(data[NUM_MASTERVOL]); @@ -2600,7 +2640,7 @@ void DeicsOnze::parseInitData(int length, const unsigned char* data) {  		     (const char*)&data[NUM_REVERB_LABEL]);      if(p) {         initPluginReverb(p); -      //for(int i = 0; i < _pluginIReverb->plugin()->parameter(); i++) { +      ///for(int i = 0; i < _pluginIReverb->plugin()->parameter(); i++) {        for(int i = 0; i < (int)_pluginIReverb->plugin()->controlInPorts(); i++) {  	float val;  	memcpy(&val, &data[NUM_CONFIGLENGTH + sizeof(float)*i], sizeof(float)); @@ -2630,7 +2670,7 @@ void DeicsOnze::parseInitData(int length, const unsigned char* data) {  		     (const char*)&data[NUM_CHORUS_LABEL]);      if(p) {        initPluginChorus(p); -      //for(int i = 0; i < _pluginIChorus->plugin()->parameter(); i++) { +      ///for(int i = 0; i < _pluginIChorus->plugin()->parameter(); i++) {        for(int i = 0; i < (int)_pluginIChorus->plugin()->controlInPorts(); i++) {  	float val;  	memcpy(&val, &data[NUM_CONFIGLENGTH @@ -2788,87 +2828,123 @@ bool DeicsOnze::sysex(int length, const unsigned char* data) {    return false;  }  bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) { -  int cmd=data[0]; +   +  if(length < 3 || data[0] != MUSE_SYNTH_SYSEX_MFG_ID  +      || data[1] != DEICSONZE_UNIQUE_ID)  +  { +    #ifdef DEICSONZE_DEBUG +    printf("MusE DeicsOnze: Unknown sysex header\n"); +    #endif +    return false; +  } +   +  int l = length - 2; +  const unsigned char* d = data + 2; +  ///int cmd=data[0]; +  int cmd=d[0];    int index;    float f;    switch(cmd) {    case SYSEX_INIT_DATA:      parseInitData(length, data); +    //parseInitData(l, d);      break;    case SYSEX_MASTERVOL: -    setMasterVol((int)data[1]); +    ///setMasterVol((int)data[1]); +    setMasterVol((int)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;      //case SYSEX_CHANNELNUM: -    //_global.channelNum = (char)data[1]; +    ///_global.channelNum = (char)data[1]; +    //_global.channelNum = (char)d[1];      //if(!fromGui) { -    //  MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +    ///  MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +    //  MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);      //  _gui->writeEvent(evSysex);      //}      //break;    case SYSEX_QUALITY: -    setQuality((Quality)data[1]); +    ///setQuality((Quality)data[1]); +    setQuality((Quality)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_FILTER: -    setFilter((bool)data[1]); +    ///setFilter((bool)data[1]); +    setFilter((bool)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_FONTSIZE: -    _global.fontSize = (int)data[1]; +    ///_global.fontSize = (int)data[1]; +    _global.fontSize = (int)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_SAVECONFIG: -    _saveConfig = (bool)data[1]; +    ///_saveConfig = (bool)data[1]; +    _saveConfig = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_SAVEONLYUSED: -    _saveOnlyUsed = (bool)data[1]; +    ///_saveOnlyUsed = (bool)data[1]; +    _saveOnlyUsed = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_ISINITSET: -    _isInitSet = (bool)data[1]; +    ///_isInitSet = (bool)data[1]; +    _isInitSet = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_INITSETPATH: -    _initSetPath = (char*)&data[1]; +    ///_initSetPath = (char*)&data[1]; +    _initSetPath = (char*)&d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_ISBACKGROUNDPIX: -    _isBackgroundPix = (bool)data[1]; +    ///_isBackgroundPix = (bool)data[1]; +    _isBackgroundPix = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_BACKGROUNDPIXPATH: -    _backgroundPixPath = (char*)&data[1]; +    ///_backgroundPixPath = (char*)&data[1]; +    _backgroundPixPath = (char*)&d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break; @@ -2876,112 +2952,142 @@ bool DeicsOnze::sysex(int length, const unsigned char* data, bool fromGui) {      resetVoices();      break;    case SYSEX_CHORUSACTIV: -    _global.isChorusActivated = (bool)data[1]; +    ///_global.isChorusActivated = (bool)data[1]; +    _global.isChorusActivated = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_CHORUSPARAM: -    index = (int)data[1]; -    memcpy(&f, &data[2], sizeof(float)); +    ///index = (int)data[1]; +    ///memcpy(&f, &data[2], sizeof(float)); +    index = (int)d[1]; +    memcpy(&f, &d[2], sizeof(float));      setChorusParam(index, (double)f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;           case SYSEX_REVERBACTIV: -    _global.isReverbActivated = (bool)data[1]; +    ///_global.isReverbActivated = (bool)data[1]; +    _global.isReverbActivated = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_REVERBPARAM: -    index = (int)data[1]; -    memcpy(&f, &data[2], sizeof(float)); +    ///index = (int)data[1]; +    ///memcpy(&f, &data[2], sizeof(float)); +    index = (int)d[1]; +    memcpy(&f, &d[2], sizeof(float));      setReverbParam(index, (double)f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;           case SYSEX_DELAYACTIV: -    _global.isDelayActivated = (bool)data[1]; +    ///_global.isDelayActivated = (bool)data[1]; +    _global.isDelayActivated = (bool)d[1];      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_CHORUSRETURN: -    setChorusReturn((int)data[1]); +    ///setChorusReturn((int)data[1]); +    setChorusReturn((int)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_REVERBRETURN: -    setReverbReturn((int)data[1]); +    ///setReverbReturn((int)data[1]); +    setReverbReturn((int)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_DELAYRETURN: -    setDelayReturn((int)data[1]); +    ///setDelayReturn((int)data[1]); +    setDelayReturn((int)d[1]);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;    case SYSEX_SELECTREVERB:      Plugin* pluginReverb; -    memcpy(&pluginReverb, &data[1], sizeof(Plugin*)); +    ///memcpy(&pluginReverb, &data[1], sizeof(Plugin*)); +    memcpy(&pluginReverb, &d[1], sizeof(Plugin*));      initPluginReverb(pluginReverb);      break;    case SYSEX_SELECTCHORUS:      Plugin* pluginChorus; -    memcpy(&pluginChorus, &data[1], sizeof(Plugin*)); +    ///memcpy(&pluginChorus, &data[1], sizeof(Plugin*)); +    memcpy(&pluginChorus, &d[1], sizeof(Plugin*));      initPluginChorus(pluginChorus);      break;    case SYSEX_DELAYBPM: -    memcpy(&f, &data[1], sizeof(float)); +    ///memcpy(&f, &data[1], sizeof(float)); +    memcpy(&f, &d[1], sizeof(float));      setDelayBPM(f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;        case SYSEX_DELAYBEATRATIO: -    memcpy(&f, &data[1], sizeof(float)); +    ///memcpy(&f, &data[1], sizeof(float)); +    memcpy(&f, &d[1], sizeof(float));      setDelayBeatRatio(f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;        case SYSEX_DELAYFEEDBACK: -    memcpy(&f, &data[1], sizeof(float)); +    ///memcpy(&f, &data[1], sizeof(float)); +    memcpy(&f, &d[1], sizeof(float));      setDelayFeedback(f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;        case SYSEX_DELAYLFOFREQ: -    memcpy(&f, &data[1], sizeof(float)); +    ///memcpy(&f, &data[1], sizeof(float)); +    memcpy(&f, &d[1], sizeof(float));      setDelayLFOFreq(f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;        case SYSEX_DELAYLFODEPTH: -    memcpy(&f, &data[1], sizeof(float)); +    ///memcpy(&f, &data[1], sizeof(float)); +    memcpy(&f, &d[1], sizeof(float));      setDelayLFODepth(f);      if(!fromGui) { -      MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      ///MidiPlayEvent evSysex(0, 0, ME_SYSEX, data, length); +      MidiPlayEvent evSysex(0, 0, ME_SYSEX, d, l);        _gui->writeEvent(evSysex);      }      break;     @@ -3728,7 +3834,7 @@ const MidiPatch* DeicsOnze::getPatchInfo(int /*ch*/, const MidiPatch* p) const {  */  //---------------------------------------------------------  int DeicsOnze::getControllerInfo(int index, const char** name, -				 int* controller, int* min, int* max) +				 int* controller, int* min, int* max, int* initval) const  {      if (index >= nbrCtrl) {  	return 0; @@ -3738,6 +3844,7 @@ int DeicsOnze::getControllerInfo(int index, const char** name,      *controller = _ctrl[index].num;      *min = _ctrl[index].min;      *max = _ctrl[index].max; +    *initval = 0;                // p4.0.27 FIXME NOTE TODO          return (index +1);  } @@ -3975,10 +4082,32 @@ inline double plusMod(double x, double y) {  //--------------------------------------------------------- +//   processMessages +//   Called from host always, even if output path is unconnected. +//--------------------------------------------------------- + +void DeicsOnze::processMessages() +{ +  //Process messages from the gui +  while (_gui->fifoSize()) { +    MidiPlayEvent ev = _gui->readEvent(); +    if (ev.type() == ME_SYSEX) { +      sysex(ev.len(), ev.data(), true); +      sendEvent(ev); +    } +    else if (ev.type() == ME_CONTROLLER) { +      setController(ev.channel(), ev.dataA(), ev.dataB(), true); +      sendEvent(ev); +    } +  } +} + +//---------------------------------------------------------  //   write  //    synthesize n samples into buffer+offset  //---------------------------------------------------------  void DeicsOnze::process(float** buffer, int offset, int n) { +  /*    //Process messages from the gui    while (_gui->fifoSize()) {      MidiPlayEvent ev = _gui->readEvent(); @@ -3991,6 +4120,8 @@ void DeicsOnze::process(float** buffer, int offset, int n) {        sendEvent(ev);      }    } +  */ +      float* leftOutput = buffer[0] + offset;    float* rightOutput = buffer[1] + offset;  diff --git a/muse2/synti/deicsonze/deicsonze.h b/muse2/synti/deicsonze/deicsonze.h index dc7c533d..bd79b7fb 100644 --- a/muse2/synti/deicsonze/deicsonze.h +++ b/muse2/synti/deicsonze/deicsonze.h @@ -33,6 +33,7 @@  #include <list> +#include "common_defs.h"  #include "deicsonzepreset.h"  #include "deicsonzegui.h"  #include "deicsonzeplugin.h" @@ -99,7 +100,8 @@  #define SYSEX_INIT_DATA 1  #define SYSEX_INIT_DATA_VERSION 1 -#define SAVEINITLENGTH 2 +///#define SAVEINITLENGTH 2 +#define SAVEINITLENGTH 4    // MFG ID, synth ID, init data command, init data version  #define DEICSONZECONFIGURATIONSTR "deicsOnzeConfiguation"  #define SYSEX_MASTERVOL 4 @@ -432,6 +434,9 @@ struct Global {  class DeicsOnze : public Mess {    DeicsOnzeGui* _gui; +       +  unsigned char* initBuffer; +  int initLen;    static int useCount;    static float waveTable[NBRWAVES][RESOLUTION]; @@ -439,6 +444,7 @@ class DeicsOnze : public Mess {   private:    void parseInitData(int length, const unsigned char* data);    void loadConfiguration(QString fileName); +  void setupInitBuffer(int len);   public:    float** tempInputChorus; @@ -577,16 +583,20 @@ class DeicsOnze : public Mess {    bool setController(int ch, int ctrl, int val, bool fromGui);    virtual bool setController(int ch, int ctrl, int val);    bool sysex(int length, const unsigned char* data, bool fromGui);  -  virtual bool sysex(int length, const unsigned char* data); +  virtual bool sysex(int l, const unsigned char* d);    virtual const char* getPatchName(int ch, int number, int) const;    virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const;    virtual int getControllerInfo(int arg1, const char** arg2,  -				int* arg3, int* arg4, int* arg5); -  virtual void getInitData(int* length, const unsigned char** data) const; +				int* arg3, int* arg4, int* arg5, int* arg6) const; +  ///virtual void getInitData(int* length, const unsigned char** data) const; +  virtual void getInitData(int* length, const unsigned char** data); +  // This is only a kludge required to support old songs' midistates. Do not use in any new synth. +  virtual int oldMidiStateHeader(const unsigned char** data) const;    virtual bool playNote(int channel, int pitch, int velo); +  virtual void processMessages();    virtual void process(float** buffer, int offset, int n);    // GUI interface routines @@ -600,7 +610,7 @@ class DeicsOnze : public Mess {    virtual void setNativeGeometry(int, int, int, int);    DeicsOnze(); -  ~DeicsOnze(); +  virtual ~DeicsOnze();  }; diff --git a/muse2/synti/deicsonze/deicsonzegui.cpp b/muse2/synti/deicsonze/deicsonzegui.cpp index 3cae14f8..4cb78764 100644 --- a/muse2/synti/deicsonze/deicsonzegui.cpp +++ b/muse2/synti/deicsonze/deicsonzegui.cpp @@ -40,6 +40,7 @@  #include "muse/midictrl.h"  #include "config.h" +#include "common_defs.h"  #include "deicsonzegui.h"  #include "plugin.h" @@ -483,9 +484,11 @@ void DeicsOnzeGui::setChangeChannel(int c) {  // setPanic  //-----------------------------------------------------------  void DeicsOnzeGui::setPanic() { -  unsigned char* message = new unsigned char[1]; -  message[0]=SYSEX_PANIC; -  sendSysex(message, 1);  +  unsigned char message[3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_PANIC; +  sendSysex(message, 3);   }  //----------------------------------------------------------- @@ -517,10 +520,12 @@ void DeicsOnzeGui::setNbrVoices(int nv) {  // setMidiInCh  //----------------------------------------------------------  //void DeicsOnzeGui::setMidiInCh(int m) { -//  unsigned char* message = new unsigned char[2]; -//  message[0]=SYSEX_CHANNELNUM; -//  message[1]=(unsigned char)(m-1); -//  sendSysex(message, 2); +//  unsigned char message[4]; +//  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +//  message[1]=DEICSONZE_UNIQUE_ID; +//  message[2]=SYSEX_CHANNELNUM; +//  message[3]=(unsigned char)(m-1); +//  sendSysex(message, 4);  //}  //----------------------------------------------------------- @@ -625,57 +630,69 @@ void DeicsOnzeGui::loadConfiguration() {  // setQuality  //-----------------------------------------------------------  void DeicsOnzeGui::setQuality(const QString& q) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_QUALITY; -  message[1]=(unsigned char)(q=="High"? +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_QUALITY; +  message[3]=(unsigned char)(q=="High"?  			     high:(q=="Middle"?  				   middle:(q=="Low"?low:ultralow))); -  sendSysex(message, 2); +  sendSysex(message, 4);  }  //-----------------------------------------------------------  // setFilter  //-----------------------------------------------------------  void DeicsOnzeGui::setFilter(bool f) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_FILTER; -  message[1]=(unsigned char)f; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_FILTER; +  message[3]=(unsigned char)f; +  sendSysex(message, 4);  }    //-----------------------------------------------------------  // setFontSize  //-----------------------------------------------------------  void DeicsOnzeGui::setFontSize(int fs) {    applyFontSize(fs); -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_FONTSIZE; -  message[1]=(unsigned char)fs; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_FONTSIZE; +  message[3]=(unsigned char)fs; +  sendSysex(message, 4);  }  //-----------------------------------------------------------  // setSaveOnlyUsed  //-----------------------------------------------------------  void DeicsOnzeGui::setSaveOnlyUsed(bool sou) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_SAVEONLYUSED; -  message[1]=(unsigned char)sou; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_SAVEONLYUSED; +  message[3]=(unsigned char)sou; +  sendSysex(message, 4);    updateSaveOnlyUsed(sou);    }  void DeicsOnzeGui::setSaveOnlyUsedComp(bool souc) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_SAVEONLYUSED; -  message[1]=(unsigned char)!souc; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_SAVEONLYUSED; +  message[3]=(unsigned char)!souc; +  sendSysex(message, 4);    updateSaveOnlyUsed(!souc);  }  //-----------------------------------------------------------  // setSaveConfig  //-----------------------------------------------------------  void DeicsOnzeGui::setSaveConfig(bool ssc) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_SAVECONFIG; -  message[1]=(unsigned char)ssc; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_SAVECONFIG; +  message[3]=(unsigned char)ssc; +  sendSysex(message, 4);  }  //-----------------------------------------------------------  // setColor @@ -1524,6 +1541,7 @@ void DeicsOnzeGui::processEvent(const MidiPlayEvent& ev) {    else if (ev.type() == ME_SYSEX) {      //printf("ME_SYSEX\n");      unsigned char* data = ev.data(); +          int cmd = *data;      float f;      switch (cmd) { @@ -2489,16 +2507,20 @@ void DeicsOnzeGui::setProg(int pr) {//must be changed with SysEx  void DeicsOnzeGui::setIsInitSet(bool b) {    initSetPathLineEdit->setEnabled(b);    initSetBrowsePushButton->setEnabled(b); -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_ISINITSET; -  message[1]=(unsigned char)b; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_ISINITSET; +  message[3]=(unsigned char)b; +  sendSysex(message, 4);  }  void DeicsOnzeGui::setInitSetPath(const QString& s) { -  unsigned char* message = new unsigned char[1+MAXSTRLENGTHINITSETPATH]; -  message[0]=SYSEX_INITSETPATH; -  strncpy((char*)&message[1], s.toAscii().data(), MAXSTRLENGTHINITSETPATH); -  sendSysex(message, 1+MAXSTRLENGTHINITSETPATH); +  unsigned char message[3+MAXSTRLENGTHINITSETPATH]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_INITSETPATH; +  strncpy((char*)&message[3], s.toAscii().data(), MAXSTRLENGTHINITSETPATH); +  sendSysex(message, 3+MAXSTRLENGTHINITSETPATH);  }  void DeicsOnzeGui::setBrowseInitSetPath() {    QString fileName = @@ -2522,18 +2544,22 @@ void DeicsOnzeGui::setIsBackgroundPix(bool b) {    else setBackgroundColor(reinterpret_cast<const QColor &>(*bColor));    imagePathLineEdit->setEnabled(b);    imageBrowsePushButton->setEnabled(b); -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_ISBACKGROUNDPIX; -  message[1]=(unsigned char)b; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_ISBACKGROUNDPIX; +  message[3]=(unsigned char)b; +  sendSysex(message, 4);  }  void DeicsOnzeGui::setBackgroundPixPath(const QString& s) {    applyBackgroundPix(); -  unsigned char* message = new unsigned char[1+MAXSTRLENGTHBACKGROUNDPIXPATH]; -  message[0]=SYSEX_BACKGROUNDPIXPATH; -  strncpy((char*)&message[1], s.toAscii().data(), +  unsigned char message[3+MAXSTRLENGTHBACKGROUNDPIXPATH]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_BACKGROUNDPIXPATH; +  strncpy((char*)&message[3], s.toAscii().data(),  	  MAXSTRLENGTHBACKGROUNDPIXPATH); -  sendSysex(message, 1+MAXSTRLENGTHBACKGROUNDPIXPATH); +  sendSysex(message, 3+MAXSTRLENGTHBACKGROUNDPIXPATH);  }  void DeicsOnzeGui::setBrowseBackgroundPixPath() {    QString fileName = @@ -2553,87 +2579,111 @@ 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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUSACTIV; +  message[3]=(unsigned char)a; +  sendSysex(message, 4);    }  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); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUSRETURN; +  message[3]=(unsigned char)val; +  sendSysex(message, 4);  }  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*)); +    unsigned char message[3+sizeof(Plugin*)]; +    message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +    message[1]=DEICSONZE_UNIQUE_ID; +    message[2]=SYSEX_SELECTCHORUS; +    memcpy(&message[3], &pluginChorus, sizeof(Plugin*)); +    sendSysex(message, 3+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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS1PAN; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);    }  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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS1LFOFREQ; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);    }  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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS1DEPTH; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);    }  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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS2PAN; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);    }  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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS2LFOFREQ; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);    }  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);   +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_CHORUS2DEPTH; +  message[3]=(unsigned char)(i*(double)MAXCHORUSPARAM); +  sendSysex(message, 4);      }*/  void DeicsOnzeGui::setReverbActiv(bool a) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_REVERBACTIV; -  message[1]=(unsigned char)a; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_REVERBACTIV; +  message[3]=(unsigned char)a; +  sendSysex(message, 4);  }  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); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_REVERBRETURN; +  message[3]=(unsigned char)val; +  sendSysex(message, 4);  }  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*)); +    unsigned char message[3+sizeof(Plugin*)]; +    message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +    message[1]=DEICSONZE_UNIQUE_ID; +    message[2]=SYSEX_SELECTREVERB; +    memcpy(&message[3], &pluginReverb, sizeof(Plugin*)); +    sendSysex(message, 3+sizeof(Plugin*));    }  } @@ -2674,10 +2724,12 @@ void DeicsOnzeGui::setMasterVolKnob(double mv) {    setMasterVol((int)(mv*(double)MAXMASTERVOLUME));  }  void DeicsOnzeGui::setMasterVol(int mv) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_MASTERVOL; -  message[1]=(unsigned char)mv; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_MASTERVOL; +  message[3]=(unsigned char)mv; +  sendSysex(message, 4);  }  void DeicsOnzeGui::setFeedback(int f) {sendController(_currentChannel, CTRL_FEEDBACK, f);} @@ -3051,91 +3103,117 @@ void DeicsOnzeGui::setWaveForm4(int w) {  // set delay  //--------------------------------------------------------------  void DeicsOnzeGui::setActivDelay(bool a) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_DELAYACTIV; -  message[1]=(unsigned char)a; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYACTIV; +  message[3]=(unsigned char)a; +  sendSysex(message, 4);  }  void DeicsOnzeGui::setDelayReturn(int r) { -  unsigned char* message = new unsigned char[2]; -  message[0]=SYSEX_DELAYRETURN; -  message[1]=(unsigned char)r; -  sendSysex(message, 2); +  unsigned char message[4]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYRETURN; +  message[3]=(unsigned char)r; +  sendSysex(message, 4);  }  void DeicsOnzeGui::setChannelDelay(int d) {    sendController(_currentChannel, CTRL_VARIATION_SEND, (unsigned char)d);  }  //void DeicsOnzeGui::setDelayTime(int t) { -//  unsigned char* message = new unsigned char[2]; -//  message[0]=SYSEX_DELAYTIME; -//  message[1]=(unsigned char)t; -//  sendSysex(message, 2); +//  unsigned char message[4]; +//  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +//  message[1]=DEICSONZE_UNIQUE_ID; +//  message[2]=SYSEX_DELAYTIME; +//  message[3]=(unsigned char)t; +//  sendSysex(message, 4);  //  updateDelayTime(t);  //}  void DeicsOnzeGui::setDelayBPM(double t) {    //int it = (int)(((t - MINDELAYTIME) / (MAXDELAYTIME - MINDELAYTIME))*255.0); -  unsigned char* message = new unsigned char[sizeof(float)+1]; -  message[0]=SYSEX_DELAYBPM; +  unsigned char message[sizeof(float)+3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYBPM;    float f = (float)t; -  memcpy(&message[1], &f, sizeof(float)); -  message[1]=(unsigned char)f; -  sendSysex(message, sizeof(float)+1); +  ///memcpy(&message[1], &f, sizeof(float)); +  memcpy(&message[3], &f, sizeof(float)); +  ///message[1]=(unsigned char)f; +  message[3]=(unsigned char)f; +  sendSysex(message, sizeof(float)+3);    //updateDelayTime(it);  }   void DeicsOnzeGui::setDelayBeatRatio(double t) { -  unsigned char* message = new unsigned char[sizeof(float)+1]; -  message[0]=SYSEX_DELAYBEATRATIO; +  unsigned char message[sizeof(float)+3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYBEATRATIO;    float f = (float)t; -  memcpy(&message[1], &f, sizeof(float)); -  message[1]=(unsigned char)f; -  sendSysex(message, sizeof(float)+1); +  ///memcpy(&message[1], &f, sizeof(float)); +  memcpy(&message[3], &f, sizeof(float)); +  ///message[1]=(unsigned char)f; +  message[3]=(unsigned char)f; +  sendSysex(message, sizeof(float)+3);  }   //void DeicsOnzeGui::setDelayFeedback(int f) { -//  unsigned char* message = new unsigned char[2]; -//  message[0]=SYSEX_DELAYFEEDBACK; -//  message[1]=(unsigned char)f; -//  sendSysex(message, 2); +//  unsigned char message[4]; +//  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +//  message[1]=DEICSONZE_UNIQUE_ID; +//  message[2]=SYSEX_DELAYFEEDBACK; +//  message[3]=(unsigned char)f; +//  sendSysex(message, 4);  //  updateDelayFeedback(f);  //}  void DeicsOnzeGui::setDelayFeedback(double t) {    //int idf = (int)(f*128.0+128.0); -  unsigned char* message = new unsigned char[sizeof(float)+1]; -  message[0]=SYSEX_DELAYFEEDBACK; +  unsigned char message[sizeof(float)+3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYFEEDBACK;    float f = (float)t; -  memcpy(&message[1], &f, sizeof(float)); -  sendSysex(message, sizeof(float)+1); +  memcpy(&message[3], &f, sizeof(float)); +  sendSysex(message, sizeof(float)+3);    //updateDelayFeedback(idf);  }  //void DeicsOnzeGui::setDelayPanLFOFreq(int pf) { -//  unsigned char* message = new unsigned char[2]; -//  message[0]=SYSEX_DELAYLFOFREQ; -//  message[1]=(unsigned char)pf; -//  sendSysex(message, 2); +//  unsigned char message[4]; +//  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +//  message[1]=DEICSONZE_UNIQUE_ID; +//  message[2]=SYSEX_DELAYLFOFREQ; +//  message[3]=(unsigned char)pf; +//  sendSysex(message, 4);  //  updateDelayPanLFOFreq(pf);  //}  void DeicsOnzeGui::setDelayPanLFOFreq(double pf) {    //int ipf = (int)(((pf - MINFREQ) / (MAXFREQ - MINFREQ))*255.0); -  unsigned char* message = new unsigned char[sizeof(float)+1]; -  message[0]=SYSEX_DELAYLFOFREQ; +  unsigned char message[sizeof(float)+3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYLFOFREQ;    float f = (float)pf; -  memcpy(&message[1], &f, sizeof(float)); -  sendSysex(message, sizeof(float)+1); +  memcpy(&message[3], &f, sizeof(float)); +  sendSysex(message, sizeof(float)+3);    //updateDelayPanLFOFreq(ipf);  }  //void DeicsOnzeGui::setDelayPanLFODepth(int pd) { -//  unsigned char* message = new unsigned char[2]; -//  message[0]=SYSEX_DELAYLFODEPTH; -//  message[1]=(unsigned char)pd; -//  sendSysex(message, 2); +//  unsigned char message[4]; +//  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +//  message[1]=DEICSONZE_UNIQUE_ID; +//  message[2]=SYSEX_DELAYLFODEPTH; +//  message[3]=(unsigned char)pd; +//  sendSysex(message, 4);  //  updateDelayPanLFODepth(pd);  //}  void DeicsOnzeGui::setDelayPanLFODepth(double pd) {    //int ipd = (int)(pd*255.0); -  unsigned char* message = new unsigned char[sizeof(float)+1]; -  message[0]=SYSEX_DELAYLFODEPTH; +  unsigned char message[sizeof(float)+3]; +  message[0]=MUSE_SYNTH_SYSEX_MFG_ID; +  message[1]=DEICSONZE_UNIQUE_ID; +  message[2]=SYSEX_DELAYLFODEPTH;    float f = (float)pd; -  memcpy(&message[1], &f, sizeof(float)); -  sendSysex(message, sizeof(float)+1); +  memcpy(&message[3], &f, sizeof(float)); +  sendSysex(message, sizeof(float)+3);    //updateDelayPanLFODepth(ipd);  } @@ -4339,7 +4417,9 @@ void DeicsOnzeGui::updateBackgroundPixPath(QString s) {    imagePathLineEdit->blockSignals(false);  }  void DeicsOnzeGui::applyBackgroundPix() { +  #ifdef DEICSONZE_DEBUG    printf("applyBackgroundPix\n"); +  #endif    QPalette p = this->palette();    QPixmap pixmap = QPixmap(imagePathLineEdit->text());    p.setBrush((this)->backgroundRole(), QBrush(pixmap)); | 
