zynaddsubfx

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

commit 139137f85ff5421383d3aea8f150c371c471685d
parent 80d9775dc6690e5cdb346e6d760b09c093c975ed
Author: paulnasca <paulnasca>
Date:   Fri,  6 Feb 2004 21:39:59 +0000

*** empty log message ***

Diffstat:
MChangeLog | 4+++-
Msrc/Misc/Master.C | 35+++++++++++++++++++++++++++++++----
Msrc/Misc/Master.h | 2++
Msrc/Misc/Part.C | 17++++++++++++++++-
Msrc/Misc/Part.h | 5+++++
Msrc/Misc/XMLwrapper.C | 13+++++--------
Msrc/UI/BankUI.fl | 38+++++++++++++++++++++-----------------
Msrc/UI/MasterUI.fl | 18+++++++++++++++++-
8 files changed, 100 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -523,5 +523,7 @@ 03 Feb 2004 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii 04 Feb 2004 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial) 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 + diff --git a/src/Misc/Master.C b/src/Misc/Master.C @@ -24,7 +24,8 @@ #include "Master.h" #include <stdio.h> - +#include <sys/stat.h> +#include <sys/types.h> Master::Master(){ int npart,nefx; @@ -690,6 +691,35 @@ void Master::saveloadbuf(Buffer *buf){ }; }; +void Master::exportbankasxmldirectory(const char *directory){ + char filename[1000],nostr[10]; + Part *tmppart=new Part(&microtonal,fft,&mutex); + tmppart->Penabled=1; + + mkdir(directory,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + for (int slot=0;slot<128;slot++){ + instrumentdefaultsbuf.changemode(0); + tmppart->saveloadbuf(&instrumentdefaultsbuf,1); + bank.loadfromslot(slot,&slbuf); + slbuf.changemode(0); + tmppart->saveloadbuf(&slbuf,1); + snprintf((char *)tmppart->kit[0].Pname,PART_MAX_NAME_LEN,bank.getname(slot)); + snprintf((char *)tmppart->Pname,PART_MAX_NAME_LEN,bank.getname(slot)); + if (bank.emptyslot(slot)) continue; + + snprintf(nostr,10,"%4d",slot+1); + for (int i=0;i<strlen(nostr);i++) if (nostr[i]==' ') nostr[i]='0'; + + snprintf(filename,1000,"%s/%s-%s.xml",directory,nostr,bank.getname(slot)); + printf("%s\n",filename); + tmppart->saveXML(filename); + }; + + + delete (tmppart); +}; + + void Master::add2XML(XMLwrapper *xml){ @@ -707,9 +737,6 @@ void Master::add2XML(XMLwrapper *xml){ xml->endbranch(); }; - xml->beginbranch("INSERTION_EFFECTS"); - xml->endbranch(); - xml->beginbranch("SYSTEM_EFFECTS"); for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){ xml->beginbranch("SYSEFFECT",nefx); diff --git a/src/Misc/Master.h b/src/Misc/Master.h @@ -41,7 +41,9 @@ class Master{ public: Master(); ~Master(); + void saveloadbuf(Buffer *buf); + void exportbankasxmldirectory(const char *directory); //saves all settings to a XML file //returns 0 for ok, 1 if there is a existing file or -1 if there is an error diff --git a/src/Misc/Part.C b/src/Misc/Part.C @@ -980,7 +980,7 @@ void Part::add2XML(XMLwrapper *xml){ xml->addparbool("polymode",Ppolymode); xml->addpar("keylimit",Pkeylimit); - xml->beginbranch("INSTRUMENTKIT"); + xml->beginbranch("INSTRUMENT"); add2XMLinstrument(xml); xml->endbranch(); @@ -999,3 +999,18 @@ void Part::add2XML(XMLwrapper *xml){ }; }; +int Part::saveXML(char *filename){ + + //sa pun aici un test daca exista fisierul + + XMLwrapper *xml; + xml=new XMLwrapper(); + + xml->beginbranch("INSTRUMENT"); + add2XMLinstrument(xml); + xml->endbranch(); + + xml->saveXMLfile(filename,0); + delete (xml); + return(0); +}; diff --git a/src/Misc/Part.h b/src/Misc/Part.h @@ -56,6 +56,11 @@ class Part{ void saveloadbuf(Buffer *buf,int instrumentonly); //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank) + + //saves the instrument settings to a XML file + //returns 0 for ok, 1 if there is a existing file or -1 if there is an error + int saveXML(char *filename); + void add2XML(XMLwrapper *xml); void add2XMLinstrument(XMLwrapper *xml); diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C @@ -47,9 +47,6 @@ XMLwrapper::XMLwrapper(){ node=root=mxmlNewElement(tree,"zynaddsubfx-data"); -// mxml_node_t *tmp=mxmlNewElement(root,"test1"); -// tmp=mxmlNewElement(tmp,"PARAM11"); -// tmp=mxmlNewElement(tmp,"test3"); }; XMLwrapper::~XMLwrapper(){ @@ -76,20 +73,20 @@ int XMLwrapper::saveXMLfile(char *filename,int compression){ void XMLwrapper::addpar(char *name,int val){ - addparams2("PARAM","name",name,"value",int2str(val)); + addparams2("param","name",name,"value",int2str(val)); }; void XMLwrapper::addparreal(char *name,REALTYPE val){ - addparams2("PARAMREAL","name",name,"value",real2str(val)); + addparams2("paramreal","name",name,"value",real2str(val)); }; void XMLwrapper::addparbool(char *name,int val){ - if (val!=0) addparams2("BOOLPARAM","name",name,"value","yes"); - else addparams2("BOOLPARAM","name",name,"value","no"); + if (val!=0) addparams2("boolparam","name",name,"value","yes"); + else addparams2("boolparam","name",name,"value","no"); }; void XMLwrapper::addparstr(char *name,char *val){ - addparams2("STRPARAM","name",name,"value",val); + addparams2("strparam","name",name,"value",val); }; diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -34,7 +34,7 @@ class BankProcess_ {} { } } -class BankSlot {open : {public Fl_Button,BankProcess_} +class BankSlot {: {public Fl_Button,BankProcess_} } { Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {} { code {what=NULL; @@ -55,8 +55,7 @@ int tmp=Fl_Button::handle(event); if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)(); return(tmp);} {} } - Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {open - } { + Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {} { code {nslot=nslot_; what=what_; whatslot=whatslot_; @@ -68,35 +67,34 @@ align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); highlight=0; refresh();} {} } - Function {refresh()} {open - } { + Function {refresh()} {} { code {if (bank->emptyslot(nslot)) color(46); else color(51); //printf("%s\\n",bank->getnamenumbered(nslot)); -label(bank->getnamenumbered(nslot));} {selected - } +label(bank->getnamenumbered(nslot));} {} } decl {int *what,*whatslot,nslot,highlight;} {} decl {void (BankProcess_:: *fnc)(void);} {} decl {BankProcess_ *bp;} {} } -class BankUI {: {public BankProcess_} +class BankUI {open : {public BankProcess_} } { - Function {make_window()} {} { + Function {make_window()} {open + } { Fl_Window bankuiwindow { label Bank - xywh {16 205 770 430} type Double hide + xywh {16 205 770 430} type Double code0 {o->label(bank->bankfiletitle);} - code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank to use by pressing the 'Load/Use Bank from file...' button or choose 'New Bank...' to make a new bank.");} + code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank to use by pressing the 'Load/Use Bank from file...' button or choose 'New Bank...' to make a new bank.");} visible } { Fl_Button {} { label Close callback {bankuiwindow->hide();} - xywh {543 402 72 24} box THIN_UP_BOX + xywh {555 402 60 24} box THIN_UP_BOX } Fl_Pack {} { xywh {6 6 150 375} box BORDER_BOX @@ -146,7 +144,7 @@ class BankUI {: {public BankProcess_} } } Fl_Button loadusebankfile { - label {Load/Use Bank from file...} + label {Use Bank from file...} callback {const char *filename; filename=fl_file_chooser("Load and use Bank from file:","(*.bnk_zyn)",NULL,0); if (filename==NULL) return; @@ -154,7 +152,7 @@ if (bank->loadfilebank(filename)==2) fl_alert("Error: Could not load the bank from the file.."); for (int i=0;i<128;i++) bs[i]->refresh(); refreshmainwindow();} - xywh {336 387 105 39} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 + xywh {330 387 74 39} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 } Fl_Button {} { label {Save Bank...} @@ -176,7 +174,7 @@ if (result==1) { if (result!=0) fl_alert("Error: Could not save the bank to the file.."); refreshmainwindow();} - xywh {444 387 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 + xywh {410 387 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 } Fl_Button {} { label {New Bank...} @@ -198,14 +196,20 @@ if (result==1) { if (result!=0) fl_alert("Error: Could not save the bank to the file.."); for (int i=0;i<128;i++) bs[i]->refresh(); refreshmainwindow();} - xywh {444 408 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 + xywh {410 408 93 18} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128 } Fl_Check_Button {} { label {auto close} callback {config.cfg.BankUIAutoClose=(int) o->value();} - tooltip {automatically close the bank window if the instrument is loaded} xywh {545 385 65 15} down_box DOWN_BOX labelsize 10 + tooltip {automatically close the bank window if the instrument is loaded} xywh {555 385 60 15} down_box DOWN_BOX labelsize 10 code0 {o->value(config.cfg.BankUIAutoClose);} } + Fl_Button {} { + label {XML export} + callback {const char *tmp=fl_input("Enter the directory:","bank_xml"); +if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected + xywh {508 390 37 35} box PLASTIC_UP_BOX labelsize 11 align 128 + } } } Function {BankUI(Master *master_,int *npart_)} {} { diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl @@ -375,7 +375,7 @@ if (fl_ask("Exit and leave the unsaved data?")) *exitprogram=1; xywh {149 197 390 465} type Double code0 {setfilelabel(NULL);} non_modal visible } { - Fl_Menu_Bar mastermenu {selected + Fl_Menu_Bar mastermenu {open xywh {0 0 690 25} } { submenu {} { @@ -553,6 +553,22 @@ if (result!=0) fl_alert("Error: Could not save the file.");} xywh {10 10 100 20} } { menuitem {} { + label {&Save As XML (EXPERIMENTAL)...} + callback {char *filename; +\#define EXT ".xml" +filename=fl_file_chooser("Save:","(*"EXT")",NULL,0); +if (filename==NULL) return; +filename=fl_filename_setext(filename,EXT); +\#undef EXT + +pthread_mutex_lock(&master->mutex); +master->part[npart]->saveXML(filename); +pthread_mutex_unlock(&master->mutex); + +updatepanel();} selected + xywh {20 20 100 20} divider + } + menuitem {} { label {&New Instrument...} callback {if (fl_ask("Clear instrument's parameters ?")){ int npart=(int)npartcounter->value();