zynaddsubfx

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

commit f14e22535c971c9e83c444e351b64eb95dc00d3a
parent 36f2b1f238748b3113576d543f708f0e3dfcba6e
Author: paulnasca <paulnasca>
Date:   Tue, 24 Aug 2004 15:26:55 +0000

*** empty log message ***

Diffstat:
MChangeLog | 1+
Msrc/Effects/EffectMgr.C | 60------------------------------------------------------------
Msrc/Effects/EffectMgr.h | 3---
Msrc/Misc/Bank.h | 1-
Dsrc/Misc/Buffer.C | 277-------------------------------------------------------------------------------
Dsrc/Misc/Buffer.h | 63---------------------------------------------------------------
Msrc/Misc/Makefile | 2+-
Msrc/Misc/Master.C | 182-------------------------------------------------------------------------------
Msrc/Misc/Master.h | 6------
Msrc/Misc/Microtonal.C | 180-------------------------------------------------------------------------------
Msrc/Misc/Microtonal.h | 3---
Dsrc/Misc/OldBank.C | 350-------------------------------------------------------------------------------
Dsrc/Misc/OldBank.h | 62--------------------------------------------------------------
Msrc/Misc/Part.C | 313-------------------------------------------------------------------------------
Msrc/Misc/Part.h | 6+-----
Msrc/Misc/Util.C | 103-------------------------------------------------------------------------------
Msrc/Misc/Util.h | 11-----------
Msrc/Misc/XMLwrapper.C | 2+-
Msrc/Params/ADnoteParameters.C | 303-------------------------------------------------------------------------------
Msrc/Params/ADnoteParameters.h | 3---
Msrc/Params/Controller.C | 71-----------------------------------------------------------------------
Msrc/Params/Controller.h | 2--
Msrc/Params/EnvelopeParams.C | 77-----------------------------------------------------------------------------
Msrc/Params/EnvelopeParams.h | 3---
Msrc/Params/FilterParams.C | 106-------------------------------------------------------------------------------
Msrc/Params/FilterParams.h | 2--
Msrc/Params/LFOParams.C | 52----------------------------------------------------
Msrc/Params/LFOParams.h | 3---
Msrc/Params/SUBnoteParameters.C | 117-------------------------------------------------------------------------------
Msrc/Params/SUBnoteParameters.h | 3---
Msrc/Synth/OscilGen.C | 207-------------------------------------------------------------------------------
Msrc/Synth/OscilGen.h | 7-------
Msrc/Synth/Resonance.C | 59-----------------------------------------------------------
Msrc/Synth/Resonance.h | 2--
Msrc/UI/BankUI.fl | 17++---------------
Msrc/UI/MasterUI.fl | 89++-----------------------------------------------------------------------------
36 files changed, 8 insertions(+), 2740 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -701,5 +701,6 @@ - Makefile-ul modificat, a.i. make-ul sa se opreasca in caz de eroare - Terminat managerul de preset-uri 23 Aug 2004 - Adaugata posibilitatea de a se vedea direct din lista cu bancile de instrumente +24 Aug 2004 - Inlaturat complet suportul pentru formatele *.mas_zyn, *.ins_zyn, *.bnk_zyn si *.scl_zyn \ No newline at end of file diff --git a/src/Effects/EffectMgr.C b/src/Effects/EffectMgr.C @@ -241,66 +241,6 @@ void EffectMgr::setdryonly(bool value){ dryonly=value; }; - -/* - * Save or load the parameters to/from the buffer - */ -void EffectMgr::saveloadbuf(Buffer *buf){ - unsigned char npar,p,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"%s","\n( EffectPparameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - - if (npar==0xff) break; - - switch (npar){ - case 0x80: p=geteffect(); - buf->rwbytepar(n,&p); - if (buf->getmode()==0) { - changeeffect(p); - for (n=0;n<128;n++){ - seteffectpar_nolock(n,0); - }; - }; - break; - case 0x81: if (buf->getmode()!=0) { - for (unsigned char np=0;np<0x7f;np++){ - p=geteffectpar(np); - if (p==0) continue;//do not save parameters if they are zero - buf->rwbyte(&npar); - buf->rwbyte(&np); - buf->rwbyte(&p); - }; - } else { - unsigned char np; - buf->rwbyte(&np); - buf->rwbyte(&p); - seteffectpar_nolock(np,p); - }; - break; - case 0x82: if (efx!=NULL) buf->rwbytepar(n,&(efx->Ppreset)); - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - void EffectMgr::add2XML(XMLwrapper *xml){ xml->addpar("type",geteffect()); diff --git a/src/Effects/EffectMgr.h b/src/Effects/EffectMgr.h @@ -34,7 +34,6 @@ #include "Distorsion.h" #include "EQ.h" #include "DynamicFilter.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "../Params/FilterParams.h" #include "../Params/Presets.h" @@ -45,8 +44,6 @@ class EffectMgr:public Presets{ EffectMgr(int insertion_,pthread_mutex_t *mutex_); ~EffectMgr(); - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h @@ -35,7 +35,6 @@ #define MAX_NUM_BANKS 400 - class Bank{ public: Bank(); diff --git a/src/Misc/Buffer.C b/src/Misc/Buffer.C @@ -1,277 +0,0 @@ -//this file/class is obsolete and should be removed - -/* - ZynAddSubFX - a software synthesizer - - Buffer.C - A buffer used to save/load parameters - Copyright (C) 2002-2004 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#include <stdio.h> -#include "Buffer.h" - -Buffer::Buffer(){ - mode=1; - minimal=0; - datak=datasize=0; - data=firstdata=NULL; -}; - -Buffer::~Buffer(){ - resetbuffer(); -}; - -/* - * Get or set byte to/from buffer (depends on the mode) - */ -void Buffer::rwbyte(unsigned char *b){ - if (data==NULL){//first time - data=new list; - firstdata=data; - for (int i=0;i<BUFFER_CHUNK_SIZE;i++) - data->d[i]=0xff; - datak=0; - data->next=NULL; - }; - - if (mode==0) *b=data->d[datak]; - else { - data->d[datak]=*b; - datasize++; - }; - - datak++; - - if (datak>=BUFFER_CHUNK_SIZE) { - if (mode==0) {//read from the buffer - if (data->next!=NULL) data=data->next; - else { - *b=0xff; - for (int i=0;i<BUFFER_CHUNK_SIZE;i++) data->d[i]=0xff; - }; - } else {//write to the buffer - list *tmp=new list; - tmp->next=NULL; - for (int i=0;i<BUFFER_CHUNK_SIZE;i++) - tmp->d[i]=0xff; - data->next=tmp; - data=tmp; - }; - datak=0; - }; - -#ifdef DEBUG_BUFFER - if (*b<16) fprintf(stderr,"0"); - fprintf(stderr,"[%d]%x ",mode,*b); -// fprintf(stderr,"%x ",*b); -// if (*b==0xff) fprintf(stderr,"*"); - fflush(stderr); -#endif -}; - -/* - * Get or set byte to/from buffer (depends on the mode) - * Also get the byte with parameter number. - */ -void Buffer::rwbytepar(unsigned char npar,unsigned char *b){ - if (mode!=0) rwbyte(&npar); - rwbyte(b); - if (mode==0) *b &= 0x7f; -#ifdef DEBUG_BUFFER - fprintf(stderr," "); -#endif -}; - - -/* - * Get or set word to/from buffer (depends on the mode) - */ -void Buffer::rwword(unsigned short int *s){ - unsigned char b1,b2; - b1= *s/128; - b2= *s%128; - rwbyte(&b1); - rwbyte(&b2); - if (mode==0) *s=b1*128+b2; - -#ifdef DEBUG_BUFFER - fprintf(stderr," "); -#endif -}; - -/* - * Get or set word to/from buffer (depends on the mode) - * Also get the parameter number. - */ -void Buffer::rwwordpar(unsigned char npar,unsigned short int *s){ - if (mode!=0) rwbyte(&npar); - rwword(s); - -#ifdef DEBUG_BUFFER - fprintf(stderr," "); -#endif -}; - -/* - * Get or set word to/from buffer (depends on the mode) - * Also get the parameter number. - * Wrap if the word is less than 0. - */ -void Buffer::rwwordparwrap(unsigned char npar,short int *s){ - unsigned short int tmp; - if (mode!=0) rwbyte(&npar); - - if (getmode()!=0) { - tmp=(0x4000+ *s)%0x4000; - rwword(&tmp); - } else { - rwword(&tmp); - *s =tmp; - if (tmp>0x2000) *s=(signed short int)tmp-0x4000; - }; - -#ifdef DEBUG_BUFFER - fprintf(stderr," "); -#endif -}; - - -/* - * Reset the buffer - */ -void Buffer::resetbuffer(){ - datak=0; - datasize=0; - data=firstdata; - - if (data==NULL) return; - while (data->next!=NULL){ - list *tmp=data; - data=data->next; - delete(tmp); - }; - - delete(data); - data=firstdata=NULL; - -}; - -/* - * Change the mode: 0 => the buffer becomes a read buffer - other value => the buffer becomes a write buffer - */ -void Buffer::changemode(int mode){ - -// fprintf(stderr,"ch %d %d \n",this->mode,mode); - if (mode!=0) resetbuffer(); - else { - datak=0; - data=firstdata; - }; - this->mode=mode; -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n-=CHANGING MODE (%d)=-\n\n",mode); -#endif -}; - -/* - * Get the mode of the buffer (0=read, other value=write) - */ -int Buffer::getmode(){ - return(this->mode); -}; - -/* - * Change the "minimal" value of the buffer - * If it is different than 0, the program will not save into the buffer - * unused data (like disabled parts..) - */ -void Buffer::changeminimal(int minimal){ - this->minimal=minimal; -}; - -/* - * Get the "minimal" mode - */ -int Buffer::getminimal(){ - return(this->minimal); -}; - - -/* - * skip if there are data that are saved on "better" specifications - * (eg. a part or a voice that are higher - * than the number of theese suported by the program) - * This is used if you load some data with an older version of the program - */ -void Buffer::skipbranch(){ - unsigned char tmp=0,k=1; - int found0xfe=0; - do { - this->rwbyte(&tmp); - if (tmp==0xfe) { - k++; - found0xfe=1; - }; - if (tmp==0xff) k--; - } while ((k>1)||(found0xfe==0)); -}; - -/* - * Dumps all data from the buffer (used to save to file) - */ -void Buffer::getalldata(int n,unsigned char *d){ -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n-= GET ALL DATA=-\n\n"); -#endif - int tmpmode=mode,tmpdatak=datak; - list *tmpdata=data; - mode=0;//read - datak=0; - data=firstdata; - - for (int k=0;k<n;k++) rwbyte(&d[k]); - - mode=tmpmode; - datak=tmpdatak; - data=tmpdata; -}; - -/* - * Dumps all data to the buffer (used to load file) - */ -void Buffer::putalldata(int n,unsigned char *d){ -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n-= DUMP ALL DATA=-\n\n"); -#endif - resetbuffer(); - - mode=1;//write - for (int k=0;k<n;k++) rwbyte(&d[k]); - datak=0; - datasize=n; -}; - -/* - * Get the size of the data stored in the buffer (used by save/load to/from file) - */ -int Buffer::getsize(){ - return(datasize); -}; - - diff --git a/src/Misc/Buffer.h b/src/Misc/Buffer.h @@ -1,63 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - Buffer.h - A buffer used to save/load parameters - Copyright (C) 2002-2004 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#ifndef BUFFER_H -#define BUFFER_H -#include "../globals.h" - -//#define DEBUG_BUFFER - -class Buffer{ -#define BUFFER_CHUNK_SIZE 1000 - public: - Buffer(); - ~Buffer(); - int getmode(); - int getminimal(); - void changeminimal(int minimal); - void changemode(int mode); - void rwbyte(unsigned char *b);//read or write byte - void rwbytepar(unsigned char npar,unsigned char *b);//read or write a parameter - - void rwword(unsigned short int *s);//read or write word - void rwwordpar(unsigned char npar,unsigned short int *s); - void rwwordparwrap(unsigned char npar,short int *s); - void skipbranch(); - void resetbuffer(); - - int getsize(); - void getalldata(int n,unsigned char *d); - void putalldata(int n,unsigned char *d); - - private: - - struct list{ - unsigned char d[BUFFER_CHUNK_SIZE]; - struct list *next; - } *data,*firstdata; - - int datak,datasize; - int mode;//0 - read, 1 write - int minimal;//If it is different than 0, the program will not save into the buffer unused data (like disabled parts..) -}; - -#endif diff --git a/src/Misc/Makefile b/src/Misc/Makefile @@ -1,6 +1,6 @@ include ../Makefile.inc -objects=Bank.o OldBank.o Buffer.o Master.o Microtonal.o Part.o Util.o Config.o Dump.o XMLwrapper.o +objects=Bank.o Master.o Microtonal.o Part.o Util.o Config.o Dump.o XMLwrapper.o all: $(objects) diff --git a/src/Misc/Master.C b/src/Misc/Master.C @@ -535,188 +535,6 @@ void Master::vuresetpeaks(){ }; -/* - * Get the effect volume for the system effect - */ -void Master::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n\n\n( MASTER parameters) \n"); - if (buf->getmode()==1)fprintf(stderr,"\nTest LOAD\n"); - else fprintf(stderr,"\nTest SAVE\n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Master - case 0x80: buf->rwbytepar(n,&Pvolume); - if (buf->getmode()==0) setPvolume(Pvolume); - break; - case 0x81: buf->rwbytepar(n,&Pkeyshift); - if (buf->getmode()==0) setPkeyshift(Pkeyshift); - break; - case 0xA0: if (buf->getmode()!=0) {//save the Parts - for (unsigned char npart=0;npart<NUM_MIDI_PARTS;npart++){ - if ((buf->getminimal()!=0) && (part[npart]->Penabled==0)) continue; - buf->rwbyte(&npar); - buf->rwbyte(&npart);//Write the number of part - part[npart]->saveloadbuf(buf,0); - }; - } else {//load the Part - unsigned char npart; - buf->rwbyte(&npart); - if (npart<NUM_MIDI_PARTS) { - part[npart]->disablekitloading=0; - part[npart]->saveloadbuf(buf,0); - } else buf->skipbranch(); - }; - break; - case 0xB0: if (buf->getmode()!=0) {//SYSTEM EFFECTS - for (unsigned char neffect=0;neffect<NUM_SYS_EFX;neffect++){ - buf->rwbyte(&npar); - buf->rwbyte(&neffect); - sysefx[neffect]->saveloadbuf(buf); - }; - } else { - unsigned char neffect; - buf->rwbyte(&neffect); - if (neffect<NUM_SYS_EFX) sysefx[neffect]->saveloadbuf(buf); - else buf->skipbranch(); - }; - break; - case 0xB1: if (buf->getmode()!=0) {//Part send to System Effects - for (unsigned char neffect=0;neffect<NUM_SYS_EFX;neffect++){ - for (unsigned char npart=0;npart<NUM_MIDI_PARTS;npart++){ - buf->rwbyte(&npar); - buf->rwbyte(&npart); - buf->rwbyte(&neffect); - buf->rwbyte(&Psysefxvol[neffect][npart]); - }; - }; - } else { - unsigned char neffect,npart; - buf->rwbyte(&npart); - buf->rwbyte(&neffect); - if ((npart<NUM_MIDI_PARTS) && (neffect<NUM_SYS_EFX)){ - buf->rwbyte(&tmp); - setPsysefxvol(npart,neffect,tmp); - } else buf->rwbyte(&tmp); - }; - break; - case 0xB2: if (buf->getmode()!=0) {//System Effect send to System Effect - for (unsigned char neff1=0;neff1<NUM_SYS_EFX;neff1++){ - for (unsigned char neff2=0;neff2<NUM_SYS_EFX;neff2++){ - buf->rwbyte(&npar); - buf->rwbyte(&neff1); - buf->rwbyte(&neff2); - buf->rwbyte(&Psysefxsend[neff1][neff2]); - }; - }; - } else { - unsigned char neff1,neff2; - buf->rwbyte(&neff1); - buf->rwbyte(&neff2); - if ((neff1<NUM_SYS_EFX) && (neff2<NUM_SYS_EFX)){ - buf->rwbyte(&tmp); - setPsysefxsend(neff1,neff2,tmp); - } else buf->rwbyte(&tmp); - }; - break; - case 0xC0: if (buf->getmode()!=0) {//INSERTION EFFECTS - for (unsigned char neffect=0;neffect<NUM_INS_EFX;neffect++){ - buf->rwbyte(&npar); - buf->rwbyte(&neffect); - insefx[neffect]->saveloadbuf(buf); - }; - } else { - unsigned char neffect; - buf->rwbyte(&neffect); - if (neffect<NUM_INS_EFX) insefx[neffect]->saveloadbuf(buf); - else buf->skipbranch(); - }; - break; - case 0xC1: if (buf->getmode()!=0) { - for (unsigned int neffect=0;neffect<NUM_INS_EFX;neffect++){ - buf->rwbyte(&npar); - buf->rwwordparwrap(neffect,&Pinsparts[neffect]); - }; - } else { - unsigned char neffect; - buf->rwbyte(&neffect); - buf->rwwordparwrap(npar,&Pinsparts[neffect]); - if (Pinsparts[neffect]>=NUM_MIDI_PARTS) Pinsparts[neffect]=-1; - }; - break; - case 0xD0: if (buf->getmode()!=0) buf->rwbyte(&npar); - microtonal.saveloadbuf(buf); - break; - case 0xE0: buf->rwbytepar(n,&ctl.NRPN.receive); - break; - - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - -void Master::exportbankasxmldirectory(const char *bankfilename){ - char filename[1000],directory[1000],nostr[10]; - Part *tmppart=new Part(&microtonal,fft,&mutex); - tmppart->Penabled=1; - - - int pos=strlen(bankfilename)-20; - if (pos<0) pos=0; - snprintf(directory,1000,"export-%s",&bankfilename[pos]); - for (int i=0;i<(int)strlen(directory);i++){ - if ((directory[i]=='/')||(directory[i]=='\\')||(directory[i]=='.')) - directory[i]='_'; - }; - - -#ifdef OS_WINDOWS - mkdir(directory); -#else - mkdir(directory,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -#endif - for (int slot=0;slot<128;slot++){ - tmppart->defaults(); - oldbank.loadfilebank(bankfilename); - oldbank.loadfromslot(slot,&slbuf); - slbuf.changemode(0); - tmppart->saveloadbuf(&slbuf,1); - snprintf((char *)tmppart->kit[0].Pname,PART_MAX_NAME_LEN,"%s",oldbank.getname(slot)); - snprintf((char *)tmppart->Pname,PART_MAX_NAME_LEN,"%s",oldbank.getname(slot)); - if (oldbank.emptyslot(slot)) continue; - - snprintf(nostr,10,"%4d",slot+1); - for (int i=0;i<(int)strlen(nostr);i++) if (nostr[i]==' ') nostr[i]='0'; - - snprintf(filename,1000,"%s/%s-%s.xiz",directory,nostr,oldbank.getname(slot)); - printf("%s\n",filename); - tmppart->saveXML(filename); - }; - - bank.loadbank(directory); - - delete (tmppart); -}; - - void Master::applyparameters(){ for (int npart=0;npart<NUM_MIDI_PARTS;npart++){ diff --git a/src/Misc/Master.h b/src/Misc/Master.h @@ -27,11 +27,9 @@ #include "../globals.h" #include "../Effects/EffectMgr.h" #include "Part.h" -#include "../Misc/Buffer.h" #include "../Output/Recorder.h" #include "Microtonal.h" -#include "OldBank.h" #include "Bank.h" #include "Dump.h" #include "../Seq/Sequencer.h" @@ -43,9 +41,6 @@ class Master{ Master(); ~Master(); - void saveloadbuf(Buffer *buf); - void exportbankasxmldirectory(const char *bankfilename); - //saves all settings to a XML file //returns 0 for ok or <0 if there is an error int saveXML(char *filename); @@ -126,7 +121,6 @@ class Master{ //other objects Microtonal microtonal; - OldBank oldbank; Bank bank; FFTwrapper *fft; diff --git a/src/Misc/Microtonal.C b/src/Misc/Microtonal.C @@ -384,186 +384,6 @@ int Microtonal::loadkbm(const char *filename){ }; -/* - * Save or load the parameters to/from the buffer - */ -void Microtonal::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Microtonal parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Microtonal parameters - case 0x80: buf->rwbytepar(n,&Penabled); - break; - case 0x81: buf->rwbytepar(n,&Pinvertupdown); - break; - case 0x82: buf->rwbytepar(n,&Pinvertupdowncenter); - break; - case 0x83: buf->rwbytepar(n,&PAnote); - break; - case 0x84: if (buf->getmode()!=0){ - buf->rwbyte(&npar); - unsigned short int freqint=(unsigned short int) floor(PAfreq); - if (freqint>16383) freqint=16383; - buf->rwword(&freqint); - unsigned short int freqmod=(unsigned short int)(fmod(PAfreq,1.0)*10000.0); - buf->rwword(&freqmod); - } else { - unsigned short int freqint; - buf->rwword(&freqint); - unsigned short int freqmod; - buf->rwword(&freqmod); - PAfreq=freqint+freqmod/10000.0; - }; - break; - case 0x85: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && (Penabled==0)) break; - buf->rwbytepar(n,&Pscaleshift); - break; - case 0x86: if (buf->getmode()!=0){ - if ((Penabled==0) && (buf->getminimal()!=0)) break; - for (unsigned char k=0;k<octavesize;k++){ - buf->rwbyte(&npar); - tmp=0;buf->rwbyte(&tmp);//need in the future if the octave will be >127 keys - buf->rwbyte(&k); - buf->rwbyte(&octave[k].type); - unsigned int x=octave[k].x1; - tmp=x/16384;buf->rwbyte(&tmp); - tmp=(x%16384)/128;buf->rwbyte(&tmp); - tmp=x%128;buf->rwbyte(&tmp); - x=octave[k].x2; - tmp=x/16384;buf->rwbyte(&tmp); - tmp=(x%16384)/128;buf->rwbyte(&tmp); - tmp=x%128;buf->rwbyte(&tmp); - }; - } else { - buf->rwbyte(&tmp); //need in the future for octacesize>127 - unsigned char k; - buf->rwbyte(&k); - if (k>=MAX_OCTAVE_SIZE) k=MAX_OCTAVE_SIZE; - buf->rwbyte(&octave[k].type); - unsigned int x=0; - buf->rwbyte(&tmp);x=tmp*(int) 16384; - buf->rwbyte(&tmp);x+=tmp*(int) 128; - buf->rwbyte(&tmp);x+=tmp; - octave[k].x1=x; - buf->rwbyte(&tmp);x=tmp*(int) 16384; - buf->rwbyte(&tmp);x+=tmp*(int) 128; - buf->rwbyte(&tmp);x+=tmp; - octave[k].x2=x; - - if (octave[k].type==1) { - octave[k].tuning=pow(2.0 - ,(octave[k].x1+octave[k].x2/(REALTYPE)1e6)/1200.0); - }; - if (octave[k].type==2) { - if (octave[k].x2==0) octave[k].x2=1; - octave[k].tuning=octave[k].x1/(REALTYPE) octave[k].x2; - }; - - }; - break; - case 0x87: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && (Penabled==0)) break; - buf->rwbytepar(n,&octavesize); - break; - case 0x88: if (buf->getmode()!=0){ - if ((Penabled==0) && (buf->getminimal()!=0)) break; - buf->rwbyte(&npar); - int k=strlen((char *)Pname); - if (k>MICROTONAL_MAX_NAME_LEN-2) { - k=MICROTONAL_MAX_NAME_LEN-2; - }; - Pname[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=Pname[i]; - buf->rwbyte(&tmp); - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=MICROTONAL_MAX_NAME_LEN-2)){ - buf->rwbyte(&tmp); - Pname[k++]=tmp; - }; - Pname[k]='\0'; - }; - break; - case 0x89: if (buf->getmode()!=0){ - if ((Penabled==0) && (buf->getminimal()!=0)) break; - buf->rwbyte(&npar); - int k=strlen((char *)Pcomment); - if (k>MICROTONAL_MAX_NAME_LEN-2) { - k=MICROTONAL_MAX_NAME_LEN-2; - }; - Pcomment[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=Pcomment[i]; - buf->rwbyte(&tmp); - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=MICROTONAL_MAX_NAME_LEN-2)){ - buf->rwbyte(&tmp); - Pcomment[k++]=tmp; - }; - Pcomment[k]='\0'; - }; - break; - case 0x90: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && (Penabled==0)) break; - buf->rwbytepar(n,&Pmappingenabled); - break; - case 0x91: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && ((Penabled==0)||(Pmappingenabled==0))) break; - buf->rwbytepar(n,&Pfirstkey); - break; - case 0x92: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && ((Penabled==0)||(Pmappingenabled==0))) break; - buf->rwbytepar(n,&Plastkey); - break; - case 0x93: if ((buf->getmode()!=0) && (buf->getminimal()!=0) && ((Penabled==0)||(Pmappingenabled==0))) break; - buf->rwbytepar(n,&Pmiddlenote); - break; - case 0x94: if (buf->getmode()!=0){ - if ((buf->getminimal()!=0) && ((Penabled==0)||(Pmappingenabled==0))) break; - buf->rwbyte(&npar); - buf->rwbyte(&Pmapsize); - for (unsigned char k=0;k<Pmapsize;k++){ - unsigned short int tmp=16383;//-1 - if (Pmapping[k]>=0) tmp=Pmapping[k]; - buf->rwword(&tmp); - }; - } else { - buf->rwbyte(&Pmapsize); - for (unsigned char k=0;k<Pmapsize;k++){ - unsigned short int tmp; - buf->rwword(&tmp); - if (tmp!=16383) Pmapping[k]=tmp; - else Pmapping[k]=-1; - }; - }; - break; - case 0x95: buf->rwbytepar(n,&Pglobalfinedetune); - break; - - }; - }; - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - void Microtonal::add2XML(XMLwrapper *xml){ xml->addparstr("name",(char *) Pname); diff --git a/src/Misc/Microtonal.h b/src/Misc/Microtonal.h @@ -24,7 +24,6 @@ #define MICROTONAL_H #include "../globals.h" -#include "Buffer.h" #include "XMLwrapper.h" #define MAX_OCTAVE_SIZE 128 @@ -86,8 +85,6 @@ class Microtonal{ unsigned char *Pname; unsigned char *Pcomment; - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); int saveXML(char *filename); diff --git a/src/Misc/OldBank.C b/src/Misc/OldBank.C @@ -1,350 +0,0 @@ -//this file/class is obsolete and should be removed - -/* - ZynAddSubFX - a software synthesizer - - OldBank.h - Instrument OldBank (Obsolete) - Copyright (C) 2002-2004 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#include "OldBank.h" -#include <string.h> -#include <stdio.h> -#include <stdlib.h> - -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> - -OldBank::OldBank(){ - bankfilename=NULL;bankfiletitle=NULL;lock=1; - ZERO(&defaultinsname,PART_MAX_NAME_LEN); - snprintf(defaultinsname,PART_MAX_NAME_LEN,"%s"," "); - for (int i=0;i<128;i++){ - ZERO(&ins[i].name[0],PART_MAX_NAME_LEN); - ins[i].size=0; - ins[i].data=NULL; - }; -}; - -OldBank::~OldBank(){ - savefile(); -}; - - -/* - * Get the name of an instrument from the bank - */ -char *OldBank::getname (unsigned char ninstrument){ - if (emptyslot(ninstrument)) return (&defaultinsname[0]); - return(&ins[ninstrument].name[0]); -}; - -/* - * Get the numbered name of an instrument from the bank - */ -char *OldBank::getnamenumbered (unsigned char ninstrument){ - if (ninstrument>=128) return(&tmpinsname[0][0]); - ZERO(&tmpinsname[ninstrument][0],PART_MAX_NAME_LEN+15); - snprintf(&tmpinsname[ninstrument][0],PART_MAX_NAME_LEN,"%d. %s",ninstrument+1,getname(ninstrument)); - return(&tmpinsname[ninstrument][0]); -}; - -/* - * Changes the name of an instrument - */ -void OldBank::setname(unsigned char ninstrument,const char *newname){ - if (emptyslot(ninstrument)) return; - strncpy(&ins[ninstrument].name[0],newname,PART_MAX_NAME_LEN-1); - ins[ninstrument].name[PART_MAX_NAME_LEN-1]='\0';//just in case - getnamenumbered (ninstrument); -}; - -/* - * Check if there is no instrument on a slot from the bank - */ -int OldBank::emptyslot(unsigned char ninstrument){ - if (ninstrument>=128) return(1); - if (ins[ninstrument].data==NULL) return (1); - else return(0); -}; - -/* - * Removes the instrument from the bank - */ -void OldBank::clearslot(unsigned char ninstrument){ - if (ninstrument>=128) return; - ins[ninstrument].name[0]='\0'; - ins[ninstrument].size=0; - if (ins[ninstrument].data!=NULL) delete (ins[ninstrument].data); - ins[ninstrument].data=NULL; -}; - -/* - * Save the instrument to a slot (the instrument is stored in a buffer who was filled - * with instrument parameters) - */ -void OldBank::savetoslot(unsigned char ninstrument,const char *name,Buffer *buf){ - if (ninstrument>=128) return; - clearslot(ninstrument); - ins[ninstrument].size=buf->getsize(); - ins[ninstrument].data=new unsigned char [buf->getsize()]; - buf->getalldata(buf->getsize(),ins[ninstrument].data); - setname(ninstrument,name); - savefile(); -}; - -/* - * Loads the instrument from the bank to a buffer (who will be "dumped" to instrument parameters) - */ -void OldBank::loadfromslot(unsigned char ninstrument,Buffer *buf){ - if (emptyslot(ninstrument)!=0) return; - buf->putalldata(ins[ninstrument].size,ins[ninstrument].data); - buf->changemode(0); -}; - -/* - * Loads the bank from the current file - */ -int OldBank::loadfile(){ - int file; - - file=open(bankfilename,O_RDONLY|O_BINARY,00444+00222); - if (file==-1) return(2);//something went wrong (access denied,..etc.) - - //Load the id. - char id[2]; - read(file,&id,2); - if ((id[0]!='N')||(id[1]!='P')) { - close(file); - return(3);//invalid data - }; - - //Load the format descriptor - unsigned char fmt; //0x00..0x7f - read(file,&fmt,1); - unsigned char type=fmt%0x10; - if (type!=3){ - close(file); - return(4);//the data is loaded as something wrong (eg. a master is loaded as a instrument) - }; - //coding=fmt/0x10; - - //load the crc - unsigned char CRC; //0x00..0x7f - read(file,&CRC,1); - //if (CRC!=0){};CHECK IF IT IS OK - - //get the meta_data - this has to be changed in future - unsigned short int metadatasize; - read (file,&metadatasize,2); - char tmp[2]; - read (file,&tmp[0],2); - - int err=0,ni=0; - do { - clearslot(ni); - //get the slot number (used only to see if there is a error) - unsigned char slotnr; - read (file,&slotnr,1); - if (slotnr!=ni){ - err=1; - break; - }; - //get the name - unsigned char namesize; - read (file,&namesize,1); - ZERO(&ins[ni].name[0],PART_MAX_NAME_LEN);//???????? - read (file,&ins[ni].name[0],namesize); - //get the data - unsigned int datasize; - read (file,&datasize,4); - if (datasize!=0){ - ins[ni].data=new unsigned char [datasize]; - ins[ni].size=datasize; - for (unsigned int i=0;i<datasize;i++) ins[ni].data[i]=0xff;//if the file data will be not loaded (because of some error), the data is filled with "Buffer exit codes" - if (read (file,&ins[ni].data[0],datasize)==-1) { - err=1; - break; - }; - }; - //get the meta_data - this has to be changed in future - unsigned short int metadatasize; - read (file,&metadatasize,2); - char tmp[2]; - read (file,&tmp[0],2); - - ni++; - } while ((err==0)&&(ni<128)); - - if (err!=0) { - fprintf(stderr,"The bank file is corrupt.\n"); - if (ni<128) clearslot(ni); - }; - close(file); - return(0); -}; - -/* - * Saves the bank to the current file - */ -int OldBank::savefile(){ - int file; - if (lock!=0) return(2); - file=open(bankfilename,O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,00444+00222);//overwrite if the file exists - if (file==-1) return(2);//something went wrong (access denied,..etc.) - - //Save the id. - char id[2]; id[0]='N';id[1]='P'; - write(file,&id,2); - - //Save the format descriptor (for future formats) - unsigned char type=3,//bank - coding=0;//the encoding (Raw, 7 bit encoding,compressed) (0x00..0x07) - unsigned char fmt=type+coding*0x10; //0x00..0x7f - write(file,&fmt,1); - - //Save the CRC or 0 for no CRC - unsigned char CRC=0;//todo, if I do the CRC I do: crc=1+crc % 127;! - write (file,&CRC,1); - - //write the bank meta_data buffer (for future versions) - unsigned short int metadatasize=2; - write (file,&metadatasize,2); - char tmp[2]; tmp[0]=0xfe;tmp[1]=0xff; - write (file,&tmp[0],metadatasize); - - //Save the data - for (int ni=0;ni<128;ni++){ - //write the slot number (used only to see if there is a error) - unsigned char slotnr=ni; - write (file,&slotnr,1); - //write the instrument name - unsigned char namesize=strlen(ins[ni].name); - if (namesize>=PART_MAX_NAME_LEN) namesize=PART_MAX_NAME_LEN; - write (file,&namesize,1); - write (file,&ins[ni].name[0],namesize); - //write the instrument data - unsigned int datasize=ins[ni].size; - write (file,&datasize,4); - write (file,&ins[ni].data[0],datasize); - //write the instrument meta_data buffer (for future versions) - unsigned short int metadatasize=2; - write (file,&metadatasize,2); - char tmp[2]; tmp[0]=0xfe;tmp[1]=0xff; - write (file,&tmp[0],metadatasize); - }; - - close(file); - return(0); -}; - - -/* - * Change the current bank filename - */ -void OldBank::changebankfilename(const char *newbankfilename,int ro){ - if (bankfilename!=NULL) delete(bankfilename); - bankfilename=new char [strlen(newbankfilename)+2]; - ZERO(bankfilename,(int) strlen(newbankfilename)+2); - sprintf(bankfilename,"%s",newbankfilename); - - if (bankfiletitle!=NULL) delete(bankfiletitle); - bankfiletitle=new char [strlen(newbankfilename)+50]; - ZERO(bankfiletitle,(int) strlen(newbankfilename)+50); - if (ro==0) sprintf(bankfiletitle,"OldBank: %s",newbankfilename); - else sprintf(bankfiletitle,"OldBank: (LOCKED) %s",newbankfilename); -}; - -/* - * Load a bank from a file and makes it current - */ -int OldBank::loadfilebank(const char *newbankfilename){ - int file,err=0; - if (bankfilename!=NULL) savefile();//save the current bank - file=open(newbankfilename,O_RDWR|O_BINARY); - if (file==-1) err=1; - close(file); - if (err!=0){ - file=open(newbankfilename,O_RDONLY|O_BINARY); - if (file==-1) err=2; - close(file); - }; - if (err==2) return(2);//the file cannot be opened - - if (err==0) { - changebankfilename(newbankfilename,0); - lock=0; - } else { - changebankfilename(newbankfilename,1); - lock=1; - }; - - if (loadfile()!=0) { - lock=1; - return(2);//something went wrong - }; - if (err==0) return(0);//ok - else return(1);//the file is openend R/O -}; - -/* - * Save the bank to a file and makes it current - */ -int OldBank::savefilebank(const char *newbankfilename, int overwrite){ - int file; - if (overwrite==0) file=open(newbankfilename,O_CREAT|O_EXCL|O_WRONLY|O_BINARY,00444+00222); - else file=open(newbankfilename,O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,00444+00222);//overwrite if the file exists - if (file==-1) { - if (errno==EEXIST) return(1);//file exists already - else return(2);//Access Denied or any other problem - }; - lock=0; - changebankfilename(newbankfilename,0); - savefile(); - return(0); -}; - -/* - * Makes a new bank, put it on a file and makes it current bank - */ -int OldBank::newfilebank(const char *newbankfilename, int overwrite){ - int file; - savefile();//saves the current bank before changing the file - if (overwrite==0) file=open(newbankfilename,O_CREAT|O_EXCL|O_WRONLY|O_BINARY,00444+00222); - else file=open(newbankfilename,O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,00444+00222);//overwrite if the file exists - if (file==-1) { - if (errno==EEXIST) return(1);//file exists already - else return(2);//Access Denied or any other problem - }; - lock=0; - changebankfilename(newbankfilename,0); - for (int i=0;i<128;i++) clearslot(i); - savefile(); - return(0); -}; - -/* - * Check if the bank is locked (i.e. the file opened was readonly) - */ -int OldBank::locked(){ - return(lock); -}; - diff --git a/src/Misc/OldBank.h b/src/Misc/OldBank.h @@ -1,62 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - Bank.C - Instrument Bank - Copyright (C) 2002-2004 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#ifndef OLD_BANK_H -#define OLD_BANK_H - -#include "../globals.h" -#include "Buffer.h" - -class OldBank{ - public: - OldBank(); - ~OldBank(); - char *getname(unsigned char ninstrument); - char *getnamenumbered(unsigned char ninstrument); - void setname(unsigned char ninstrument,const char *newname); - int emptyslot(unsigned char ninstrument); - void clearslot(unsigned char ninstrument); - void savetoslot(unsigned char ninstrument,const char *name,Buffer *buf); - void loadfromslot(unsigned char ninstrument,Buffer *buf); - int loadfilebank(const char *newbankfilename); - int savefilebank(const char *newbankfilename,int overwrite); - int newfilebank(const char *newbankfilename,int overwrite); - - char *bankfiletitle; //this is shown on the UI of the bank (the title of the window) - int locked(); - private: - void changebankfilename(const char *newbankfilename,int ro); - int savefile(); - int loadfile(); - - int lock; - char *bankfilename; - char defaultinsname[PART_MAX_NAME_LEN],tmpinsname[128][PART_MAX_NAME_LEN+20]; - struct insstuct{ - char name[PART_MAX_NAME_LEN]; - unsigned int size; - unsigned char *data; - } ins[128]; -}; - -#endif - diff --git a/src/Misc/Part.C b/src/Misc/Part.C @@ -629,319 +629,6 @@ void Part::setkititemstatus(int kititem,int Penabled_){ - -void Part::saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0){ - unsigned char npar,n,tmp; -// int fmon,min,fmexton;//fmon is 0 if there is no need to save the FM parameters - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n( Part paramete kit item %d) \n",item); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - if (item>=NUM_KIT_ITEMS){//too big kit item - buf->skipbranch(); - return; - }; - - for (n=0x80;n<0xF0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - case 0x81: buf->rwbytepar(n,&kit[item].Pmuted); - break; - case 0x82: buf->rwbytepar(n,&kit[item].Pminkey); - break; - case 0x83: buf->rwbytepar(n,&kit[item].Pmaxkey); - break; - case 0x84: buf->rwbytepar(n,&kit[item].Psendtoparteffect); - break; - case 0x90: buf->rwbytepar(n,&kit[item].Padenabled); - break; - case 0x91: buf->rwbytepar(n,&kit[item].Psubenabled); - break; - case 0xA0: if (buf->getmode()!=0){//saving - if ((buf->getminimal()!=0)&&(kit[item].Padenabled==0)) break; - if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as kit[0].adpars) - if (kit[item].adpars==NULL) break; - buf->rwbyte(&npar); - }; - kit[item].adpars->saveloadbuf(buf); - break; - case 0xA1: if (buf->getmode()!=0){//saving - if ((buf->getminimal()!=0)&&(kit[item].Psubenabled==0)) break; - if ((item==0)&&(saveitem0==0)) break;//the first item parameters are already saved (as kit[0].subpars) - if (kit[item].subpars==NULL) break; - buf->rwbyte(&npar); - }; - - kit[item].subpars->saveloadbuf(buf); - break; - case 0xB0: if (buf->getmode()!=0) { - buf->rwbyte(&npar); - int k=strlen( (char *) kit[item].Pname); - if (k>PART_MAX_NAME_LEN-2) { - k=PART_MAX_NAME_LEN-2; - }; - kit[item].Pname[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=kit[item].Pname[i]; - buf->rwbyte(&tmp); - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=PART_MAX_NAME_LEN-2)){ - buf->rwbyte(&tmp); - kit[item].Pname[k++]=tmp; - }; - kit[item].Pname[k]='\0'; - }; - - }; - }; - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; - -}; - -/* - * Save or load the parameters to/from the buffer - */ -void Part::saveloadbuf(Buffer *buf,int instrumentonly){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Part parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - - if ((buf->getmode()==0)&&(disablekitloading==0)){//clears all kit items - for (int item=0;item<NUM_KIT_ITEMS;item++) { - if (item>0) setkititemstatus(item,0); - kit[item].Pmuted=0; - kit[item].Pminkey=0;kit[item].Pmaxkey=127; - kit[item].Padenabled=0;kit[item].Psubenabled=0; - kit[item].Psendtoparteffect=0; - for (int i=0;i<PART_MAX_NAME_LEN;i++) kit[item].Pname[i]='\0'; - }; - }; - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Part parameters - case 0x80: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Penabled); - if (buf->getmode()==0) cleanup(); - break; - case 0x81: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pvolume); - if (buf->getmode()==0) setPvolume(Pvolume); - break; - case 0x82: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Ppanning); - if (buf->getmode()==0) setPpanning(Ppanning); - break; - case 0x83: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pvelsns); - break; - case 0x84: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pveloffs); - break; - case 0x85: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pkeyshift); - break; - case 0x86: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Prcvchn); - break; - case 0x87: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pnoteon); - break; - case 0x88: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pminkey); - break; - case 0x89: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pmaxkey); - break; - case 0x8A: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Ppolymode); - break; - case 0x8B: if (instrumentonly!=0) break; - buf->rwbytepar(n,&Pkeylimit); - break; - //Instrument data - case 0xB0: buf->rwbytepar(n,&kit[0].Padenabled); - break; - case 0xB1: buf->rwbytepar(n,&kit[0].Psubenabled); - break; - case 0xB2: tmp=0; - if ((disablekitloading!=0)&&(buf->getmode()==0)) - buf->rwbytepar(n,&tmp); - else buf->rwbytepar(n,&Pkitmode); - break; - case 0xB3: buf->rwbytepar(n,&Pdrummode); - break; - case 0xB8: buf->rwbytepar(n,&info.Ptype); - break; - case 0xB9: if (buf->getmode()!=0) { - buf->rwbyte(&npar); - int k=strlen( (char *) info.Pauthor); - if (k>MAX_INFO_TEXT_SIZE-1) { - k=MAX_INFO_TEXT_SIZE-1; - }; - info.Pauthor[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=info.Pauthor[i]; - if (tmp>127) tmp=127; - buf->rwbyte(&tmp); - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=MAX_INFO_TEXT_SIZE-1)){ - buf->rwbyte(&tmp); - info.Pauthor[k++]=tmp; - }; - info.Pauthor[k]='\0'; - }; - break; - case 0xBA: if (buf->getmode()!=0) { - buf->rwbyte(&npar); - int k=strlen( (char *) info.Pcomments); - if (k>MAX_INFO_TEXT_SIZE-1) { - k=MAX_INFO_TEXT_SIZE-1; - }; - info.Pcomments[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=info.Pcomments[i]; - if (tmp>127) tmp=127; - buf->rwbyte(&tmp); - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=MAX_INFO_TEXT_SIZE-1)){ - buf->rwbyte(&tmp); - info.Pcomments[k++]=tmp; - }; - info.Pcomments[k]='\0'; - }; - break; - case 0xC0: if ((buf->getminimal()!=0) && (buf->getmode()!=0) - && (kit[0].Padenabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - kit[0].adpars->saveloadbuf(buf); - break; - case 0xC1: if ((buf->getminimal()!=0) && (buf->getmode()!=0) - && (kit[0].Psubenabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - kit[0].subpars->saveloadbuf(buf); - break; - case 0xD0: if (buf->getmode()!=0) { - if (instrumentonly!=2){ - buf->rwbyte(&npar); - int k=strlen( (char *) Pname); - if (k>PART_MAX_NAME_LEN-2) { - k=PART_MAX_NAME_LEN-2; - }; - Pname[k]='\0'; - for (int i=0;i<k+1;i++){ - unsigned char tmp=Pname[i]; - buf->rwbyte(&tmp); - }; - }; - } else { - unsigned char k=0,tmp=1; - while ((tmp!=0)&&(k<=PART_MAX_NAME_LEN-2)){ - buf->rwbyte(&tmp); - Pname[k++]=tmp; - }; - Pname[k]='\0'; - }; - break; - case 0xE0: if (instrumentonly!=0) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - ctl.saveloadbuf(buf); - break; - case 0xE1: if (buf->getmode()!=0) {//PART INSERTION EFFECTS - for (unsigned char neffect=0;neffect<NUM_PART_EFX;neffect++){ - buf->rwbyte(&npar); - buf->rwbyte(&neffect); - partefx[neffect]->saveloadbuf(buf); - }; - } else { - unsigned char neffect; - buf->rwbyte(&neffect); - if (neffect<NUM_PART_EFX) partefx[neffect]->saveloadbuf(buf); - else buf->skipbranch(); - }; - break; - //Kit Parameters - case 0xE2: if (buf->getmode()!=0) {//save - if (Pkitmode==0) break; - for (unsigned char item=0;item<NUM_KIT_ITEMS;item++){ - if (kit[item].Penabled==0) continue; - buf->rwbyte(&npar); - buf->rwbyte(&item);//Write the item's number - saveloadbufkititem(buf,item,0); - }; - } else {//load - if (disablekitloading!=0) { - buf->skipbranch(); - break; - }; - unsigned char item; - buf->rwbyte(&item); - if (item<NUM_KIT_ITEMS){ - setkititemstatus(item,1); - saveloadbufkititem(buf,item,0); - } else buf->skipbranch(); - }; - break; - case 0xE3: if (buf->getmode()!=0) {//part insertion effect routing - for (unsigned char neffect=0;neffect<NUM_PART_EFX;neffect++){ - buf->rwbyte(&npar); - buf->rwbyte(&neffect); - buf->rwbyte(&Pefxroute[neffect]); - }; - } else { - unsigned char neffect; - buf->rwbyte(&neffect); - if (neffect<NUM_PART_EFX) { - buf->rwbyte(&Pefxroute[neffect]); - if (Pefxroute[neffect]==127) Pefxroute[neffect]=1; - } else buf->rwbyte(&neffect);//this line just throw away the byte - }; - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; - -}; - - void Part::add2XMLinstrument(XMLwrapper *xml){ xml->beginbranch("INFO"); xml->addparstr("name",(char *)Pname); diff --git a/src/Misc/Part.h b/src/Misc/Part.h @@ -55,7 +55,6 @@ class Part{ /* The synthesizer part output */ void ComputePartSmps();//Part output - void saveloadbuf(Buffer *buf,int instrumentonly); //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank) @@ -75,9 +74,6 @@ class Part{ void getfromXML(XMLwrapper *xml); void getfromXMLinstrument(XMLwrapper *xml); - - void saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0); - void cleanup(); // ADnoteParameters *ADPartParameters; @@ -128,7 +124,7 @@ class Part{ REALTYPE *partoutl;//Left channel output of the part REALTYPE *partoutr;//Right channel output of the part - REALTYPE *partfxinputl[NUM_PART_EFX+1],*partfxinputr[NUM_PART_EFX+1];//Left and right signal that pass thru part effects; partfxinputl/r[NUM_PART_EFX] is for "no effect" buffer + REALTYPE *partfxinputl[NUM_PART_EFX+1],*partfxinputr[NUM_PART_EFX+1];//Left and right signal that pass thru part effects; partfxinput l/r [NUM_PART_EFX] is for "no effect" buffer enum NoteStatus{KEY_OFF,KEY_PLAYING,KEY_RELASED_AND_SUSTAINED,KEY_RELASED}; diff --git a/src/Misc/Util.C b/src/Misc/Util.C @@ -35,11 +35,6 @@ int SAMPLE_RATE=44100; int SOUND_BUFFER_SIZE=256; int OSCIL_SIZE=512; -Buffer slbuf;//the Buffer used for save/load parameters to/from disk - -Buffer masterdefaultsbuf;//this is used to store all parameters at start of program and reload when I need to clear all data (eg. before loading master parameters) -Buffer instrumentdefaultsbuf;//this is used to store all instrument parameters at start of program and reload when I need to clear all data (eg. before loading instrument parameters) -Buffer clipboardbuf;//buffer used for the clipboard Config config; REALTYPE *denormalkillbuf; @@ -95,104 +90,6 @@ REALTYPE getdetune(unsigned char type,unsigned short int coarsedetune,unsigned s }; - - -/* - * Save buffer to file - */ -int savebufferfile(Buffer *buf,const char *filename,int overwrite,int whatIsave){ - unsigned char *data=NULL; - int n,file=0; - - n=buf->getsize(); - data=new unsigned char[n+1]; - buf->getalldata(n,data); - - if (overwrite==0) file=open(filename,O_CREAT|O_EXCL|O_WRONLY|O_BINARY,00444+00222); - else file=open(filename,O_CREAT|O_WRONLY|O_TRUNC|O_BINARY,00444+00222);//overwrite if the file exists - if (file==-1) { - if (errno==EEXIST) return(1);//file exists already - else return(2);//Access Denied or any other problem - }; - - //Save the id. - char id[2]; id[0]='N';id[1]='P'; - write(file,&id,2); - - //Save the format descriptor (for future formats) - unsigned char type=whatIsave,//what the data represents? ( Master/Effect/Voice 0x00..0x0f) - coding=0;//the encoding (Raw, 7 bit encoding,compressed) (0x00..0x07) - unsigned char fmt=type+coding*0x10; //0x00..0x7f - write(file,&fmt,1); - - //Save the CRC or 0 for no CRC - unsigned CRC=0;//todo, if I do the CRC I do: crc=1+crc % 127;! - write (file,&CRC,1); - - //Save the data - int result=write(file,data,n); - if (result== -1) return(2); - close(file); - - delete (data); - return(0);//OK -}; - -/* - * Load the buffer from the file - */ -int loadbufferfile(Buffer *buf,const char *filename,int whatIload){ - int n=512,file=0,result,i; - unsigned char b=0; - unsigned char *data=new unsigned char[n]; - - buf->resetbuffer(); - buf->changemode(1); - - file=open(filename,O_RDONLY|O_BINARY,00444+00222); - - if (file==-1) { - return(2);//Access Denied or any other problem - }; - - //Load the id. - char id[2]; - read(file,&id,2); - if ((id[0]!='N')||(id[1]!='P')) { - close(file); - return(3);//invalid data - }; - - //Load the format descriptor - unsigned char fmt; //0x00..0x7f - read(file,&fmt,1); - unsigned char type=fmt%0x10; - if (type!=whatIload){ - close(file); - return(4);//the data is loaded as something wrong (eg. a master is loaded as a instrument) - }; -// coding=fmt/0x10; - - //load the crc - unsigned char CRC; //0x00..0x7f - read(file,&CRC,1); -// if (CRC!=0){};CHECK IF IT IS OK - - //Load the data - do { - result=read(file,data,n); - for (i=0;i<result;i++){ - b=data[i]; - buf->rwbyte(&b);//I need to write the data to a buffer and process it according to a format - }; - } while (result!=0); - - if (result== -1) return(2); - close(file); - delete(data); - return(0);//OK -}; - bool fileexists(char *filename){ struct stat tmp; int result=stat(filename,&tmp); diff --git a/src/Misc/Util.h b/src/Misc/Util.h @@ -25,7 +25,6 @@ #include <pthread.h> #include "../globals.h" -#include "Buffer.h" #include "Microtonal.h" #include "../DSP/FFTwrapper.h" #include "Config.h" @@ -33,16 +32,6 @@ //Velocity Sensing function extern REALTYPE VelF(REALTYPE velocity,unsigned char scaling); -//Buffer used for Save/Load -extern Buffer slbuf; - -//the buffer used as clipboard -extern Buffer clipboardbuf; - -extern int savebufferfile(Buffer *buf,const char *filename,int overwrite,int whatIsave); -extern int loadbufferfile(Buffer *buf,const char *filename,int whatIload); -//whatIsave and whatIload are 0 for Master,1 Voice,2 for Microtonal... - bool fileexists(char *filename); #define N_DETUNE_TYPES 4 //the number of detune types diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C @@ -84,7 +84,7 @@ XMLwrapper::XMLwrapper(){ node=root=mxmlNewElement(tree,"ZynAddSubFX-data"); mxmlElementSetAttr(root,"version-major","1"); - mxmlElementSetAttr(root,"version-minor","0"); + mxmlElementSetAttr(root,"version-minor","1"); //make the empty branch that will contain the information parameters info=addparams0("INFORMATION"); diff --git a/src/Params/ADnoteParameters.C b/src/Params/ADnoteParameters.C @@ -213,309 +213,6 @@ ADnoteParameters::~ADnoteParameters(){ }; -/* - * Save or load the voice parameters to/from the buffer - */ -void ADnoteParameters::saveloadbufvoice(Buffer *buf,unsigned char nvoice){ - unsigned char npar,n,tmp; - int fmon,min,fmexton;//fmon is 0 if there is no need to save the FM parameters - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n\n( ADnoteParameters VOICE %d) \n",nvoice); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - if (nvoice>=NUM_VOICES){//too big voice - buf->skipbranch(); - return; - }; - - if ((buf->getminimal()!=0) && (buf->getmode()!=0)) min=1; else min=0; - if (min && (VoicePar[nvoice].PFMEnabled==0)) fmon=1; else fmon=0; - if (min && (VoicePar[nvoice].PFMVoice!= -1)) fmexton=1; else fmexton=0; - - for (n=0x80;n<0xF0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Misc Voice Parameters - case 0x80: buf->rwbytepar(n,&VoicePar[nvoice].Enabled); - break; - case 0x81: buf->rwbytepar(n,&VoicePar[nvoice].PDelay); - break; - case 0x82: buf->rwbytepar(n,&VoicePar[nvoice].PPanning); - break; - case 0x83: buf->rwbytepar(n,&VoicePar[nvoice].Poscilphase); - break; - case 0x84: buf->rwwordparwrap(n,&VoicePar[nvoice].Pextoscil); - if (VoicePar[nvoice].Pextoscil>nvoice-1) VoicePar[nvoice].Pextoscil=-1; - break; - case 0x85: if ((VoicePar[nvoice].Pextoscil!= -1) && (min)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].OscilSmp->saveloadbuf(buf); - break; - case 0x86: buf->rwbytepar(n,&VoicePar[nvoice].Presonance); - break; - case 0x87: buf->rwbytepar(n,&VoicePar[nvoice].Type); - break; - //Amplitude Global Parameters - case 0x90: buf->rwbytepar(n,&VoicePar[nvoice].PVolume); - break; - case 0x91: buf->rwbytepar(n,&VoicePar[nvoice].PAmpVelocityScaleFunction); - break; - case 0x92: buf->rwbytepar(n,&VoicePar[nvoice].PAmpEnvelopeEnabled); - break; - case 0x93: buf->rwbytepar(n,&VoicePar[nvoice].PAmpLfoEnabled); - break; - case 0x94: buf->rwbytepar(n,&VoicePar[nvoice].PVolumeminus); - break; - case 0x98: if ((min) && (VoicePar[nvoice].PAmpLfoEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].AmpLfo->saveloadbuf(buf); - break; - case 0x99: if ((min) && (VoicePar[nvoice].PAmpEnvelopeEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].AmpEnvelope->saveloadbuf(buf); - break; - - - //Frequency Voice Parameters - case 0xA0: buf->rwwordpar(n,&VoicePar[nvoice].PDetune); - break; - case 0xA1: buf->rwwordpar(n,&VoicePar[nvoice].PCoarseDetune); - break; - case 0xA2: buf->rwbytepar(n,&VoicePar[nvoice].PFreqEnvelopeEnabled); - break; - case 0xA3: buf->rwbytepar(n,&VoicePar[nvoice].PFreqLfoEnabled); - break; - case 0xA4: buf->rwbytepar(n,&VoicePar[nvoice].PDetuneType); - break; - case 0xA5: buf->rwbytepar(n,&VoicePar[nvoice].Pfixedfreq); - break; - case 0xA6: buf->rwbytepar(n,&VoicePar[nvoice].PfixedfreqET); - break; - case 0xA8: if ((min) && (VoicePar[nvoice].PFreqLfoEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FreqLfo->saveloadbuf(buf); - break; - case 0xA9: if ((min) && (VoicePar[nvoice].PFreqEnvelopeEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FreqEnvelope->saveloadbuf(buf); - break; - - //Filter Voice Parameters - case 0xB0: buf->rwbytepar(n,&VoicePar[nvoice].PFilterEnabled); - break; - case 0xB1: buf->rwbytepar(n,&VoicePar[nvoice].PFilterEnvelopeEnabled); - break; - case 0xB2: buf->rwbytepar(n,&VoicePar[nvoice].PFilterLfoEnabled); - break; - case 0xB3: buf->rwbytepar(n,&VoicePar[nvoice].Pfilterbypass); - break; - case 0xB8: if ((min) && (VoicePar[nvoice].PFilterEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].VoiceFilter->saveloadbuf(buf); - break; - case 0xB9: if ((min) && ((VoicePar[nvoice].PFilterEnabled==0) || (VoicePar[nvoice].PFilterLfoEnabled==0))) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FilterLfo->saveloadbuf(buf); - break; - case 0xBA: if ((min) && ((VoicePar[nvoice].PFilterEnabled==0) || (VoicePar[nvoice].PFilterEnvelopeEnabled==0))) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FilterEnvelope->saveloadbuf(buf); - break; - - //FM Voice Parameters - case 0xC0: buf->rwbytepar(n,&VoicePar[nvoice].PFMEnabled); - break; - case 0xC1: if (fmon) break; - buf->rwwordparwrap(n,&VoicePar[nvoice].PFMVoice); - if (VoicePar[nvoice].PFMVoice>nvoice-1) VoicePar[nvoice].PFMVoice=-1; - break; - case 0xC2: if ((fmon)||(fmexton)) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMoscilphase); - break; - case 0xC3: if (fmon) break; - buf->rwwordparwrap(n,&VoicePar[nvoice].PextFMoscil); - if (VoicePar[nvoice].PextFMoscil>nvoice-1) VoicePar[nvoice].PextFMoscil=-1; - break; - case 0xC4: if (fmon) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMVolume); - break; - case 0xC5: if (fmon) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMVolumeDamp); - break; - case 0xC6: if (fmon) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMVelocityScaleFunction); - break; - case 0xC7: if ((fmon)||(fmexton)) break; - buf->rwwordpar(n,&VoicePar[nvoice].PFMDetune); - break; - case 0xC8: if ((fmon)||(fmexton)) break; - buf->rwwordpar(n,&VoicePar[nvoice].PFMCoarseDetune); - break; - case 0xC9: if (fmon) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMAmpEnvelopeEnabled); - break; - case 0xCA: if ((fmon)||(fmexton)) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMFreqEnvelopeEnabled); - break; - case 0xCB: if (fmon) break; - buf->rwbytepar(n,&VoicePar[nvoice].PFMDetuneType); - break; - case 0xD0: if ((fmon) || (fmexton)) break; - if ((VoicePar[nvoice].PextFMoscil!= -1) && (min)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FMSmp->saveloadbuf(buf); - break; - case 0xD1: if (fmon) break; - if ((VoicePar[nvoice].PFMAmpEnvelopeEnabled==0) && (min)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FMAmpEnvelope->saveloadbuf(buf); - break; - case 0xD2: if ((fmon)||(fmexton)) break; - if ((VoicePar[nvoice].PFMFreqEnvelopeEnabled==0) && (min)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - VoicePar[nvoice].FMFreqEnvelope->saveloadbuf(buf); - break; - - }; - }; - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; - - - -}; - -/* - * Save or load the parameters to/from the buffer - */ -void ADnoteParameters::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( ADnoteParameters Global) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - if (buf->getmode()==0){ - for (unsigned int nvoice=0;nvoice<NUM_VOICES;nvoice++){ - VoicePar[nvoice].Enabled=0; - }; - }; - - for (n=0x80;n<0xF0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Misc Global Parameters - case 0x80: buf->rwbytepar(n,&GlobalPar.PStereo); - break; - case 0x81: buf->rwbytepar(n,&GlobalPar.PPanning); - break; - case 0x82: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.Reson->saveloadbuf(buf); - break; - //Amplitude Global Parameters - case 0x90: buf->rwbytepar(n,&GlobalPar.PVolume); - if (buf->getmode()==0) GlobalPar.PVolume=(int) (GlobalPar.PVolume*0.85); - break; - case 0x91: buf->rwbytepar(n,&GlobalPar.PAmpVelocityScaleFunction); - break; - case 0x92: buf->rwbytepar(n,&GlobalPar.PPunchStrength); -// break; do not try to correct this by adding break... Other things will go wrong - case 0x93: buf->rwbytepar(n,&GlobalPar.PPunchTime); -// break; do not try to correct this by adding break... Other things will go wrong - case 0x94: buf->rwbytepar(n,&GlobalPar.PPunchStretch); -// break; do not try to correct this by adding break... Other things will go wrong - case 0x95: buf->rwbytepar(n,&GlobalPar.PPunchVelocitySensing); -// break; do not try to correct this by adding break... Other things will go wrong - case 0x98: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.AmpLfo->saveloadbuf(buf); - break; - case 0x99: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.AmpEnvelope->saveloadbuf(buf); - break; - - - //Frequency Global Parameters - case 0xA0: buf->rwwordpar(n,&GlobalPar.PDetune); - break; - case 0xA1: buf->rwwordpar(n,&GlobalPar.PCoarseDetune); - break; - case 0xA2: buf->rwbytepar(n,&GlobalPar.PDetuneType); - break; - case 0xA8: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.FreqLfo->saveloadbuf(buf); - break; - case 0xA9: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.FreqEnvelope->saveloadbuf(buf); - break; - - - //Filter Global Parameters - case 0xB0: buf->rwbytepar(n,&GlobalPar.PFilterVelocityScale); - break; - case 0xB1: buf->rwbytepar(n,&GlobalPar.PFilterVelocityScaleFunction); - break; - case 0xB8: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.GlobalFilter->saveloadbuf(buf); - break; - case 0xB9: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.FilterLfo->saveloadbuf(buf); - break; - case 0xBA: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalPar.FilterEnvelope->saveloadbuf(buf); - break; - - //Voices Parameters - case 0xC0: if (buf->getmode()!=0) { - for (unsigned char nvoice=0;nvoice<NUM_VOICES;nvoice++){ - int mustbesaved=0; - for (int i=0;i<NUM_VOICES;i++){ - if ((VoicePar[i].Pextoscil!=1)||(VoicePar[i].PextFMoscil!=1)) - mustbesaved=1; - }; - if ((buf->getminimal()!=0) && (VoicePar[nvoice].Enabled==0) && - (mustbesaved!=0)) continue; - buf->rwbyte(&npar); - buf->rwbyte(&nvoice);//Write the number of voice - saveloadbufvoice(buf,nvoice); - }; - } else { - unsigned char nvoice; - buf->rwbyte(&nvoice); - saveloadbufvoice(buf,nvoice); - }; - break; - - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; void ADnoteParameters::add2XMLsection(XMLwrapper *xml,int n){ diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h @@ -265,9 +265,6 @@ class ADnoteParameters:public Presets{ void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); - void saveloadbuf(Buffer *buf); - void saveloadbufvoice(Buffer *buf,unsigned char nvoice); - private: void defaults(int n);//n is the nvoice diff --git a/src/Params/Controller.C b/src/Params/Controller.C @@ -245,77 +245,6 @@ void Controller::setparameternumber(unsigned int type,int value){ }; -/* - * Save or load the parameters to/from the buffer - */ -void Controller::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Controller parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Controller parameters - case 0x80: buf->rwwordparwrap(n,&pitchwheel.bendrange); - break; - case 0x81: buf->rwbytepar(n,&expression.receive); - break; - case 0x82: buf->rwbytepar(n,&panning.depth); - break; - case 0x83: buf->rwbytepar(n,&filtercutoff.depth); - break; - case 0x84: buf->rwbytepar(n,&filterq.depth); - break; - case 0x85: buf->rwbytepar(n,&bandwidth.depth); - break; - case 0x86: buf->rwbytepar(n,&modwheel.depth); - break; - case 0x87: buf->rwbytepar(n,&fmamp.receive); - break; - case 0x88: buf->rwbytepar(n,&volume.receive); - break; - case 0x89: buf->rwbytepar(n,&sustain.receive); - break; - case 0x8A: buf->rwbytepar(n,&portamento.receive); - break; - case 0x8B: buf->rwbytepar(n,&portamento.time); - break; - case 0x8C: buf->rwbytepar(n,&portamento.pitchthresh); - break; - case 0x8D: buf->rwbytepar(n,&portamento.pitchthreshtype); - break; - case 0x8E: buf->rwbytepar(n,&portamento.portamento); - break; - case 0x8F: buf->rwbytepar(n,&resonancecenter.depth); - break; - case 0x90: buf->rwbytepar(n,&resonancebandwidth.depth); - break; - case 0x91: buf->rwbytepar(n,&modwheel.exponential); - break; - case 0x92: buf->rwbytepar(n,&portamento.updowntimestretch); - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - void Controller::add2XML(XMLwrapper *xml){ xml->addpar("pitchwheel_bendrange",pitchwheel.bendrange); diff --git a/src/Params/Controller.h b/src/Params/Controller.h @@ -25,7 +25,6 @@ #define CONTROLLER_H #include "../globals.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" class Controller{ @@ -33,7 +32,6 @@ class Controller{ Controller(); ~Controller(); void resetall(); - void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); void defaults(); diff --git a/src/Params/EnvelopeParams.C b/src/Params/EnvelopeParams.C @@ -141,83 +141,6 @@ void EnvelopeParams::converttofree(){ -/* - * Save or load the parameters to/from the buffer - */ -void EnvelopeParams::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp,np; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Envelope parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - if (Envmode==1) Plinearenvelope=1; - - for (n=0x80;n<0xF0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Envelope parameters - case 0x80: buf->rwbytepar(n,&Pfreemode); - break; - case 0x81: buf->rwbytepar(n,&Penvstretch); - break; - case 0x82: buf->rwbytepar(n,&Pforcedrelease); - break; - case 0x83: buf->rwbytepar(n,&Penvpoints); - break; - case 0x84: buf->rwbytepar(n,&Penvsustain); - break; - case 0x85: buf->rwbytepar(n,&Plinearenvelope); - break; - case 0x90: if (buf->getmode()!=0){ - for (np=0;np<Penvpoints;np++){ - buf->rwbytepar(n,&np); - buf->rwbyte(&Penvdt[np]); - buf->rwbyte(&Penvval[np]); - }; - } else { - buf->rwbytepar(np,&np); - if (np<MAX_ENVELOPE_POINTS){//for safety - buf->rwbyte(&Penvdt[np]); - buf->rwbyte(&Penvval[np]); - } else{ - buf->rwbyte(&tmp); - buf->rwbyte(&tmp); - }; - }; - break; - case 0xA0: buf->rwbytepar(n,&PA_dt); - break; - case 0xA1: buf->rwbytepar(n,&PD_dt); - break; - case 0xA2: buf->rwbytepar(n,&PR_dt); - break; - case 0xA3: buf->rwbytepar(n,&PA_val); - break; - case 0xA4: buf->rwbytepar(n,&PD_val); - break; - case 0xA5: buf->rwbytepar(n,&PS_val); - break; - case 0xA6: buf->rwbytepar(n,&PR_val); - break; - }; - }; - - if (Pfreemode==0) converttofree(); - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - void EnvelopeParams::add2XML(XMLwrapper *xml){ xml->addparbool("free_mode",Pfreemode); xml->addpar("env_points",Penvpoints); diff --git a/src/Params/EnvelopeParams.h b/src/Params/EnvelopeParams.h @@ -24,7 +24,6 @@ #define ENVELOPE_PARAMS_H #include "../globals.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "Presets.h" @@ -41,11 +40,9 @@ class EnvelopeParams:public Presets{ void ADSRinit_filter(char A_val,char A_dt,char D_val,char D_dt,char R_dt,char R_val); void ASRinit_bw(char A_val,char A_dt,char R_val,char R_dt); void converttofree(); - void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); void defaults(); - void getfromXML(XMLwrapper *xml); REALTYPE getdt(char i); diff --git a/src/Params/FilterParams.C b/src/Params/FilterParams.C @@ -247,112 +247,6 @@ REALTYPE FilterParams::getformantq(unsigned char q){ }; -/* - * Save or load the parameters to/from the buffer - */ -void FilterParams::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Filter parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //FILTER parameters - case 0x80: buf->rwbytepar(n,&Ptype); - break; - case 0x81: buf->rwbytepar(n,&Pfreq); - break; - case 0x82: buf->rwbytepar(n,&Pq); - break; - case 0x83: buf->rwbytepar(n,&Pstages); - break; - case 0x84: buf->rwbytepar(n,&Pfreqtrack); - break; - case 0x85: buf->rwbytepar(n,&Pcategory); - break; - case 0x86: buf->rwbytepar(n,&Pgain); - break; - //Formant Filter Parameters - case 0xA0: buf->rwbytepar(n,&Pnumformants); - break; - case 0xA1: buf->rwbytepar(n,&Pformantslowness); - break; - case 0xA2: buf->rwbytepar(n,&Pvowelclearness); - break; - case 0xA3: buf->rwbytepar(n,&Pcenterfreq); - break; - case 0xA4: buf->rwbytepar(n,&Poctavesfreq); - break; - case 0xA8: if (buf->getmode()!=0) {//save the formants of the vowels - for (unsigned char nvowel=0;nvowel<FF_MAX_VOWELS;nvowel++){ - for (unsigned char nformant=0;nformant<FF_MAX_FORMANTS;nformant++){ - buf->rwbyte(&npar); - buf->rwbyte(&nvowel); - buf->rwbyte(&nformant); - buf->rwbyte(&Pvowels[nvowel].formants[nformant].freq); - buf->rwbyte(&Pvowels[nvowel].formants[nformant].amp); - buf->rwbyte(&Pvowels[nvowel].formants[nformant].q); - }; - }; - } else { - unsigned char nvowel,nformant; - buf->rwbyte(&nvowel); - buf->rwbyte(&nformant); - if ((nvowel<FF_MAX_VOWELS) && (nformant<FF_MAX_FORMANTS)){ - buf->rwbyte(&Pvowels[nvowel].formants[nformant].freq); - buf->rwbyte(&Pvowels[nvowel].formants[nformant].amp); - buf->rwbyte(&Pvowels[nvowel].formants[nformant].q); - } else { - buf->rwbyte(&tmp); - buf->rwbyte(&tmp); - buf->rwbyte(&tmp); - }; - }; - break; - - //Formant Filter Parameters (sequence) - case 0xB0: buf->rwbytepar(n,&Psequencesize); - break; - case 0xB1: buf->rwbytepar(n,&Psequencestretch); - break; - case 0xB2: buf->rwbytepar(n,&Psequencereversed); - break; - case 0xB3: buf->rwbytepar(n,&Psequencesize); - break; - case 0xB8: if (buf->getmode()!=0){//sequence values - for (unsigned char nseq=0;nseq<Psequencesize;nseq++){ - buf->rwbytepar(n,&nseq); - buf->rwbyte(&Psequence[nseq].nvowel); - }; - } else { - unsigned char nseq; - buf->rwbytepar(n,&nseq); - if (nseq<FF_MAX_SEQUENCE){//for safety - buf->rwbyte(&Psequence[nseq].nvowel); - } else buf->rwbyte(&tmp); - }; - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; - void FilterParams::add2XMLsection(XMLwrapper *xml,int n){ int nvowel=n; diff --git a/src/Params/FilterParams.h b/src/Params/FilterParams.h @@ -24,7 +24,6 @@ #define FILTER_PARAMS_H #include "../globals.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "Presets.h" @@ -32,7 +31,6 @@ class FilterParams:public Presets{ public: FilterParams(unsigned char Ptype_,unsigned char Pfreq,unsigned char Pq_); ~FilterParams(); - void saveloadbuf(Buffer *buf); void add2XML(XMLwrapper *xml); void add2XMLsection(XMLwrapper *xml,int n); diff --git a/src/Params/LFOParams.C b/src/Params/LFOParams.C @@ -64,58 +64,6 @@ void LFOParams::defaults(){ Pstretch=64; }; -/* - * Save or load the parameters to/from the buffer - */ -void LFOParams::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( LFO parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - unsigned char freq=(int) (Pfreq*127.0); - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //LFO parameters - case 0x80: buf->rwbytepar(n,&freq); - break; - case 0x81: buf->rwbytepar(n,&Pintensity); - break; - case 0x82: buf->rwbytepar(n,&Pstartphase); - break; - case 0x83: buf->rwbytepar(n,&PLFOtype); - break; - case 0x84: buf->rwbytepar(n,&Prandomness); - break; - case 0x85: buf->rwbytepar(n,&Pdelay); - break; - case 0x86: buf->rwbytepar(n,&Pcontinous); - break; - case 0x87: buf->rwbytepar(n,&Pfreqrand); - break; - case 0x88: buf->rwbytepar(n,&Pstretch); - break; - }; - }; - - Pfreq=freq/127.0; - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; void LFOParams::add2XML(XMLwrapper *xml){ xml->addparreal("freq",Pfreq); diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h @@ -23,7 +23,6 @@ #ifndef LFO_PARAMS_H #define LFO_PARAMS_H -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "Presets.h" @@ -32,8 +31,6 @@ class LFOParams:public Presets{ LFOParams(char Pfreq_,char Pintensity_,char Pstartphase_, char PLFOtype_,char Prandomness_, char Pdelay_,char Pcontinous,char fel_); ~LFOParams(); - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); diff --git a/src/Params/SUBnoteParameters.C b/src/Params/SUBnoteParameters.C @@ -90,123 +90,6 @@ SUBnoteParameters::~SUBnoteParameters(){ }; -/* - * Save or load the parameters to/from the buffer - */ -void SUBnoteParameters::saveloadbuf(Buffer *buf){ - unsigned char npar,n,nharmonic,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( SUBnotePparameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - if (buf->getmode()==0){ - for (nharmonic=0;nharmonic<MAX_SUB_HARMONICS;nharmonic++){ - Phmag[nharmonic]=0; - Phrelbw[nharmonic]=64; - }; - }; - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Misc Parameters - case 0x80: buf->rwbytepar(n,&Pstereo); - break; - case 0x81: buf->rwbytepar(n,&PPanning); - break; - case 0x82: buf->rwbytepar(n,&Phmagtype); - break; - case 0x83: if (buf->getmode()!=0){ - for (nharmonic=0;nharmonic<MAX_SUB_HARMONICS;nharmonic++){ - if (Phmag[nharmonic]==0) continue; - buf->rwbytepar(n,&nharmonic); - buf->rwbyte(&Phmag[nharmonic]); - buf->rwbyte(&Phrelbw[nharmonic]); - }; - } else { - buf->rwbytepar(n,&nharmonic); - if (nharmonic<MAX_SUB_HARMONICS){//for safety - buf->rwbyte(&Phmag[nharmonic]); - buf->rwbyte(&Phrelbw[nharmonic]); - } else{ - buf->rwbyte(&tmp); - buf->rwbyte(&tmp); - }; - }; - break; - case 0x84: buf->rwbytepar(n,&Pnumstages); - break; - case 0x85: buf->rwbytepar(n,&Pstart); - break; - //Amplitude Parameters - case 0x90: buf->rwbytepar(n,&PVolume); - break; - case 0x91: buf->rwbytepar(n,&PAmpVelocityScaleFunction); - break; - case 0x98: if (buf->getmode()!=0) buf->rwbyte(&npar); - AmpEnvelope->saveloadbuf(buf); - break; - //Frequency Parameters - case 0xA0: buf->rwwordpar(n,&PDetune); - break; - case 0xA1: buf->rwwordpar(n,&PCoarseDetune); - break; - case 0xA2: buf->rwbytepar(n,&PDetuneType); - break; - case 0xA3: buf->rwbytepar(n,&Pbandwidth); - break; - case 0xA4: buf->rwbytepar(n,&Pbwscale); - break; - case 0xA5: buf->rwbytepar(n,&PFreqEnvelopeEnabled); - break; - case 0xA6: buf->rwbytepar(n,&PBandWidthEnvelopeEnabled); - break; - case 0xA7: buf->rwbytepar(n,&Pfixedfreq); - break; - case 0xA8: if ((buf->getminimal()!=0) && (buf->getmode()!=0) - && (PFreqEnvelopeEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - FreqEnvelope->saveloadbuf(buf); - break; - case 0xA9: if ((buf->getminimal()!=0) && (buf->getmode()!=0) - && (PBandWidthEnvelopeEnabled==0)) break; - if (buf->getmode()!=0) buf->rwbyte(&npar); - BandWidthEnvelope->saveloadbuf(buf); - break; - case 0xAA: buf->rwbytepar(n,&PfixedfreqET); - break; - //Filter Parameters - case 0xB0: buf->rwbytepar(n,&PGlobalFilterEnabled); - break; - case 0xB1: buf->rwbytepar(n,&PGlobalFilterVelocityScale); - break; - case 0xB2: buf->rwbytepar(n,&PGlobalFilterVelocityScaleFunction); - break; - case 0xB8: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalFilter->saveloadbuf(buf); - break; - case 0xB9: if (buf->getmode()!=0) buf->rwbyte(&npar); - GlobalFilterEnvelope->saveloadbuf(buf); - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; void SUBnoteParameters::add2XML(XMLwrapper *xml){ diff --git a/src/Params/SUBnoteParameters.h b/src/Params/SUBnoteParameters.h @@ -24,7 +24,6 @@ #define SUB_NOTE_PARAMETERS_H #include "../globals.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "EnvelopeParams.h" #include "FilterParams.h" @@ -35,8 +34,6 @@ class SUBnoteParameters:public Presets{ SUBnoteParameters(); ~SUBnoteParameters(); - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); diff --git a/src/Synth/OscilGen.C b/src/Synth/OscilGen.C @@ -1005,213 +1005,6 @@ void OscilGen::getcurrentbasefunction(REALTYPE *smps){ }; -/* - * Quantisize and store the base function frequencies (used to save basefunction to buffer) - */ -void OscilGen::savebasefuncQ(){ - int i; - short int data; - REALTYPE x,max; - max=0.0; - - if (basefuncFFTfreqsQ==NULL) - basefuncFFTfreqsQ=new unsigned short int[OSCIL_SIZE]; - for (i=0;i<OSCIL_SIZE;i++) basefuncFFTfreqsQ[i]=8192;//"8192"=0.0 - - if (Pcurrentbasefunc==0) return; - - for (i=1;i<OSCIL_SIZE;i++) - if (max<fabs(basefuncFFTfreqs[i])) max=fabs(basefuncFFTfreqs[i]); - if (max<0.00000001) max=1.0; - - for (i=1;i<OSCIL_SIZE/2;i++) { - //Cosine Component - x=basefuncFFTfreqs[i]/max; - if (fabs(x)<0.00001) data=0;// -100dB - else { - data=(short int) ((1.0+rap2dB(fabs(x))/100.0)*8191.0); - if (x<0.0) data=-data; - }; - basefuncFFTfreqsQ[i*2-1]=data+8192; - - //Sine Component - if (i!=(OSCIL_SIZE/2-1)) { - x=basefuncFFTfreqs[OSCIL_SIZE-i]/max; - if (fabs(x)<0.00001) data=0;// -100dB - else { - data=(short int) ((1.0+rap2dB(fabs(x))/100.0)*8191.0); - if (x<0.0) data=-data; - }; - basefuncFFTfreqsQ[i*2]=data+8192; - }; - }; -}; - -/* - * Load the base function frequencies from quantised data (used to load basefunction from buffer) - */ -void OscilGen::loadbasefuncQ(){ - short int data,i; - REALTYPE x; - - if (basefuncFFTfreqs==NULL) basefuncFFTfreqs=new REALTYPE[OSCIL_SIZE]; - for (i=0;i<OSCIL_SIZE;i++) basefuncFFTfreqs[i]=0.0; - if (basefuncFFTfreqsQ==NULL) return; - - if (Pcurrentbasefunc==0) basefuncFFTfreqs=new REALTYPE[OSCIL_SIZE]; - - for (i=0;i<OSCIL_SIZE;i++) basefuncFFTfreqs[i]=0.0;; - - - for (i=1;i<OSCIL_SIZE/2;i++) { - //Cosine Component - data=basefuncFFTfreqsQ[i*2-1]; - if (data==8192) x=0.0; - else { - x=dB2rap((fabs(data-8192.0)/8192-1.0)*100.0); - if (data<8192) x=-x; - }; - basefuncFFTfreqs[i]=x; - - //Sine Component - data=basefuncFFTfreqsQ[i*2]; - if (data==8192) x=0.0; - else { - x=dB2rap((fabs(data-8192.0)/8192-1.0)*100.0); - if (data<8192) x=-x; - }; - basefuncFFTfreqs[OSCIL_SIZE-i]=x; - - }; - - delete basefuncFFTfreqsQ; - basefuncFFTfreqsQ=NULL; - oldbasefunc=Pcurrentbasefunc=127; - oldbasepar=Pbasefuncpar; -}; - - -/* - * Save or load the parameters to/from the buffer - */ -void OscilGen::saveloadbuf(Buffer *buf){ - unsigned char npar,n,nharmonic,tmp; - unsigned short int nh,tmpw; - - int custombasefuncloaded=0; -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Oscil parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - if (buf->getmode()==0){ - for (nharmonic=0;nharmonic<MAX_AD_HARMONICS;nharmonic++){ - Phmag[nharmonic]=64; - Phphase[nharmonic]=64; - }; - }; - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Oscil parameters - case 0x80: buf->rwbytepar(n,&Phmagtype); - break; - case 0x81: if (buf->getmode()!=0){ - for (nharmonic=0;nharmonic<MAX_AD_HARMONICS;nharmonic++){ - if (Phmag[nharmonic]!=64) { - buf->rwbytepar(n,&nharmonic); - buf->rwbyte(&Phmag[nharmonic]); - buf->rwbyte(&Phphase[nharmonic]); - }; - }; - } else { - buf->rwbytepar(n,&nharmonic); - if (nharmonic<MAX_AD_HARMONICS){//for safety - buf->rwbyte(&Phmag[nharmonic]); - buf->rwbyte(&Phphase[nharmonic]); - } else { - buf->rwbyte(&tmp); - buf->rwbyte(&tmp); - }; - - }; - break; - case 0x82: buf->rwbytepar(n,&Pcurrentbasefunc); - break; - case 0x83: buf->rwbytepar(n,&Pbasefuncpar); - break; - case 0x84: buf->rwbytepar(n,&Prand); - break; - case 0x85: buf->rwbytepar(n,&Pwaveshaping); - break; - case 0x86: buf->rwbytepar(n,&Pwaveshapingfunction); - break; - case 0x87: if (buf->getmode()!=0){ - if (Pcurrentbasefunc==127){ - savebasefuncQ(); - for (nh=0;nh<OSCIL_SIZE;nh++){ - if (basefuncFFTfreqsQ[nh]!=8192) { - buf->rwbyte(&n); - buf->rwword(&nh); - buf->rwword(&basefuncFFTfreqsQ[nh]); - }; - }; - }; - } else { - buf->rwword(&nh); - if (nh<OSCIL_SIZE){//for safety - if (basefuncFFTfreqsQ==NULL) { - basefuncFFTfreqsQ=new unsigned short int[OSCIL_SIZE]; - for (int tmp=0;tmp<OSCIL_SIZE;tmp++) basefuncFFTfreqsQ[tmp]=8192;//"8192"=0.0 - }; - buf->rwword(&basefuncFFTfreqsQ[nh]); - custombasefuncloaded=1; - } else { - buf->rwword(&tmpw); - }; - - }; - break; -// case 0x88: buf->rwbytepar(n,&Pnormalizemethod); -// break; - case 0x89: buf->rwbytepar(n,&Pfiltertype); - break; - case 0x8A: buf->rwbytepar(n,&Pfilterpar1); - break; - case 0x8B: buf->rwbytepar(n,&Pfilterbeforews); - break; - case 0x8C: buf->rwbytepar(n,&Psatype); - break; - case 0x8D: buf->rwbytepar(n,&Psapar); - break; - case 0x8E: buf->rwbytepar(n,&Pamprandtype); - break; - case 0x8F: buf->rwbytepar(n,&Pamprandpower); - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - } else { - if (custombasefuncloaded!=0) { - loadbasefuncQ(); - }; - prepare(); - }; -}; - - void OscilGen::add2XML(XMLwrapper *xml){ xml->addpar("harmonic_mag_type",Phmagtype); diff --git a/src/Synth/OscilGen.h b/src/Synth/OscilGen.h @@ -24,7 +24,6 @@ #define OSCIL_GEN_H #include "../globals.h" -#include "../Misc/Buffer.h" #include "../Misc/XMLwrapper.h" #include "Resonance.h" #include "../DSP/FFTwrapper.h" @@ -50,8 +49,6 @@ class OscilGen:public Presets{ void getcurrentbasefunction(REALTYPE *smps); void useasbase();//convert oscil to base function - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); @@ -135,10 +132,6 @@ class OscilGen:public Presets{ void adaptiveharmonic(REALTYPE *freqs,REALTYPE freq); - //Base function saveto/loadfrom quantised data - void savebasefuncQ(); - void loadbasefuncQ(); - //Basic/base functions (Functiile De Baza) REALTYPE basefunc_pulse(REALTYPE x,REALTYPE a); REALTYPE basefunc_saw(REALTYPE x,REALTYPE a); diff --git a/src/Synth/Resonance.C b/src/Synth/Resonance.C @@ -194,65 +194,6 @@ void Resonance::sendcontroller(MidiControllers ctl,REALTYPE par){ }; -/* - * Save or load the parameters to/from the buffer - */ -void Resonance::saveloadbuf(Buffer *buf){ - unsigned char npar,n,tmp; - -#ifdef DEBUG_BUFFER - fprintf(stderr,"\n( Resonance parameters) \n"); -#endif - - tmp=0xfe; - buf->rwbyte(&tmp);//if tmp!=0xfe error - - - for (n=0x80;n<0xf0;n++){ - if (buf->getmode()==0) { - buf->rwbyte(&npar); - n=0;//force a loop until the end of parameters (0xff) - } else npar=n; - if (npar==0xff) break; - - switch(npar){ - //Resonance parameters - case 0x80: buf->rwbytepar(n,&Penabled); - break; - case 0x81: buf->rwbytepar(n,&PmaxdB); - break; - case 0x82: buf->rwbytepar(n,&Pcenterfreq); - break; - case 0x83: buf->rwbytepar(n,&Poctavesfreq); - break; - case 0x85: buf->rwbytepar(n,&Pprotectthefundamental); - break; - case 0xA0: if (buf->getmode()!=0){ - if ((buf->getminimal()==0) || (Penabled!=0)){ - unsigned short int tmp2=N_RES_POINTS; - buf->rwbyte(&npar); - buf->rwword(&tmp2); - for (int i=0;i<N_RES_POINTS;i++) buf->rwbyte(&Prespoints[i]); - }; - } else { - unsigned short int tmp2; - buf->rwword(&tmp2); - for (int i=0;i<tmp2;i++) - if (i<N_RES_POINTS) buf->rwbyte(&Prespoints[i]); - else buf->rwbyte(&tmp); - - - }; - break; - }; - }; - - - if (buf->getmode()!=0) { - unsigned char tmp=0xff; - buf->rwbyte(&tmp); - }; -}; void Resonance::add2XML(XMLwrapper *xml){ diff --git a/src/Synth/Resonance.h b/src/Synth/Resonance.h @@ -39,8 +39,6 @@ class Resonance:public Presets{ void interpolatepeaks(int type); void randomize(int type); - void saveloadbuf(Buffer *buf); - void add2XML(XMLwrapper *xml); void defaults(); void getfromXML(XMLwrapper *xml); diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -81,15 +81,14 @@ refresh();} {} if (*nselected==nslot) color(6); -label(bank->getnamenumbered(nslot));} {selected - } +label(bank->getnamenumbered(nslot));} {} } decl {int *what,*whatslot,nslot,highlight, *nselected;} {} decl {void (BankProcess_:: *fnc)(void);} {} decl {BankProcess_ *bp;} {} } -class BankUI {: {public BankProcess_} +class BankUI {selected : {public BankProcess_} } { Function {make_window()} {} { Fl_Window bankuiwindow { @@ -185,18 +184,6 @@ refreshmainwindow();} tooltip {automatically close the bank window if the instrument is loaded} xywh {705 529 60 15} down_box DOWN_BOX labelsize 10 code0 {o->value(config.cfg.BankUIAutoClose);} } - Fl_Button {} { - label {IMPORT from bnk_zyn} - callback {const char *filename; -filename=fl_file_chooser("Convert Bank from bnk_zyn file:","(*.bnk_zyn)",NULL,0); -if (filename==NULL) return; - -master->exportbankasxmldirectory(filename); - - -refreshmainwindow();} - xywh {515 530 105 40} box PLASTIC_UP_BOX color 175 labelfont 1 labelsize 15 labelcolor 0 align 128 - } Fl_Choice banklist { callback {int n=o->value(); char *dirname=bank->banks[n].dir; diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl @@ -378,7 +378,7 @@ if (fl_ask("Exit and leave the unsaved data?")) *exitprogram=1; xywh {188 182 390 465} type Double hide code0 {setfilelabel(NULL);} non_modal } { - Fl_Menu_Bar mastermenu { + Fl_Menu_Bar mastermenu {selected xywh {0 0 690 25} } { submenu {} { @@ -470,42 +470,6 @@ updatepanel();} xywh {10 10 100 20} divider } menuitem {} { - label {Open MAS_ZYN...} - callback {const char *filename; -filename=fl_file_chooser("Open:","(*.mas_zyn)",NULL,0); -if (filename==NULL) return; -int result=loadbufferfile(&slbuf,filename,0); -if (result==0) { - setfilelabel(filename); - slbuf.changemode(0); - delete microtonalui; - pthread_mutex_lock(&master->mutex); - - //clear all parameters, first - - master->defaults(); - - //load the data - master->saveloadbuf(&slbuf); - pthread_mutex_unlock(&master->mutex); - - npartcounter->do_callback(); - syseffnocounter->do_callback(); - inseffnocounter->do_callback(); - masterkeyshiftcounter->value(master->Pkeyshift-64); - mastervolumedial->value(master->Pvolume); - globalfinedetuneslider->value(master->microtonal.Pglobalfinedetune); - microtonalui=new MicrotonalUI(&master->microtonal); - nrpnbutton->value(master->ctl.NRPN.receive); - updatesendwindow(); -} else { - if (result==4) fl_alert("Error: Could not load the file\\nbecause it is not a master file."); - else fl_alert("Error: Could not load the file."); -}; -updatepanel();} - xywh {10 10 100 20} divider - } - menuitem {} { label {&Load Scale Settings...} callback {char *filename; filename=fl_file_chooser("Open:","({*.xsz})",NULL,0); @@ -560,29 +524,6 @@ updatepanel();} xywh {0 0 100 20} divider } menuitem {} { - label {&Load SCL_ZYN...} - callback {const char *filename; -filename=fl_file_chooser("Load:","(*.scl_zyn)",NULL,0); -if (filename==NULL) return; -int result=loadbufferfile(&slbuf,filename,2); -if (result==0) { - delete microtonalui; - - slbuf.changemode(0); - pthread_mutex_lock(&master->mutex); - master->microtonal.defaults(); - master->microtonal.saveloadbuf(&slbuf); - pthread_mutex_unlock(&master->mutex); - - microtonalui=new MicrotonalUI(&master->microtonal); - - } else { - if (result==4) fl_alert("Error: Could not load the file\\nbecause it is not a scale file."); - else fl_alert("Error: Could not load the file."); - };} - xywh {45 45 100 20} divider - } - menuitem {} { label {&Settings...} callback {configui->show();} xywh {25 25 100 20} divider @@ -668,32 +609,6 @@ updatepanel();} xywh {20 20 100 20} divider } menuitem {} { - label {Load INS_ZYN Instrument...} - callback {const char *filename; -filename=fl_file_chooser("Load:","(*.ins_zyn)",NULL,0); -if (filename==NULL) return; -int result=loadbufferfile(&slbuf,filename,1); -if (result==0) { - slbuf.changemode(0); - pthread_mutex_lock(&master->mutex); - int npart=(int)npartcounter->value(); - - //clear all instrument parameters, first - master->part[npart]->defaultsinstrument(); - - //load the instr. parameters - master->part[npart]->saveloadbuf(&slbuf,1); - pthread_mutex_unlock(&master->mutex); - npartcounter->do_callback(); - } else { - if (result==4) fl_alert("Error: Could not load the file\\nbecause it is not an instrument file."); - else fl_alert("Error: Could not load the file."); - }; - -updatepanel();} - xywh {20 20 100 20} - } - menuitem {} { label {Show Instrument &Bank...} callback {bankui->show();} xywh {0 0 100 20} divider @@ -778,7 +693,7 @@ pthread_mutex_unlock(&master->mutex);} xywh {0 80 390 160} } { Fl_Group {} { - label {System Effects} open selected + label {System Effects} open xywh {0 100 390 140} box ENGRAVED_FRAME labeltype EMBOSSED_LABEL labelsize 20 align 25 } { Fl_Counter syseffnocounter {