zynaddsubfx

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

commit fec6008ec275f404b1227f8f0d0b5e29398649de
parent eb5f46296ac784b707e950aeca8b72c40e82200c
Author: paulnasca <paulnasca>
Date:   Thu, 12 Feb 2004 20:25:08 +0000

*** empty log message ***

Diffstat:
MChangeLog | 1+
Msrc/Makefile | 2+-
Msrc/Misc/Master.C | 22++++++++++++++++++++--
Msrc/Misc/Part.C | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Misc/Part.h | 3+++
Msrc/Misc/XMLwrapper.C | 24++++++++++++++++++++++--
Msrc/Misc/XMLwrapper.h | 9++++++++-
7 files changed, 119 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -531,4 +531,5 @@ 10 Feb 2004 - Adaugata salvarea parametrilor pt. basefunction la OscilGen - 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) diff --git a/src/Makefile b/src/Makefile @@ -51,7 +51,7 @@ subdirs=DSP Effects Input Misc Output Params Synth Seq all: $(MAKE) -C UI $@ - rm -f Make.deps zynaddsubfx zynaddsubfx.exe + rm -f Make.deps @for name in $(subdirs); do sh -c "cd $$name ; $(CXX) -MM -MG -w *.C >> ../Make.deps ; cd .."; done @for name in $(subdirs); do sh -c "make -C $$name $@"; done $(MAKE) objs diff --git a/src/Misc/Master.C b/src/Misc/Master.C @@ -811,12 +811,30 @@ int Master::loadXML(char *filename){ }; void Master::getfromXML(XMLwrapper *xml){ - xml->enterbranch("MASTER"); + 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); - xml->exitbranch(); + + 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")){ + // + xml->exitbranch(); + }; + + + etc. + + +*/ + xml->exitbranch(); + }; }; diff --git a/src/Misc/Part.C b/src/Misc/Part.C @@ -1043,3 +1043,67 @@ int Part::saveXML(char *filename){ delete (xml); return(0); }; + + +void Part::getfromXMLinstrument(XMLwrapper *xml){ + if (xml->enterbranch("INFO")){ + xml->getparstr("name",(char *)Pname,PART_MAX_NAME_LEN); + xml->getparstr("author",(char *)info.Pauthor,MAX_INFO_TEXT_SIZE); + xml->getparstr("comments",(char *)info.Pcomments,MAX_INFO_TEXT_SIZE); + info.Ptype=xml->getpar("type",info.Ptype,0,16); + + xml->endbranch(); + }; + + + + + //!!!!!!!!!!!continui de aici + + + + + + + + + + + + + + + +}; + +void Part::getfromXML(XMLwrapper *xml){ + Penabled=xml->getparbool("enabled",Penabled); + + Pvolume=xml->getpar127("volume",Pvolume); + Ppanning=xml->getpar127("panning",Ppanning); + + Pminkey=xml->getpar127("min_key",Pminkey); + Pmaxkey=xml->getpar127("max_key",Pmaxkey); + Pkeyshift=xml->getpar127("key_shift",Pkeyshift); + Prcvchn=xml->getpar127("rcv_chn",Prcvchn); + + Pvelsns=xml->getpar127("velocity_sensing",Pvelsns); + Pveloffs=xml->getpar127("velocity_offset",Pveloffs); + + Pnoteon=xml->getparbool("note_on",Pnoteon); + 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(); + +}; + + + diff --git a/src/Misc/Part.h b/src/Misc/Part.h @@ -67,6 +67,9 @@ class Part{ void defaults(); void defaultsinstrument(); + void getfromXML(XMLwrapper *xml); + void getfromXMLinstrument(XMLwrapper *xml); + void saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0); void swapcopyitem(int item1,int item2,int mode); diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C @@ -139,7 +139,7 @@ int XMLwrapper::loadXMLfile(char *filename){ FILE *file=fopen(filename,"r"); if (file==NULL) return(-1); - root=tree=mxmlLoadFile(NULL,file,MXML_NO_CALLBACK); + root=tree=mxmlLoadFile(NULL,file,MXML_OPAQUE_CALLBACK); fclose(file); if (tree==NULL) return(-1);//this is not XML @@ -167,11 +167,20 @@ int XMLwrapper::loadXMLfile(char *filename){ int XMLwrapper::enterbranch(char *name){ node=mxmlFindElement(peek(),peek(),name,NULL,NULL,MXML_DESCEND_FIRST); if (node==NULL) return(0); + + push(node); + return(1); +}; + +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); }; + void XMLwrapper::exitbranch(){ pop(); }; @@ -216,6 +225,17 @@ int XMLwrapper::getparbool(char *name,int defaultpar){ else return(0); }; +void XMLwrapper::getparstr(char *name,char *par,int maxstrlen){ + memset(par,0,maxstrlen); + node=mxmlFindElement(peek(),peek(),"string","name",name,MXML_DESCEND_FIRST); + + if (node==NULL) return; + if (node->child==NULL) return; + if (node->child->type!=MXML_OPAQUE) return; + + snprintf(par,maxstrlen,node->child->value.element.name); + +}; /** Private members **/ diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h @@ -73,7 +73,12 @@ class XMLwrapper{ //enter into the branch //returns 1 if is ok, or 0 otherwise int enterbranch(char *name); - + + + //enter into the branch with id + //returns 1 if is ok, or 0 otherwise + int enterbranch(char *name, int id); + //exits from a branch void exitbranch(); @@ -92,6 +97,8 @@ class XMLwrapper{ int getpar127(char *name,int defaultpar); int getparbool(char *name,int defaultpar); + + void getparstr(char *name,char *par,int maxstrlen); private: mxml_node_t *tree;//all xml data mxml_node_t *root;//xml data used by zynaddsubfx