zynaddsubfx

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

commit 95863fcc127a481a8cae6a5f1503cc81256353a1
parent 450a0231d421d05ea7a61ef815bf20d181e69a60
Author: paulnasca <paulnasca>
Date:   Sun, 28 Nov 2004 17:56:04 +0000

*** empty log message ***

Diffstat:
MChangeLog | 3+++
Msrc/Misc/Bank.C | 33+++++++++++++++++++++++++++------
Msrc/Params/PresetsStore.C | 14++++++++++++--
Msrc/Synth/OscilGen.C | 7+++++--
4 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -735,4 +735,7 @@ 07 Nov 2004 - Corectata o mica eroare care facea ca sa nu se incarce corect instrumentele in linia de comanda (-l) 14 Nov 2004 - Nu mai verific in bank daca este un director sau fisier simplu, pt. ca poate sa aiba probleme 28 Nov 2004 - Curatat codul la OscilGen (acum datele sunt stocate mai bine si nu in functie de biblioteca FFTW) + - Corectata o mica eroare la OscilGen cu adaptive harmonics care facea ca energia vechilor armonice sa nu se adauge in mod corect la noile armonice (la note inalte) + - Sortarea nu mai este quicksort la bank si la presets pt. ca am vazut ca nu merge in windows intotdeauna + diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C @@ -213,7 +213,7 @@ void Bank::loadfromslot(unsigned int ninstrument,Part *part){ /* - * Load a bank from a file and makes it current + * Makes current a bank directory */ int Bank::loadbank(const char *bankdirname){ DIR *dir=opendir(bankdirname); @@ -224,6 +224,7 @@ int Bank::loadbank(const char *bankdirname){ if (dirname!=NULL) delete(dirname); dirname=new char[strlen(bankdirname)+1]; snprintf(dirname,strlen(bankdirname)+1,"%s",bankdirname); + bankfiletitle=dirname; // printf("loadbank %s/\n",bankdirname); @@ -354,16 +355,17 @@ int Bank_compar(const void *a,const void *b){ struct Bank::bankstruct *bank1= (Bank::bankstruct *)a; struct Bank::bankstruct *bank2= (Bank::bankstruct *)b; if (((bank1->name)==NULL)||((bank2->name)==NULL)) return(0); - - return(strcasecmp(bank1->name,bank2->name)); + + int result=strcasecmp(bank1->name,bank2->name); + return(result<0); }; + /* * Re-scan for directories containing instrument banks */ void Bank::rescanforbanks(){ - for (int i=0;i<MAX_NUM_BANKS;i++){ if (banks[i].dir!=NULL) delete (banks[i].dir); if (banks[i].name!=NULL) delete (banks[i].name); @@ -372,8 +374,27 @@ void Bank::rescanforbanks(){ }; for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) if (config.cfg.bankRootDirList[i]!=NULL) scanrootdir(config.cfg.bankRootDirList[i]); - - qsort(banks,MAX_NUM_BANKS,sizeof(bankstruct),Bank_compar); + + //sort the banks + for (int j=0;j<MAX_NUM_BANKS-1;j++){ + for (int i=j+1;i<MAX_NUM_BANKS;i++){ + if (Bank_compar(&banks[i],&banks[j])) { + char *tmpname=banks[i].name; + char *tmpdir=banks[i].dir; + + banks[i].name=banks[j].name; + banks[i].dir=banks[j].dir; + + banks[j].name=tmpname; + banks[j].dir=tmpdir; + +/* bankstruct tmp=banks[i]; + banks[i]=banks[j]; + banks[j]=tmp; +*/ + }; + }; + }; }; diff --git a/src/Params/PresetsStore.C b/src/Params/PresetsStore.C @@ -86,7 +86,7 @@ int Presets_compar(const void *a,const void *b){ struct PresetsStore::presetstruct *p2= (PresetsStore::presetstruct *)b; if (((p1->name)==NULL)||((p2->name)==NULL)) return(0); - return(strcasecmp(p1->name,p2->name)); + return(strcasecmp(p1->name,p2->name)<0); }; @@ -122,7 +122,17 @@ void PresetsStore::rescanforpresets(char *type){ closedir(dir); }; - qsort(presets,MAX_PRESETS,sizeof(presetstruct),Presets_compar); + + //sort the presets + for (int j=0;j<MAX_PRESETS-1;j++){ + for (int i=j+1;i<MAX_PRESETS;i++){ + if (Presets_compar(&presets[i],&presets[j])) { + presetstruct tmp=presets[i]; + presets[i]=presets[j]; + presets[j]=tmp; + }; + }; + }; }; void PresetsStore::copypreset(XMLwrapper *xml,char *type, const char *name){ diff --git a/src/Synth/OscilGen.C b/src/Synth/OscilGen.C @@ -742,6 +742,7 @@ void OscilGen::adaptiveharmonic(FFTFREQS f,REALTYPE freq){ down=true; }; +// printf("%d\n",down); for (int i=0;i<OSCIL_SIZE/2-2;i++){ REALTYPE h=i*rap; int high=(int)(i*rap); @@ -751,8 +752,10 @@ void OscilGen::adaptiveharmonic(FFTFREQS f,REALTYPE freq){ break; } else { if (down){ - f.c[high+1]+=inf.c[i+1]; - f.s[high+1]+=inf.s[i+1]; + f.c[high+1]+=inf.c[i+1]*(1.0-low); + f.s[high+1]+=inf.s[i+1]*(1.0-low); + f.c[high+2]+=inf.c[i+1]*low; + f.s[high+2]+=inf.s[i+1]*low; } else { hc=inf.c[high+1]*(1.0-low)+inf.c[high+2]*low; hs=inf.s[high+1]*(1.0-low)+inf.s[high+2]*low;