zynaddsubfx

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

commit 7b4a3a32f8aa14e66f8d4e9637f18af38cf4041a
parent 2749f19d371c9b1bcb572681b61592e283d601a3
Author: paulnasca <paulnasca>
Date:   Sun, 29 Feb 2004 11:31:47 +0000

*** empty log message ***

Diffstat:
MChangeLog | 2++
Msrc/Misc/Bank.C | 68+++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Msrc/Misc/Bank.h | 5++++-
Msrc/UI/BankUI.fl | 37+++++++++++++++++--------------------
Msrc/UI/PartUI.fl | 24++++++++++++------------
Msrc/default.bnk_zyn | 0
6 files changed, 90 insertions(+), 46 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -548,5 +548,7 @@ 27 Feb 2004 - Corectate erori la snprintf ( nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori - Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown) - Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator) +28 Feb 2004 - Se poate incarca instrumente din Bank + diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C @@ -41,6 +41,7 @@ Bank::Bank(){ ins[i].used=false; ins[i].filename=NULL; }; + dirname=NULL; clearbank(); @@ -57,12 +58,17 @@ Bank::~Bank(){ * Get the name of an instrument from the bank */ char *Bank::getname (unsigned char ninstrument){ + if (emptyslot(ninstrument)) return (defaultinsname); + return (ins[ninstrument].name); }; /* * Get the numbered name of an instrument from the bank */ char *Bank::getnamenumbered (unsigned char ninstrument){ + if (emptyslot(ninstrument)) return (defaultinsname); + snprintf(tmpinsname[ninstrument],PART_MAX_NAME_LEN+15,"%d. %s",ninstrument+1,getname(ninstrument)); + return(tmpinsname[ninstrument]); }; /* @@ -76,6 +82,10 @@ void Bank::setname(unsigned char ninstrument,const char *newname){ * Check if there is no instrument on a slot from the bank */ int Bank::emptyslot(unsigned char ninstrument){ + if (ninstrument>=BANK_SIZE) return (1); + + if (ins[ninstrument].used) return (0); + else return(1); }; /* @@ -93,8 +103,21 @@ void Bank::savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *buf /* * Loads the instrument from the bank to a buffer */ -void Bank::loadfromslot(unsigned char ninstrument,XMLwrapper *buf){ +void Bank::loadfromslot(unsigned char ninstrument,Part *part){ + if (emptyslot(ninstrument)) return; + if ((dirname==NULL)||(ins[ninstrument].filename==NULL)) return; + + part->defaultsinstrument(); + + char tmpfilename[1001]; + memset(tmpfilename,0,1001); + snprintf(tmpfilename,1000,"%s/%s",dirname,ins[ninstrument].filename); + + printf("load: %s\n",tmpfilename); + + part->loadXMLinstrument(tmpfilename); + }; @@ -104,43 +127,62 @@ void Bank::loadfromslot(unsigned char ninstrument,XMLwrapper *buf){ */ int Bank::loadbank(const char *bankdirname){ DIR *dir=opendir(bankdirname); - clearbank(); if (dir==NULL) return(-1); + if (dirname!=NULL) delete(dirname); + dirname=new char[strlen(bankdirname)+1]; + snprintf(dirname,strlen(bankdirname)+1,"%s",bankdirname); + printf("%s/\n",bankdirname); struct dirent *fn; - while(fn=readdir(dir)){ + while ((fn=readdir(dir))){ if (fn->d_type!=DT_REG) continue;//this is not a regular file const char *filename= fn->d_name; //sa verific daca e si extensia dorita //verify if the name is like this NNNN-name (where N is a digit) - int no=0,startname=0; + int no=0; + unsigned int startname=0; - for (int i=0;i<4;i++) { + for (unsigned int i=0;i<4;i++) { if (strlen(filename)<=i) break; - if ((filename[i]>='0')&&(filename[i]<='9')) no=no*10+(filename[i]-'0'); - else if (startname!=0) startname=i; + if ((filename[i]>='0')&&(filename[i]<='9')) { + no=no*10+(filename[i]-'0'); + startname++; + }; }; + if ((startname+1)<strlen(filename)) startname++;//to take out the "-" + + char name[PART_MAX_NAME_LEN+1]; + memset(name,0,PART_MAX_NAME_LEN+1); + snprintf(name,PART_MAX_NAME_LEN,"%s",filename); + + for (int i=strlen(name)-1;i>=2;i--){ + if (name[i]=='.') { + name[i]='\0'; + break; + }; + }; if (no!=0){//the instrument position in the bank is found - addtobank(no-1,filename,&filename[startname]); + addtobank(no-1,filename,&name[startname]); } else { - addtobank(-1,filename,filename); + addtobank(-1,filename,name); }; }; closedir(dir); + return(0); }; /* @@ -155,11 +197,12 @@ int Bank::newbank(const char *newbankdirname, int overwrite){ int Bank::locked(){ }; - // private stuff void Bank::clearbank(){ for (int i=0;i<BANK_SIZE;i++) deletefrombank(i); + if (dirname!=NULL) delete(dirname); + dirname=NULL; }; int Bank::addtobank(int pos, const char *filename, const char* name){ @@ -186,11 +229,10 @@ int Bank::addtobank(int pos, const char *filename, const char* name){ ins[pos].used=true; snprintf(ins[pos].name,PART_MAX_NAME_LEN,"%s",name); - snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10,"%d. %s",pos,name); - + snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10," "); int len=strlen(filename); ins[pos].filename=new char[len+1]; - snprintf(ins[pos].filename,len,"%s",filename); + snprintf(ins[pos].filename,len+1,"%s",filename); return(0); }; diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h @@ -25,6 +25,7 @@ #include "../globals.h" #include "XMLwrapper.h" +#include "Part.h" #define BANK_SIZE 128 @@ -38,7 +39,7 @@ class Bank{ int emptyslot(unsigned char ninstrument); void clearslot(unsigned char ninstrument); void savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *xml); - void loadfromslot(unsigned char ninstrument,XMLwrapper *xml); + void loadfromslot(unsigned char ninstrument,Part *part); int loadbank(const char *bankdirname); // int savebank(const char *newbankfilename,int overwrite); @@ -65,6 +66,8 @@ class Bank{ char name[PART_MAX_NAME_LEN+1]; char *filename; }ins[BANK_SIZE]; + + char *dirname; }; #endif diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -24,13 +24,13 @@ decl {\#include <FL/Fl_File_Chooser.H>} {public decl {\#include "../Misc/Master.h"} {public } -decl {\#include "../Misc/OldBank.h"} {public +decl {\#include "../Misc/Bank.h"} {selected public } class BankProcess_ {} { Function {process()} {return_type {virtual void} } {} - decl {OldBank *bank;} {public + decl {Bank *bank;} {public } } @@ -55,7 +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_,OldBank *bank_)} {} { + Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_)} {} { code {nslot=nslot_; what=what_; whatslot=whatslot_; @@ -81,15 +81,15 @@ label(bank->getnamenumbered(nslot));} {} decl {BankProcess_ *bp;} {} } -class BankUI {open : {public BankProcess_} +class BankUI {: {public BankProcess_} } { Function {make_window()} {open } { Fl_Window bankuiwindow { label Bank - xywh {16 205 770 430} type Double + xywh {16 205 770 430} type Double hide 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.");} visible + 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.");} } { Fl_Button {} { label Close @@ -148,7 +148,7 @@ class BankUI {open : {public BankProcess_} callback {const char *filename; filename=fl_file_chooser("Load and use Bank from file:","(*.bnk_zyn)",NULL,0); if (filename==NULL) return; -if (bank->loadfilebank(filename)==2) +if (bank->loadbank(filename)==2) fl_alert("Error: Could not load the bank from the file.."); for (int i=0;i<128;i++) bs[i]->refresh(); refreshmainwindow();} @@ -164,10 +164,12 @@ filename=fl_filename_setext(filename,EXT); \#undef EXT if (filename==NULL) return; -int result=bank->savefilebank(filename,0); +//int result=bank->savebank(filename,0); +int result=0; if (result==1) { if (fl_ask("The file exists. \\nOverwrite it?")){ - result=bank->savefilebank(filename,1); +// result=bank->savebank(filename,1); + result=0; } else return; }; @@ -186,10 +188,10 @@ filename=fl_filename_setext(filename,EXT); \#undef EXT if (filename==NULL) return; -int result=bank->newfilebank(filename,0); +int result=bank->newbank(filename,0); if (result==1) { if (fl_ask("The file exists. \\nOverwrite it?")){ - result=bank->newfilebank(filename,1); + result=bank->newbank(filename,1); } else return; }; @@ -207,7 +209,7 @@ refreshmainwindow();} Fl_Button {} { label {XML export} callback {const char *tmp=fl_input("Enter the directory:","bank_xml"); -if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected +if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} xywh {508 390 37 35} box PLASTIC_UP_BOX labelsize 11 align 128 } } @@ -216,7 +218,7 @@ if (tmp!=NULL) master->exportbankasxmldirectory(tmp);} selected code {fnc=&BankProcess_::process; master=master_; npart=npart_; -bank=&master_->oldbank; +bank=&master_->bank; what=0; make_window(); mode=1;} {} @@ -246,11 +248,9 @@ if ((what==1)&&(mode==2)){//save(write) to slot if (!bank->emptyslot(slot)) if (!fl_ask("Overwrite the slot no. %d ?",slot+1)) goto nooverwriteslot; pthread_mutex_lock(&master->mutex); - slbuf.changemode(1); - slbuf.changeminimal(1); master->part[*npart]->saveloadbuf(&slbuf,2); bank->setname(slot,(char *)master->part[*npart]->Pname); - bank->savetoslot(slot,(char *)master->part[*npart]->Pname,&slbuf); + bank->savetoslot(slot,(char *)master->part[*npart]->Pname,NULL); pthread_mutex_unlock(&master->mutex); bs[slot]->refresh(); @@ -261,10 +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); - master->part[*npart]->defaultsinstrument(); - bank->loadfromslot(slot,&slbuf); - slbuf.changemode(0); - master->part[*npart]->saveloadbuf(&slbuf,1); + bank->loadfromslot(slot,master->part[*npart]); pthread_mutex_unlock(&master->mutex); if (master->part[*npart]->disablekitloading==0){ snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN diff --git a/src/UI/PartUI.fl b/src/UI/PartUI.fl @@ -1,5 +1,5 @@ # data file for the Fltk User Interface Designer (fluid) -version 1.0104 +version 1.0200 header_name {.h} code_name {.cc} decl {//Copyright (c) 2002-2003 Nasca Octavian Paul} {} @@ -44,7 +44,7 @@ class PartSysEffSend {: {public Fl_Group} Function {make_window()} {private } { Fl_Window syseffsend { - private xywh {584 83 90 35} hide + private xywh {584 83 90 35} type Double hide class Fl_Group } { Fl_Dial {} { @@ -90,7 +90,7 @@ class PartKitItem {: {public Fl_Group} Function {make_window()} {private } { Fl_Window partkititem { - private xywh {149 528 590 27} hide + private xywh {149 528 590 27} type Double hide class Fl_Group } { Fl_Group partkititemgroup { @@ -260,7 +260,7 @@ class PartUI {: {public Fl_Group,PartUI_} Function {make_window()} {private } { Fl_Window partgroup { - private xywh {149 400 385 180} hide + private xywh {149 400 385 180} type Double hide class Fl_Group } { Fl_Group partgroupui { @@ -342,8 +342,8 @@ if (event==FL_RIGHT_MOUSE){ } else { if (event==FL_LEFT_MOUSE) bankui->show(); else infowin->show(); -};} - tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {155 5 135 20} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 12 align 20 +};} selected + tooltip {left mousebutton - to choose/save/.. from/to bank or right mousebutton to change the name or middle button to change the instrument information} xywh {155 5 135 20} box THIN_DOWN_BOX down_box FLAT_BOX labelfont 1 labelsize 12 align 84 code0 {o->label((char *)part->Pname);} } Fl_Box {} { @@ -463,7 +463,7 @@ maxkcounter->do_callback();} } Fl_Window ctlwindow { label Controllers - private xywh {46 404 420 130} hide + private xywh {46 404 420 130} type Double hide } { Fl_Check_Button {} { label Expr @@ -582,7 +582,7 @@ if (part->ctl.sustain.receive==0) { label {t.dn/up} callback {int x=(int) o->value(); -part->ctl.portamento.updowntimestretch=x;} selected +part->ctl.portamento.updowntimestretch=x;} tooltip {Portamento time stretch (up/down)} xywh {285 60 25 25} labelsize 10 maximum 127 step 1 code0 {o->value(part->ctl.portamento.updowntimestretch);} class WidgetPDial @@ -616,7 +616,7 @@ part->ctl.portamento.updowntimestretch=x;} selected } Fl_Window partfx { label {Part's Insert Effects} - private xywh {110 483 390 145} hide + private xywh {110 483 390 145} type Double hide } { Fl_Counter inseffnocounter { label {Ins.Effect No.} @@ -713,7 +713,7 @@ part->Pefxroute[ninseff]=x;} } Fl_Window instrumentkitlist { label {Instrument Kit} - xywh {70 61 590 370} hide + xywh {70 61 590 370} type Double hide } { Fl_Button {} { label {Close Window} @@ -809,7 +809,7 @@ if (part->Pkitmode==0) { } Fl_Window swapwindow { label {Swap/Copy item} - xywh {384 262 205 100} hide modal + xywh {384 262 205 100} type Double hide modal } { Fl_Counter swap2counter { label to @@ -865,7 +865,7 @@ subsynenabledcheck->value(part->kit[0].Psubenabled);} } Fl_Window infowin { label {Instrument Info} - xywh {224 184 366 343} hide + xywh {224 184 366 343} type Double hide } { Fl_Input {} { label {Author and Copyright} diff --git a/src/default.bnk_zyn b/src/default.bnk_zyn Binary files differ.