zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 69da34cca193e20f693a75aefc08cd01598bc97a
parent 139137f85ff5421383d3aea8f150c371c471685d
Author: paulnasca <paulnasca>
Date:   Sat,  7 Feb 2004 11:58:58 +0000

*** empty log message ***

Diffstat:
MChangeLog | 2+-
Msrc/Effects/EffectMgr.C | 7+++++++
Msrc/Effects/EffectMgr.h | 4+++-
Msrc/Misc/Master.C | 57++++++++++++++++++++++++++++++---------------------------
Msrc/Misc/Master.h | 2++
Msrc/Misc/Microtonal.C | 4++--
Msrc/Misc/Microtonal.h | 2+-
Msrc/Misc/Part.C | 107++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Msrc/Misc/Part.h | 8++++++--
Msrc/Misc/Util.h | 6------
Msrc/Params/ADnoteParameters.C | 66++++++++++++++++++++++++++++++++++++++++++++++++------------------
Msrc/Params/ADnoteParameters.h | 7+++----
Msrc/Params/Controller.C | 12++++++++----
Msrc/Params/Controller.h | 1+
Msrc/Params/EnvelopeParams.C | 42+++++++++++++++++++++++++++++++++++++++++-
Msrc/Params/EnvelopeParams.h | 14+++++++++++++-
Msrc/Params/FilterParams.C | 26+++++++++++++++++---------
Msrc/Params/FilterParams.h | 5+++++
Msrc/Params/LFOParams.C | 28++++++++++++++++++++--------
Msrc/Params/LFOParams.h | 12+++++++++++-
Msrc/Params/SUBnoteParameters.C | 36+++++++++++++++++++++++++-----------
Msrc/Params/SUBnoteParameters.h | 2++
Msrc/Synth/OscilGen.C | 43++++++++++++++++++++++++++++---------------
Msrc/Synth/OscilGen.h | 2+-
Msrc/Synth/Resonance.C | 12++++++++----
Msrc/Synth/Resonance.h | 2+-
Msrc/UI/BankUI.fl | 3+--
Msrc/UI/MasterUI.fl | 25+++++++++++--------------
28 files changed, 361 insertions(+), 176 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -525,5 +525,5 @@ 05 Feb 2004 - Se salveaza toti parametrii in XML 06 Feb 2004 - Adaugat salvarea de instrument in XML - Adaugat export la bank intr-un director XML si decis ca bank-ul sa fie un director cu mai multe fisiere xml de forma XXXX-nume.xml sau XXXX-nume.xml.gz - +07 Feb 2004 - adaugat functii de initializare si renuntat la masterdefaultbuf si instrumentdefaultbuf (adica salvarea la inceput si incarcarea bufferelor cu instrumentele prestabilite) diff --git a/src/Effects/EffectMgr.C b/src/Effects/EffectMgr.C @@ -35,14 +35,21 @@ EffectMgr::EffectMgr(int insertion_,pthread_mutex_t *mutex_){ efxoutl[i]=0.0; efxoutr[i]=0.0; }; + + defaults(); }; + EffectMgr::~EffectMgr(){ if (efx!=NULL) delete (efx); delete (efxoutl); delete (efxoutr); }; +void EffectMgr::defaults(){ + changeeffect(0); +}; + /* * Change the effect */ diff --git a/src/Effects/EffectMgr.h b/src/Effects/EffectMgr.h @@ -41,9 +41,11 @@ class EffectMgr{ public: EffectMgr(int insertion_,pthread_mutex_t *mutex_); ~EffectMgr(); + void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); + void add2XML(XMLwrapper *xml); + void defaults(); void out(REALTYPE *smpsl,REALTYPE *smpsr); diff --git a/src/Misc/Master.C b/src/Misc/Master.C @@ -28,7 +28,6 @@ #include <sys/types.h> Master::Master(){ - int npart,nefx; swaplr=0; pthread_mutex_init(&mutex,NULL); @@ -43,7 +42,6 @@ Master::Master(){ ksoundbuffersamplelow=0.0; oldsamplel=0.0;oldsampler=0.0; shutup=0; - vuresetpeaks(); for (int npart=0;npart<NUM_MIDI_PARTS;npart++) { vuoutpeakpart[npart]=1e-9; fakepeakpart[npart]=0; @@ -54,26 +52,45 @@ Master::Master(){ audiooutr[i]=0.0; }; - for (npart=0;npart<NUM_MIDI_PARTS;npart++){ + for (int npart=0;npart<NUM_MIDI_PARTS;npart++) part[npart]=new Part(&microtonal,fft,&mutex); - part[npart]->Prcvchn=npart%NUM_MIDI_CHANNELS; + + + + //Insertion Effects init + for (int nefx=0;nefx<NUM_INS_EFX;nefx++) + insefx[nefx]=new EffectMgr(1,&mutex); + + //System Effects init + for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) { + sysefx[nefx]=new EffectMgr(0,&mutex); }; - partonoff(0,1);//enable the first part + + defaults(); +}; + +void Master::defaults(){ volume=1.0; setPvolume(80); setPkeyshift(64); + + for (int npart=0;npart<NUM_MIDI_PARTS;npart++){ + part[npart]->defaults(); + part[npart]->Prcvchn=npart%NUM_MIDI_CHANNELS; + }; - //Insertion Effects init - for (nefx=0;nefx<NUM_INS_EFX;nefx++) { - insefx[nefx]=new EffectMgr(1,&mutex); + partonoff(0,1);//enable the first part + + for (int nefx=0;nefx<NUM_INS_EFX;nefx++) { + insefx[nefx]->defaults(); Pinsparts[nefx]=-1; }; - + //System Effects init - for (nefx=0;nefx<NUM_SYS_EFX;nefx++) { - sysefx[nefx]=new EffectMgr(0,&mutex); - for (npart=0;npart<NUM_MIDI_PARTS;npart++){ + for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) { + sysefx[nefx]->defaults(); + for (int npart=0;npart<NUM_MIDI_PARTS;npart++){ if (nefx==0) setPsysefxvol(npart,nefx,64); else setPsysefxvol(npart,nefx,0); }; @@ -82,19 +99,6 @@ Master::Master(){ }; sysefx[0]->changeeffect(1); - - - //save all parameters to "masterdefaults" Buffer (I need later when I clear all parameters) - //this has to be after the master initialisation - masterdefaultsbuf.resetbuffer(); - masterdefaultsbuf.changeminimal(0);//save all parameters, even disabled - masterdefaultsbuf.changemode(1); - this->saveloadbuf(&masterdefaultsbuf); - //save all instrument patameters - instrumentdefaultsbuf.resetbuffer(); - instrumentdefaultsbuf.changeminimal(0); - instrumentdefaultsbuf.changemode(1); - part[0]->saveloadbuf(&instrumentdefaultsbuf,1); }; /* @@ -698,8 +702,7 @@ void Master::exportbankasxmldirectory(const char *directory){ mkdir(directory,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); for (int slot=0;slot<128;slot++){ - instrumentdefaultsbuf.changemode(0); - tmppart->saveloadbuf(&instrumentdefaultsbuf,1); + tmppart->defaults(); bank.loadfromslot(slot,&slbuf); slbuf.changemode(0); tmppart->saveloadbuf(&slbuf,1); diff --git a/src/Misc/Master.h b/src/Misc/Master.h @@ -51,6 +51,8 @@ class Master{ //this adds the parameters to the XML data void add2XML(XMLwrapper *xml); + void defaults(); + //Midi IN void NoteOn(unsigned char chan,unsigned char note,unsigned char velocity); diff --git a/src/Misc/Microtonal.C b/src/Misc/Microtonal.C @@ -29,10 +29,10 @@ Microtonal::Microtonal(){ Pname=new unsigned char[MICROTONAL_MAX_NAME_LEN]; Pcomment=new unsigned char[MICROTONAL_MAX_NAME_LEN]; - reset(); + defaults(); }; -void Microtonal::reset(){ +void Microtonal::defaults(){ Pinvertupdown=0; Pinvertupdowncenter=60; octavesize=12; diff --git a/src/Misc/Microtonal.h b/src/Misc/Microtonal.h @@ -36,7 +36,7 @@ class Microtonal{ public: Microtonal(); ~Microtonal(); - void reset(); + void defaults(); REALTYPE getnotefreq(int note,int keyshift); diff --git a/src/Misc/Part.C b/src/Misc/Part.C @@ -36,52 +36,27 @@ Part::Part(Microtonal *microtonal_,FFTwrapper *fft_, pthread_mutex_t *mutex_){ tmpoutr=new REALTYPE [SOUND_BUFFER_SIZE]; for (int n=0;n<NUM_KIT_ITEMS;n++){ - kit[n].Penabled=0;kit[n].Pmuted=0; - kit[n].Pminkey=0;kit[n].Pmaxkey=127; - kit[n].Padenabled=0;kit[n].Psubenabled=0; kit[n].Pname=new unsigned char [PART_MAX_NAME_LEN]; - for (int i=0;i<PART_MAX_NAME_LEN;i++) kit[n].Pname[i]='\0'; - kit[n].Psendtoparteffect=0; kit[n].adpars=NULL;kit[n].subpars=NULL; }; - kit[0].Penabled=1; + kit[0].adpars=new ADnoteParameters(fft); kit[0].subpars=new SUBnoteParameters(); - ADPartParameters=kit[0].adpars; - SUBPartParameters=kit[0].subpars; +// ADPartParameters=kit[0].adpars; +// SUBPartParameters=kit[0].subpars; //Part's Insertion Effects init - for (int nefx=0;nefx<NUM_PART_EFX;nefx++) { + for (int nefx=0;nefx<NUM_PART_EFX;nefx++) partefx[nefx]=new EffectMgr(1,mutex); - Pefxroute[nefx]=0;//route to next effect - }; for (int n=0;n<NUM_PART_EFX+1;n++) { partfxinputl[n]=new REALTYPE [SOUND_BUFFER_SIZE]; partfxinputr[n]=new REALTYPE [SOUND_BUFFER_SIZE]; }; - //parameters setup - Penabled=0; - Pminkey=0; - Pmaxkey=127; - Pnoteon=1; - Ppolymode=1; - setPvolume(96); - Pkeyshift=64; - Prcvchn=0; - setPpanning(64); - Pvelsns=64; - Pveloffs=64; - Pkeylimit=15; - Pkitmode=0; - Pdrummode=0; killallnotes=0; oldfreq=-1.0; - PADnoteenabled=1; - PSUBnoteenabled=0; - int i,j; for (i=0;i<POLIPHONY;i++){ partnote[i].status=KEY_OFF; @@ -94,18 +69,66 @@ Part::Part(Microtonal *microtonal_,FFTwrapper *fft_, pthread_mutex_t *mutex_){ partnote[i].time=0; }; cleanup(); + Pname=new unsigned char [PART_MAX_NAME_LEN]; - for (i=0;i<PART_MAX_NAME_LEN;i++) Pname[i]='\0'; + + oldvolumel=oldvolumer=0.5; + lastnote=-1;disablekitloading=0; + + + defaults(); +}; + +void Part::defaults(){ + Penabled=0; + Pminkey=0; + Pmaxkey=127; + Pnoteon=1; + Ppolymode=1; + setPvolume(96); + Pkeyshift=64; + Prcvchn=0; + setPpanning(64); + Pvelsns=64; + Pveloffs=64; + Pkeylimit=15; + defaultsinstrument(); +}; + +void Part::defaultsinstrument(){ + memset(Pname,0,PART_MAX_NAME_LEN); info.Ptype=0; memset(info.Pauthor,0,MAX_INFO_TEXT_SIZE+1); memset(info.Pcomments,0,MAX_INFO_TEXT_SIZE+1); + + PADnoteenabled=1; + PSUBnoteenabled=0; - oldvolumel=oldvolumer=0.5; - lastnote=-1;disablekitloading=0; + Pkitmode=0; + Pdrummode=0; + + for (int n=0;n<NUM_KIT_ITEMS;n++){ + kit[n].Penabled=0;kit[n].Pmuted=0; + kit[n].Pminkey=0;kit[n].Pmaxkey=127; + kit[n].Padenabled=0;kit[n].Psubenabled=0; + memset(kit[n].Pname,0,PART_MAX_NAME_LEN); + kit[n].Psendtoparteffect=0; + setkititemstatus(n,0); + }; + kit[0].Penabled=1; + kit[0].Padenabled=1; + setkititemstatus(0,1); + + for (int nefx=0;nefx<NUM_PART_EFX;nefx++) { + partefx[nefx]->defaults(); + Pefxroute[nefx]=0;//route to next effect + }; + }; + /* * Cleanup the part */ @@ -212,8 +235,8 @@ void Part::NoteOn(unsigned char note,unsigned char velocity,int masterkeyshift){ partnote[pos].itemsplaying=0; if (Pkitmode==0){//init the notes for the "normal mode" partnote[pos].kititem[0].sendtoparteffect=0; - if (PADnoteenabled!=0) partnote[pos].kititem[0].adnote=new ADnote(ADPartParameters,&ctl,notebasefreq,vel,portamento,note); - if (PSUBnoteenabled!=0) partnote[pos].kititem[0].subnote=new SUBnote(SUBPartParameters,&ctl,notebasefreq,vel,portamento,note); + if (PADnoteenabled!=0) partnote[pos].kititem[0].adnote=new ADnote(kit[0].adpars,&ctl,notebasefreq,vel,portamento,note); + if (PSUBnoteenabled!=0) partnote[pos].kititem[0].subnote=new SUBnote(kit[0].subpars,&ctl,notebasefreq,vel,portamento,note); if ((PADnoteenabled!=0)||(PSUBnoteenabled!=0)) partnote[pos].itemsplaying++; } else {//init the notes for the "kit mode" for (int item=0;item<NUM_KIT_ITEMS;item++){ @@ -304,10 +327,10 @@ void Part::SetController(unsigned int type,int par){ setPvolume(Pvolume);//update the volume setPpanning(Ppanning);//update the panning - ADPartParameters->GlobalPar.Reson-> + kit[0].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_center,1.0); - ADPartParameters->GlobalPar.Reson-> + kit[0].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_bandwidth,1.0); //more update to add here if I add controllers break; @@ -315,12 +338,12 @@ void Part::SetController(unsigned int type,int par){ break; case C_resonance_center: ctl.setresonancecenter(par); - ADPartParameters->GlobalPar.Reson-> + kit[0].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_center,ctl.resonancecenter.relcenter); break; case C_resonance_bandwidth: ctl.setresonancebw(par); - ADPartParameters->GlobalPar.Reson-> + kit[0].adpars->GlobalPar.Reson-> sendcontroller(C_resonance_bandwidth,ctl.resonancebandwidth.relbw); break; }; @@ -640,7 +663,7 @@ void Part::saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0){ break; case 0xA0: if (buf->getmode()!=0){//saving if ((buf->getminimal()!=0)&&(kit[item].Padenabled==0)) break; - if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as ADPartParameters) + if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as kit[0].adpars) if (kit[item].adpars==NULL) break; buf->rwbyte(&npar); }; @@ -648,7 +671,7 @@ void Part::saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0){ break; case 0xA1: if (buf->getmode()!=0){//saving if ((buf->getminimal()!=0)&&(kit[item].Psubenabled==0)) break; - if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as SUBPartParameters) + if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as kit[0].subpars) if (kit[item].subpars==NULL) break; buf->rwbyte(&npar); }; @@ -815,12 +838,12 @@ void Part::saveloadbuf(Buffer *buf,int instrumentonly){ case 0xC0: if ((buf->getminimal()!=0) && (buf->getmode()!=0) && (PADnoteenabled==0)) break; if (buf->getmode()!=0) buf->rwbyte(&npar); - ADPartParameters->saveloadbuf(buf); + kit[0].adpars->saveloadbuf(buf); break; case 0xC1: if ((buf->getminimal()!=0) && (buf->getmode()!=0) && (PSUBnoteenabled==0)) break; if (buf->getmode()!=0) buf->rwbyte(&npar); - SUBPartParameters->saveloadbuf(buf); + kit[0].adpars->saveloadbuf(buf); break; case 0xD0: if (buf->getmode()!=0) { if (instrumentonly!=2){ diff --git a/src/Misc/Part.h b/src/Misc/Part.h @@ -63,14 +63,18 @@ class Part{ void add2XML(XMLwrapper *xml); void add2XMLinstrument(XMLwrapper *xml); + + void defaults(); + void defaultsinstrument(); + void saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0); void swapcopyitem(int item1,int item2,int mode); void cleanup(); - ADnoteParameters *ADPartParameters; - SUBnoteParameters *SUBPartParameters; +// ADnoteParameters *ADPartParameters; +// SUBnoteParameters *SUBPartParameters; //the part's kit struct { diff --git a/src/Misc/Util.h b/src/Misc/Util.h @@ -37,12 +37,6 @@ extern REALTYPE VelF(REALTYPE velocity,unsigned char scaling); //Buffer used for Save/Load extern Buffer slbuf; -//this is used to store all parameters at start of program and reload when I need to clear all data (eg. before loading master parameters) -extern Buffer masterdefaultsbuf; - -//this is used to store the default instrument settings (necessary when the instrument is cleared) -extern Buffer instrumentdefaultsbuf; - //the buffer used as clipboard extern Buffer clipboardbuf; diff --git a/src/Params/ADnoteParameters.C b/src/Params/ADnoteParameters.C @@ -27,25 +27,43 @@ #include "ADnoteParameters.h" ADnoteParameters::ADnoteParameters(FFTwrapper *fft_){ - int nvoice; fft=fft_; + + GlobalPar.FreqEnvelope=new EnvelopeParams(0,0); + GlobalPar.FreqEnvelope->ASRinit(64,50,64,60); + GlobalPar.FreqLfo=new LFOParams(70,0,64,0,0,0,0,0); + + GlobalPar.AmpEnvelope=new EnvelopeParams(64,1); + GlobalPar.AmpEnvelope->ADSRinit_dB(0,40,127,25); + GlobalPar.AmpLfo=new LFOParams(80,0,64,0,0,0,0,1); + + GlobalPar.GlobalFilter=new FilterParams(2,94,40); + GlobalPar.FilterEnvelope=new EnvelopeParams(0,1); + GlobalPar.FilterEnvelope->ADSRinit_filter(64,40,64,70,60,64); + GlobalPar.FilterLfo=new LFOParams(80,0,64,0,0,0,0,2); + GlobalPar.Reson=new Resonance(); + + for (int nvoice=0;nvoice<NUM_VOICES;nvoice++) EnableVoice(nvoice); + + defaults(); +}; + +void ADnoteParameters::defaults(){ //Default Parameters /* Frequency Global Parameters */ GlobalPar.PStereo=1;//stereo GlobalPar.PDetune=8192;//zero GlobalPar.PCoarseDetune=0; GlobalPar.PDetuneType=1; - GlobalPar.FreqEnvelope=new EnvelopeParams(0,0); - GlobalPar.FreqEnvelope->ASRinit(64,50,64,60); - GlobalPar.FreqLfo=new LFOParams(70,0,64,0,0,0,0,0); + GlobalPar.FreqEnvelope->defaults(); + GlobalPar.FreqLfo->defaults(); /* Amplitude Global Parameters */ GlobalPar.PVolume=90; GlobalPar.PPanning=64;//center GlobalPar.PAmpVelocityScaleFunction=64; - GlobalPar.AmpEnvelope=new EnvelopeParams(64,1); - GlobalPar.AmpEnvelope->ADSRinit_dB(0,40,127,25); - GlobalPar.AmpLfo=new LFOParams(80,0,64,0,0,0,0,1); + GlobalPar.AmpEnvelope->defaults(); + GlobalPar.AmpLfo->defaults(); GlobalPar.PPunchStrength=0; GlobalPar.PPunchTime=60; GlobalPar.PPunchStretch=64; @@ -54,13 +72,12 @@ ADnoteParameters::ADnoteParameters(FFTwrapper *fft_){ /* Filter Global Parameters*/ GlobalPar.PFilterVelocityScale=64; GlobalPar.PFilterVelocityScaleFunction=64; - GlobalPar.GlobalFilter=new FilterParams(2,94,40); - GlobalPar.FilterEnvelope=new EnvelopeParams(0,1); - GlobalPar.FilterEnvelope->ADSRinit_filter(64,40,64,70,60,64); - GlobalPar.FilterLfo=new LFOParams(80,0,64,0,0,0,0,2); - GlobalPar.Reson=new Resonance(); + GlobalPar.GlobalFilter->defaults(); + GlobalPar.FilterEnvelope->defaults(); + GlobalPar.FilterLfo->defaults(); + GlobalPar.Reson->defaults(); - for (nvoice=0;nvoice<NUM_VOICES;nvoice++){ + for (int nvoice=0;nvoice<NUM_VOICES;nvoice++){ VoicePar[nvoice].Enabled=0; VoicePar[nvoice].Type=0; VoicePar[nvoice].Pfixedfreq=0; @@ -88,7 +105,7 @@ ADnoteParameters::ADnoteParameters(FFTwrapper *fft_){ VoicePar[nvoice].PFilterLfoEnabled=0; VoicePar[nvoice].PFMEnabled=0; - //I use the internal oscillator intern (-1) + //I use the internal oscillator (-1) VoicePar[nvoice].PFMVoice=-1; VoicePar[nvoice].PFMVolume=90; @@ -99,20 +116,33 @@ ADnoteParameters::ADnoteParameters(FFTwrapper *fft_){ VoicePar[nvoice].PFMFreqEnvelopeEnabled=0; VoicePar[nvoice].PFMAmpEnvelopeEnabled=0; VoicePar[nvoice].PFMVelocityScaleFunction=64; - - EnableVoice(nvoice); + + VoicePar[nvoice].OscilSmp->defaults(); + VoicePar[nvoice].FMSmp->defaults(); + + VoicePar[nvoice].AmpEnvelope->defaults(); + VoicePar[nvoice].AmpLfo->defaults(); + + VoicePar[nvoice].FreqEnvelope->defaults(); + VoicePar[nvoice].FreqLfo->defaults(); + + VoicePar[nvoice].VoiceFilter->defaults(); + VoicePar[nvoice].FilterEnvelope->defaults(); + VoicePar[nvoice].FilterLfo->defaults(); + + VoicePar[nvoice].FMFreqEnvelope->defaults(); + VoicePar[nvoice].FMAmpEnvelope->defaults(); }; VoicePar[0].Enabled=1; }; + /* * Init the voice parameters */ void ADnoteParameters::EnableVoice(int nvoice){ VoicePar[nvoice].OscilSmp=new OscilGen(fft,GlobalPar.Reson); VoicePar[nvoice].FMSmp=new OscilGen(fft,NULL); - VoicePar[nvoice].OscilSmp->prepare(); - VoicePar[nvoice].FMSmp->prepare(); VoicePar[nvoice].AmpEnvelope=new EnvelopeParams(64,1); VoicePar[nvoice].AmpEnvelope->ADSRinit_dB(0,100,127,100); diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h @@ -258,19 +258,18 @@ class ADnoteParameters{ ADnoteVoiceParam VoicePar[NUM_VOICES]; void add2XML(XMLwrapper *xml); - void add2XMLvoice(XMLwrapper *xml,int nvoice); + void defaults(); void saveloadbuf(Buffer *buf); void saveloadbufvoice(Buffer *buf,unsigned char nvoice); void copypastevoice(int n,int what); private: - - - void EnableVoice(int nvoice); void KillVoice(int nvoice); FFTwrapper *fft; + + void add2XMLvoice(XMLwrapper *xml,int nvoice); }; #endif diff --git a/src/Params/Controller.C b/src/Params/Controller.C @@ -25,6 +25,14 @@ #include <stdio.h> Controller::Controller(){ + defaults(); + resetall(); +}; + +Controller::~Controller(){ +}; + +void Controller::defaults(){ setpitchwheelbendrange(200);//2 halftones expression.receive=1; panning.depth=64; @@ -52,10 +60,6 @@ Controller::Controller(){ initportamento(440.0,440.0); setportamento(0); - resetall(); -}; - -Controller::~Controller(){ }; void Controller::resetall(){ diff --git a/src/Params/Controller.h b/src/Params/Controller.h @@ -36,6 +36,7 @@ class Controller{ void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); + void defaults(); //Controllers functions void setpitchwheel(int value); diff --git a/src/Params/EnvelopeParams.C b/src/Params/EnvelopeParams.C @@ -43,6 +43,8 @@ EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedr Pforcedrelease=Pforcedrelease_; Pfreemode=1; Plinearenvelope=0; + + store2defaults(); }; EnvelopeParams::~EnvelopeParams(){ @@ -63,6 +65,8 @@ void EnvelopeParams::ADSRinit(char A_dt,char D_dt,char S_val,char R_dt){ PA_dt=A_dt;PD_dt=D_dt;PS_val=S_val;PR_dt=R_dt; Pfreemode=0; converttofree(); + + store2defaults(); }; void EnvelopeParams::ADSRinit_dB(char A_dt,char D_dt,char S_val,char R_dt){ @@ -70,6 +74,8 @@ void EnvelopeParams::ADSRinit_dB(char A_dt,char D_dt,char S_val,char R_dt){ PA_dt=A_dt;PD_dt=D_dt;PS_val=S_val;PR_dt=R_dt; Pfreemode=0; converttofree(); + + store2defaults(); }; void EnvelopeParams::ASRinit(char A_val,char A_dt,char R_val,char R_dt){ @@ -78,6 +84,7 @@ void EnvelopeParams::ASRinit(char A_val,char A_dt,char R_val,char R_dt){ Pfreemode=0; converttofree(); + store2defaults(); }; void EnvelopeParams::ADSRinit_filter(char A_val,char A_dt,char D_val,char D_dt,char R_dt,char R_val){ @@ -85,6 +92,7 @@ void EnvelopeParams::ADSRinit_filter(char A_val,char A_dt,char D_val,char D_dt,c PA_val=A_val;PA_dt=A_dt;PD_val=D_val;PD_dt=D_dt;PR_dt=R_dt;PR_val=R_val; Pfreemode=0; converttofree(); + store2defaults(); }; void EnvelopeParams::ASRinit_bw(char A_val,char A_dt,char R_val,char R_dt){ @@ -92,7 +100,7 @@ void EnvelopeParams::ASRinit_bw(char A_val,char A_dt,char R_val,char R_dt){ PA_val=A_val;PA_dt=A_dt;PR_val=R_val;PR_dt=R_dt; Pfreemode=0; converttofree(); - + store2defaults(); }; /* @@ -127,6 +135,8 @@ void EnvelopeParams::converttofree(){ }; + + /* * Save or load the parameters to/from the buffer */ @@ -230,3 +240,33 @@ void EnvelopeParams::add2XML(XMLwrapper *xml){ +void EnvelopeParams::defaults(){ + Penvstretch=Denvstretch; + Pforcedrelease=Dforcedrelease; + Plinearenvelope=Dlinearenvelope; + PA_dt=DA_dt; + PD_dt=DD_dt; + PR_dt=DR_dt; + PA_val=DA_val; + PD_val=DD_val; + PS_val=DS_val; + PR_val=DR_val; + Pfreemode=0; + converttofree(); +}; + +void EnvelopeParams::store2defaults(){ + Denvstretch=Penvstretch; + Dforcedrelease=Pforcedrelease; + Dlinearenvelope=Plinearenvelope; + DA_dt=PA_dt; + DD_dt=PD_dt; + DR_dt=PR_dt; + DA_val=PA_val; + DD_val=PD_val; + DS_val=PS_val; + DR_val=PR_val; +}; + + + diff --git a/src/Params/EnvelopeParams.h b/src/Params/EnvelopeParams.h @@ -43,7 +43,7 @@ class EnvelopeParams{ void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); - + void defaults(); REALTYPE getdt(char i); @@ -60,6 +60,8 @@ class EnvelopeParams{ unsigned char PA_dt,PD_dt,PR_dt, PA_val,PD_val,PS_val,PR_val; + + int Envmode;// 1 for ADSR parameters (linear amplitude) // 2 for ADSR_dB parameters (dB amplitude) // 3 for ASR parameters (frequency LFO) @@ -67,6 +69,16 @@ class EnvelopeParams{ // 5 for ASR_bw parameters (bandwidth parameters) private: + void store2defaults(); + + /* Default parameters */ + unsigned char Denvstretch; + unsigned char Dforcedrelease; + unsigned char Dlinearenvelope; + unsigned char DA_dt,DD_dt,DR_dt, + DA_val,DD_val,DS_val,DR_val; + + }; diff --git a/src/Params/FilterParams.C b/src/Params/FilterParams.C @@ -26,9 +26,22 @@ #include "FilterParams.h" FilterParams::FilterParams(unsigned char Ptype_,unsigned char Pfreq_,unsigned char Pq_){ - Ptype=Ptype_; - Pfreq=Pfreq_; - Pq=Pq_; + Dtype=Ptype_; + Dfreq=Pfreq_; + Dq=Pq_; + + defaults(); +}; + +FilterParams::~FilterParams(){ +}; + + +void FilterParams::defaults(){ + Ptype=Dtype; + Pfreq=Dfreq; + Pq=Dq; + Pstages=0; Pfreqtrack=64; Pgain=64; @@ -45,8 +58,7 @@ FilterParams::FilterParams(unsigned char Ptype_,unsigned char Pfreq_,unsigned c }; Psequencesize=3; - for (int i=0;i<FF_MAX_SEQUENCE;i++) - Psequence[i].nvowel=i%FF_MAX_VOWELS; + for (int i=0;i<FF_MAX_SEQUENCE;i++) Psequence[i].nvowel=i%FF_MAX_VOWELS; Psequencestretch=40; Psequencereversed=0; @@ -55,10 +67,6 @@ FilterParams::FilterParams(unsigned char Ptype_,unsigned char Pfreq_,unsigned c Pvowelclearness=64; }; -FilterParams::~FilterParams(){ -}; - - /* * Parameter control */ diff --git a/src/Params/FilterParams.h b/src/Params/FilterParams.h @@ -34,6 +34,7 @@ class FilterParams{ void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); + void defaults(); REALTYPE getfreq(); @@ -81,6 +82,10 @@ class FilterParams{ REALTYPE getformantq(unsigned char q); private: + //stored default parameters + unsigned char Dtype; + unsigned char Dfreq; + unsigned char Dq; }; #endif diff --git a/src/Params/LFOParams.C b/src/Params/LFOParams.C @@ -28,21 +28,33 @@ int LFOParams::time; LFOParams::LFOParams(char Pfreq_,char Pintensity_,char Pstartphase_, char PLFOtype_,char Prandomness_, char Pdelay_,char Pcontinous_,char fel_){ - Pfreq=Pfreq_; - Pintensity=Pintensity_; - Pstartphase=Pstartphase_; - PLFOtype=PLFOtype_; - Prandomness=Prandomness_; - Pdelay=Pdelay_; - Pcontinous=Pcontinous_; - Pfreqrand=0; + Dfreq=Pfreq_; + Dintensity=Pintensity_; + Dstartphase=Pstartphase_; + DLFOtype=PLFOtype_; + Drandomness=Prandomness_; + Ddelay=Pdelay_; + Dcontinous=Pcontinous_; fel=fel_; time=0; + + defaults(); }; LFOParams::~LFOParams(){ }; +void LFOParams::defaults(){ + Pfreq=Dfreq; + Pintensity=Dintensity; + Pstartphase=Dstartphase; + PLFOtype=DLFOtype; + Prandomness=Drandomness; + Pdelay=Ddelay; + Pcontinous=Dcontinous; + Pfreqrand=0; +}; + /* * Save or load the parameters to/from the buffer */ diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h @@ -36,6 +36,8 @@ class LFOParams{ void add2XML(XMLwrapper *xml); + void defaults();//reset parameters to the default parameters + /* Parametrii MIDI */ unsigned char Pfreq; // frequency unsigned char Pintensity; // intensity @@ -46,10 +48,18 @@ class LFOParams{ unsigned char Pdelay; // delay (0=off) unsigned char Pcontinous; // 1 if LFO is continous - int fel;//what kind is the LFO (0 - frequency, 1 - amplitude, 2 - filter) static int time;//is used by Pcontinous parameter private: + /* Default parameters */ + unsigned char Dfreq; + unsigned char Dintensity; + unsigned char Dstartphase; + unsigned char DLFOtype; + unsigned char Drandomness; + unsigned char Ddelay; + unsigned char Dcontinous; + }; diff --git a/src/Params/SUBnoteParameters.C b/src/Params/SUBnoteParameters.C @@ -25,6 +25,22 @@ #include <stdio.h> SUBnoteParameters::SUBnoteParameters(){ + AmpEnvelope=new EnvelopeParams(64,1); + AmpEnvelope->ADSRinit_dB(0,40,127,25); + FreqEnvelope=new EnvelopeParams(64,0); + FreqEnvelope->ASRinit(30,50,64,60); + BandWidthEnvelope=new EnvelopeParams(64,0); + BandWidthEnvelope->ASRinit_bw(100,70,64,60); + + GlobalFilter=new FilterParams(2,80,40); + GlobalFilterEnvelope=new EnvelopeParams(0,1); + GlobalFilterEnvelope->ADSRinit_filter(64,40,64,70,60,64); + + defaults(); +}; + + +void SUBnoteParameters::defaults(){ PVolume=96; PPanning=64; PAmpVelocityScaleFunction=90; @@ -50,21 +66,20 @@ SUBnoteParameters::SUBnoteParameters(){ }; Phmag[0]=127; - AmpEnvelope=new EnvelopeParams(64,1); - AmpEnvelope->ADSRinit_dB(0,40,127,25); - FreqEnvelope=new EnvelopeParams(64,0); - FreqEnvelope->ASRinit(30,50,64,60); - BandWidthEnvelope=new EnvelopeParams(64,0); - BandWidthEnvelope->ASRinit_bw(100,70,64,60); - PGlobalFilterEnabled=0; - GlobalFilter=new FilterParams(2,80,40); PGlobalFilterVelocityScale=64; PGlobalFilterVelocityScaleFunction=64; - GlobalFilterEnvelope=new EnvelopeParams(0,1); - GlobalFilterEnvelope->ADSRinit_filter(64,40,64,70,60,64); + + AmpEnvelope->defaults(); + FreqEnvelope->defaults(); + BandWidthEnvelope->defaults(); + GlobalFilter->defaults(); + GlobalFilterEnvelope->defaults(); + }; + + SUBnoteParameters::~SUBnoteParameters(){ delete (AmpEnvelope); delete (FreqEnvelope); @@ -264,4 +279,3 @@ void SUBnoteParameters::add2XML(XMLwrapper *xml){ - diff --git a/src/Params/SUBnoteParameters.h b/src/Params/SUBnoteParameters.h @@ -35,7 +35,9 @@ class SUBnoteParameters{ ~SUBnoteParameters(); void saveloadbuf(Buffer *buf); + void add2XML(XMLwrapper *xml); + void defaults(); //Parameters //AMPLITUDE PARAMETRERS diff --git a/src/Synth/OscilGen.C b/src/Synth/OscilGen.C @@ -29,14 +29,27 @@ #include "../Misc/Util.h" OscilGen::OscilGen(FFTwrapper *fft_,Resonance *res_){ - int i; - fft=fft_; - oscilFFTfreqs=new REALTYPE[OSCIL_SIZE]; - res=res_; + oscilFFTfreqs=new REALTYPE[OSCIL_SIZE]; + + basefuncFFTfreqsQ=NULL; + basefuncFFTfreqs=NULL; + outoscilFFTfreqs=NULL; + + defaults(); +}; + +OscilGen::~OscilGen(){ + if (basefuncFFTfreqs!=NULL) delete [] basefuncFFTfreqs; + if (basefuncFFTfreqsQ!=NULL) delete [] basefuncFFTfreqsQ; + delete [] oscilFFTfreqs; +}; + + +void OscilGen::defaults(){ oldbasefunc=0;oldbasepar=64;oldhmagtype=0;oldwaveshapingfunction=0;oldwaveshaping=64,oldnormalizemethod=0; - for (i=0;i<MAX_AD_HARMONICS;i++){ + for (int i=0;i<MAX_AD_HARMONICS;i++){ hmag[i]=0.0; hphase[i]=0.0; Phmag[i]=64; @@ -60,19 +73,19 @@ OscilGen::OscilGen(FFTwrapper *fft_,Resonance *res_){ Pamprandpower=64; Pamprandtype=0; - basefuncFFTfreqsQ=NULL; - basefuncFFTfreqs=NULL; - outoscilFFTfreqs=NULL; + if (basefuncFFTfreqsQ!=NULL) { + delete(basefuncFFTfreqsQ); + basefuncFFTfreqsQ=NULL; + }; + if (basefuncFFTfreqs!=NULL){ + delete(basefuncFFTfreqs); + basefuncFFTfreqs=NULL; + }; - for (i=0;i<OSCIL_SIZE;i++) oscilFFTfreqs[i]=0.0; + for (int i=0;i<OSCIL_SIZE;i++) oscilFFTfreqs[i]=0.0; oscilprepared=0; oldfilterpars=0;oldsapars=0; -}; - -OscilGen::~OscilGen(){ - if (basefuncFFTfreqs!=NULL) delete [] basefuncFFTfreqs; - if (basefuncFFTfreqsQ!=NULL) delete [] basefuncFFTfreqsQ; - delete [] oscilFFTfreqs; + prepare(); }; /* diff --git a/src/Synth/OscilGen.h b/src/Synth/OscilGen.h @@ -52,7 +52,7 @@ class OscilGen{ void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); - + void defaults(); //Parameters diff --git a/src/Synth/Resonance.C b/src/Synth/Resonance.C @@ -27,6 +27,14 @@ #include <stdio.h> Resonance::Resonance(){ + defaults(); +}; + +Resonance::~Resonance(){ +}; + + +void Resonance::defaults(){ Penabled=0; PmaxdB=20; Pcenterfreq=64;//1 kHz @@ -38,10 +46,6 @@ Resonance::Resonance(){ for (int i=0;i<N_RES_POINTS;i++) Prespoints[i]=64; }; -Resonance::~Resonance(){ -}; - - /* * Set a point of resonance function with a value */ diff --git a/src/Synth/Resonance.h b/src/Synth/Resonance.h @@ -41,7 +41,7 @@ class Resonance{ void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); - + void defaults(); REALTYPE getfreqpos(REALTYPE freq); REALTYPE getfreqx(REALTYPE x); diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -261,8 +261,7 @@ if ((what==1)&&(mode==2)){//save(write) to slot if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot pthread_mutex_lock(&master->mutex); - instrumentdefaultsbuf.changemode(0); - master->part[*npart]->saveloadbuf(&instrumentdefaultsbuf,1); + master->part[*npart]->defaultsinstrument(); bank->loadfromslot(slot,&slbuf); slbuf.changemode(0); master->part[*npart]->saveloadbuf(&slbuf,1); diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl @@ -404,9 +404,7 @@ updatepanel();} delete microtonalui; pthread_mutex_lock(&master->mutex); - masterdefaultsbuf.changemode(0); - master->saveloadbuf(&masterdefaultsbuf); - master->microtonal.reset(); + master->defaults(); pthread_mutex_unlock(&master->mutex); npartcounter->do_callback(); @@ -436,12 +434,13 @@ if (result==0) { pthread_mutex_lock(&master->mutex); //clear all parameters, first - masterdefaultsbuf.changemode(0); - master->saveloadbuf(&masterdefaultsbuf); - master->part[0]->Penabled=0; + + master->defaults(); + //load the data master->saveloadbuf(&slbuf); pthread_mutex_unlock(&master->mutex); + npartcounter->do_callback(); syseffnocounter->do_callback(); inseffnocounter->do_callback(); @@ -495,7 +494,7 @@ if (result==0) { slbuf.changemode(0); pthread_mutex_lock(&master->mutex); - master->microtonal.reset(); + master->microtonal.defaults(); master->microtonal.saveloadbuf(&slbuf); pthread_mutex_unlock(&master->mutex); @@ -565,7 +564,7 @@ pthread_mutex_lock(&master->mutex); master->part[npart]->saveXML(filename); pthread_mutex_unlock(&master->mutex); -updatepanel();} selected +updatepanel();} xywh {20 20 100 20} divider } menuitem {} { @@ -573,9 +572,7 @@ updatepanel();} selected callback {if (fl_ask("Clear instrument's parameters ?")){ int npart=(int)npartcounter->value(); pthread_mutex_lock(&master->mutex); - instrumentdefaultsbuf.changemode(0); - master->part[npart]->disablekitloading=0; - master->part[npart]->saveloadbuf(&instrumentdefaultsbuf,1); + master->part[npart]->defaultsinstrument(); pthread_mutex_unlock(&master->mutex); npartcounter->do_callback(); @@ -596,8 +593,8 @@ if (result==0) { int npart=(int)npartcounter->value(); //clear all instrument parameters, first - instrumentdefaultsbuf.changemode(0); - master->part[npart]->saveloadbuf(&instrumentdefaultsbuf,1); + master->part[npart]->defaultsinstrument(); + //load the instr. parameters master->part[npart]->saveloadbuf(&slbuf,1); pthread_mutex_unlock(&master->mutex); @@ -607,7 +604,7 @@ if (result==0) { else fl_alert("Error: Could not load the file."); }; -updatepanel();} +updatepanel();} selected xywh {20 20 100 20} } menuitem {} {