commit 95863fcc127a481a8cae6a5f1503cc81256353a1
parent 450a0231d421d05ea7a61ef815bf20d181e69a60
Author: paulnasca <paulnasca>
Date: Sun, 28 Nov 2004 17:56:04 +0000
*** empty log message ***
Diffstat:
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;