commit 7a35ef743b02e26af53d8f74eba6cd909614a5ed
parent fec6008ec275f404b1227f8f0d0b5e29398649de
Author: paulnasca <paulnasca>
Date: Fri, 13 Feb 2004 22:32:49 +0000
*** empty log message ***
Diffstat:
25 files changed, 738 insertions(+), 87 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -532,4 +532,4 @@
- Inceput sa scriu incarcarea parametrilor
11 Feb 2004 - Se pot incarca cativa parametrii de la master
12 Feb 2004 - Continuat incarcarea parametrilor XML si la part (neterminat)
-
+13 Feb 2004 - Terminat de adaugat parametrii la incarcarea XML
diff --git a/src/Effects/EffectMgr.C b/src/Effects/EffectMgr.C
@@ -261,5 +261,24 @@ void EffectMgr::add2XML(XMLwrapper *xml){
xml->endbranch();
};
+void EffectMgr::getfromXML(XMLwrapper *xml){
+ changeeffect(xml->getpar127("type",geteffect()));
+
+ if ((efx==NULL)||(geteffect()==0)) return;
+
+ efx->Ppreset=xml->getpar127("preset",efx->Ppreset);
+
+ if (xml->enterbranch("EFFECT_PARAMETERS")){
+ for (int n=0;n<128;n++){
+ if (xml->enterbranch("par_no",n)==0) continue;
+
+ int par=geteffectpar(n);
+ seteffectpar_nolock(n,xml->getpar127("par",par));
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+};
+
diff --git a/src/Effects/EffectMgr.h b/src/Effects/EffectMgr.h
@@ -46,6 +46,7 @@ class EffectMgr{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
void out(REALTYPE *smpsl,REALTYPE *smpsr);
diff --git a/src/Misc/Master.C b/src/Misc/Master.C
@@ -742,7 +742,7 @@ void Master::add2XML(XMLwrapper *xml){
xml->beginbranch("SYSTEM_EFFECTS");
for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){
- xml->beginbranch("SYSEFFECT",nefx);
+ xml->beginbranch("SYSTEM_EFFECT",nefx);
xml->beginbranch("EFFECT");
sysefx[nefx]->add2XML(xml);
xml->endbranch();
@@ -766,7 +766,7 @@ void Master::add2XML(XMLwrapper *xml){
xml->beginbranch("INSERTION_EFFECTS");
for (int nefx=0;nefx<NUM_INS_EFX;nefx++){
- xml->beginbranch("INSEFFECT",nefx);
+ xml->beginbranch("INSERTION_EFFECT",nefx);
xml->addpar("part",Pinsparts[nefx]);
xml->beginbranch("EFFECT");
@@ -811,30 +811,69 @@ int Master::loadXML(char *filename){
};
void Master::getfromXML(XMLwrapper *xml){
- if (xml->enterbranch("MASTER")){
- Pvolume=xml->getpar127("volume",Pvolume);
- Pkeyshift=xml->getpar127("key_shift",Pkeyshift);
- ctl.NRPN.receive=xml->getparbool("nrpn_receive",ctl.NRPN.receive);
+ if (xml->enterbranch("MASTER")==0) return;
+
+ setPvolume(xml->getpar127("volume",Pvolume));
+ setPkeyshift(xml->getpar127("key_shift",Pkeyshift));
+ ctl.NRPN.receive=xml->getparbool("nrpn_receive",ctl.NRPN.receive);
+
+ for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
+ if (xml->enterbranch("PART",npart)==0) continue;
+ part[npart]->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("MICROTONAL")){
+ microtonal.getfromXML(xml);
+ xml->exitbranch();
+ };
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- if (xml->enterbranch("PART",npart)==0) continue;
- part[npart]->getfromXML(xml);
+
+
+ if (xml->enterbranch("SYSTEM_EFFECTS")){
+ for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){
+ if (xml->enterbranch("SYSTEM_EFFECT",nefx)==0) continue;
+ if (xml->enterbranch("EFFECT")){
+ sysefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ for (int partefx=0;partefx<NUM_MIDI_PARTS;partefx++){
+ if (xml->enterbranch("VOLUME",partefx)==0) continue;
+ setPsysefxvol(partefx,nefx,xml->getpar127("vol",Psysefxvol[partefx][nefx]));
+ xml->exitbranch();
+ };
+
+ for (int tonefx=nefx+1;tonefx<NUM_SYS_EFX;tonefx++){
+ if (xml->enterbranch("SENDTO",tonefx)==0) continue;
+ setPsysefxsend(nefx,tonefx,xml->getpar127("send_vol",Psysefxsend[nefx][tonefx]));
+ xml->exitbranch();
+ };
xml->exitbranch();
};
+ xml->exitbranch();
+ };
+
+
+ if (xml->enterbranch("INSERTION_EFFECTS")){
+ for (int nefx=0;nefx<NUM_INS_EFX;nefx++){
+
+ if (xml->enterbranch("INSERTION_EFFECT",nefx)==0) continue;
+ Pinsparts[nefx]=xml->getpar("part",Pinsparts[nefx],-1,NUM_MIDI_PARTS);
-/* if (xml->enterbranch("MICROTONAL")){
- //
+ if (xml->enterbranch("EFFECT")){
+ insefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ };
xml->exitbranch();
+
};
-
- etc.
-
-
-*/
xml->exitbranch();
};
+
+
};
diff --git a/src/Misc/Microtonal.C b/src/Misc/Microtonal.C
@@ -611,5 +611,54 @@ void Microtonal::add2XML(XMLwrapper *xml){
xml->endbranch();
};
+void Microtonal::getfromXML(XMLwrapper *xml){
+ xml->getparstr("name",(char *) Pname,MICROTONAL_MAX_NAME_LEN);
+ xml->getparstr("comment",(char *) Pcomment,MICROTONAL_MAX_NAME_LEN);
+
+ Pinvertupdown=xml->getparbool("invert_up_down",Pinvertupdown);
+ Pinvertupdowncenter=xml->getparbool("invert_up_down_center",Pinvertupdowncenter);
+
+ Penabled=xml->getparbool("enabled",Penabled);
+ Pglobalfinedetune=xml->getpar127("global_fine_detune",Pglobalfinedetune);
+
+ PAnote=xml->getpar127("a_note",PAnote);
+ PAfreq=xml->getparreal("a_freq",PAfreq,1.0,10000.0);
+
+ if (xml->enterbranch("SCALE")){
+ Pscaleshift=xml->getpar127("scale_shift",Pscaleshift);
+ Pfirstkey=xml->getpar127("first_key",Pfirstkey);
+ Plastkey=xml->getpar127("last_key",Plastkey);
+ Pmiddlenote=xml->getpar127("middle_note",Pmiddlenote);
+
+ if (xml->enterbranch("OCTAVE")){
+ octavesize=xml->getpar127("octave_size",octavesize);
+ for (int i=0;i<octavesize;i++){
+ if (xml->enterbranch("DEGREE",i)==0) continue;
+ octave[i].x2=0;
+ octave[i].tuning=xml->getparreal("cents",octave[i].tuning);
+ octave[i].x1=xml->getpar127("numerator",octave[i].x1);
+ octave[i].x2=xml->getpar127("denominator",octave[i].x2);
+
+ if (octave[i].x2!=0) octave[i].type=2;
+ else octave[i].type=1;
+
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("KEYBOARD_MAPPING")){
+ Pmapsize=xml->getpar127("map_size",Pmapsize);
+ Pmappingenabled=xml->getpar127("mapping_enabled",Pmappingenabled);
+ for (int i=0;i<Pmapsize;i++){
+ if (xml->enterbranch("KEYMAP",i)==0) continue;
+ Pmapping[i]=xml->getpar127("degree",Pmapping[i]);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+};
diff --git a/src/Misc/Microtonal.h b/src/Misc/Microtonal.h
@@ -89,6 +89,7 @@ class Microtonal{
void saveloadbuf(Buffer *buf);
void add2XML(XMLwrapper *xml);
+ void getfromXML(XMLwrapper *xml);
private:
int linetotunings(unsigned int nline,const char *line);
diff --git a/src/Misc/Part.C b/src/Misc/Part.C
@@ -93,6 +93,7 @@ void Part::defaults(){
Pveloffs=64;
Pkeylimit=15;
defaultsinstrument();
+ ctl.defaults();
};
void Part::defaultsinstrument(){
@@ -952,40 +953,43 @@ void Part::add2XMLinstrument(XMLwrapper *xml){
xml->addpar("type",info.Ptype);
xml->endbranch();
- xml->addpar("kit_mode",Pkitmode);
- xml->addparbool("drum_mode",Pdrummode);
- for (int i=0;i<NUM_KIT_ITEMS;i++){
- xml->beginbranch("INSTRUMENT_KIT_ITEM",i);
- xml->addparbool("enabled",kit[i].Penabled);
- if (kit[i].Penabled!=0) {
- xml->addparstr("name",(char *)kit[i].Pname);
-
- xml->addpar("muted",kit[i].Pmuted);
- xml->addpar("min_key",kit[i].Pminkey);
- xml->addpar("max_key",kit[i].Pmaxkey);
+ xml->beginbranch("INSTRUMENT_KIT");
+ xml->addpar("kit_mode",Pkitmode);
+ xml->addparbool("drum_mode",Pdrummode);
+
+ for (int i=0;i<NUM_KIT_ITEMS;i++){
+ xml->beginbranch("INSTRUMENT_KIT_ITEM",i);
+ xml->addparbool("enabled",kit[i].Penabled);
+ if (kit[i].Penabled!=0) {
+ xml->addparstr("name",(char *)kit[i].Pname);
+
+ xml->addparbool("muted",kit[i].Pmuted);
+ xml->addpar("min_key",kit[i].Pminkey);
+ xml->addpar("max_key",kit[i].Pmaxkey);
- xml->addpar("send_to_instrument_effect",kit[i].Psendtoparteffect);
+ xml->addpar("send_to_instrument_effect",kit[i].Psendtoparteffect);
- xml->addpar("ad_enabled",kit[i].Padenabled);
- if ((kit[i].Padenabled!=0)&&(kit[i].adpars!=NULL)){
- xml->beginbranch("ADD_SYNTH_PARAMETERS");
- kit[i].adpars->add2XML(xml);
- xml->endbranch();
- };
+ xml->addparbool("add_enabled",kit[i].Padenabled);
+ if ((kit[i].Padenabled!=0)&&(kit[i].adpars!=NULL)){
+ xml->beginbranch("ADD_SYNTH_PARAMETERS");
+ kit[i].adpars->add2XML(xml);
+ xml->endbranch();
+ };
- xml->addpar("sub_enabled",kit[i].Psubenabled);
- if ((kit[i].Psubenabled!=0)&&(kit[i].subpars!=NULL)){
- xml->beginbranch("SUB_SYNTH_PARAMETERS");
- kit[i].subpars->add2XML(xml);
- xml->endbranch();
- };
+ xml->addparbool("sub_enabled",kit[i].Psubenabled);
+ if ((kit[i].Psubenabled!=0)&&(kit[i].subpars!=NULL)){
+ xml->beginbranch("SUB_SYNTH_PARAMETERS");
+ kit[i].subpars->add2XML(xml);
+ xml->endbranch();
+ };
- };
- xml->endbranch();
- };
+ };
+ xml->endbranch();
+ };
+ xml->endbranch();
- xml->beginbranch("EFFECTS");
+ xml->beginbranch("INSTRUMENT_EFFECTS");
for (int nefx=0;nefx<NUM_PART_EFX;nefx++){
xml->beginbranch("INSTRUMENT_EFFECT",nefx);
xml->beginbranch("EFFECT");
@@ -1052,35 +1056,71 @@ void Part::getfromXMLinstrument(XMLwrapper *xml){
xml->getparstr("comments",(char *)info.Pcomments,MAX_INFO_TEXT_SIZE);
info.Ptype=xml->getpar("type",info.Ptype,0,16);
- xml->endbranch();
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("INSTRUMENT_KIT")){
+ Pkitmode=xml->getpar127("kit_mode",Pkitmode);
+ Pdrummode=xml->getparbool("drum_mode",Pdrummode);
+
+ for (int i=0;i<NUM_KIT_ITEMS;i++){
+ if (xml->enterbranch("INSTRUMENT_KIT_ITEM",i)==0) continue;
+ setkititemstatus(i,xml->getparbool("enabled",kit[i].Penabled));
+ if (kit[i].Penabled==0) {
+ xml->exitbranch();
+ continue;
+ };
+
+ xml->getparstr("name",(char *)kit[i].Pname,PART_MAX_NAME_LEN);
+
+ kit[i].Pmuted=xml->getparbool("muted",kit[i].Pmuted);
+ kit[i].Pminkey=xml->getpar127("min_key",kit[i].Pminkey);
+ kit[i].Pmaxkey=xml->getpar127("max_key",kit[i].Pmaxkey);
+
+ kit[i].Psendtoparteffect=xml->getpar127("send_to_instrument_effect",kit[i].Psendtoparteffect);
+
+ kit[i].Padenabled=xml->getparbool("add_enabled",kit[i].Padenabled);
+
+
+ if (xml->enterbranch("ADD_SYNTH_PARAMETERS")){
+ kit[i].adpars->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ kit[i].Psubenabled=xml->getparbool("sub_enabled",kit[i].Psubenabled);
+ if (xml->enterbranch("SUB_SYNTH_PARAMETERS")){
+ kit[i].subpars->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
};
-
-
- //!!!!!!!!!!!continui de aici
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ if (xml->enterbranch("INSTRUMENT_EFFECTS")){
+ for (int nefx=0;nefx<NUM_PART_EFX;nefx++){
+ if (xml->enterbranch("INSTRUMENT_EFFECT",nefx)==0) continue;
+ if (xml->enterbranch("EFFECT")){
+ partefx[nefx]->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->getpar("route",Pefxroute[nefx],0,NUM_PART_EFX);
+
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
};
void Part::getfromXML(XMLwrapper *xml){
Penabled=xml->getparbool("enabled",Penabled);
- Pvolume=xml->getpar127("volume",Pvolume);
- Ppanning=xml->getpar127("panning",Ppanning);
+ setPvolume(xml->getpar127("volume",Pvolume));
+ setPpanning(xml->getpar127("panning",Ppanning));
Pminkey=xml->getpar127("min_key",Pminkey);
Pmaxkey=xml->getpar127("max_key",Pmaxkey);
@@ -1094,14 +1134,16 @@ void Part::getfromXML(XMLwrapper *xml){
Ppolymode=xml->getparbool("poly_mode",Ppolymode);
Pkeylimit=xml->getpar127("key_limit",Pkeylimit);
+
if (xml->enterbranch("INSTRUMENT")){
getfromXMLinstrument(xml);
xml->exitbranch();
};
- xml->enterbranch("CONTROLLER");
-// ctl.(xml);
- xml->exitbranch();
+ if (xml->enterbranch("CONTROLLER")){
+ ctl.getfromXML(xml);
+ xml->exitbranch();
+ };
};
diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C
@@ -54,7 +54,7 @@ XMLwrapper::XMLwrapper(){
node=root=mxmlNewElement(tree,"ZynAddSubFX-data");
mxmlElementSetAttr(root,"version-major","0");
- mxmlElementSetAttr(root,"version-minor","1");
+ mxmlElementSetAttr(root,"version-minor","2");
//save zynaddsubfx specifications
beginbranch("BASE_PARAMETERS");
@@ -135,6 +135,12 @@ void XMLwrapper::endbranch(){
int XMLwrapper::loadXMLfile(char *filename){
if (tree!=NULL) mxmlDelete(tree);
tree=NULL;
+
+ memset(&parentstack,0,sizeof(parentstack));
+ memset(&values,0,sizeof(values));
+
+ stackpos=0;
+
FILE *file=fopen(filename,"r");
if (file==NULL) return(-1);
@@ -176,6 +182,7 @@ int XMLwrapper::enterbranch(char *name,int id){
snprintf(tmpstr,TMPSTR_SIZE,"%d",id);
node=mxmlFindElement(peek(),peek(),name,"id",tmpstr,MXML_DESCEND_FIRST);
if (node==NULL) return(0);
+
push(node);
return(1);
};
@@ -237,6 +244,24 @@ void XMLwrapper::getparstr(char *name,char *par,int maxstrlen){
};
+REALTYPE XMLwrapper::getparreal(char *name,REALTYPE defaultpar){
+ node=mxmlFindElement(peek(),peek(),"par_real","name",name,MXML_DESCEND_FIRST);
+ if (node==NULL) return(defaultpar);
+
+ const char *strval=mxmlElementGetAttr(node,"value");
+ if (strval==NULL) return(defaultpar);
+
+ return(str2real(strval));
+};
+
+REALTYPE XMLwrapper::getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max){
+ REALTYPE result=getparreal(name,defaultpar);
+
+ if (result<min) result=min;
+ else if (result>max) result=max;
+ return(result);
+};
+
/** Private members **/
@@ -256,6 +281,12 @@ int XMLwrapper::str2int(const char *str){
return(result);
};
+REALTYPE XMLwrapper::str2real(const char *str){
+ if (str==NULL) return(0.0);
+ REALTYPE result=strtod(str,NULL);
+ return(result);
+};
+
mxml_node_t *XMLwrapper::addparams0(char *name){
mxml_node_t *element=mxmlNewElement(node,name);
@@ -286,6 +317,8 @@ void XMLwrapper::push(mxml_node_t *node){
stackpos++;
parentstack[stackpos]=node;
+// printf("push %d - %s\n",stackpos,node->value.element.name);
+
};
mxml_node_t *XMLwrapper::pop(){
if (stackpos<=0) {
@@ -294,6 +327,9 @@ mxml_node_t *XMLwrapper::pop(){
};
mxml_node_t *node=parentstack[stackpos];
parentstack[stackpos]=NULL;
+
+// printf("pop %d - %s\n",stackpos,node->value.element.name);
+
stackpos--;
return(node);
};
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -99,6 +99,10 @@ class XMLwrapper{
int getparbool(char *name,int defaultpar);
void getparstr(char *name,char *par,int maxstrlen);
+ REALTYPE getparreal(char *name,REALTYPE defaultpar);
+ REALTYPE getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max);
+
+
private:
mxml_node_t *tree;//all xml data
mxml_node_t *root;//xml data used by zynaddsubfx
@@ -123,6 +127,7 @@ class XMLwrapper{
char *real2str(REALTYPE x);
int str2int(const char *str);
+ REALTYPE str2real(const char *str);
char tmpstr[TMPSTR_SIZE];
@@ -130,6 +135,7 @@ class XMLwrapper{
//this is used to store the parents
mxml_node_t *parentstack[STACKSIZE];
int stackpos;
+
void push(mxml_node_t *node);
mxml_node_t *pop();
diff --git a/src/Params/ADnoteParameters.C b/src/Params/ADnoteParameters.C
@@ -539,7 +539,7 @@ void ADnoteParameters::add2XMLvoice(XMLwrapper *xml,int nvoice){
xml->addparbool("filter_enabled",VoicePar[nvoice].PFilterEnabled);
xml->addparbool("filter_bypass",VoicePar[nvoice].Pfilterbypass);
- xml->addparbool("fm_enabled",VoicePar[nvoice].PFMEnabled);
+ xml->addpar("fm_enabled",VoicePar[nvoice].PFMEnabled);
xml->beginbranch("OSCIL");
VoicePar[nvoice].OscilSmp->add2XML(xml);
@@ -591,7 +591,7 @@ void ADnoteParameters::add2XMLvoice(XMLwrapper *xml,int nvoice){
if (VoicePar[nvoice].PFilterEnabled!=0){
xml->beginbranch("FILTER_PARAMETERS");
xml->beginbranch("FILTER");
- GlobalPar.GlobalFilter->add2XML(xml);
+ VoicePar[nvoice].VoiceFilter->add2XML(xml);
xml->endbranch();
xml->addparbool("filter_envelope_enabled",VoicePar[nvoice].PFilterEnvelopeEnabled);
@@ -647,7 +647,7 @@ void ADnoteParameters::add2XMLvoice(XMLwrapper *xml,int nvoice){
void ADnoteParameters::add2XML(XMLwrapper *xml){
- xml->addpar("stereo",GlobalPar.PStereo);
+ xml->addparbool("stereo",GlobalPar.PStereo);
xml->beginbranch("AMPLITUDE_PARAMETERS");
xml->addpar("volume",GlobalPar.PVolume);
@@ -711,5 +711,204 @@ void ADnoteParameters::add2XML(XMLwrapper *xml){
};
+void ADnoteParameters::getfromXML(XMLwrapper *xml){
+ GlobalPar.PStereo=xml->getparbool("stereo",GlobalPar.PStereo);
+
+ if (xml->enterbranch("AMPLITUDE_PARAMETERS")){
+ GlobalPar.PVolume=xml->getpar127("volume",GlobalPar.PVolume);
+ GlobalPar.PPanning=xml->getpar127("panning",GlobalPar.PPanning);
+ GlobalPar.PAmpVelocityScaleFunction=xml->getpar127("velocity_sensing",GlobalPar.PAmpVelocityScaleFunction);
+
+ GlobalPar.PPunchStrength=xml->getpar127("punch_strength",GlobalPar.PPunchStrength);
+ GlobalPar.PPunchTime=xml->getpar127("punch_time",GlobalPar.PPunchTime);
+ GlobalPar.PPunchStretch=xml->getpar127("punch_stretch",GlobalPar.PPunchStretch);
+ GlobalPar.PPunchVelocitySensing=xml->getpar127("punch_velocity_sensing",GlobalPar.PPunchVelocitySensing);
+
+ if (xml->enterbranch("AMPLITUDE_ENVELOPE")){
+ GlobalPar.AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("AMPLITUDE_LFO")){
+ GlobalPar.AmpLfo->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FREQUENCY_PARAMETERS")){
+ GlobalPar.PDetune=xml->getpar("detune",GlobalPar.PDetune,0,16383);
+ GlobalPar.PCoarseDetune=xml->getpar127("coarse_detune",GlobalPar.PCoarseDetune);
+ GlobalPar.PDetuneType=xml->getpar127("detune_type",GlobalPar.PDetuneType);
+
+ xml->enterbranch("FREQUENCY_ENVELOPE");
+ GlobalPar.FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FREQUENCY_LFO");
+ GlobalPar.FreqLfo->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->exitbranch();
+ };
+
+
+ if (xml->enterbranch("FILTER_PARAMETERS")){
+ GlobalPar.PFilterVelocityScale=xml->getpar127("velocity_sensing_amplitude",GlobalPar.PFilterVelocityScale);
+ GlobalPar.PFilterVelocityScaleFunction=xml->getpar127("velocity_sensing",GlobalPar.PFilterVelocityScaleFunction);
+
+ xml->enterbranch("FILTER");
+ GlobalPar.GlobalFilter->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_ENVELOPE");
+ GlobalPar.FilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+
+ xml->enterbranch("FILTER_LFO");
+ GlobalPar.FilterLfo->getfromXML(xml);
+ xml->exitbranch();
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("RESONANCE")){
+ GlobalPar.Reson->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ for (int nvoice=0;nvoice<NUM_VOICES;nvoice++){
+ if (xml->enterbranch("VOICE",nvoice)==0) continue;
+ getfromXMLvoice(xml,nvoice);
+ xml->exitbranch();
+ };
+
+
+};
+
+void ADnoteParameters::getfromXMLvoice(XMLwrapper *xml,int nvoice){
+ if (nvoice>=NUM_VOICES) return;
+
+ VoicePar[nvoice].Enabled=xml->getparbool("enabled",VoicePar[nvoice].Enabled);
+
+ VoicePar[nvoice].Type=xml->getpar127("type",VoicePar[nvoice].Type);
+ VoicePar[nvoice].PDelay=xml->getpar127("delay",VoicePar[nvoice].PDelay);
+ VoicePar[nvoice].Presonance=xml->getparbool("resonance",VoicePar[nvoice].Presonance);
+
+ VoicePar[nvoice].Pextoscil=xml->getpar("ext_oscil",-1,-1,nvoice-1);
+ VoicePar[nvoice].PextFMoscil=xml->getpar("ext_fm_oscil",-1,-1,nvoice-1);
+
+ VoicePar[nvoice].Poscilphase=xml->getpar127("oscil_phase",VoicePar[nvoice].Poscilphase);
+ VoicePar[nvoice].PFMoscilphase=xml->getpar127("oscil_fm_phase",VoicePar[nvoice].PFMoscilphase);
+
+ VoicePar[nvoice].PFilterEnabled=xml->getparbool("filter_enabled",VoicePar[nvoice].PFilterEnabled);
+ VoicePar[nvoice].Pfilterbypass=xml->getparbool("filter_bypass",VoicePar[nvoice].Pfilterbypass);
+
+ VoicePar[nvoice].PFMEnabled=xml->getpar127("fm_enabled",VoicePar[nvoice].PFMEnabled);
+
+ if (xml->enterbranch("OSCIL")){
+ VoicePar[nvoice].OscilSmp->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+
+ if (xml->enterbranch("AMPLITUDE_PARAMETERS")){
+ VoicePar[nvoice].PPanning=xml->getpar127("panning",VoicePar[nvoice].PPanning);
+ VoicePar[nvoice].PVolume=xml->getpar127("volume",VoicePar[nvoice].PVolume);
+ VoicePar[nvoice].PVolumeminus=xml->getparbool("volume_minus",VoicePar[nvoice].PVolumeminus);
+ VoicePar[nvoice].PAmpVelocityScaleFunction=xml->getpar127("velocity_sensing",VoicePar[nvoice].PAmpVelocityScaleFunction);
+
+ VoicePar[nvoice].PAmpEnvelopeEnabled=xml->getparbool("amp_envelope_enabled",VoicePar[nvoice].PAmpEnvelopeEnabled);
+ if (xml->enterbranch("AMPLITUDE_ENVELOPE")){
+ VoicePar[nvoice].AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ VoicePar[nvoice].PAmpLfoEnabled=xml->getparbool("amp_lfo_enabled",VoicePar[nvoice].PAmpLfoEnabled);
+ if (xml->enterbranch("AMPLITUDE_LFO")){
+ VoicePar[nvoice].AmpLfo->getfromXML(xml);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FREQUENCY_PARAMETERS")){
+ VoicePar[nvoice].Pfixedfreq=xml->getparbool("fixed_freq",VoicePar[nvoice].Pfixedfreq);
+ VoicePar[nvoice].PfixedfreqET=xml->getpar127("fixed_freq_et",VoicePar[nvoice].PfixedfreqET);
+
+
+ VoicePar[nvoice].PDetune=xml->getpar("detune",VoicePar[nvoice].PDetune,0,16383);
+
+ VoicePar[nvoice].PCoarseDetune=xml->getpar127("coarse_detune",VoicePar[nvoice].PCoarseDetune);
+ VoicePar[nvoice].PDetuneType=xml->getpar127("detune_type",VoicePar[nvoice].PDetuneType);
+
+ VoicePar[nvoice].PFreqEnvelopeEnabled=xml->getparbool("freq_envelope_enabled",VoicePar[nvoice].PFreqEnvelopeEnabled);
+ if (xml->enterbranch("FREQUENCY_ENVELOPE")){
+ VoicePar[nvoice].FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ VoicePar[nvoice].PFreqLfoEnabled=xml->getparbool("freq_lfo_enabled",VoicePar[nvoice].PFreqLfoEnabled);
+ if (xml->enterbranch("FREQUENCY_LFO")){
+ VoicePar[nvoice].FreqLfo->getfromXML(xml);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FILTER_PARAMETERS")){
+ if (xml->enterbranch("FILTER")){
+ VoicePar[nvoice].VoiceFilter->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ VoicePar[nvoice].PFilterEnvelopeEnabled=xml->getparbool("filter_envelope_enabled",VoicePar[nvoice].PFilterEnvelopeEnabled);
+ if (xml->enterbranch("FILTER_ENVELOPE")){
+ VoicePar[nvoice].FilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ VoicePar[nvoice].PFilterLfoEnabled=xml->getparbool("filter_lfo_enabled",VoicePar[nvoice].PFilterLfoEnabled);
+ if (xml->enterbranch("FILTER_LFO")){
+ VoicePar[nvoice].FilterLfo->getfromXML(xml);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FM_PARAMETERS")){
+ VoicePar[nvoice].PFMVoice=xml->getpar("input_voice",VoicePar[nvoice].PFMVoice,-1,nvoice-1);
+
+ VoicePar[nvoice].PFMVolume=xml->getpar127("volume",VoicePar[nvoice].PFMVolume);
+ VoicePar[nvoice].PFMVolumeDamp=xml->getpar127("volume_damp",VoicePar[nvoice].PFMVolumeDamp);
+ VoicePar[nvoice].PFMVelocityScaleFunction=xml->getpar127("velocity_sensing",VoicePar[nvoice].PFMVelocityScaleFunction);
+
+ VoicePar[nvoice].PFMAmpEnvelopeEnabled=xml->getparbool("amp_envelope_enabled",VoicePar[nvoice].PFMAmpEnvelopeEnabled);
+ if (xml->enterbranch("AMPLITUDE_ENVELOPE")){
+ VoicePar[nvoice].FMAmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("MODULATOR")){
+ VoicePar[nvoice].PFMDetune=xml->getpar("detune",VoicePar[nvoice].PFMDetune,0,16383);
+ VoicePar[nvoice].PFMCoarseDetune=xml->getpar127("coarse_detune",VoicePar[nvoice].PFMCoarseDetune);
+ VoicePar[nvoice].PFMDetuneType=xml->getpar127("detune_type",VoicePar[nvoice].PFMDetuneType);
+
+ VoicePar[nvoice].PFMFreqEnvelopeEnabled=xml->getparbool("freq_envelope_enabled",VoicePar[nvoice].PFMFreqEnvelopeEnabled);
+ if (xml->enterbranch("FREQUENCY_ENVELOPE")){
+ VoicePar[nvoice].FMFreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("OSCIL")){
+ VoicePar[nvoice].FMSmp->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+};
diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h
@@ -260,6 +260,8 @@ class ADnoteParameters{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
+
void saveloadbuf(Buffer *buf);
void saveloadbufvoice(Buffer *buf,unsigned char nvoice);
@@ -270,6 +272,7 @@ class ADnoteParameters{
FFTwrapper *fft;
void add2XMLvoice(XMLwrapper *xml,int nvoice);
+ void getfromXMLvoice(XMLwrapper *xml,int nvoice);
};
#endif
diff --git a/src/Params/Controller.C b/src/Params/Controller.C
@@ -311,18 +311,18 @@ void Controller::saveloadbuf(Buffer *buf){
void Controller::add2XML(XMLwrapper *xml){
xml->addpar("pitchwheel_bendrange",pitchwheel.bendrange);
- xml->addpar("expression_receive",expression.receive);
+ xml->addparbool("expression_receive",expression.receive);
xml->addpar("panning_depth",panning.depth);
xml->addpar("filter_cutoff_depth",filtercutoff.depth);
xml->addpar("filter_q_depth",filterq.depth);
xml->addpar("bandwidth_depth",bandwidth.depth);
xml->addpar("mod_wheel_depth",modwheel.depth);
- xml->addpar("mod_wheel_exponential",modwheel.exponential);
- xml->addpar("fm_amp_receive",fmamp.receive);
- xml->addpar("volume_receive",volume.receive);
- xml->addpar("sustain_receive",sustain.receive);
+ xml->addparbool("mod_wheel_exponential",modwheel.exponential);
+ xml->addparbool("fm_amp_receive",fmamp.receive);
+ xml->addparbool("volume_receive",volume.receive);
+ xml->addparbool("sustain_receive",sustain.receive);
- xml->addpar("portamento_receive",portamento.receive);
+ xml->addparbool("portamento_receive",portamento.receive);
xml->addpar("portamento_time",portamento.time);
xml->addpar("portamento_pitchthresh",portamento.pitchthresh);
xml->addpar("portamento_pitchthreshtype",portamento.pitchthreshtype);
@@ -333,5 +333,30 @@ void Controller::add2XML(XMLwrapper *xml){
xml->addpar("resonance_bandwidth_depth",resonancebandwidth.depth);
};
+void Controller::getfromXML(XMLwrapper *xml){
+ pitchwheel.bendrange=xml->getpar127("pitchwheel_bendrange",pitchwheel.bendrange);
+
+ expression.receive=xml->getparbool("expression_receive",expression.receive);
+ panning.depth=xml->getpar127("panning_depth",panning.depth);
+ filtercutoff.depth=xml->getpar127("filter_cutoff_depth",filtercutoff.depth);
+ filterq.depth=xml->getpar127("filter_q_depth",filterq.depth);
+ bandwidth.depth=xml->getpar127("bandwidth_depth",bandwidth.depth);
+ modwheel.depth=xml->getpar127("mod_wheel_depth",modwheel.depth);
+ modwheel.exponential=xml->getparbool("mod_wheel_exponential",modwheel.exponential);
+ fmamp.receive=xml->getparbool("fm_amp_receive",fmamp.receive);
+ volume.receive=xml->getparbool("volume_receive",volume.receive);
+ sustain.receive=xml->getparbool("sustain_receive",sustain.receive);
+
+ portamento.receive=xml->getparbool("portamento_receive",portamento.receive);
+ portamento.time=xml->getpar127("portamento_time",portamento.time);
+ portamento.pitchthresh=xml->getpar127("portamento_pitchthresh",portamento.pitchthresh);
+ portamento.pitchthreshtype=xml->getpar127("portamento_pitchthreshtype",portamento.pitchthreshtype);
+ portamento.portamento=xml->getpar127("portamento_portamento",portamento.portamento);
+ portamento.updowntimestretch=xml->getpar127("portamento_updowntimestretch",portamento.updowntimestretch);
+
+ resonancecenter.depth=xml->getpar127("resonance_center_depth",resonancecenter.depth);
+ resonancebandwidth.depth=xml->getpar127("resonance_bandwidth_depth",resonancebandwidth.depth);
+};
+
diff --git a/src/Params/Controller.h b/src/Params/Controller.h
@@ -37,6 +37,7 @@ class Controller{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
//Controllers functions
void setpitchwheel(int value);
diff --git a/src/Params/EnvelopeParams.C b/src/Params/EnvelopeParams.C
@@ -240,6 +240,33 @@ void EnvelopeParams::add2XML(XMLwrapper *xml){
+void EnvelopeParams::getfromXML(XMLwrapper *xml){
+ Pfreemode=xml->getparbool("free_mode",Pfreemode);
+ Penvpoints=xml->getpar127("env_points",Penvpoints);
+ Penvsustain=xml->getpar127("env_sustain",Penvsustain);
+ Penvstretch=xml->getpar127("env_stretch",Penvstretch);
+ Pforcedrelease=xml->getparbool("forced_release",Pforcedrelease);
+ Plinearenvelope=xml->getparbool("linear_envelope",Plinearenvelope);
+
+ PA_dt=xml->getpar127("A_dt",PA_dt);
+ PD_dt=xml->getpar127("D_dt",PD_dt);
+ PR_dt=xml->getpar127("R_dt",PR_dt);
+ PA_val=xml->getpar127("A_val",PA_val);
+ PD_val=xml->getpar127("D_val",PD_val);
+ PS_val=xml->getpar127("S_val",PS_val);
+ PR_val=xml->getpar127("R_val",PR_val);
+
+ for (int i=0;i<Penvpoints;i++){
+ if (xml->enterbranch("POINT",i)==0) continue;
+ if (i!=0) Penvdt[i]=xml->getpar127("dt",Penvdt[i]);
+ Penvval[i]=xml->getpar127("val",Penvval[i]);
+ xml->exitbranch();
+ };
+
+ if (!Pfreemode) converttofree();
+};
+
+
void EnvelopeParams::defaults(){
Penvstretch=Denvstretch;
Pforcedrelease=Dforcedrelease;
diff --git a/src/Params/EnvelopeParams.h b/src/Params/EnvelopeParams.h
@@ -45,6 +45,8 @@ class EnvelopeParams{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
+
REALTYPE getdt(char i);
/* Parametrii MIDI */
diff --git a/src/Params/FilterParams.C b/src/Params/FilterParams.C
@@ -348,4 +348,45 @@ void FilterParams::add2XML(XMLwrapper *xml){
};
+void FilterParams::getfromXML(XMLwrapper *xml){
+ //filter parameters
+ Pcategory=xml->getpar127("category",Pcategory);
+ Ptype=xml->getpar127("type",Ptype);
+ Pfreq=xml->getpar127("freq",Pfreq);
+ Pq=xml->getpar127("q",Pq);
+ Pstages=xml->getpar127("stages",Pstages);
+ Pfreqtrack=xml->getpar127("freq_track",Pfreqtrack);
+ Pgain=xml->getpar127("gain",Pgain);
+
+ //formant filter parameters
+ if(xml->enterbranch("FORMANT_FILTER")){
+ Pnumformants=xml->getpar127("num_formants",Pnumformants);
+ Pformantslowness=xml->getpar127("formant_slowness",Pformantslowness);
+ Pvowelclearness=xml->getpar127("vowel_clearness",Pvowelclearness);
+ Pcenterfreq=xml->getpar127("center_freq",Pcenterfreq);
+ Poctavesfreq=xml->getpar127("octaves_freq",Poctavesfreq);
+
+ for (int nvowel=0;nvowel<FF_MAX_VOWELS;nvowel++){
+ if (xml->enterbranch("VOWEL",nvowel)==0) continue;
+ for (int nformant=0;nformant<FF_MAX_FORMANTS;nformant++){
+ if (xml->enterbranch("FORMANT",nformant)==0) continue;
+ Pvowels[nvowel].formants[nformant].freq=xml->getpar127("freq",Pvowels[nvowel].formants[nformant].freq);
+ Pvowels[nvowel].formants[nformant].amp=xml->getpar127("amp",Pvowels[nvowel].formants[nformant].amp);
+ Pvowels[nvowel].formants[nformant].q=xml->getpar127("q",Pvowels[nvowel].formants[nformant].q);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+ Psequencesize=xml->getpar127("sequence_size",Psequencesize);
+ Psequencestretch=xml->getpar127("sequence_stretch",Psequencestretch);
+ Psequencereversed=xml->getparbool("sequence_reversed",Psequencereversed);
+ for (int nseq=0;nseq<FF_MAX_SEQUENCE;nseq++){
+ if (xml->enterbranch("SEQUENCE_POS",nseq)==0) continue;
+ Psequence[nseq].nvowel=xml->getpar("vowel_id",Psequence[nseq].nvowel,0,FF_MAX_VOWELS-1);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+};
diff --git a/src/Params/FilterParams.h b/src/Params/FilterParams.h
@@ -35,6 +35,7 @@ class FilterParams{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
REALTYPE getfreq();
diff --git a/src/Params/LFOParams.C b/src/Params/LFOParams.C
@@ -115,4 +115,14 @@ void LFOParams::add2XML(XMLwrapper *xml){
xml->addparbool("continous",Pcontinous);
};
+void LFOParams::getfromXML(XMLwrapper *xml){
+ Pfreq=xml->getpar127("freq",Pfreq);
+ Pintensity=xml->getpar127("intensity",Pintensity);
+ Pstartphase=xml->getpar127("start_phase",Pstartphase);
+ PLFOtype=xml->getpar127("lfo_type",PLFOtype);
+ Prandomness=xml->getpar127("randomness_amplitude",Prandomness);
+ Pfreqrand=xml->getpar127("randomness_frequency",Pfreqrand);
+ Pdelay=xml->getpar127("delay",Pdelay);
+ Pcontinous=xml->getparbool("continous",Pcontinous);
+};
diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h
@@ -35,8 +35,8 @@ class LFOParams{
void saveloadbuf(Buffer *buf);
void add2XML(XMLwrapper *xml);
-
- void defaults();//reset parameters to the default parameters
+ void defaults();
+ void getfromXML(XMLwrapper *xml);
/* Parametrii MIDI */
unsigned char Pfreq; // frequency
diff --git a/src/Params/SUBnoteParameters.C b/src/Params/SUBnoteParameters.C
@@ -209,7 +209,6 @@ void SUBnoteParameters::saveloadbuf(Buffer *buf){
void SUBnoteParameters::add2XML(XMLwrapper *xml){
-
xml->addpar("num_stages",Pnumstages);
xml->addpar("harmonic_mag_type",Phmagtype);
xml->addpar("start",Pstart);
@@ -260,7 +259,7 @@ void SUBnoteParameters::add2XML(XMLwrapper *xml){
};
xml->endbranch();
- xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->beginbranch("FILTER_PARAMETERS");
xml->addparbool("enabled",PGlobalFilterEnabled);
if (PGlobalFilterEnabled!=0){
xml->beginbranch("FILTER");
@@ -277,6 +276,78 @@ void SUBnoteParameters::add2XML(XMLwrapper *xml){
xml->endbranch();
};
+void SUBnoteParameters::getfromXML(XMLwrapper *xml){
+ Pnumstages=xml->getpar127("num_stages",Pnumstages);
+ Phmagtype=xml->getpar127("harmonic_mag_type",Phmagtype);
+ Pstart=xml->getpar127("start",Pstart);
+
+ if (xml->enterbranch("HARMONICS")){
+ for (int i=0;i<MAX_SUB_HARMONICS;i++){
+ if (xml->enterbranch("HARMONIC",i)==0) continue;
+ Phmag[i]=xml->getpar127("mag",Phmag[i]);
+ Phrelbw[i]=xml->getpar127("relbw",Phrelbw[i]);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("AMPLITUDE_PARAMETERS")){
+ Pstereo=xml->getparbool("stereo",Pstereo);
+ PVolume=xml->getpar127("volume",PVolume);
+ PPanning=xml->getpar127("panning",PPanning);
+ PAmpVelocityScaleFunction=xml->getpar127("velocity_sensing",PAmpVelocityScaleFunction);
+ if (xml->enterbranch("AMPLITUDE_ENVELOPE")){
+ AmpEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FREQUENCY_PARAMETERS")){
+ Pfixedfreq=xml->getparbool("fixed_freq",Pfixedfreq);
+ PfixedfreqET=xml->getpar127("fixed_freq_et",PfixedfreqET);
+
+ PDetune=xml->getpar("detune",PDetune,0,16383);
+ PCoarseDetune=xml->getpar127("coarse_detune",PCoarseDetune);
+ PDetuneType=xml->getpar127("detune_type",PDetuneType);
+
+ Pbandwidth=xml->getpar127("bandwidth",Pbandwidth);
+ Pbwscale=xml->getpar127("bandwidth_scale",Pbwscale);
+
+ PFreqEnvelopeEnabled=xml->getparbool("freq_envelope_enabled",PFreqEnvelopeEnabled);
+ if (xml->enterbranch("FREQUENCY_ENVELOPE")){
+ FreqEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ PBandWidthEnvelopeEnabled=xml->getparbool("band_width_envelope_enabled",PBandWidthEnvelopeEnabled);
+ if (xml->enterbranch("BANDWIDTH_ENVELOPE")){
+ BandWidthEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
+ };
+
+ if (xml->enterbranch("FILTER_PARAMETERS")){
+ PGlobalFilterEnabled=xml->getparbool("enabled",PGlobalFilterEnabled);
+ if (xml->enterbranch("FILTER")){
+ GlobalFilter->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ PGlobalFilterVelocityScaleFunction=xml->getpar127("filter_velocity_sensing",PGlobalFilterVelocityScaleFunction);
+ PGlobalFilterVelocityScale=xml->getpar127("filter_velocity_sensing_amplitude",PGlobalFilterVelocityScale);
+
+ if (xml->enterbranch("FILTER_ENVELOPE")){
+ GlobalFilterEnvelope->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+ xml->exitbranch();
+ };
+};
+
diff --git a/src/Params/SUBnoteParameters.h b/src/Params/SUBnoteParameters.h
@@ -38,6 +38,7 @@ class SUBnoteParameters{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
//Parameters
//AMPLITUDE PARAMETRERS
diff --git a/src/Synth/OscilGen.C b/src/Synth/OscilGen.C
@@ -873,4 +873,64 @@ void OscilGen::add2XML(XMLwrapper *xml){
};
+void OscilGen::getfromXML(XMLwrapper *xml){
+
+ Phmagtype=xml->getpar127("harmonic_mag_type",Phmagtype);
+ Pnormalizemethod=xml->getpar127("normalize_method",Pnormalizemethod);
+
+ Pcurrentbasefunc=xml->getpar127("base_function",Pcurrentbasefunc);
+ Pbasefuncpar=xml->getpar127("base_function_par",Pbasefuncpar);
+
+ Pwaveshaping=xml->getpar127("wave_shaping",Pwaveshaping);
+ Pwaveshapingfunction=xml->getpar127("wave_shaping_function",Pwaveshapingfunction);
+
+ Pfiltertype=xml->getpar127("filter_type",Pfiltertype);
+ Pfilterpar=xml->getpar127("filter_par",Pfilterpar);
+ Pfilterbeforews=xml->getpar127("filter_before_wave_shaping",Pfilterbeforews);
+
+ Psatype=xml->getpar127("spectrum_adjust_type",Psatype);
+ Psapar=xml->getpar127("spectrum_adjust_par",Psapar);
+
+ Prand=xml->getpar127("rand",Prand);
+ Pamprandtype=xml->getpar127("amp_rand_type",Pamprandtype);
+ Pamprandpower=xml->getpar127("amp_rand_power",Pamprandpower);
+
+ if (xml->enterbranch("HARMONICS")){
+ for (int n=0;n<MAX_AD_HARMONICS;n++){
+ if (xml->enterbranch("HARMONIC",n+1)==0) continue;
+ Phmag[n]=xml->getpar127("mag",Phmag[n]);
+ Phphase[n]=xml->getpar127("phase",Phphase[n]);
+ xml->exitbranch();
+ };
+ xml->exitbranch();
+ };
+
+ if (Pcurrentbasefunc!=0) changebasefunction();
+
+
+ if (xml->enterbranch("BASE_FUNCTION")){
+ for (int i=1;i<OSCIL_SIZE/2;i++){
+ if (xml->enterbranch("BF_HARMONIC",i)){
+ basefuncFFTfreqs[i]=xml->getparreal("cos",0.0);
+ basefuncFFTfreqs[OSCIL_SIZE-i]=xml->getparreal("sin",0.0);
+ xml->exitbranch();
+ };
+
+
+ };
+ xml->exitbranch();
+
+ REALTYPE max=0.0;
+
+ basefuncFFTfreqs[0]=0.0;
+ for (int i=0;i<OSCIL_SIZE;i++) if (max<fabs(basefuncFFTfreqs[i])) max=fabs(basefuncFFTfreqs[i]);
+ if (max<0.00000001) max=1.0;
+
+ for (int i=0;i<OSCIL_SIZE;i++) if (basefuncFFTfreqs[i]) basefuncFFTfreqs[i]/=max;
+ };
+
+
+};
+
+
diff --git a/src/Synth/OscilGen.h b/src/Synth/OscilGen.h
@@ -53,6 +53,7 @@ class OscilGen{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
//Parameters
diff --git a/src/Synth/Resonance.C b/src/Synth/Resonance.C
@@ -238,11 +238,11 @@ void Resonance::add2XML(XMLwrapper *xml){
xml->addparbool("enabled",Penabled);
if (Penabled==0) return;
- xml->addpar("maxdb",PmaxdB);
- xml->addpar("centerfreq",Pcenterfreq);
- xml->addpar("octavesfreq",Poctavesfreq);
+ xml->addpar("max_db",PmaxdB);
+ xml->addpar("center_freq",Pcenterfreq);
+ xml->addpar("octaves_freq",Poctavesfreq);
xml->addpar("gain",Pgain);
- xml->addparbool("protectthefundamental",Pprotectthefundamental);
+ xml->addparbool("protect_fundamental_frequency",Pprotectthefundamental);
xml->addpar("resonance_points",N_RES_POINTS);
for (int i=0;i<N_RES_POINTS;i++){
xml->beginbranch("RESPOINT",i);
@@ -252,5 +252,19 @@ void Resonance::add2XML(XMLwrapper *xml){
};
+void Resonance::getfromXML(XMLwrapper *xml){
+ Penabled=xml->getparbool("enabled",Penabled);
+
+ PmaxdB=xml->getpar127("max_db",PmaxdB);
+ Pcenterfreq=xml->getpar127("center_freq",Pcenterfreq);
+ Poctavesfreq=xml->getpar127("octaves_freq",Poctavesfreq);
+ Pgain=xml->getpar127("gain",Pgain);
+ Pprotectthefundamental=xml->getparbool("protect_fundamental_frequency",Pprotectthefundamental);
+ for (int i=0;i<N_RES_POINTS;i++){
+ if (xml->enterbranch("RESPOINT",i)==0) continue;
+ Prespoints[i]=xml->getpar127("val",Prespoints[i]);
+ xml->exitbranch();
+ };
+};
diff --git a/src/Synth/Resonance.h b/src/Synth/Resonance.h
@@ -42,6 +42,8 @@ class Resonance{
void add2XML(XMLwrapper *xml);
void defaults();
+ void getfromXML(XMLwrapper *xml);
+
REALTYPE getfreqpos(REALTYPE freq);
REALTYPE getfreqx(REALTYPE x);