summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse_qt4_evolution/synti/zynaddsubfx/Misc')
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.C565
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.h100
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.C303
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.h67
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.C99
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.h43
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.C680
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.h167
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.C514
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.h111
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.C881
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.h176
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.C112
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.h45
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.C533
-rw-r--r--attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.h175
16 files changed, 0 insertions, 4571 deletions
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.C
deleted file mode 100644
index 9b2e8f75..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.C
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Bank.h - Instrument Bank
- Copyright (C) 2002-2005 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 "Bank.h"
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <sys/stat.h>
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "Config.h"
-
-#define INSTRUMENT_EXTENSION ".xiz"
-
-//if this file exists into a directory, this make the directory to be considered as a bank, even if it not contains a instrument file
-#define FORCE_BANK_DIR_FILE ".bankdir"
-
-Bank::Bank(){
-
-
- ZERO(defaultinsname,PART_MAX_NAME_LEN);
- snprintf(defaultinsname,PART_MAX_NAME_LEN,"%s"," ");
-
- for (int i=0;i<BANK_SIZE;i++){
- ins[i].used=false;
- ins[i].filename=NULL;
- ins[i].info.PADsynth_used=false;
- };
- dirname=NULL;
- clearbank();
-
-
-
- for (int i=0;i<MAX_NUM_BANKS;i++){
- banks[i].dir=NULL;
- banks[i].name=NULL;
- };
-
- bankfiletitle=dirname;
-
- loadbank(config.cfg.currentBankDir);
-
-};
-
-Bank::~Bank(){
- 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);
- };
-
- clearbank();
-};
-
-/*
- * Get the name of an instrument from the bank
- */
-char *Bank::getname (unsigned int ninstrument){
- if (emptyslot(ninstrument)) return (defaultinsname);
- return (ins[ninstrument].name);
-};
-
-/*
- * Get the numbered name of an instrument from the bank
- */
-char *Bank::getnamenumbered (unsigned int ninstrument){
- if (emptyslot(ninstrument)) return (defaultinsname);
- snprintf(tmpinsname[ninstrument],PART_MAX_NAME_LEN+15,"%d. %s",ninstrument+1,getname(ninstrument));
- return(tmpinsname[ninstrument]);
-};
-
-/*
- * Changes the name of an instrument (and the filename)
- */
-void Bank::setname(unsigned int ninstrument,const char *newname,int newslot){
- if (emptyslot(ninstrument)) return;
-
- char newfilename[1000+1],tmpfilename[100+1];
-
- ZERO(newfilename,1001);
- ZERO(tmpfilename,101);
- if (newslot>=0) snprintf(tmpfilename,100,"%4d-%s",newslot+1,newname);
- else snprintf(tmpfilename,100,"%4d-%s",ninstrument+1,newname);
-
- //add the zeroes at the start of filename
- for (int i=0;i<4;i++) if (tmpfilename[i]==' ') tmpfilename[i]='0';
-
- //make the filenames legal
- for (int i=0;i<(int) strlen(tmpfilename);i++) {
- char c=tmpfilename[i];
- if ((c>='0')&&(c<='9')) continue;
- if ((c>='A')&&(c<='Z')) continue;
- if ((c>='a')&&(c<='z')) continue;
- if ((c=='-')||(c==' ')) continue;
-
- tmpfilename[i]='_';
- };
-
- snprintf(newfilename,1000,"%s/%s.xiz",dirname,tmpfilename);
-
-// printf("rename %s -> %s\n",ins[ninstrument].filename,newfilename);//////////////
-
- rename(ins[ninstrument].filename,newfilename);
- if (ins[ninstrument].filename) delete(ins[ninstrument].filename);
- ins[ninstrument].filename=new char[strlen(newfilename)+5];
- snprintf(ins[ninstrument].filename,strlen(newfilename)+1,"%s",newfilename);
- snprintf(ins[ninstrument].name,PART_MAX_NAME_LEN,"%s",&tmpfilename[5]);
-
-};
-
-/*
- * Check if there is no instrument on a slot from the bank
- */
-int Bank::emptyslot(unsigned int ninstrument){
- if (ninstrument>=BANK_SIZE) return (1);
- if (ins[ninstrument].filename==NULL) return(1);
-
- if (ins[ninstrument].used) return (0);
- else return(1);
-};
-
-/*
- * Removes the instrument from the bank
- */
-void Bank::clearslot(unsigned int ninstrument){
- if (emptyslot(ninstrument)) return;
-
-// printf("remove %s \n",ins[ninstrument].filename);////////////////////////
-
-
- remove(ins[ninstrument].filename);
- deletefrombank(ninstrument);
-};
-
-/*
- * Save the instrument to a slot
- */
-void Bank::savetoslot(unsigned int ninstrument,Part *part){
- clearslot(ninstrument);
-
- const int maxfilename=200;
- char tmpfilename[maxfilename+20];
- ZERO(tmpfilename,maxfilename+20);
-
- snprintf(tmpfilename,maxfilename,"%4d-%s",ninstrument+1,(char *)part->Pname);
-
- //add the zeroes at the start of filename
- for (int i=0;i<4;i++) if (tmpfilename[i]==' ') tmpfilename[i]='0';
-
- //make the filenames legal
- for (int i=0;i<(int)strlen(tmpfilename);i++) {
- char c=tmpfilename[i];
- if ((c>='0')&&(c<='9')) continue;
- if ((c>='A')&&(c<='Z')) continue;
- if ((c>='a')&&(c<='z')) continue;
- if ((c=='-')||(c==' ')) continue;
-
- tmpfilename[i]='_';
- };
-
- strncat(tmpfilename,".xiz",maxfilename+10);
-
- int fnsize=strlen(dirname)+strlen(tmpfilename)+10;
- char *filename=new char[fnsize+4];
- ZERO(filename,fnsize+2);
-
- snprintf(filename,fnsize,"%s/%s",dirname,tmpfilename);
-
- remove(filename);
- part->saveXML(filename);
- addtobank(ninstrument,tmpfilename,(char *) part->Pname);
-
- delete(filename);
-};
-
-/*
- * Loads the instrument from the bank
- */
-void Bank::loadfromslot(unsigned int ninstrument,Part *part){
- if (emptyslot(ninstrument)) return;
-
- part->defaultsinstrument();
-
-// printf("load: %s\n",ins[ninstrument].filename);
-
- part->loadXMLinstrument(ins[ninstrument].filename);
-
-};
-
-
-/*
- * Makes current a bank directory
- */
-int Bank::loadbank(const char *bankdirname)
- {
- DIR *dir = opendir(bankdirname);
- clearbank();
-
- if (dir==NULL)
- return -1;
-
- if (dirname!=NULL)
- delete(dirname);
- dirname = new char[strlen(bankdirname)+1];
- snprintf(dirname, strlen(bankdirname)+1, "%s",bankdirname);
-
- bankfiletitle=dirname;
-
- // printf("loadbank %s/\n",bankdirname);
- struct dirent *fn;
-
- while ((fn=readdir(dir))){
- const char *filename= fn->d_name;
-
- //sa verific daca e si extensia dorita
- if (strstr(filename,INSTRUMENT_EXTENSION)==NULL) continue;
-
- //verify if the name is like this NNNN-name (where N is a digit)
- int no=0;
- unsigned int startname=0;
-
- for (unsigned int i=0;i<4;i++) {
- if (strlen(filename)<=i) break;
-
- if ((filename[i]>='0')&&(filename[i]<='9')) {
- no=no*10+(filename[i]-'0');
- startname++;
- };
- };
-
-
- if ((startname+1)<strlen(filename)) startname++;//to take out the "-"
-
- char name[PART_MAX_NAME_LEN+1];
- ZERO(name,PART_MAX_NAME_LEN+1);
- snprintf(name,PART_MAX_NAME_LEN,"%s",filename);
-
- //remove the file extension
- for (int i=strlen(name)-1;i>=2;i--){
- if (name[i]=='.') {
- name[i]='\0';
- break;
- };
- };
-
- if (no!=0){//the instrument position in the bank is found
- addtobank(no-1,filename,&name[startname]);
- } else {
- addtobank(-1,filename,name);
- };
-
- };
-
-
- closedir(dir);
-
- if (dirname!=NULL) {
- sprintf(config.cfg.currentBankDir,"%s",dirname);
- };
-
- return(0);
-};
-
-/*
- * Makes a new bank, put it on a file and makes it current bank
- */
-int Bank::newbank(const char *newbankdirname){
- int result;
- char tmpfilename[MAX_STRING_SIZE];
- char bankdir[MAX_STRING_SIZE];
- snprintf(bankdir,MAX_STRING_SIZE,"%s",config.cfg.bankRootDirList[0]);
-
- if (((bankdir[strlen(bankdir)-1])!='/')&&((bankdir[strlen(bankdir)-1])!='\\')){
- strncat(bankdir,"/",MAX_STRING_SIZE);
- };
- strncat(bankdir,newbankdirname,MAX_STRING_SIZE);
-#ifdef OS_WINDOWS
- result=mkdir(bankdir);
-#else
- result=mkdir(bankdir,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
-#endif
- if (result<0) return(-1);
-
- snprintf(tmpfilename,MAX_STRING_SIZE,"%s/%s",bankdir,FORCE_BANK_DIR_FILE);
-// printf("%s\n",tmpfilename);
- FILE *tmpfile=fopen(tmpfilename,"w+");
- fclose(tmpfile);
-
- return(loadbank(bankdir));
-};
-
-/*
- * Check if the bank is locked (i.e. the file opened was readonly)
- */
-int Bank::locked(){
- return(dirname==NULL);
-};
-
-/*
- * Swaps a slot with another
- */
-void Bank::swapslot(unsigned int n1, unsigned int n2){
- if ((n1==n2)||(locked())) return;
- if (emptyslot(n1)&&(emptyslot(n2))) return;
- if (emptyslot(n1)){//change n1 to n2 in order to make
- int tmp=n2;n2=n1;n1=tmp;
- };
-
- if (emptyslot(n2)){//this is just a movement from slot1 to slot2
- setname(n1,getname(n1),n2);
- ins[n2]=ins[n1];
- ins[n1].used=false;
- ins[n1].name[0]='\0';
- ins[n1].filename=NULL;
- ins[n1].info.PADsynth_used=0;
- } else {//if both slots are used
- if (strcmp(ins[n1].name,ins[n2].name)==0){//change the name of the second instrument if the name are equal
- strncat(ins[n2].name,"2",PART_MAX_NAME_LEN);
- };
- setname(n1,getname(n1),n2);
- setname(n2,getname(n2),n1);
- ins_t tmp;
- tmp.used=true;
- strcpy(tmp.name,ins[n2].name);
- char *tmpfilename=ins[n2].filename;
- bool padsynth_used=ins[n2].info.PADsynth_used;
-
- ins[n2]=ins[n1];
- strcpy(ins[n1].name,tmp.name);
- ins[n1].filename=tmpfilename;
- ins[n1].info.PADsynth_used=padsynth_used;
- };
-
-};
-
-
-//a helper function that compares 2 banks[] arrays
-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);
-
- 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);
- banks[i].dir=NULL;
- banks[i].name=NULL;
- };
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) if (config.cfg.bankRootDirList[i]!=NULL) scanrootdir(config.cfg.bankRootDirList[i]);
-
- //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;
-
- };
- };
- };
-
- //remove duplicate bank names
- int dupl=0;
- for (int j=0;j<MAX_NUM_BANKS-1;j++){
- for (int i=j+1;i<MAX_NUM_BANKS;i++){
- if ((banks[i].name==NULL)||(banks[j].name==NULL)) continue;
- if (strcmp(banks[i].name,banks[j].name)==0) {//add a [1] to the first bankname and [n] to others
- char *tmpname=banks[i].name;
- banks[i].name=new char[strlen(tmpname)+100];
- sprintf(banks[i].name,"%s[%d]",tmpname,dupl+2);
- delete(tmpname);
-
- if (dupl==0){
- char *tmpname=banks[j].name;
- banks[j].name=new char[strlen(tmpname)+100];
- sprintf(banks[j].name,"%s[1]",tmpname);
- delete(tmpname);
- };
-
- dupl++;
- } else dupl=0;
- };
- };
-
-};
-
-
-
-// private stuff
-
-void Bank::scanrootdir(char *rootdir){
-// printf("Scanning root dir:%s\n",rootdir);
- DIR *dir=opendir(rootdir);
- if (dir==NULL) return;
-
- const int maxdirsize=1000;
- struct {
- char dir[maxdirsize];
- char name[maxdirsize];
- }bank;
-
- char *separator="/";
- if (strlen(rootdir)) {
- char tmp=rootdir[strlen(rootdir)-1];
- if ((tmp=='/') || (tmp=='\\')) separator="";
- };
-
- struct dirent *fn;
- while ((fn=readdir(dir))){
- const char *dirname=fn->d_name;
- if (dirname[0]=='.') continue;
-
- snprintf(bank.dir,maxdirsize,"%s%s%s/",rootdir,separator,dirname);
- snprintf(bank.name,maxdirsize,"%s",dirname);
- //find out if the directory contains at least 1 instrument
- bool isbank=false;
-
- DIR *d=opendir(bank.dir);
- if (d==NULL) continue;
-
- struct dirent *fname;
-
- while((fname=readdir(d))){
- if ((strstr(fname->d_name,INSTRUMENT_EXTENSION)!=NULL)||
- (strstr(fname->d_name,FORCE_BANK_DIR_FILE)!=NULL)){
- isbank=true;
- break;//aici as putea pune in loc de break un update la un counter care imi arata nr. de instrumente din bank
- };
- };
-
- closedir(d);
-
- if (isbank) {
- int pos=-1;
- for (int i=1;i<MAX_NUM_BANKS;i++){ //banks[0] e liber intotdeauna
- if (banks[i].name==NULL) {
- pos=i;
- break;
- };
- };
-
- if (pos>=0) {
- banks[pos].name=new char[maxdirsize];
- banks[pos].dir=new char[maxdirsize];
- snprintf(banks[pos].name,maxdirsize,"%s",bank.name);
- snprintf(banks[pos].dir,maxdirsize,"%s",bank.dir);
- };
-
- };
-
- };
-
- closedir(dir);
-
-};
-
-void Bank::clearbank(){
- for (int i=0;i<BANK_SIZE;i++) deletefrombank(i);
- if (dirname!=NULL) delete(dirname);
- bankfiletitle=NULL;
- dirname=NULL;
-};
-
-int Bank::addtobank(int pos, const char *filename, const char* name){
- if ((pos>=0)&&(pos<BANK_SIZE)){
- if (ins[pos].used) pos=-1;//force it to find a new free position
- } else if (pos>=BANK_SIZE) pos=-1;
-
-
- if (pos<0) {//find a free position
- for (int i=BANK_SIZE-1;i>=0;i--)
- if (!ins[i].used) {
- pos=i;
- break;
- };
-
- };
-
- if (pos<0) return (-1);//the bank is full
-
- // printf("%s %d\n",filename,pos);
-
- deletefrombank(pos);
-
- ins[pos].used=true;
- snprintf(ins[pos].name,PART_MAX_NAME_LEN,"%s",name);
-
- snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10," ");
-
- int len=strlen(filename)+1+strlen(dirname);
- ins[pos].filename=new char[len+2];
- ins[pos].filename[len+1]=0;
- snprintf(ins[pos].filename,len+1,"%s/%s",dirname,filename);
-
- //see if PADsynth is used
- if (config.cfg.CheckPADsynth){
- XMLwrapper *xml=new XMLwrapper();
- xml->checkfileinformation(ins[pos].filename);
-
- ins[pos].info.PADsynth_used=xml->information.PADsynth_used;
- delete(xml);
- } else ins[pos].info.PADsynth_used=false;
-
- return(0);
-};
-
-bool Bank::isPADsynth_used(unsigned int ninstrument){
- if (config.cfg.CheckPADsynth==0) return(0);
- else return(ins[ninstrument].info.PADsynth_used);
-};
-
-
-void Bank::deletefrombank(int pos){
- if ((pos<0)||(pos>=BANK_SIZE)) return;
- ins[pos].used=false;
- ZERO(ins[pos].name,PART_MAX_NAME_LEN+1);
- if (ins[pos].filename!=NULL) {
- delete (ins[pos].filename);
- ins[pos].filename=NULL;
- };
-
- ZERO(tmpinsname[pos],PART_MAX_NAME_LEN+20);
-
-};
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.h
deleted file mode 100644
index 1a2f4382..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Bank.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Bank.C - Instrument Bank
- Copyright (C) 2002-2005 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 BANK_H
-#define BANK_H
-
-#include "../globals.h"
-#include "XMLwrapper.h"
-#include "Part.h"
-
-#define BANK_SIZE 160
-
-/*
- * The max. number of banks that are used
- */
-#define MAX_NUM_BANKS 400
-
-
-class Bank{
- public:
- Bank();
- ~Bank();
- char *getname(unsigned int ninstrument);
- char *getnamenumbered(unsigned int ninstrument);
- void setname(unsigned int ninstrument,const char *newname,int newslot);//if newslot==-1 then this is ignored, else it will be put on that slot
- bool isPADsynth_used(unsigned int ninstrument);
-
- //returns 0 if the slot is not empty or 1 if the slot is empty
- int emptyslot(unsigned int ninstrument);
-
- void clearslot(unsigned int ninstrument);
- void savetoslot(unsigned int ninstrument,Part *part);
- void loadfromslot(unsigned int ninstrument,Part *part);
-
- void swapslot(unsigned int n1,unsigned int n2);
-
- int loadbank(const char *bankdirname);
- int newbank(const char *newbankdirname);
-
- char *bankfiletitle; //this is shown on the UI of the bank (the title of the window)
- int locked();
-
- void rescanforbanks();
-
- struct bankstruct{
- char *dir;
- char *name;
- };
-
- bankstruct banks[MAX_NUM_BANKS];
-
- private:
-
- //it adds a filename to the bank
- //if pos is -1 it try to find a position
- //returns -1 if the bank is full, or 0 if the instrument was added
- int addtobank(int pos,const char* filename,const char* name);
-
- void deletefrombank(int pos);
-
- void clearbank();
-
- char defaultinsname[PART_MAX_NAME_LEN];
- char tmpinsname[BANK_SIZE][PART_MAX_NAME_LEN+20];//this keeps the numbered names
-
- struct ins_t{
- bool used;
- char name[PART_MAX_NAME_LEN+1];
- char *filename;
- struct{
- bool PADsynth_used;
- } info;
- }ins[BANK_SIZE];
-
- char *dirname;
-
- void scanrootdir(char *rootdir);//scans a root dir for banks
-};
-
-#endif
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.C
deleted file mode 100644
index f04a32ac..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.C
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Config.C - Configuration file functions
- Copyright (C) 2003-2005 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 <math.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef OS_WINDOWS
-#include <windows.h>
-#include <mmsystem.h>
-#endif
-
-#include "Config.h"
-#include "XMLwrapper.h"
-#include "config.h"
-
-Config::Config(){
-};
-void Config::init(){
- maxstringsize=MAX_STRING_SIZE;//for ui
- //defaults
- cfg.SampleRate=44100;
- cfg.SoundBufferSize=256;
- cfg.OscilSize=512;
- cfg.SwapStereo=0;
-
- cfg.LinuxOSSWaveOutDev=new char[MAX_STRING_SIZE];
- snprintf(cfg.LinuxOSSWaveOutDev,MAX_STRING_SIZE,"/dev/dsp");
- cfg.LinuxOSSSeqInDev=new char[MAX_STRING_SIZE];
- snprintf(cfg.LinuxOSSSeqInDev,MAX_STRING_SIZE,"/dev/sequencer");
-
- cfg.DumpFile=new char[MAX_STRING_SIZE];
- snprintf(cfg.DumpFile,MAX_STRING_SIZE,"zynaddsubfx_dump.txt");
-
- cfg.WindowsWaveOutId=0;
- cfg.WindowsMidiInId=0;
-
- cfg.BankUIAutoClose=0;
- cfg.DumpNotesToFile=0;
- cfg.DumpAppend=1;
-
- cfg.GzipCompression=3;
-
- cfg.Interpolation=0;
- cfg.CheckPADsynth=1;
-
- cfg.UserInterfaceMode=1;
- cfg.VirKeybLayout=1;
- winwavemax=1;winmidimax=1;
-//try to find out how many input midi devices are there
- winmididevices=new winmidionedevice[winmidimax];
- for (int i=0;i<winmidimax;i++) {
- winmididevices[i].name=new char[MAX_STRING_SIZE];
- for (int j=0;j<MAX_STRING_SIZE;j++) winmididevices[i].name[j]='\0';
- };
-
-
-//get the midi input devices name
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) cfg.bankRootDirList[i]=NULL;
- cfg.currentBankDir=new char[MAX_STRING_SIZE];
- sprintf(cfg.currentBankDir,"./testbnk");
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) cfg.presetsDirList[i]=NULL;
-
-// char filename[MAX_STRING_SIZE];
-// getConfigFileName(filename,MAX_STRING_SIZE);
-// readConfig(filename);
-
- if (cfg.bankRootDirList[0]==NULL){
- //banks
- cfg.bankRootDirList[0]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[0],"~/banks");
-
- cfg.bankRootDirList[1]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[1], INSTPREFIX "/share/" INSTALL_NAME "/presets/zynaddsubfx/banks");
-
- cfg.bankRootDirList[2]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[2],"/usr/share/zynaddsubfx/banks");
-
- cfg.bankRootDirList[3]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[3],"/usr/local/share/zynaddsubfx/banks");
-
- cfg.bankRootDirList[4]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[4],"../banks");
-
- cfg.bankRootDirList[5]=new char[MAX_STRING_SIZE];
- sprintf(cfg.bankRootDirList[5],"banks");
- };
-
- if (cfg.presetsDirList[0]==NULL){
-#if defined(OS_LINUX)
- //presets
- cfg.presetsDirList[0]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[0],"./");
-
- cfg.presetsDirList[1]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1],"../presets");
-
- cfg.presetsDirList[2]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[2],"presets");
-
- cfg.presetsDirList[3]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[3],"/usr/share/zynaddsubfx/presets");
-
- cfg.presetsDirList[4]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[4],"/usr/local/share/zynaddsubfx/presets");
-
-#else
- //presets
- cfg.presetsDirList[0]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[0],"./");
-
-#ifdef VSTAUDIOOUT
- cfg.presetsDirList[1]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1],"c:/Program Files/ZynAddSubFX/presets");
-#else
- cfg.presetsDirList[1]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[1],"../presets");
-#endif
-
- cfg.presetsDirList[2]=new char[MAX_STRING_SIZE];
- sprintf(cfg.presetsDirList[2],"presets");
-#endif
- };
-
-};
-
-Config::~Config(){
-
- delete(cfg.LinuxOSSWaveOutDev);
- delete(cfg.LinuxOSSSeqInDev);
- delete(cfg.DumpFile);
-
- for (int i=0;i<winmidimax;i++) delete (winmididevices[i].name);
- delete(winmididevices);
-};
-
-
-void Config::save(){
- char filename[MAX_STRING_SIZE];
- getConfigFileName(filename,MAX_STRING_SIZE);
- saveConfig(filename);
-};
-
-void Config::clearbankrootdirlist(){
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) {
- if (cfg.bankRootDirList[i]==NULL) delete(cfg.bankRootDirList[i]);
- cfg.bankRootDirList[i]=NULL;
- };
-};
-
-void Config::clearpresetsdirlist(){
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) {
- if (cfg.presetsDirList[i]==NULL) delete(cfg.presetsDirList[i]);
- cfg.presetsDirList[i]=NULL;
- };
-};
-
-void Config::readConfig(char *filename){
- XMLwrapper *xmlcfg=new XMLwrapper();
- if (xmlcfg->loadXMLfile(filename)<0) return;
- if (xmlcfg->enterbranch("CONFIGURATION")){
- cfg.SampleRate=xmlcfg->getpar("sample_rate",cfg.SampleRate,4000,1024000);
- cfg.SoundBufferSize=xmlcfg->getpar("sound_buffer_size",cfg.SoundBufferSize,16,8192);
- cfg.OscilSize=xmlcfg->getpar("oscil_size",cfg.OscilSize,MAX_AD_HARMONICS*2,131072);
- cfg.SwapStereo=xmlcfg->getpar("swap_stereo",cfg.SwapStereo,0,1);
- cfg.BankUIAutoClose=xmlcfg->getpar("bank_window_auto_close",cfg.BankUIAutoClose,0,1);
-
- cfg.DumpNotesToFile=xmlcfg->getpar("dump_notes_to_file",cfg.DumpNotesToFile,0,1);
- cfg.DumpAppend=xmlcfg->getpar("dump_append",cfg.DumpAppend,0,1);
- xmlcfg->getparstr("dump_file",cfg.DumpFile,MAX_STRING_SIZE);
-
- cfg.GzipCompression=xmlcfg->getpar("gzip_compression",cfg.GzipCompression,0,9);
-
- xmlcfg->getparstr("bank_current",cfg.currentBankDir,MAX_STRING_SIZE);
- cfg.Interpolation=xmlcfg->getpar("interpolation",cfg.Interpolation,0,1);
-
- cfg.CheckPADsynth=xmlcfg->getpar("check_pad_synth",cfg.CheckPADsynth,0,1);
-
-
- cfg.UserInterfaceMode=xmlcfg->getpar("user_interface_mode",cfg.UserInterfaceMode,0,2);
- cfg.VirKeybLayout=xmlcfg->getpar("virtual_keyboard_layout",cfg.VirKeybLayout,0,10);
-
- //get bankroot dirs
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (xmlcfg->enterbranch("BANKROOT",i)){
- cfg.bankRootDirList[i]=new char[MAX_STRING_SIZE];
- xmlcfg->getparstr("bank_root",cfg.bankRootDirList[i],MAX_STRING_SIZE);
- xmlcfg->exitbranch();
- };
- };
-
- //get preset root dirs
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++){
- if (xmlcfg->enterbranch("PRESETSROOT",i)){
- cfg.presetsDirList[i]=new char[MAX_STRING_SIZE];
- xmlcfg->getparstr("presets_root",cfg.presetsDirList[i],MAX_STRING_SIZE);
- xmlcfg->exitbranch();
- };
- };
-
- //linux stuff
- xmlcfg->getparstr("linux_oss_wave_out_dev",cfg.LinuxOSSWaveOutDev,MAX_STRING_SIZE);
- xmlcfg->getparstr("linux_oss_seq_in_dev",cfg.LinuxOSSSeqInDev,MAX_STRING_SIZE);
-
- //windows stuff
- cfg.WindowsWaveOutId=xmlcfg->getpar("windows_wave_out_id",cfg.WindowsWaveOutId,0,winwavemax);
- cfg.WindowsMidiInId=xmlcfg->getpar("windows_midi_in_id",cfg.WindowsMidiInId,0,winmidimax);
-
- xmlcfg->exitbranch();
- };
- delete(xmlcfg);
-
- cfg.OscilSize=(int) pow(2,ceil(log (cfg.OscilSize-1.0)/log(2.0)));
-
-};
-
-void Config::saveConfig(char *filename){
- XMLwrapper *xmlcfg=new XMLwrapper();
-
- xmlcfg->beginbranch("CONFIGURATION");
-
- xmlcfg->addpar("sample_rate",cfg.SampleRate);
- xmlcfg->addpar("sound_buffer_size",cfg.SoundBufferSize);
- xmlcfg->addpar("oscil_size",cfg.OscilSize);
- xmlcfg->addpar("swap_stereo",cfg.SwapStereo);
- xmlcfg->addpar("bank_window_auto_close",cfg.BankUIAutoClose);
-
- xmlcfg->addpar("dump_notes_to_file",cfg.DumpNotesToFile);
- xmlcfg->addpar("dump_append",cfg.DumpAppend);
- xmlcfg->addparstr("dump_file",cfg.DumpFile);
-
- xmlcfg->addpar("gzip_compression",cfg.GzipCompression);
-
- xmlcfg->addpar("check_pad_synth",cfg.CheckPADsynth);
-
- xmlcfg->addparstr("bank_current",cfg.currentBankDir);
-
- xmlcfg->addpar("user_interface_mode",cfg.UserInterfaceMode);
- xmlcfg->addpar("virtual_keyboard_layout",cfg.VirKeybLayout);
-
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) if (cfg.bankRootDirList[i]!=NULL) {
- xmlcfg->beginbranch("BANKROOT",i);
- xmlcfg->addparstr("bank_root",cfg.bankRootDirList[i]);
- xmlcfg->endbranch();
- };
-
- for (int i=0;i<MAX_BANK_ROOT_DIRS;i++) if (cfg.presetsDirList[i]!=NULL) {
- xmlcfg->beginbranch("PRESETSROOT",i);
- xmlcfg->addparstr("presets_root",cfg.presetsDirList[i]);
- xmlcfg->endbranch();
- };
-
- xmlcfg->addpar("interpolation",cfg.Interpolation);
-
- //linux stuff
- xmlcfg->addparstr("linux_oss_wave_out_dev",cfg.LinuxOSSWaveOutDev);
- xmlcfg->addparstr("linux_oss_seq_in_dev",cfg.LinuxOSSSeqInDev);
-
- //windows stuff
- xmlcfg->addpar("windows_wave_out_id",cfg.WindowsWaveOutId);
- xmlcfg->addpar("windows_midi_in_id",cfg.WindowsMidiInId);
-
- xmlcfg->endbranch();
-
- int tmp=cfg.GzipCompression;
- cfg.GzipCompression=0;
- xmlcfg->saveXMLfile(filename);
- cfg.GzipCompression=tmp;
-
- delete(xmlcfg);
-};
-
-void Config::getConfigFileName(char *name, int namesize){
- name[0]=0;
-#ifdef OS_LINUX
- snprintf(name,namesize,"%s%s",getenv("HOME"),"/.zynaddsubfxXML.cfg");
-#else
- snprintf(name,namesize,"%s","zynaddsubfxXML.cfg");
-#endif
-
-};
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.h
deleted file mode 100644
index 800a1823..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Config.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Config.h - Configuration file functions
- Copyright (C) 2003-2005 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 CONFIG_H
-#define CONFIG_H
-#include "../globals.h"
-#define MAX_STRING_SIZE 4000
-#define MAX_BANK_ROOT_DIRS 100
-
-class Config{
- public:
- Config();
- ~Config();
- struct {
- char *LinuxOSSWaveOutDev,*LinuxOSSSeqInDev;
- int SampleRate,SoundBufferSize,OscilSize,SwapStereo;
- int WindowsWaveOutId,WindowsMidiInId;
- int BankUIAutoClose;
- int DumpNotesToFile,DumpAppend;
- int GzipCompression;
- int Interpolation;
- char *DumpFile;
- char *bankRootDirList[MAX_BANK_ROOT_DIRS],*currentBankDir;
- char *presetsDirList[MAX_BANK_ROOT_DIRS];
- int CheckPADsynth;
- int UserInterfaceMode;
- int VirKeybLayout;
- } cfg;
- int winwavemax,winmidimax;//number of wave/midi devices on Windows
- int maxstringsize;
-
- struct winmidionedevice{
- char *name;
- };
- winmidionedevice *winmididevices;
-
- void clearbankrootdirlist();
- void clearpresetsdirlist();
- void init();
- void save();
-
- private:
- void readConfig(char *filename);
- void saveConfig(char *filename);
- void getConfigFileName(char *name,int namesize);
-};
-#endif
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.C
deleted file mode 100644
index 2b5bd810..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.C
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Dump.C - It dumps the notes to a text file
-
- Copyright (C) 2002-2005 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 <stdlib.h>
-#include <time.h>
-#include "Util.h"
-#include "Dump.h"
-
-Dump dump;
-
-Dump::Dump(){
- file=NULL;
- tick=0;
- k=0;
- keyspressed=0;
-};
-
-Dump::~Dump(){
- if (file!=NULL) {
- double duration=(double)tick*(double) SOUND_BUFFER_SIZE/(double) SAMPLE_RATE;
- fprintf(file,"\n# statistics: duration = %d seconds; keyspressed = %d\n\n\n\n",(int) duration,keyspressed);
- fclose(file);
- };
-};
-
-void Dump::startnow(){
- if (file!=NULL) return;//the file is already open
-
- if (config.cfg.DumpNotesToFile!=0){
- if (config.cfg.DumpAppend!=0) file=fopen(config.cfg.DumpFile,"a");
- else file=fopen(config.cfg.DumpFile,"w");
- if (file==NULL) return;
- if (config.cfg.DumpAppend!=0) fprintf(file,"%s","#************************************\n");
-
- time_t tm=time(NULL);
-
- fprintf(file,"#date/time = %s\n",ctime(&tm));
- fprintf(file,"#1 tick = %g milliseconds\n",SOUND_BUFFER_SIZE*1000.0/SAMPLE_RATE);
- fprintf(file,"SAMPLERATE = %d\n",SAMPLE_RATE);
- fprintf(file,"TICKSIZE = %d #samples\n",SOUND_BUFFER_SIZE);
- fprintf(file,"\n\nSTART\n");
- };
-};
-
-void Dump::inctick(){
- tick++;
-};
-
-
-void Dump::dumpnote(char chan,char note, char vel){
- if (file==NULL) return;
- if (note==0) return;
- if (vel==0) fprintf(file,"n %d -> %d %d \n",tick,chan,note);//note off
- else fprintf(file,"N %d -> %d %d %d \n",tick,chan,note,vel);//note on
-
- if (vel!=0) keyspressed++;
-#ifndef JACKAUDIOOUT
- if (k++>25) {
- fflush(file);
- k=0;
- };
-#endif
-};
-
-void Dump::dumpcontroller(char chan,unsigned int type,int par){
- if (file==NULL) return;
- switch(type){
- case C_pitchwheel:fprintf(file,"P %d -> %d %d\n",tick,chan,par);
- break;
- default:fprintf(file,"C %d -> %d %d %d\n",tick,chan,type,par);
- break;
- };
-#ifndef JACKAUDIOOUT
- if (k++>25) {
- fflush(file);
- k=0;
- };
-#endif
-};
-
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.h
deleted file mode 100644
index e5a49570..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Dump.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Dump.h - It dumps the notes to a text file
-
- Copyright (C) 2002-2005 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 DUMP_H
-#define DUMP_H
-
-#include <stdio.h>
-
-class Dump{
- public:
- Dump();
- ~Dump();
- void startnow();
- void inctick();
-
- void dumpnote(char chan,char note, char vel);
- void dumpcontroller(char chan,unsigned int type,int par);
-
- private:
- FILE *file;
- int tick;
- int k;
- int keyspressed;
-};
-#endif
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.C
deleted file mode 100644
index 99a1ac28..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.C
+++ /dev/null
@@ -1,680 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Master.C - It sends Midi Messages to Parts, receives samples from parts,
- process them with system/insertion effects and mix them
- Copyright (C) 2002-2005 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 "Master.h"
-
-#include <stdio.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <unistd.h>
-
-Master::Master(){
- swaplr=0;
-
- busy = false;
- fft=new FFTwrapper(OSCIL_SIZE);
-
- tmpmixl=new REALTYPE[SOUND_BUFFER_SIZE];
- tmpmixr=new REALTYPE[SOUND_BUFFER_SIZE];
- audiooutl=new REALTYPE[SOUND_BUFFER_SIZE];
- audiooutr=new REALTYPE[SOUND_BUFFER_SIZE];
-
- ksoundbuffersamples=0;
- ksoundbuffersamplelow=0.0;
- oldsamplel=0.0;oldsampler=0.0;
- shutup=0;
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++) {
- vuoutpeakpart[npart]=1e-9;
- fakepeakpart[npart]=0;
- };
-
- memset(audiooutl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(audiooutr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
-
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++)
- part[npart]=new Part(&microtonal,fft,this);
-
-
- //Insertion Effects init
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++)
- insefx[nefx]=new EffectMgr(1,this);
-
- //System Effects init
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) {
- sysefx[nefx]=new EffectMgr(0,this);
- };
-
-
- defaults();
-};
-
-void Master::defaults(){
- volume=1.0;
- setPvolume(80);
- setPkeyshift(64);
-
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- part[npart]->defaults();
- part[npart]->Prcvchn=npart%NUM_MIDI_CHANNELS;
- };
-
- partonoff(0,1);//enable the first part
-
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++) {
- insefx[nefx]->defaults();
- Pinsparts[nefx]=-1;
- };
-
- //System Effects init
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) {
- sysefx[nefx]->defaults();
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- if (nefx==0) setPsysefxvol(npart,nefx,64);
- else setPsysefxvol(npart,nefx,0);
- };
- for (int nefxto=0;nefxto<NUM_SYS_EFX;nefxto++)
- setPsysefxsend(nefx,nefxto,0);
- };
-
- sysefx[0]->changeeffect(1);
- microtonal.defaults();
- ShutUp();
-};
-
-/*
- * Note On Messages (velocity=0 for NoteOff)
- */
-void Master::NoteOn(unsigned char chan,unsigned char note,unsigned char velocity){
- dump.dumpnote(chan,note,velocity);
-
- noteon(chan,note,velocity);
-};
-
-/*
- * Internal Note On (velocity=0 for NoteOff)
- */
-void Master::noteon(unsigned char chan,unsigned char note,unsigned char velocity){
- int npart;
- if (velocity!=0){
- for (npart=0;npart<NUM_MIDI_PARTS;npart++){
- if (chan==part[npart]->Prcvchn){
- fakepeakpart[npart]=velocity*2;
- if (part[npart]->Penabled!=0) part[npart]->NoteOn(note,velocity,keyshift);
- };
- };
- }else{
- this->NoteOff(chan,note);
- };
- HDDRecorder.triggernow();
-};
-
-/*
- * Note Off Messages
- */
-void Master::NoteOff(unsigned char chan,unsigned char note){
- dump.dumpnote(chan,note,0);
-
- noteoff(chan,note);
-};
-
-/*
- * Internal Note Off
- */
-void Master::noteoff(unsigned char chan,unsigned char note){
- int npart;
- for (npart=0;npart<NUM_MIDI_PARTS;npart++){
- if ((chan==part[npart]->Prcvchn) && (part[npart]->Penabled!=0))
- part[npart]->NoteOff(note);
- };
-};
-
-/*
- * Controllers
- */
-void Master::SetController(unsigned char chan,unsigned int type,int par){
- dump.dumpcontroller(chan,type,par);
-
- setcontroller(chan,type,par);
-};
-
-/*
- * Internal Controllers
- */
-void Master::setcontroller(unsigned char chan,unsigned int type,int par){
- if ((type==C_dataentryhi)||(type==C_dataentrylo)||
- (type==C_nrpnhi)||(type==C_nrpnlo)){//Process RPN and NRPN by the Master (ignore the chan)
- ctl.setparameternumber(type,par);
-
- int parhi=-1,parlo=-1,valhi=-1,vallo=-1;
- if (ctl.getnrpn(&parhi,&parlo,&valhi,&vallo)==0){//this is NRPN
- //fprintf(stderr,"rcv. NRPN: %d %d %d %d\n",parhi,parlo,valhi,vallo);
- switch (parhi){
- case 0x04://System Effects
- if (parlo<NUM_SYS_EFX) {
- sysefx[parlo]->seteffectpar_nolock(valhi,vallo);
- };
- break;
- case 0x08://Insertion Effects
- if (parlo<NUM_INS_EFX) {
- insefx[parlo]->seteffectpar_nolock(valhi,vallo);
- };
- break;
-
- };
- };
- } else {//other controllers
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){//Send the controller to all part assigned to the channel
- if ((chan==part[npart]->Prcvchn) && (part[npart]->Penabled!=0))
- part[npart]->SetController(type,par);
- };
- };
-};
-
-
-/*
- * Enable/Disable a part
- */
-void Master::partonoff(int npart,int what){
- if (npart>=NUM_MIDI_PARTS) return;
- if (what==0){//disable part
- fakepeakpart[npart]=0;
- part[npart]->Penabled=0;
- part[npart]->cleanup();
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++){
- if (Pinsparts[nefx]==npart) {
- insefx[nefx]->cleanup();
- };
- };
- } else {//enabled
- part[npart]->Penabled=1;
- fakepeakpart[npart]=0;
- };
-};
-
-/*
- * Master audio out (the final sound)
- */
-
-void Master::AudioOut(REALTYPE* outl, REALTYPE* outr)
- {
- int i,npart,nefx;
-
- //Swaps the Left channel with Right Channel (if it is asked for)
- if (swaplr != 0) {
- REALTYPE *tmp=outl;
- outl = outr;
- outr = tmp;
- }
-
- //clean up the output samples
- memset(outl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(outr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
-
- //Compute part samples and store them part[npart]->partoutl,partoutr
- for (npart=0; npart<NUM_MIDI_PARTS; npart++)
- if (part[npart]->Penabled != 0)
- part[npart]->ComputePartSmps();
-
- //Insertion effects
- for (nefx=0;nefx<NUM_INS_EFX;nefx++){
- if (Pinsparts[nefx]>=0) {
- int efxpart=Pinsparts[nefx];
- if (part[efxpart]->Penabled!=0)
- insefx[nefx]->out(part[efxpart]->partoutl,part[efxpart]->partoutr);
- }
- }
-
-
- //Apply the part volumes and pannings (after insertion effects)
- for (npart = 0; npart < NUM_MIDI_PARTS; npart++) {
- if (part[npart]->Penabled==0)
- continue;
-
- REALTYPE newvol_l=part[npart]->volume;
- REALTYPE newvol_r=part[npart]->volume;
- REALTYPE oldvol_l=part[npart]->oldvolumel;
- REALTYPE oldvol_r=part[npart]->oldvolumer;
- REALTYPE pan=part[npart]->panning;
- if (pan < 0.5)
- newvol_l *= pan*2.0;
- else
- newvol_r *= (1.0-pan)*2.0;
-
- if (ABOVE_AMPLITUDE_THRESHOLD(oldvol_l,newvol_l)||
- ABOVE_AMPLITUDE_THRESHOLD(oldvol_r,newvol_r)){//the volume or the panning has changed and needs interpolation
-
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- REALTYPE vol_l = INTERPOLATE_AMPLITUDE(oldvol_l,newvol_l,i,SOUND_BUFFER_SIZE);
- REALTYPE vol_r = INTERPOLATE_AMPLITUDE(oldvol_r,newvol_r,i,SOUND_BUFFER_SIZE);
- part[npart]->partoutl[i]*=vol_l;
- part[npart]->partoutr[i]*=vol_r;
- }
- part[npart]->oldvolumel=newvol_l;
- part[npart]->oldvolumer=newvol_r;
-
- }
- else {
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {//the volume did not changed
- part[npart]->partoutl[i] *= newvol_l;
- part[npart]->partoutr[i] *= newvol_r;
- }
- }
- }
-
-
- //System effects
- for (nefx=0;nefx<NUM_SYS_EFX;nefx++){
- if (sysefx[nefx]->geteffect()==0) continue;//the effect is disabled
-
- //Clean up the samples used by the system effects
- memset(tmpmixl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpmixr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
-
- //Mix the channels according to the part settings about System Effect
- for (npart=0;npart<NUM_MIDI_PARTS;npart++){
- //skip if the part has no output to effect
- if (Psysefxvol[nefx][npart]==0) continue;
-
- //skip if the part is disabled
- if (part[npart]->Penabled==0) continue;
-
- //the output volume of each part to system effect
- REALTYPE vol=sysefxvol[nefx][npart];
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- tmpmixl[i]+=part[npart]->partoutl[i]*vol;
- tmpmixr[i]+=part[npart]->partoutr[i]*vol;
- };
- };
-
- // system effect send to next ones
- for (int nefxfrom=0;nefxfrom<nefx;nefxfrom++){
- if (Psysefxsend[nefxfrom][nefx]!=0){
- REALTYPE v=sysefxsend[nefxfrom][nefx];
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- tmpmixl[i]+=sysefx[nefxfrom]->efxoutl[i]*v;
- tmpmixr[i]+=sysefx[nefxfrom]->efxoutr[i]*v;
- };
- };
- };
-
- sysefx[nefx]->out(tmpmixl,tmpmixr);
-
- //Add the System Effect to sound output
- REALTYPE outvol=sysefx[nefx]->sysefxgetvolume();
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- outl[i]+=tmpmixl[i]*outvol;
- outr[i]+=tmpmixr[i]*outvol;
- };
-
- };
-
- //Mix all parts
- for (npart=0;npart<NUM_MIDI_PARTS;npart++){
- for (i=0;i<SOUND_BUFFER_SIZE;i++) { //the volume did not changed
- outl[i] += part[npart]->partoutl[i];
- outr[i] += part[npart]->partoutr[i];
- }
- }
-
- //Insertion effects for Master Out
- for (nefx=0;nefx<NUM_INS_EFX;nefx++) {
- if (Pinsparts[nefx] == -2)
- insefx[nefx]->out(outl, outr);
- }
-
- //Master Volume
- for (i = 0; i < SOUND_BUFFER_SIZE; i++) {
- outl[i] *= volume;
- outr[i] *= volume;
- }
-
- //Peak computation (for vumeters)
- vuoutpeakl=1e-12;vuoutpeakr=1e-12;
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- if (fabs(outl[i])>vuoutpeakl) vuoutpeakl=fabs(outl[i]);
- if (fabs(outr[i])>vuoutpeakr) vuoutpeakr=fabs(outr[i]);
- };
- if ((vuoutpeakl>1.0)||(vuoutpeakr>1.0)) vuclipped=1;
- if (vumaxoutpeakl<vuoutpeakl) vumaxoutpeakl=vuoutpeakl;
- if (vumaxoutpeakr<vuoutpeakr) vumaxoutpeakr=vuoutpeakr;
-
- //RMS Peak computation (for vumeters)
- vurmspeakl=1e-12;vurmspeakr=1e-12;
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- vurmspeakl+=outl[i]*outl[i];
- vurmspeakr+=outr[i]*outr[i];
- };
- vurmspeakl=sqrt(vurmspeakl/SOUND_BUFFER_SIZE);
- vurmspeakr=sqrt(vurmspeakr/SOUND_BUFFER_SIZE);
-
- //Part Peak computation (for Part vumeters or fake part vumeters)
- for (npart=0;npart<NUM_MIDI_PARTS;npart++){
- vuoutpeakpart[npart]=1.0e-12;
- if (part[npart]->Penabled!=0) {
- REALTYPE *outl=part[npart]->partoutl,
- *outr=part[npart]->partoutr;
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- REALTYPE tmp=fabs(outl[i]+outr[i]);
- if (tmp>vuoutpeakpart[npart]) vuoutpeakpart[npart]=tmp;
- };
- vuoutpeakpart[npart]*=volume;
- } else {
- if (fakepeakpart[npart]>1) fakepeakpart[npart]--;
- };
- };
-
-
- //Shutup if it is asked (with fade-out)
- if (shutup != 0) {
- for (i = 0; i < SOUND_BUFFER_SIZE; i++) {
- REALTYPE tmp=(SOUND_BUFFER_SIZE-i)/(REALTYPE) SOUND_BUFFER_SIZE;
- outl[i] *= tmp;
- outr[i] *= tmp;
- }
- ShutUp();
- }
-
- //update the LFO's time
- LFOParams::time++;
-
- if (HDDRecorder.recording())
- HDDRecorder.recordbuffer(outl,outr);
- dump.inctick();
- };
-
-//---------------------------------------------------------
-// GetAudioOutSamples
-//---------------------------------------------------------
-
-void Master::GetAudioOutSamples(int nsamples, REALTYPE* outl, REALTYPE* outr)
- {
- int dstOffset = 0;
- while (nsamples) {
- if (ksoundbuffersamples <= 0) {
- AudioOut(audiooutl, audiooutr);
- ksoundbuffersamples = SOUND_BUFFER_SIZE;
- }
- int n = nsamples > ksoundbuffersamples ? ksoundbuffersamples : nsamples;
- int srcOffset = SOUND_BUFFER_SIZE - ksoundbuffersamples;
- memcpy(outl + dstOffset, audiooutl + srcOffset, n * sizeof(REALTYPE));
- memcpy(outr + dstOffset, audiooutr + srcOffset, n * sizeof(REALTYPE));
- nsamples -= n;
- dstOffset += n;
- ksoundbuffersamples -= n;
- }
- }
-
-Master::~Master(){
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++) delete (part[npart]);
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++) delete (insefx[nefx]);
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) delete (sysefx[nefx]);
-
- delete [] audiooutl;
- delete [] audiooutr;
- delete [] tmpmixl;
- delete [] tmpmixr;
- delete (fft);
-
-};
-
-
-/*
- * Parameter control
- */
-void Master::setPvolume(char Pvolume_){
- Pvolume=Pvolume_;
- volume=dB2rap((Pvolume-96.0)/96.0*40.0);
-};
-
-void Master::setPkeyshift(char Pkeyshift_){
- Pkeyshift=Pkeyshift_;
- keyshift=(int)Pkeyshift-64;
-};
-
-
-void Master::setPsysefxvol(int Ppart,int Pefx,char Pvol){
- Psysefxvol[Pefx][Ppart]=Pvol;
- sysefxvol[Pefx][Ppart]=pow(0.1,(1.0-Pvol/96.0)*2.0);
-};
-
-void Master::setPsysefxsend(int Pefxfrom,int Pefxto,char Pvol){
- Psysefxsend[Pefxfrom][Pefxto]=Pvol;
- sysefxsend[Pefxfrom][Pefxto]=pow(0.1,(1.0-Pvol/96.0)*2.0);
-};
-
-
-/*
- * Panic! (Clean up all parts and effects)
- */
-void Master::ShutUp(){
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++) {
- part[npart]->cleanup();
- fakepeakpart[npart]=0;
- };
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++) insefx[nefx]->cleanup();
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++) sysefx[nefx]->cleanup();
- vuresetpeaks();
- shutup=0;
-};
-
-
-/*
- * Reset peaks and clear the "cliped" flag (for VU-meter)
- */
-void Master::vuresetpeaks(){
- vuoutpeakl=1e-9;vuoutpeakr=1e-9;vumaxoutpeakl=1e-9;vumaxoutpeakr=1e-9;
- vuclipped=0;
-};
-
-
-
-void Master::applyparameters(){
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- part[npart]->applyparameters();
- };
-};
-
-void Master::add2XML(XMLwrapper *xml){
- xml->addpar("volume",Pvolume);
- xml->addpar("key_shift",Pkeyshift);
- xml->addparbool("nrpn_receive",ctl.NRPN.receive);
-
- xml->beginbranch("MICROTONAL");
- microtonal.add2XML(xml);
- xml->endbranch();
-
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- xml->beginbranch("PART",npart);
- part[npart]->add2XML(xml);
- xml->endbranch();
- };
-
- xml->beginbranch("SYSTEM_EFFECTS");
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){
- xml->beginbranch("SYSTEM_EFFECT",nefx);
- xml->beginbranch("EFFECT");
- sysefx[nefx]->add2XML(xml);
- xml->endbranch();
-
- for (int pefx=0;pefx<NUM_MIDI_PARTS;pefx++){
- xml->beginbranch("VOLUME",pefx);
- xml->addpar("vol",Psysefxvol[nefx][pefx]);
- xml->endbranch();
- };
-
- for (int tonefx=nefx+1;tonefx<NUM_SYS_EFX;tonefx++){
- xml->beginbranch("SENDTO",tonefx);
- xml->addpar("send_vol",Psysefxsend[nefx][tonefx]);
- xml->endbranch();
- };
-
-
- xml->endbranch();
- };
- xml->endbranch();
-
- xml->beginbranch("INSERTION_EFFECTS");
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++){
- xml->beginbranch("INSERTION_EFFECT",nefx);
- xml->addpar("part",Pinsparts[nefx]);
-
- xml->beginbranch("EFFECT");
- insefx[nefx]->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
- };
-
- xml->endbranch();
-
-};
-
-
-int Master::getalldata(char **data){
- XMLwrapper *xml=new XMLwrapper();
-
- xml->beginbranch("MASTER");
-
- busy = true;
- add2XML(xml);
- busy = false;
-
- xml->endbranch();
-
- *data=xml->getXMLdata();
- delete (xml);
- return(strlen(*data)+1);
-};
-
-void Master::putalldata(char *data,int size){
- XMLwrapper *xml=new XMLwrapper();
- if (!xml->putXMLdata(data)) {
- delete(xml);
- return;
- };
-
- if (xml->enterbranch("MASTER")==0) return;
-
- busy = true;
- getfromXML(xml);
- busy = false;
-
- xml->exitbranch();
-
- delete(xml);
-};
-
-int Master::saveXML(char *filename){
- XMLwrapper *xml=new XMLwrapper();
-
- xml->beginbranch("MASTER");
- add2XML(xml);
- xml->endbranch();
-
- int result=xml->saveXMLfile(filename);
- delete (xml);
- return(result);
-};
-
-
-
-int Master::loadXML(char *filename){
- XMLwrapper *xml=new XMLwrapper();
- if (xml->loadXMLfile(filename)<0) {
- delete(xml);
- return(-1);
- };
-
- if (xml->enterbranch("MASTER")==0) return(-10);
- getfromXML(xml);
- xml->exitbranch();
-
- delete(xml);
- return(0);
-};
-
-void Master::getfromXML(XMLwrapper *xml){
- setPvolume(xml->getpar127("volume",Pvolume));
- setPkeyshift(xml->getpar127("key_shift",Pkeyshift));
- ctl.NRPN.receive=xml->getparbool("nrpn_receive",ctl.NRPN.receive);
-
-
- part[0]->Penabled=0;
- for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- if (xml->enterbranch("PART",npart)==0) continue;
- part[npart]->getfromXML(xml);
- xml->exitbranch();
- };
-
- if (xml->enterbranch("MICROTONAL")){
- microtonal.getfromXML(xml);
- xml->exitbranch();
- };
-
- sysefx[0]->changeeffect(0);
- if (xml->enterbranch("SYSTEM_EFFECTS")){
- for (int nefx=0;nefx<NUM_SYS_EFX;nefx++){
- if (xml->enterbranch("SYSTEM_EFFECT",nefx)==0) continue;
- if (xml->enterbranch("EFFECT")){
- sysefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- };
-
- for (int partefx=0;partefx<NUM_MIDI_PARTS;partefx++){
- if (xml->enterbranch("VOLUME",partefx)==0) continue;
- setPsysefxvol(partefx,nefx,xml->getpar127("vol",Psysefxvol[partefx][nefx]));
- xml->exitbranch();
- };
-
- for (int tonefx=nefx+1;tonefx<NUM_SYS_EFX;tonefx++){
- if (xml->enterbranch("SENDTO",tonefx)==0) continue;
- setPsysefxsend(nefx,tonefx,xml->getpar127("send_vol",Psysefxsend[nefx][tonefx]));
- xml->exitbranch();
- };
- xml->exitbranch();
- };
- xml->exitbranch();
- };
-
-
- if (xml->enterbranch("INSERTION_EFFECTS")){
- for (int nefx=0;nefx<NUM_INS_EFX;nefx++){
-
- if (xml->enterbranch("INSERTION_EFFECT",nefx)==0) continue;
- Pinsparts[nefx]=xml->getpar("part",Pinsparts[nefx],-2,NUM_MIDI_PARTS);
- if (xml->enterbranch("EFFECT")){
- insefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- };
- xml->exitbranch();
-
- };
-
- xml->exitbranch();
- };
-
-};
-
-
-
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.h
deleted file mode 100644
index 51feabdd..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Master.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Master.h - It sends Midi Messages to Parts, receives samples from parts,
- process them with system/insertion effects and mix them
- Copyright (C) 2002-2005 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 MASTER_H
-#define MASTER_H
-
-#include "../globals.h"
-#include "../Effects/EffectMgr.h"
-#include "Part.h"
-#include "../Output/Recorder.h"
-#include "Microtonal.h"
-
-#include "Bank.h"
-#include "Dump.h"
-#include "../Seq/Sequencer.h"
-#include "XMLwrapper.h"
-
-extern Dump dump;
-class Master{
- public:
- Master();
- ~Master();
-
- //saves all settings to a XML file
- //returns 0 for ok or <0 if there is an error
- int saveXML(char *filename);
-
- //this adds the parameters to the XML data
- void add2XML(XMLwrapper *xml);
-
- void defaults();
-
-
- //loads all settings from a XML file
- //returns 0 for ok or -1 if there is an error
- int loadXML(char *filename);
- void applyparameters();
-
- void getfromXML(XMLwrapper *xml);
-
- //get all data to a newly allocated array (used for VST)
- //returns the datasize
- int getalldata(char **data);
- //put all data from the *data array to zynaddsubfx parameters (used for VST)
- void putalldata(char *data,int size);
-
-
-
- //Midi IN
- void NoteOn(unsigned char chan,unsigned char note,unsigned char velocity);
- void NoteOff(unsigned char chan,unsigned char note);
- void SetController(unsigned char chan,unsigned int type,int par);
- //void NRPN...
-
-
- void ShutUp();
- int shutup;
-
- //Audio Output
- void AudioOut(REALTYPE *outl,REALTYPE *outr);
- //Audio Output (for callback mode). This allows the program to be controled by an external program
- void GetAudioOutSamples(int nsamples, REALTYPE *outl,REALTYPE *outr);
-
-
- void partonoff(int npart,int what);
-
- //parts
- Part *part[NUM_MIDI_PARTS];
-
- //parameters
- unsigned char Pvolume;
- unsigned char Pkeyshift;
- unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
- unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
-
- //parameters control
- void setPvolume(char Pvolume_);
- void setPkeyshift(char Pkeyshift_);
- void setPsysefxvol(int Ppart,int Pefx,char Pvol);
- void setPsysefxsend(int Pefxfrom,int Pefxto,char Pvol);
-
- //effects
- EffectMgr *sysefx[NUM_SYS_EFX];//system
- EffectMgr *insefx[NUM_INS_EFX];//insertion
-// void swapcopyeffects(int what,int type,int neff1,int neff2);
-
- //HDD recorder
- Recorder HDDRecorder;
-
- //part that's apply the insertion effect; -1 to disable
- short int Pinsparts[NUM_INS_EFX];
-
- //peaks for VU-meter
- void vuresetpeaks();
- REALTYPE vuoutpeakl,vuoutpeakr,vumaxoutpeakl,vumaxoutpeakr,vurmspeakl,vurmspeakr;
- int vuclipped;
-
- //peaks for part VU-meters
- REALTYPE vuoutpeakpart[NUM_MIDI_PARTS];
- unsigned char fakepeakpart[NUM_MIDI_PARTS];//this is used to compute the "peak" when the part is disabled
-
- Controller ctl;
- int swaplr;//1 if L and R are swapped
-
- //Sequencer
- Sequencer seq;
-
- //other objects
- Microtonal microtonal;
- Bank bank;
-
- FFTwrapper *fft;
- volatile bool busy; // if true, is busy and cannot accept
- // events or deliver data
- void lock() { busy = true; }
- void unlock() { busy = false; }
-
- private:
- REALTYPE volume;
- REALTYPE sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
- REALTYPE sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
-
- //Temporary mixing samples for part samples which is sent to system effect
- REALTYPE *tmpmixl;
- REALTYPE *tmpmixr;
-
-
- int keyshift;
-
- //Audio Output samples (if it used GetAudioOutSamples - eg. for Jack output; elsewhere is unused)
- REALTYPE *audiooutl;
- REALTYPE *audiooutr;
-
- int ksoundbuffersamples; // number of valid samples in audiooutr/l
- REALTYPE ksoundbuffersamplelow;//this is used for resampling (eg. if Jack samplerate!= SAMPLE_RATE)
- REALTYPE oldsamplel,oldsampler;//this is used for resampling
-
- //Theese are called by the NoteOn, NoteOff,SetController (which are from external sources like MIDI, Virtual Keyboard)
- //and are called by internal parts of the program (like sequencer)
- void noteon(unsigned char chan,unsigned char note,unsigned char velocity);
- void noteoff(unsigned char chan,unsigned char note);
- void setcontroller(unsigned char chan,unsigned int type,int par);
-};
-
-
-#endif
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.C
deleted file mode 100644
index 30a3a71e..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.C
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Microtonal.C - Tuning settings and microtonal capabilities
- Copyright (C) 2002-2005 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 <math.h>
-#include <string.h>
-#include "Microtonal.h"
-
-#define MAX_LINE_SIZE 80
-
-Microtonal::Microtonal(){
- Pname=new unsigned char[MICROTONAL_MAX_NAME_LEN];
- Pcomment=new unsigned char[MICROTONAL_MAX_NAME_LEN];
- defaults();
-};
-
-void Microtonal::defaults(){
- Pinvertupdown=0;
- Pinvertupdowncenter=60;
- octavesize=12;
- Penabled=0;
- PAnote=69;
- PAfreq=440.0;
- Pscaleshift=64;
-
- Pfirstkey=0;Plastkey=127;
- Pmiddlenote=60;Pmapsize=12;
- Pmappingenabled=0;
-
- for (int i=0;i<128;i++) Pmapping[i]=i;
-
- for (int i=0;i<MAX_OCTAVE_SIZE;i++){
- octave[i].tuning=tmpoctave[i].tuning=pow(2,(i%octavesize+1)/12.0);
- octave[i].type=tmpoctave[i].type=1;
- octave[i].x1=tmpoctave[i].x1=(i%octavesize+1)*100;
- octave[i].x2=tmpoctave[i].x2=0;
- };
- octave[11].type=2;octave[11].x1=2;octave[11].x2=1;
- for (int i=0;i<MICROTONAL_MAX_NAME_LEN;i++){
- Pname[i]='\0';
- Pcomment[i]='\0';
- };
- snprintf((char *) Pname,MICROTONAL_MAX_NAME_LEN,"12tET");
- snprintf((char *) Pcomment,MICROTONAL_MAX_NAME_LEN,"Equal Temperament 12 notes per octave");
- Pglobalfinedetune=64;
-};
-
-Microtonal::~Microtonal(){
- delete (Pname);
- delete (Pcomment);
-};
-
-/*
- * Get the size of the octave
- */
-unsigned char Microtonal::getoctavesize(){
- if (Penabled!=0) return(octavesize);
- else return(12);
-};
-
-/*
- * Get the frequency according the note number
- */
-REALTYPE Microtonal::getnotefreq(int note,int keyshift){
- // in this function will appears many times things like this:
- // var=(a+b*100)%b
- // I had written this way because if I use var=a%b gives unwanted results when a<0
- // This is the same with divisions.
-
- if ((Pinvertupdown!=0)&&((Pmappingenabled==0)||(Penabled==0))) note=(int) Pinvertupdowncenter*2-note;
-
- //compute global fine detune
- REALTYPE globalfinedetunerap=pow(2.0,(Pglobalfinedetune-64.0)/1200.0);//-64.0 .. 63.0 cents
-
- if (Penabled==0) return(pow(2.0,(note-PAnote+keyshift)/12.0)*PAfreq*globalfinedetunerap);//12tET
-
- int scaleshift=((int)Pscaleshift-64+(int) octavesize*100)%octavesize;
-
- //compute the keyshift
- REALTYPE rap_keyshift=1.0;
- if (keyshift!=0){
- int kskey=(keyshift+(int)octavesize*100)%octavesize;
- int ksoct=(keyshift+(int)octavesize*100)/octavesize-100;
- rap_keyshift=(kskey==0) ? (1.0):(octave[kskey-1].tuning);
- rap_keyshift*=pow(octave[octavesize-1].tuning,ksoct);
- };
-
- //if the mapping is enabled
- if (Pmappingenabled!=0){
- if ((note<Pfirstkey)||(note>Plastkey)) return (-1.0);
- //Compute how many mapped keys are from middle note to reference note
- //and find out the proportion between the freq. of middle note and "A" note
- int tmp=PAnote-Pmiddlenote,minus=0;
- if (tmp<0) { tmp=-tmp; minus=1; };
- int deltanote=0;
- for (int i=0;i<tmp;i++) if (Pmapping[i%Pmapsize]>=0) deltanote++;
- REALTYPE rap_anote_middlenote=(deltanote==0) ? (1.0) : (octave[(deltanote-1)%octavesize].tuning);
- if (deltanote!=0) rap_anote_middlenote*=pow(octave[octavesize-1].tuning,(deltanote-1)/octavesize);
- if (minus!=0) rap_anote_middlenote=1.0/rap_anote_middlenote;
-
- //Convert from note (midi) to degree (note from the tunning)
- int degoct=(note-(int)Pmiddlenote+(int) Pmapsize*200)/(int)Pmapsize-200;
- int degkey=(note-Pmiddlenote+(int)Pmapsize*100)%Pmapsize;
- degkey=Pmapping[degkey];
- if (degkey<0) return(-1.0);//this key is not mapped
-
- //invert the keyboard upside-down if it is asked for
- //TODO: do the right way by using Pinvertupdowncenter
- if (Pinvertupdown!=0){
- degkey=octavesize-degkey-1;
- degoct=-degoct;
- };
- //compute the frequency of the note
- degkey=degkey+scaleshift;
- degoct+=degkey/octavesize;
- degkey%=octavesize;
-
- REALTYPE freq=(degkey==0) ? (1.0):octave[degkey-1].tuning;
- freq*=pow(octave[octavesize-1].tuning,degoct);
- freq*=PAfreq/rap_anote_middlenote;
- freq*=globalfinedetunerap;
- if (scaleshift!=0) freq/=octave[scaleshift-1].tuning;
- return(freq*rap_keyshift);
- } else {//if the mapping is disabled
- int nt=note-PAnote+scaleshift;
- int ntkey=(nt+(int)octavesize*100)%octavesize;
- int ntoct=(nt-ntkey)/octavesize;
-
- REALTYPE oct=octave[octavesize-1].tuning;
- REALTYPE freq=octave[(ntkey+octavesize-1)%octavesize].tuning*pow(oct,ntoct)*PAfreq;
- if (ntkey==0) freq/=oct;
- if (scaleshift!=0) freq/=octave[scaleshift-1].tuning;
-// fprintf(stderr,"note=%d freq=%.3f cents=%d\n",note,freq,(int)floor(log(freq/PAfreq)/log(2.0)*1200.0+0.5));
- freq*=globalfinedetunerap;
- return(freq*rap_keyshift);
- };
-};
-
-
-/*
- * Convert a line to tunings; returns -1 if it ok
- */
-int Microtonal::linetotunings(unsigned int nline,const char *line){
- int x1=-1,x2=-1,type=-1;
- REALTYPE x=-1.0,tmp,tuning=1.0;
- if (strstr(line,"/")==NULL){
- if (strstr(line,".")==NULL){// M case (M=M/1)
- sscanf(line,"%d",&x1);
- x2=1;
- type=2;//division
- } else {// float number case
- sscanf(line,"%f",&x);
- if (x<0.000001) return(1);
- type=1;//float type(cents)
- };
- } else {// M/N case
- sscanf(line,"%d/%d",&x1,&x2);
- if ((x1<0)||(x2<0)) return(1);
- if (x2==0) x2=1;
- type=2;//division
- };
-
- if (x1<=0) x1=1;//not allow zero frequency sounds (consider 0 as 1)
-
- //convert to float if the number are too big
- if ((type==2)&&((x1>(128*128*128-1))||(x2>(128*128*128-1)))){
- type=1;
- x=((REALTYPE) x1)/x2;
- };
- switch (type){
- case 1: x1=(int) floor(x);
- tmp=fmod(x,1.0);
- x2=(int) (floor (tmp*1e6));
- tuning=pow(2.0,x/1200.0);
- break;
- case 2: x=((REALTYPE)x1)/x2;
- tuning=x;
- break;
- };
-
- tmpoctave[nline].tuning=tuning;
- tmpoctave[nline].type=type;
- tmpoctave[nline].x1=x1;
- tmpoctave[nline].x2=x2;
-
- return(-1);//ok
-};
-
-/*
- * Convert the text to tunnings
- */
-int Microtonal::texttotunings(const char *text){
- unsigned int i,k=0,nl=0;
- char *lin;
- lin=new char[MAX_LINE_SIZE+1];
- while (k<strlen(text)){
- for (i=0;i<MAX_LINE_SIZE;i++){
- lin[i]=text[k++];
- if (lin[i]<0x20) break;
- };
- lin[i]='\0';
- if (strlen(lin)==0) continue;
- int err=linetotunings(nl,lin);
- if (err!=-1) {
- delete [] lin;
- return(nl);//Parse error
- };
- nl++;
- };
- delete [] lin;
- if (nl>MAX_OCTAVE_SIZE) nl=MAX_OCTAVE_SIZE;
- if (nl==0) return(-2);//the input is empty
- octavesize=nl;
- for (i=0;i<octavesize;i++){
- octave[i].tuning=tmpoctave[i].tuning;
- octave[i].type=tmpoctave[i].type;
- octave[i].x1=tmpoctave[i].x1;
- octave[i].x2=tmpoctave[i].x2;
- };
- return(-1);//ok
-};
-
-/*
- * Convert the text to mapping
- */
-void Microtonal::texttomapping(const char *text){
- unsigned int i,k=0;
- char *lin;
- lin=new char[MAX_LINE_SIZE+1];
- for (i=0;i<128;i++) Pmapping[i]=-1;
- int tx=0;
- while (k<strlen(text)){
- for (i=0;i<MAX_LINE_SIZE;i++){
- lin[i]=text[k++];
- if (lin[i]<0x20) break;
- };
- lin[i]='\0';
- if (strlen(lin)==0) continue;
-
- int tmp=0;
- if (sscanf(lin,"%d",&tmp)==0) tmp=-1;
- if (tmp<-1) tmp=-1;
- Pmapping[tx]=tmp;
-
- if ((tx++)>127) break;
- };
- delete [] lin;
-
- if (tx==0) tx=1;
- Pmapsize=tx;
-};
-
-/*
- * Convert tunning to text line
- */
-void Microtonal::tuningtoline(int n,char *line,int maxn){
- if ((n>octavesize) || (n>MAX_OCTAVE_SIZE)) {
- line[0]='\0';
- return;
- };
- if (octave[n].type==1) snprintf(line,maxn,"%d.%d",octave[n].x1,octave[n].x2);
- if (octave[n].type==2) snprintf(line,maxn,"%d/%d",octave[n].x1,octave[n].x2);
-};
-
-
-int Microtonal::loadline(FILE *file,char *line){
- do {
- if (fgets(line,500,file)==0) return(1);
- } while (line[0]=='!');
- return(0);
-};
-/*
- * Loads the tunnings from a scl file
- */
-int Microtonal::loadscl(const char *filename){
- FILE *file=fopen(filename, "r");
- char tmp[500];
- fseek(file,0,SEEK_SET);
- //loads the short description
- if (loadline(file,&tmp[0])!=0) return(2);
- for (int i=0;i<500;i++) if (tmp[i]<32) tmp[i]=0;
- snprintf((char *) Pname,MICROTONAL_MAX_NAME_LEN,"%s",tmp);
- snprintf((char *) Pcomment,MICROTONAL_MAX_NAME_LEN,"%s",tmp);
- //loads the number of the notes
- if (loadline(file,&tmp[0])!=0) return(2);
- int nnotes=MAX_OCTAVE_SIZE;
- sscanf(&tmp[0],"%d",&nnotes);
- if (nnotes>MAX_OCTAVE_SIZE) return (2);
- //load the tunnings
- for (int nline=0;nline<nnotes;nline++){
- if (loadline(file,&tmp[0])!=0) return(2);
- linetotunings(nline,&tmp[0]);
- };
- fclose(file);
-
- octavesize=nnotes;
- for (int i=0;i<octavesize;i++){
- octave[i].tuning=tmpoctave[i].tuning;
- octave[i].type=tmpoctave[i].type;
- octave[i].x1=tmpoctave[i].x1;
- octave[i].x2=tmpoctave[i].x2;
- };
-
- return(0);
-};
-
-/*
- * Loads the mapping from a kbm file
- */
-int Microtonal::loadkbm(const char *filename){
- FILE *file=fopen(filename, "r");
- int x;
- char tmp[500];
-
- fseek(file,0,SEEK_SET);
- //loads the mapsize
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) return(2);
- if (x<1) x=0;if (x>127) x=127;//just in case...
- Pmapsize=x;
- //loads first MIDI note to retune
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) return(2);
- if (x<1) x=0;if (x>127) x=127;//just in case...
- Pfirstkey=x;
- //loads last MIDI note to retune
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) return(2);
- if (x<1) x=0;if (x>127) x=127;//just in case...
- Plastkey=x;
- //loads last the middle note where scale fro scale degree=0
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) return(2);
- if (x<1) x=0;if (x>127) x=127;//just in case...
- Pmiddlenote=x;
- //loads the reference note
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) return(2);
- if (x<1) x=0;if (x>127) x=127;//just in case...
- PAnote=x;
- //loads the reference freq.
- if (loadline(file,&tmp[0])!=0) return(2);
- REALTYPE tmpPAfreq=440.0;
- if (sscanf(&tmp[0],"%f",&tmpPAfreq)==0) return(2);
- PAfreq=tmpPAfreq;
-
- //the scale degree(which is the octave) is not loaded, it is obtained by the tunnings with getoctavesize() method
- if (loadline(file,&tmp[0])!=0) return(2);
-
- //load the mappings
- if (Pmapsize!=0){
- for (int nline=0;nline<Pmapsize;nline++){
- if (loadline(file,&tmp[0])!=0) return(2);
- if (sscanf(&tmp[0],"%d",&x)==0) x=-1;
- Pmapping[nline]=x;
- };
- Pmappingenabled=1;
- } else {
- Pmappingenabled=0;
- Pmapping[0]=0;
- Pmapsize=1;
- };
- fclose(file);
-
- return(0);
-};
-
-
-
-void Microtonal::add2XML(XMLwrapper *xml){
- xml->addparstr("name",(char *) Pname);
- xml->addparstr("comment",(char *) Pcomment);
-
- xml->addparbool("invert_up_down",Pinvertupdown);
- xml->addparbool("invert_up_down_center",Pinvertupdowncenter);
-
- xml->addparbool("enabled",Penabled);
- xml->addpar("global_fine_detune",Pglobalfinedetune);
-
- xml->addpar("a_note",PAnote);
- xml->addparreal("a_freq",PAfreq);
-
- if ((Penabled==0)&&(xml->minimal)) return;
-
- xml->beginbranch("SCALE");
- xml->addpar("scale_shift",Pscaleshift);
- xml->addpar("first_key",Pfirstkey);
- xml->addpar("last_key",Plastkey);
- xml->addpar("middle_note",Pmiddlenote);
-
- xml->beginbranch("OCTAVE");
- xml->addpar("octave_size",octavesize);
- for (int i=0;i<octavesize;i++){
- xml->beginbranch("DEGREE",i);
- if (octave[i].type==1){
- xml->addparreal("cents",octave[i].tuning);
- };
- if (octave[i].type==2){
- xml->addpar("numerator",octave[i].x1);
- xml->addpar("denominator",octave[i].x2);
- };
- xml->endbranch();
- };
- xml->endbranch();
-
- xml->beginbranch("KEYBOARD_MAPPING");
- xml->addpar("map_size",Pmapsize);
- xml->addpar("mapping_enabled",Pmappingenabled);
- for (int i=0;i<Pmapsize;i++){
- xml->beginbranch("KEYMAP",i);
- xml->addpar("degree",Pmapping[i]);
- xml->endbranch();
- };
- xml->endbranch();
- xml->endbranch();
-};
-
-void Microtonal::getfromXML(XMLwrapper *xml){
- xml->getparstr("name",(char *) Pname,MICROTONAL_MAX_NAME_LEN);
- xml->getparstr("comment",(char *) Pcomment,MICROTONAL_MAX_NAME_LEN);
-
- Pinvertupdown=xml->getparbool("invert_up_down",Pinvertupdown);
- Pinvertupdowncenter=xml->getparbool("invert_up_down_center",Pinvertupdowncenter);
-
- Penabled=xml->getparbool("enabled",Penabled);
- Pglobalfinedetune=xml->getpar127("global_fine_detune",Pglobalfinedetune);
-
- PAnote=xml->getpar127("a_note",PAnote);
- PAfreq=xml->getparreal("a_freq",PAfreq,1.0,10000.0);
-
- if (xml->enterbranch("SCALE")){
- Pscaleshift=xml->getpar127("scale_shift",Pscaleshift);
- Pfirstkey=xml->getpar127("first_key",Pfirstkey);
- Plastkey=xml->getpar127("last_key",Plastkey);
- Pmiddlenote=xml->getpar127("middle_note",Pmiddlenote);
-
- if (xml->enterbranch("OCTAVE")){
- octavesize=xml->getpar127("octave_size",octavesize);
- for (int i=0;i<octavesize;i++){
- if (xml->enterbranch("DEGREE",i)==0) continue;
- octave[i].x2=0;
- octave[i].tuning=xml->getparreal("cents",octave[i].tuning);
- octave[i].x1=xml->getpar127("numerator",octave[i].x1);
- octave[i].x2=xml->getpar127("denominator",octave[i].x2);
-
- if (octave[i].x2!=0) octave[i].type=2;
- else octave[i].type=1;
-
- xml->exitbranch();
- };
- xml->exitbranch();
- };
-
- if (xml->enterbranch("KEYBOARD_MAPPING")){
- Pmapsize=xml->getpar127("map_size",Pmapsize);
- Pmappingenabled=xml->getpar127("mapping_enabled",Pmappingenabled);
- for (int i=0;i<Pmapsize;i++){
- if (xml->enterbranch("KEYMAP",i)==0) continue;
- Pmapping[i]=xml->getpar127("degree",Pmapping[i]);
- xml->exitbranch();
- };
- xml->exitbranch();
- };
- xml->exitbranch();
- };
-};
-
-
-int Microtonal::saveXML(char *filename){
- XMLwrapper *xml=new XMLwrapper();
-
- xml->beginbranch("MICROTONAL");
- add2XML(xml);
- xml->endbranch();
-
- int result=xml->saveXMLfile(filename);
- delete (xml);
- return(result);
-};
-
-int Microtonal::loadXML(char *filename){
- XMLwrapper *xml=new XMLwrapper();
- if (xml->loadXMLfile(filename)<0) {
- delete(xml);
- return(-1);
- };
-
- if (xml->enterbranch("MICROTONAL")==0) return(-10);
- getfromXML(xml);
- xml->exitbranch();
-
- delete(xml);
- return(0);
-};
-
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.h
deleted file mode 100644
index 60ffc4cf..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Microtonal.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Microtonal.h - Tuning settings and microtonal capabilities
- Copyright (C) 2002-2005 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 MICROTONAL_H
-#define MICROTONAL_H
-
-#include "../globals.h"
-#include "XMLwrapper.h"
-
-#define MAX_OCTAVE_SIZE 128
-#define MICROTONAL_MAX_NAME_LEN 120
-
-#include <stdio.h>
-
-class Microtonal{
- public:
- Microtonal();
- ~Microtonal();
- void defaults();
- REALTYPE getnotefreq(int note,int keyshift);
-
-
- //Parameters
- //if the keys are inversed (the pitch is lower to keys from the right direction)
- unsigned char Pinvertupdown;
-
- //the central key of the inversion
- unsigned char Pinvertupdowncenter;
-
- //0 for 12 key temperate scale, 1 for microtonal
- unsigned char Penabled;
-
- //the note of "A" key
- unsigned char PAnote;
-
- //the frequency of the "A" note
- REALTYPE PAfreq;
-
- //if the scale is "tuned" to a note, you can tune to other note
- unsigned char Pscaleshift;
-
- //first and last key (to retune)
- unsigned char Pfirstkey;
- unsigned char Plastkey;
-
- //The middle note where scale degree 0 is mapped to
- unsigned char Pmiddlenote;
-
- //Map size
- unsigned char Pmapsize;
-
- //Mapping ON/OFF
- unsigned char Pmappingenabled;
- //Mapping (keys)
- short int Pmapping[128];
-
- unsigned char Pglobalfinedetune;
-
- // Functions
- unsigned char getoctavesize();
- void tuningtoline(int n,char *line,int maxn);
- int loadscl(const char *filename);//load the tunnings from a .scl file
- int loadkbm(const char *filename);//load the mapping from .kbm file
- int texttotunings(const char *text);
- void texttomapping(const char *text);
- unsigned char *Pname;
- unsigned char *Pcomment;
-
- void add2XML(XMLwrapper *xml);
- void getfromXML(XMLwrapper *xml);
- int saveXML(char *filename);
- int loadXML(char *filename);
-
- private:
- int linetotunings(unsigned int nline,const char *line);
- int loadline(FILE *file,char *line);//loads a line from the text file, while ignoring the lines beggining with "!"
- unsigned char octavesize;
- struct {
- unsigned char type;//1 for cents or 2 for division
-
- // the real tuning (eg. +1.05946 for one halftone)
- // or 2.0 for one octave
- REALTYPE tuning;
-
- //the real tunning is x1/x2
- unsigned int x1,x2;
-
- } octave[MAX_OCTAVE_SIZE],tmpoctave[MAX_OCTAVE_SIZE];
-
-};
-
-#endif
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.C
deleted file mode 100644
index ceeeb7b6..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.C
+++ /dev/null
@@ -1,881 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Part.C - Part implementation
- Copyright (C) 2002-2005 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 "Master.h"
-#include "Part.h"
-#include "Microtonal.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-Part::Part(Microtonal *microtonal_,FFTwrapper *fft_, Master* master_){
- microtonal=microtonal_;
- fft=fft_;
- master=master_;
- partoutl=new REALTYPE [SOUND_BUFFER_SIZE];
- partoutr=new REALTYPE [SOUND_BUFFER_SIZE];
- tmpoutl=new REALTYPE [SOUND_BUFFER_SIZE];
- tmpoutr=new REALTYPE [SOUND_BUFFER_SIZE];
-
- for (int n=0;n<NUM_KIT_ITEMS;n++){
- kit[n].Pname=new unsigned char [PART_MAX_NAME_LEN];
- kit[n].adpars=NULL;kit[n].subpars=NULL;kit[n].padpars=NULL;
- };
-
- kit[0].adpars=new ADnoteParameters(fft);
- kit[0].subpars=new SUBnoteParameters();
- kit[0].padpars=new PADnoteParameters(fft,master);
-// ADPartParameters=kit[0].adpars;
-// SUBPartParameters=kit[0].subpars;
-
- //Part's Insertion Effects init
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++)
- partefx[nefx]=new EffectMgr(1,master);
-
- for (int n=0;n<NUM_PART_EFX+1;n++) {
- partfxinputl[n]=new REALTYPE [SOUND_BUFFER_SIZE];
- partfxinputr[n]=new REALTYPE [SOUND_BUFFER_SIZE];
- Pefxbypass[n]=false;
- };
-
- killallnotes=0;
- oldfreq=-1.0;
-
- int i,j;
- for (i=0;i<POLIPHONY;i++){
- partnote[i].status=KEY_OFF;
- partnote[i].note=-1;
- partnote[i].itemsplaying=0;
- for (j=0;j<NUM_KIT_ITEMS;j++){
- partnote[i].kititem[j].adnote=NULL;
- partnote[i].kititem[j].subnote=NULL;
- partnote[i].kititem[j].padnote=NULL;
- };
- partnote[i].time=0;
- };
- cleanup();
-
- Pname=new unsigned char [PART_MAX_NAME_LEN];
-
- oldvolumel=oldvolumer=0.5;
- lastnote=-1;
-
-
- defaults();
-};
-
-void Part::defaults(){
- Penabled=0;
- Pminkey=0;
- Pmaxkey=127;
- Pnoteon=1;
- Ppolymode=1;
- setPvolume(96);
- Pkeyshift=64;
- Prcvchn=0;
- setPpanning(64);
- Pvelsns=64;
- Pveloffs=64;
- Pkeylimit=15;
- defaultsinstrument();
- ctl.defaults();
-};
-
-void Part::defaultsinstrument(){
- ZERO(Pname,PART_MAX_NAME_LEN);
-
- info.Ptype=0;
- ZERO(info.Pauthor,MAX_INFO_TEXT_SIZE+1);
- ZERO(info.Pcomments,MAX_INFO_TEXT_SIZE+1);
-
- Pkitmode=0;
- Pdrummode=0;
-
- for (int n=0;n<NUM_KIT_ITEMS;n++){
- kit[n].Penabled=0;kit[n].Pmuted=0;
- kit[n].Pminkey=0;kit[n].Pmaxkey=127;
- kit[n].Padenabled=0;kit[n].Psubenabled=0;kit[n].Ppadenabled=0;
- ZERO(kit[n].Pname,PART_MAX_NAME_LEN);
- kit[n].Psendtoparteffect=0;
- if (n!=0) setkititemstatus(n,0);
- };
- kit[0].Penabled=1;
- kit[0].Padenabled=1;
- kit[0].adpars->defaults();
- kit[0].subpars->defaults();
- kit[0].padpars->defaults();
-
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++) {
- partefx[nefx]->defaults();
- Pefxroute[nefx]=0;//route to next effect
- };
-
-};
-
-
-
-/*
- * Cleanup the part
- */
-void Part::cleanup(){
- for (int k=0;k<POLIPHONY;k++) KillNotePos(k);
-
- memcpy(partoutl, denormalkillbuf, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memcpy(partoutr, denormalkillbuf, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpoutl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpoutr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
-
- ctl.resetall();
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++) partefx[nefx]->cleanup();
- for (int n=0;n<NUM_PART_EFX+1;n++) {
- memcpy(partfxinputl[n], denormalkillbuf, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memcpy(partfxinputr[n], denormalkillbuf, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- };
-};
-
-Part::~Part(){
- cleanup();
- for (int n=0;n<NUM_KIT_ITEMS;n++){
- if (kit[n].adpars!=NULL) delete (kit[n].adpars);
- if (kit[n].subpars!=NULL) delete (kit[n].subpars);
- if (kit[n].padpars!=NULL) delete (kit[n].padpars);
- kit[n].adpars=NULL;kit[n].subpars=NULL;kit[n].padpars=NULL;
- delete(kit[n].Pname);
- };
-
- delete (Pname);
- delete (partoutl);
- delete (partoutr);
- delete (tmpoutl);
- delete (tmpoutr);
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++)
- delete (partefx[nefx]);
- for (int n=0;n<NUM_PART_EFX+1;n++) {
- delete (partfxinputl[n]);
- delete (partfxinputr[n]);
- };
-};
-
-/*
- * Note On Messages
- */
-void Part::NoteOn(unsigned char note,unsigned char velocity,int masterkeyshift){
- int i,pos;
-
- lastnote=note;
- if ((note<Pminkey)||(note>Pmaxkey)) return;
-
- pos=-1;
- for (i=0;i<POLIPHONY;i++){
- if (partnote[i].status==KEY_OFF){
- pos=i;
- break;
- };
- };
-
- if (Ppolymode==0){//if the mode is 'mono' turn off all other notes
- for (i=0;i<POLIPHONY;i++)
- if (partnote[i].status==KEY_PLAYING) NoteOff(partnote[i].note);
- RelaseSustainedKeys();
- };
-
- if (pos==-1){
- //test
- fprintf(stderr,"%s","NOTES TOO MANY (> POLIPHONY) - (Part.C::NoteOn(..))\n");
- } else {
- if (Pnoteon!=0){
- //start the note
- partnote[pos].status=KEY_PLAYING;
- partnote[pos].note=note;
-
- //this computes the velocity sensing of the part
- REALTYPE vel=VelF(velocity/127.0,Pvelsns);
-
- //compute the velocity offset
- vel+=(Pveloffs-64.0)/64.0;
- if (vel<0.0) vel=0.0; else if (vel>1.0) vel=1.0;
-
- //compute the keyshift
- int partkeyshift=(int)Pkeyshift-64;
- int keyshift=masterkeyshift+partkeyshift;
-
- //initialise note frequency
- REALTYPE notebasefreq;
- if (Pdrummode==0){
- notebasefreq=microtonal->getnotefreq(note,keyshift);
- if (notebasefreq<0.0) return;//the key is no mapped
- } else {
- notebasefreq=440.0*pow(2.0,(note-69.0)/12.0);
- };
-
- //Portamento
- if (oldfreq<1.0) oldfreq=notebasefreq;//this is only the first note is played
-
- int portamento=ctl.initportamento(oldfreq,notebasefreq);
-
- if (portamento!=0) ctl.portamento.noteusing=pos;
- oldfreq=notebasefreq;
-
- partnote[pos].itemsplaying=0;
- if (Pkitmode==0){//init the notes for the "normal mode"
- partnote[pos].kititem[0].sendtoparteffect=0;
- if (kit[0].Padenabled!=0) partnote[pos].kititem[0].adnote=new ADnote(kit[0].adpars,&ctl,notebasefreq,vel,portamento,note);
- if (kit[0].Psubenabled!=0) partnote[pos].kititem[0].subnote=new SUBnote(kit[0].subpars,&ctl,notebasefreq,vel,portamento,note);
- if (kit[0].Ppadenabled!=0) partnote[pos].kititem[0].padnote=new PADnote(kit[0].padpars,&ctl,notebasefreq,vel,portamento,note);
- if ((kit[0].Padenabled!=0)||(kit[0].Psubenabled!=0)||(kit[0].Ppadenabled!=0)) partnote[pos].itemsplaying++;
-
- } else {//init the notes for the "kit mode"
- for (int item=0;item<NUM_KIT_ITEMS;item++){
- if (kit[item].Pmuted!=0) continue;
- if ((note<kit[item].Pminkey)||(note>kit[item].Pmaxkey)) continue;
-
- int ci=partnote[pos].itemsplaying;//ci=current item
-
- partnote[pos].kititem[ci].sendtoparteffect=( kit[item].Psendtoparteffect<NUM_PART_EFX ?
- kit[item].Psendtoparteffect: NUM_PART_EFX);//if this parameter is 127 for "unprocessed"
-
- if ((kit[item].adpars!=NULL)&&(kit[item].Padenabled)!=0)
- partnote[pos].kititem[ci].adnote=new ADnote(kit[item].adpars,&ctl,notebasefreq,vel,portamento,note);
-
- if ((kit[item].subpars!=NULL)&&(kit[item].Psubenabled)!=0)
- partnote[pos].kititem[ci].subnote=new SUBnote(kit[item].subpars,&ctl,notebasefreq,vel,portamento,note);
-
- if ((kit[item].padpars!=NULL)&&(kit[item].Ppadenabled)!=0)
- partnote[pos].kititem[ci].padnote=new PADnote(kit[item].padpars,&ctl,notebasefreq,vel,portamento,note);
-
- if ((kit[item].adpars!=NULL)|| (kit[item].subpars!=NULL)) {
- partnote[pos].itemsplaying++;
- if ( ((kit[item].Padenabled!=0)||(kit[item].Psubenabled!=0)||(kit[item].Ppadenabled!=0))
- && (Pkitmode==2) ) break;
- };
- };
- };
- };
- };
-
- //this only relase the keys if there is maximum number of keys allowed
- setkeylimit(Pkeylimit);
-};
-
-/*
- * Note Off Messages
- */
-void Part::NoteOff(unsigned char note){//relase the key
- int i;
- for (i=POLIPHONY-1;i>=0;i--){ //first note in, is first out if there are same note multiple times
- if ((partnote[i].status==KEY_PLAYING)&&(partnote[i].note==note)) {
- if (ctl.sustain.sustain==0){ //the sustain pedal is not pushed
- RelaseNotePos(i);
- break;
- } else {//the sustain pedal is pushed
- partnote[i].status=KEY_RELASED_AND_SUSTAINED;
- };
- };
- };
-};
-
-/*
- * Controllers
- */
-void Part::SetController(unsigned int type,int par){
- switch (type){
- case C_pitchwheel:ctl.setpitchwheel(par);
- break;
- case C_expression:ctl.setexpression(par);
- setPvolume(Pvolume);//update the volume
- break;
- case C_portamento:ctl.setportamento(par);
- break;
- case C_panning:ctl.setpanning(par);
- setPpanning(Ppanning);//update the panning
- break;
- case C_filtercutoff:ctl.setfiltercutoff(par);
- break;
- case C_filterq:ctl.setfilterq(par);
- break;
- case C_bandwidth:ctl.setbandwidth(par);
- break;
- case C_modwheel:ctl.setmodwheel(par);
- break;
- case C_fmamp:ctl.setfmamp(par);
- break;
- case C_volume:ctl.setvolume(par);
- if (ctl.volume.receive!=0) volume=ctl.volume.volume;
- else setPvolume(Pvolume);
- break;
- case C_sustain:ctl.setsustain(par);
- if (ctl.sustain.sustain==0) RelaseSustainedKeys();
- break;
- case C_allsoundsoff:AllNotesOff();//Panic
- break;
- case C_resetallcontrollers:
- ctl.resetall();
- RelaseSustainedKeys();
- if (ctl.volume.receive!=0) volume=ctl.volume.volume;
- else setPvolume(Pvolume);
- setPvolume(Pvolume);//update the volume
- setPpanning(Ppanning);//update the panning
-
- for (int item=0;item<NUM_KIT_ITEMS;item++){
- if (kit[item].adpars==NULL) continue;
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_center,1.0);
-
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_bandwidth,1.0);
- };
- //more update to add here if I add controllers
- break;
- case C_allnotesoff:RelaseAllKeys();
- break;
- case C_resonance_center:
- ctl.setresonancecenter(par);
- for (int item=0;item<NUM_KIT_ITEMS;item++){
- if (kit[item].adpars==NULL) continue;
- kit[item].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_center,ctl.resonancecenter.relcenter);
- };
- break;
- case C_resonance_bandwidth:
- ctl.setresonancebw(par);
- kit[0].adpars->GlobalPar.Reson->
- sendcontroller(C_resonance_bandwidth,ctl.resonancebandwidth.relbw);
- break;
- };
-};
-/*
- * Relase the sustained keys
- */
-
-void Part::RelaseSustainedKeys(){
- for (int i=0;i<POLIPHONY;i++)
- if (partnote[i].status==KEY_RELASED_AND_SUSTAINED) RelaseNotePos(i);
-};
-
-/*
- * Relase all keys
- */
-
-void Part::RelaseAllKeys(){
- for (int i=0;i<POLIPHONY;i++){
- if ((partnote[i].status!=KEY_RELASED)&&
- (partnote[i].status!=KEY_OFF)) //thanks to Frank Neumann
- RelaseNotePos(i);
- };
-};
-
-/*
- * Release note at position
- */
-void Part::RelaseNotePos(int pos){
-
- for (int j=0;j<NUM_KIT_ITEMS;j++){
-
- if (partnote[pos].kititem[j].adnote!=NULL)
- if (partnote[pos].kititem[j].adnote)
- partnote[pos].kititem[j].adnote->relasekey();
-
- if (partnote[pos].kititem[j].subnote!=NULL)
- if (partnote[pos].kititem[j].subnote!=NULL)
- partnote[pos].kititem[j].subnote->relasekey();
-
- if (partnote[pos].kititem[j].padnote!=NULL)
- if (partnote[pos].kititem[j].padnote)
- partnote[pos].kititem[j].padnote->relasekey();
- };
- partnote[pos].status=KEY_RELASED;
-};
-
-
-/*
- * Kill note at position
- */
-void Part::KillNotePos(int pos){
- partnote[pos].status=KEY_OFF;
- partnote[pos].note=-1;
- partnote[pos].time=0;
- partnote[pos].itemsplaying=0;
-
- for (int j=0;j<NUM_KIT_ITEMS;j++){
- if (partnote[pos].kititem[j].adnote!=NULL) {
- delete(partnote[pos].kititem[j].adnote);
- partnote[pos].kititem[j].adnote=NULL;
- };
- if (partnote[pos].kititem[j].subnote!=NULL) {
- delete(partnote[pos].kititem[j].subnote);
- partnote[pos].kititem[j].subnote=NULL;
- };
- if (partnote[pos].kititem[j].padnote!=NULL) {
- delete(partnote[pos].kititem[j].padnote);
- partnote[pos].kititem[j].padnote=NULL;
- };
- };
- if (pos==ctl.portamento.noteusing) {
- ctl.portamento.noteusing=-1;
- ctl.portamento.used=0;
- };
-};
-
-
-/*
- * Set Part's key limit
- */
-void Part::setkeylimit(unsigned char Pkeylimit){
- this->Pkeylimit=Pkeylimit;
- int keylimit=Pkeylimit;
- if (keylimit==0) keylimit=POLIPHONY-5;
-
- //release old keys if the number of notes>keylimit
- if (Ppolymode!=0){
- int notecount=0;
- for (int i=0;i<POLIPHONY;i++){
- if ((partnote[i].status==KEY_PLAYING)||(partnote[i].status==KEY_RELASED_AND_SUSTAINED))
- notecount++;
- };
- int oldestnotepos=-1,maxtime=0;
- if (notecount>keylimit){//find out the oldest note
- for (int i=0;i<POLIPHONY;i++){
- if ( ((partnote[i].status==KEY_PLAYING)||(partnote[i].status==KEY_RELASED_AND_SUSTAINED))
- && (partnote[i].time>maxtime)){
- maxtime=partnote[i].time;
- oldestnotepos=i;
- };
- };
- };
- if (oldestnotepos!=-1) RelaseNotePos(oldestnotepos);
- };
-};
-
-
-/*
- * Prepare all notes to be turned off
- */
-void Part::AllNotesOff(){
- killallnotes=1;
-};
-
-
-/*
- * Compute Part samples and store them in the partoutl[] and partoutr[]
- */
-void Part::ComputePartSmps(){
- int i, k;
- int noteplay;//0 if there is nothing activated
- for (int nefx=0;nefx<NUM_PART_EFX+1;nefx++){
- memset(partfxinputl[nefx], 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(partfxinputr[nefx], 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- };
-
- for (k=0;k<POLIPHONY;k++){
- if (partnote[k].status==KEY_OFF) continue;
- noteplay=0;
- partnote[k].time++;
- //get the sampledata of the note and kill it if it's finished
-
- for (int item=0;item<partnote[k].itemsplaying;item++){
-
- int sendcurrenttofx=partnote[k].kititem[item].sendtoparteffect;
-
- ADnote *adnote=partnote[k].kititem[item].adnote;
- SUBnote *subnote=partnote[k].kititem[item].subnote;
- PADnote *padnote=partnote[k].kititem[item].padnote;
- //get from the ADnote
- if (adnote!=NULL) {
- noteplay++;
- if (adnote->ready!=0) adnote->noteout(&tmpoutl[0],&tmpoutr[0]);
- else {
- memset(tmpoutl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpoutr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- }
- if (adnote->finished()!=0){
- delete (adnote);
- partnote[k].kititem[item].adnote=NULL;
- };
- for (i=0;i<SOUND_BUFFER_SIZE;i++){//add the ADnote to part(mix)
- partfxinputl[sendcurrenttofx][i]+=tmpoutl[i];
- partfxinputr[sendcurrenttofx][i]+=tmpoutr[i];
- };
- };
- //get from the SUBnote
- if (subnote!=NULL) {
- noteplay++;
- if (subnote->ready!=0) subnote->noteout(&tmpoutl[0],&tmpoutr[0]);
- else {
- memset(tmpoutl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpoutr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- }
-
- for (i=0;i<SOUND_BUFFER_SIZE;i++){//add the SUBnote to part(mix)
- partfxinputl[sendcurrenttofx][i]+=tmpoutl[i];
- partfxinputr[sendcurrenttofx][i]+=tmpoutr[i];
- };
- if (subnote->finished()!=0){
- delete (subnote);
- partnote[k].kititem[item].subnote=NULL;
- };
- };
- //get from the PADnote
- if (padnote!=NULL) {
- noteplay++;
- if (padnote->ready!=0) padnote->noteout(&tmpoutl[0],&tmpoutr[0]);
- else {
- memset(tmpoutl, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- memset(tmpoutr, 0, sizeof(REALTYPE) * SOUND_BUFFER_SIZE);
- }
- if (padnote->finished()!=0){
- delete (padnote);
- partnote[k].kititem[item].padnote=NULL;
- };
- for (i=0;i<SOUND_BUFFER_SIZE;i++){//add the PADnote to part(mix)
- partfxinputl[sendcurrenttofx][i]+=tmpoutl[i];
- partfxinputr[sendcurrenttofx][i]+=tmpoutr[i];
- };
- };
-
- };
- //Kill note if there is no synth on that note
- if (noteplay==0) KillNotePos(k);
- };
-
-
- //Apply part's effects and mix them
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++) {
- if (!Pefxbypass[nefx]) {
- partefx[nefx]->out(partfxinputl[nefx],partfxinputr[nefx]);
- if (Pefxroute[nefx]==2){
- for (i=0;i<SOUND_BUFFER_SIZE;i++){
- partfxinputl[nefx+1][i]+=partefx[nefx]->efxoutl[i];
- partfxinputr[nefx+1][i]+=partefx[nefx]->efxoutr[i];
- };
- };
- };
- int routeto=((Pefxroute[nefx]==0) ? nefx+1 : NUM_PART_EFX);
- for (i=0;i<SOUND_BUFFER_SIZE;i++){
- partfxinputl[routeto][i]+=partfxinputl[nefx][i];
- partfxinputr[routeto][i]+=partfxinputr[nefx][i];
- };
-
- };
- for (i=0;i<SOUND_BUFFER_SIZE;i++){
- partoutl[i]=partfxinputl[NUM_PART_EFX][i];
- partoutr[i]=partfxinputr[NUM_PART_EFX][i];
- };
-
- //Kill All Notes if killallnotes!=0
- if (killallnotes!=0) {
- for (i=0;i<SOUND_BUFFER_SIZE;i++) {
- REALTYPE tmp=(SOUND_BUFFER_SIZE-i)/(REALTYPE) SOUND_BUFFER_SIZE;
- partoutl[i]*=tmp;
- partoutr[i]*=tmp;
- tmpoutl[i]=0.0;
- tmpoutr[i]=0.0;
- };
- for (int k=0;k<POLIPHONY;k++) KillNotePos(k);
- killallnotes=0;
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++) {
- partefx[nefx]->cleanup();
- };
- };
- ctl.updateportamento();
-};
-
-/*
- * Parameter control
- */
-void Part::setPvolume(char Pvolume_){
- Pvolume=Pvolume_;
- volume=dB2rap((Pvolume-96.0)/96.0*40.0)*ctl.expression.relvolume;
-};
-
-void Part::setPpanning(char Ppanning_){
- Ppanning=Ppanning_;
- panning=Ppanning/127.0+ctl.panning.pan;
- if (panning<0.0) panning=0.0;else if (panning>1.0) panning=1.0;
-
-};
-
-/*
- * Enable or disable a kit item
- */
-void Part::setkititemstatus(int kititem,int Penabled_){
- if ((kititem==0)&&(kititem>=NUM_KIT_ITEMS)) return;//nonexistent kit item and the first kit item is always enabled
- kit[kititem].Penabled=Penabled_;
-
- bool resetallnotes=false;
- if (Penabled_==0){
- if (kit[kititem].adpars!=NULL) delete (kit[kititem].adpars);
- if (kit[kititem].subpars!=NULL) delete (kit[kititem].subpars);
- if (kit[kititem].padpars!=NULL) {
- delete (kit[kititem].padpars);
- resetallnotes=true;
- };
- kit[kititem].adpars=NULL;kit[kititem].subpars=NULL;kit[kititem].padpars=NULL;
- kit[kititem].Pname[0]='\0';
- } else {
- if (kit[kititem].adpars==NULL) kit[kititem].adpars=new ADnoteParameters(fft);
- if (kit[kititem].subpars==NULL) kit[kititem].subpars=new SUBnoteParameters();
- if (kit[kititem].padpars==NULL) kit[kititem].padpars=new PADnoteParameters(fft,master);
- };
-
- if (resetallnotes) for (int k=0;k<POLIPHONY;k++) KillNotePos(k);
-};
-
-
-
-void Part::add2XMLinstrument(XMLwrapper *xml){
- xml->beginbranch("INFO");
- xml->addparstr("name",(char *)Pname);
- xml->addparstr("author",(char *)info.Pauthor);
- xml->addparstr("comments",(char *)info.Pcomments);
- xml->addpar("type",info.Ptype);
- xml->endbranch();
-
-
- xml->beginbranch("INSTRUMENT_KIT");
- xml->addpar("kit_mode",Pkitmode);
- xml->addparbool("drum_mode",Pdrummode);
-
- for (int i=0;i<NUM_KIT_ITEMS;i++){
- xml->beginbranch("INSTRUMENT_KIT_ITEM",i);
- xml->addparbool("enabled",kit[i].Penabled);
- if (kit[i].Penabled!=0) {
- xml->addparstr("name",(char *)kit[i].Pname);
-
- xml->addparbool("muted",kit[i].Pmuted);
- xml->addpar("min_key",kit[i].Pminkey);
- xml->addpar("max_key",kit[i].Pmaxkey);
-
- xml->addpar("send_to_instrument_effect",kit[i].Psendtoparteffect);
-
- xml->addparbool("add_enabled",kit[i].Padenabled);
- if ((kit[i].Padenabled!=0)&&(kit[i].adpars!=NULL)){
- xml->beginbranch("ADD_SYNTH_PARAMETERS");
- kit[i].adpars->add2XML(xml);
- xml->endbranch();
- };
-
- xml->addparbool("sub_enabled",kit[i].Psubenabled);
- if ((kit[i].Psubenabled!=0)&&(kit[i].subpars!=NULL)){
- xml->beginbranch("SUB_SYNTH_PARAMETERS");
- kit[i].subpars->add2XML(xml);
- xml->endbranch();
- };
-
- xml->addparbool("pad_enabled",kit[i].Ppadenabled);
- if ((kit[i].Ppadenabled!=0)&&(kit[i].padpars!=NULL)){
- xml->beginbranch("PAD_SYNTH_PARAMETERS");
- kit[i].padpars->add2XML(xml);
- xml->endbranch();
- };
-
- };
- xml->endbranch();
- };
- xml->endbranch();
-
- xml->beginbranch("INSTRUMENT_EFFECTS");
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++){
- xml->beginbranch("INSTRUMENT_EFFECT",nefx);
- xml->beginbranch("EFFECT");
- partefx[nefx]->add2XML(xml);
- xml->endbranch();
-
- xml->addpar("route",Pefxroute[nefx]);
- partefx[nefx]->setdryonly(Pefxroute[nefx]==2);
- xml->addparbool("bypass",Pefxbypass[nefx]);
- xml->endbranch();
- };
- xml->endbranch();
-};
-
-
-void Part::add2XML(XMLwrapper *xml){
- //parameters
- xml->addparbool("enabled",Penabled);
- if ((Penabled==0)&&(xml->minimal)) return;
-
- xml->addpar("volume",Pvolume);
- xml->addpar("panning",Ppanning);
-
- xml->addpar("min_key",Pminkey);
- xml->addpar("max_key",Pmaxkey);
- xml->addpar("key_shift",Pkeyshift);
- xml->addpar("rcv_chn",Prcvchn);
-
- xml->addpar("velocity_sensing",Pvelsns);
- xml->addpar("velocity_offset",Pveloffs);
-
- xml->addparbool("note_on",Pnoteon);
- xml->addparbool("poly_mode",Ppolymode);
- xml->addpar("key_limit",Pkeylimit);
-
- xml->beginbranch("INSTRUMENT");
- add2XMLinstrument(xml);
- xml->endbranch();
-
- xml->beginbranch("CONTROLLER");
- ctl.add2XML(xml);
- xml->endbranch();
-};
-
-int Part::saveXML(char *filename){
- XMLwrapper *xml;
- xml=new XMLwrapper();
-
- xml->beginbranch("INSTRUMENT");
- add2XMLinstrument(xml);
- xml->endbranch();
-
- int result=xml->saveXMLfile(filename);
- delete (xml);
- return(result);
-};
-
-int Part::loadXMLinstrument(const char *filename){
- XMLwrapper *xml=new XMLwrapper();
- if (xml->loadXMLfile(filename)<0) {
- delete(xml);
- return(-1);
- };
-
- if (xml->enterbranch("INSTRUMENT")==0) return(-10);
- getfromXMLinstrument(xml);
- xml->exitbranch();
-
- delete(xml);
- return(0);
-};
-
-
-void Part::applyparameters(){
- for (int n=0;n<NUM_KIT_ITEMS;n++){
- if ((kit[n].padpars!=NULL)&&(kit[n].Ppadenabled!=0)) kit[n].padpars->applyparameters(true);
- };
-};
-
-void Part::getfromXMLinstrument(XMLwrapper *xml){
- if (xml->enterbranch("INFO")){
- xml->getparstr("name",(char *)Pname,PART_MAX_NAME_LEN);
- xml->getparstr("author",(char *)info.Pauthor,MAX_INFO_TEXT_SIZE);
- xml->getparstr("comments",(char *)info.Pcomments,MAX_INFO_TEXT_SIZE);
- info.Ptype=xml->getpar("type",info.Ptype,0,16);
-
- xml->exitbranch();
- };
-
- if (xml->enterbranch("INSTRUMENT_KIT")){
- Pkitmode=xml->getpar127("kit_mode",Pkitmode);
- Pdrummode=xml->getparbool("drum_mode",Pdrummode);
-
- setkititemstatus(0,0);
- for (int i=0;i<NUM_KIT_ITEMS;i++){
- if (xml->enterbranch("INSTRUMENT_KIT_ITEM",i)==0) continue;
- setkititemstatus(i,xml->getparbool("enabled",kit[i].Penabled));
- if (kit[i].Penabled==0) {
- xml->exitbranch();
- continue;
- };
-
- xml->getparstr("name",(char *)kit[i].Pname,PART_MAX_NAME_LEN);
-
- kit[i].Pmuted=xml->getparbool("muted",kit[i].Pmuted);
- kit[i].Pminkey=xml->getpar127("min_key",kit[i].Pminkey);
- kit[i].Pmaxkey=xml->getpar127("max_key",kit[i].Pmaxkey);
-
- kit[i].Psendtoparteffect=xml->getpar127("send_to_instrument_effect",kit[i].Psendtoparteffect);
-
- kit[i].Padenabled=xml->getparbool("add_enabled",kit[i].Padenabled);
- if (xml->enterbranch("ADD_SYNTH_PARAMETERS")){
- kit[i].adpars->getfromXML(xml);
- xml->exitbranch();
- };
-
- kit[i].Psubenabled=xml->getparbool("sub_enabled",kit[i].Psubenabled);
- if (xml->enterbranch("SUB_SYNTH_PARAMETERS")){
- kit[i].subpars->getfromXML(xml);
- xml->exitbranch();
- };
-
- kit[i].Ppadenabled=xml->getparbool("pad_enabled",kit[i].Ppadenabled);
- if (xml->enterbranch("PAD_SYNTH_PARAMETERS")){
- kit[i].padpars->getfromXML(xml);
- xml->exitbranch();
- };
-
- xml->exitbranch();
- };
-
- xml->exitbranch();
- };
-
-
- if (xml->enterbranch("INSTRUMENT_EFFECTS")){
- for (int nefx=0;nefx<NUM_PART_EFX;nefx++){
- if (xml->enterbranch("INSTRUMENT_EFFECT",nefx)==0) continue;
- if (xml->enterbranch("EFFECT")){
- partefx[nefx]->getfromXML(xml);
- xml->exitbranch();
- };
-
- Pefxroute[nefx]=xml->getpar("route",Pefxroute[nefx],0,NUM_PART_EFX);
- partefx[nefx]->setdryonly(Pefxroute[nefx]==2);
- Pefxbypass[nefx]=xml->getparbool("bypass",Pefxbypass[nefx]);
- xml->exitbranch();
- };
- xml->exitbranch();
- };
-
-};
-
-void Part::getfromXML(XMLwrapper *xml){
- Penabled=xml->getparbool("enabled",Penabled);
-
- setPvolume(xml->getpar127("volume",Pvolume));
- setPpanning(xml->getpar127("panning",Ppanning));
-
- Pminkey=xml->getpar127("min_key",Pminkey);
- Pmaxkey=xml->getpar127("max_key",Pmaxkey);
- Pkeyshift=xml->getpar127("key_shift",Pkeyshift);
- Prcvchn=xml->getpar127("rcv_chn",Prcvchn);
-
- Pvelsns=xml->getpar127("velocity_sensing",Pvelsns);
- Pveloffs=xml->getpar127("velocity_offset",Pveloffs);
-
- Pnoteon=xml->getparbool("note_on",Pnoteon);
- Ppolymode=xml->getparbool("poly_mode",Ppolymode);
- Pkeylimit=xml->getpar127("key_limit",Pkeylimit);
-
-
- if (xml->enterbranch("INSTRUMENT")){
- getfromXMLinstrument(xml);
- xml->exitbranch();
- };
-
- if (xml->enterbranch("CONTROLLER")){
- ctl.getfromXML(xml);
- xml->exitbranch();
- };
-
-};
-
-
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.h
deleted file mode 100644
index 28ea9816..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Part.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Part.h - Part implementation
- Copyright (C) 2002-2005 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 PART_H
-#define PART_H
-
-#define MAX_INFO_TEXT_SIZE 1000
-
-#include "../globals.h"
-#include "../Params/ADnoteParameters.h"
-#include "../Params/SUBnoteParameters.h"
-#include "../Params/PADnoteParameters.h"
-#include "../Synth/ADnote.h"
-#include "../Synth/SUBnote.h"
-#include "../Synth/PADnote.h"
-#include "../Params/Controller.h"
-#include "../Misc/Microtonal.h"
-#include "../DSP/FFTwrapper.h"
-#include "../Effects/EffectMgr.h"
-#include "XMLwrapper.h"
-
-class Master;
-
-class Part{
-
- public:
- Part(Microtonal *microtonal_,FFTwrapper *fft_, Master* master);
- ~Part();
-
- /* Midi commands implemented */
- void NoteOn(unsigned char note,unsigned char velocity,int masterkeyshift);
- void NoteOff(unsigned char note);
- void AllNotesOff();//panic
- void SetController(unsigned int type,int par);
- void RelaseSustainedKeys();//this is called when the sustain pedal is relased
- void RelaseAllKeys();//this is called on AllNotesOff controller
-
- /* The synthesizer part output */
- void ComputePartSmps();//Part output
-
- //instrumentonly: 0 - save all, 1 - save only instrumnet, 2 - save only instrument without the name(used in bank)
-
-
- //saves the instrument settings to a XML file
- //returns 0 for ok or <0 if there is an error
- int saveXML(char *filename);
- int loadXMLinstrument(const char *filename);
-
- void add2XML(XMLwrapper *xml);
- void add2XMLinstrument(XMLwrapper *xml);
-
- void defaults();
- void defaultsinstrument();
-
- void applyparameters();
-
- void getfromXML(XMLwrapper *xml);
- void getfromXMLinstrument(XMLwrapper *xml);
-
- void cleanup();
-
-// ADnoteParameters *ADPartParameters;
-// SUBnoteParameters *SUBPartParameters;
-
- //the part's kit
- struct {
- unsigned char Penabled,Pmuted,Pminkey,Pmaxkey;
- unsigned char *Pname;
- unsigned char Padenabled,Psubenabled,Ppadenabled;
- unsigned char Psendtoparteffect;
- ADnoteParameters *adpars;
- SUBnoteParameters *subpars;
- PADnoteParameters *padpars;
- } kit[NUM_KIT_ITEMS];
-
-
- //Part parameters
- void setkeylimit(unsigned char Pkeylimit);
- void setkititemstatus(int kititem,int Penabled_);
-
- unsigned char Penabled;//if the part is enabled
- unsigned char Pvolume;//part volume
- unsigned char Pminkey;//the minimum key that the part receives noteon messages
- unsigned char Pmaxkey;//the maximum key that the part receives noteon messages
- void setPvolume(char Pvolume);
- unsigned char Pkeyshift;//Part keyshift
- unsigned char Prcvchn;//from what midi channel it receive commnads
- unsigned char Ppanning;//part panning
- void setPpanning(char Ppanning);
- unsigned char Pvelsns;//velocity sensing (amplitude velocity scale)
- unsigned char Pveloffs;//velocity offset
- unsigned char Pnoteon;//if the part receives NoteOn messages
- unsigned char Pkitmode;//if the kitmode is enabled
- unsigned char Pdrummode;//if all keys are mapped and the system is 12tET (used for drums)
-
- unsigned char Ppolymode;//Part mode - 0=monophonic , 1=polyphonic
- unsigned char Pkeylimit;//how many keys are alowed to be played same time (0=off), the older will be relased
-
- unsigned char *Pname; //name of the instrument
- struct{//instrument additional information
- unsigned char Ptype;
- unsigned char Pauthor[MAX_INFO_TEXT_SIZE+1];
- unsigned char Pcomments[MAX_INFO_TEXT_SIZE+1];
- } info;
-
-
- 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; partfxinput l/r [NUM_PART_EFX] is for "no effect" buffer
-
- enum NoteStatus{KEY_OFF,KEY_PLAYING,KEY_RELASED_AND_SUSTAINED,KEY_RELASED};
-
- REALTYPE volume,oldvolumel,oldvolumer;//this is applied by Master
- REALTYPE panning;//this is applied by Master, too
-
- Controller ctl;//Part controllers
-
- EffectMgr *partefx[NUM_PART_EFX];//insertion part effects (they are part of the instrument)
- unsigned char Pefxroute[NUM_PART_EFX];//how the effect's output is routed(to next effect/to out)
- bool Pefxbypass[NUM_PART_EFX];//if the effects are bypassed
-
-
- Master* master;
-
- int lastnote;
-
- private:
- void KillNotePos(int pos);
- void RelaseNotePos(int pos);
- int killallnotes;//is set to 1 if I want to kill all notes
-
- struct PartNotes{
- NoteStatus status;
- int note;//if there is no note playing, the "note"=-1
- int itemsplaying;
- struct {
- ADnote *adnote;
- SUBnote *subnote;
- PADnote *padnote;
- int sendtoparteffect;
- } kititem[NUM_KIT_ITEMS];
- int time;
- };
-
- PartNotes partnote[POLIPHONY];
-
- REALTYPE *tmpoutl;//used to get the note
- REALTYPE *tmpoutr;
-
- REALTYPE oldfreq;//this is used for portamento
- Microtonal *microtonal;
- FFTwrapper *fft;
-};
-
-#endif
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.C
deleted file mode 100644
index 74619731..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.C
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Util.C - Miscellaneous functions
- Copyright (C) 2002-2005 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 "Util.h"
-#include <math.h>
-#include <stdio.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-int SAMPLE_RATE=44100;
-int SOUND_BUFFER_SIZE=256;
-int OSCIL_SIZE=512;
-
-Config config;
-REALTYPE *denormalkillbuf;
-
-
-/*
- * Transform the velocity according the scaling parameter (velocity sensing)
- */
-REALTYPE VelF(REALTYPE velocity,unsigned char scaling){
- REALTYPE x;
- x=pow(VELOCITY_MAX_SCALE,(64.0-scaling)/64.0);
- if ((scaling==127)||(velocity>0.99)) return(1.0);
- else return(pow(velocity,x));
-};
-
-/*
- * Get the detune in cents
- */
-REALTYPE getdetune(unsigned char type,unsigned short int coarsedetune,unsigned short int finedetune){
- REALTYPE det=0.0,octdet=0.0,cdet=0.0,findet=0.0;
- //Get Octave
- int octave=coarsedetune/1024;
- if (octave>=8) octave-=16;
- octdet=octave*1200.0;
-
- //Coarse and fine detune
- int cdetune=coarsedetune%1024;
- if (cdetune>512) cdetune-=1024;
-
- int fdetune=finedetune-8192;
-
- switch (type){
-// case 1: is used for the default (see below)
- case 2: cdet=fabs(cdetune*10.0);
- findet=fabs(fdetune/8192.0)*10.0;
- break;
- case 3: cdet=fabs(cdetune*100);
- findet=pow(10,fabs(fdetune/8192.0)*3.0)/10.0-0.1;
- break;
- case 4: cdet=fabs(cdetune*701.95500087);//perfect fifth
- findet=(pow(2,fabs(fdetune/8192.0)*12.0)-1.0)/4095*1200;
- break;
- //case ...: need to update N_DETUNE_TYPES, if you'll add more
- default:cdet=fabs(cdetune*50.0);
- findet=fabs(fdetune/8192.0)*35.0;//almost like "Paul's Sound Designer 2"
- break;
- };
- if (finedetune<8192) findet=-findet;
- if (cdetune<0) cdet=-cdet;
-
- det=octdet+cdet+findet;
- return(det);
-};
-
-
-bool fileexists(char *filename){
- struct stat tmp;
- int result=stat(filename,&tmp);
- if (result>=0) return(true);
-
- return(false);
-};
-
-void newFFTFREQS(FFTFREQS *f,int size){
- f->c=new REALTYPE[size];
- f->s=new REALTYPE[size];
- for (int i=0;i<size;i++){
- f->c[i]=0.0;f->s[i]=0.0;
- };
-};
-void deleteFFTFREQS(FFTFREQS *f){
- delete[] f->c;
- delete[] f->s;
- f->c=f->s=NULL;
-};
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.h
deleted file mode 100644
index c5b39476..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/Util.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- Util.h - Miscellaneous functions
- Copyright (C) 2002-2005 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 UTIL_H
-#define UTIL_H
-
-#include <pthread.h>
-#include "../globals.h"
-#include "Microtonal.h"
-#include "../DSP/FFTwrapper.h"
-#include "Config.h"
-
-//Velocity Sensing function
-extern REALTYPE VelF(REALTYPE velocity,unsigned char scaling);
-
-bool fileexists(char *filename);
-
-#define N_DETUNE_TYPES 4 //the number of detune types
-extern REALTYPE getdetune(unsigned char type,unsigned short int coarsedetune,unsigned short int finedetune);
-
-extern REALTYPE *denormalkillbuf;//the buffer to add noise in order to avoid denormalisation
-
-extern Config config;
-
-#endif
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.C
deleted file mode 100644
index 0f35faf2..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.C
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- XMLwrapper.C - XML wrapper
- Copyright (C) 2003-2005 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 "XMLwrapper.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <zlib.h>
-
-#include "../globals.h"
-#include "Util.h"
-
-int xml_k=0;
-char tabs[STACKSIZE+2];
-
-const char *XMLwrapper_whitespace_callback(mxml_node_t *node,int where){
- const char *name=node->value.element.name;
-
- if ((where==MXML_WS_BEFORE_OPEN)&&(!strcmp(name,"?xml"))) return(NULL);
- if ((where==MXML_WS_BEFORE_CLOSE)&&(!strcmp(name,"string"))) return(NULL);
-
- if ((where==MXML_WS_BEFORE_OPEN)||(where==MXML_WS_BEFORE_CLOSE)) {
-/* const char *tmp=node->value.element.name;
- if (tmp!=NULL) {
- if ((strstr(tmp,"par")!=tmp)&&(strstr(tmp,"string")!=tmp)) {
- printf("%s ",tmp);
- if (where==MXML_WS_BEFORE_OPEN) xml_k++;
- if (where==MXML_WS_BEFORE_CLOSE) xml_k--;
- if (xml_k>=STACKSIZE) xml_k=STACKSIZE-1;
- if (xml_k<0) xml_k=0;
- printf("%d\n",xml_k);
- printf("\n");
- };
-
- };
- int i=0;
- for (i=1;i<xml_k;i++) tabs[i]='\t';
- tabs[0]='\n';tabs[i+1]='\0';
- if (where==MXML_WS_BEFORE_OPEN) return(tabs);
- else return("\n");
-*/
- return("\n");
- };
-
- return(0);
-};
-
-
-XMLwrapper::XMLwrapper(){
- ZERO(&parentstack,(int)sizeof(parentstack));
- ZERO(&values,(int)sizeof(values));
-
- minimal=true;
- stackpos=0;
-
- information.PADsynth_used=false;
-
- tree=mxmlNewElement(MXML_NO_PARENT,"?xml version=\"1.0\" encoding=\"UTF-8\"?");
-/* for mxml 2.1 (and older)
- tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
- mxmlElementSetAttr(tree,"version","1.0");
- mxmlElementSetAttr(tree,"encoding","UTF-8");
-*/
-
- mxml_node_t *doctype=mxmlNewElement(tree,"!DOCTYPE");
- mxmlElementSetAttr(doctype,"ZynAddSubFX-data",NULL);
-
- node=root=mxmlNewElement(tree,"ZynAddSubFX-data");
-
- mxmlElementSetAttr(root,"version-major","1");
- mxmlElementSetAttr(root,"version-minor","1");
- mxmlElementSetAttr(root,"ZynAddSubFX-author","Nasca Octavian Paul");
-
- //make the empty branch that will contain the information parameters
- info=addparams0("INFORMATION");
-
- //save zynaddsubfx specifications
- beginbranch("BASE_PARAMETERS");
- addpar("max_midi_parts",NUM_MIDI_PARTS);
- addpar("max_kit_items_per_instrument",NUM_KIT_ITEMS);
-
- addpar("max_system_effects",NUM_SYS_EFX);
- addpar("max_insertion_effects",NUM_INS_EFX);
- addpar("max_instrument_effects",NUM_PART_EFX);
-
- addpar("max_addsynth_voices",NUM_VOICES);
- endbranch();
-
-};
-
-XMLwrapper::~XMLwrapper(){
- if (tree!=NULL) mxmlDelete(tree);
-};
-
-bool XMLwrapper::checkfileinformation(char *filename){
- stackpos=0;
- ZERO(&parentstack,(int)sizeof(parentstack));
- information.PADsynth_used=false;
-
- if (tree!=NULL) mxmlDelete(tree);tree=NULL;
- char *xmldata=doloadfile(filename);
- if (xmldata==NULL) return(-1);//the file could not be loaded or uncompressed
-
-
- char *start=strstr(xmldata,"<INFORMATION>");
- char *end=strstr(xmldata,"</INFORMATION>");
-
- if ((start==NULL)||(end==NULL)||(start>end)) {
- delete(xmldata);
- return(false);
- };
- end+=strlen("</INFORMATION>");
- end[0]='\0';
-
- tree=mxmlNewElement(MXML_NO_PARENT,"?xml");
- node=root=mxmlLoadString(tree,xmldata,MXML_OPAQUE_CALLBACK);
- if (root==NULL) {
- delete(xmldata);
- mxmlDelete(tree);
- node=root=tree=NULL;
- return(false);
- };
-
- root=mxmlFindElement(tree,tree,"INFORMATION",NULL,NULL,MXML_DESCEND);
- push(root);
-
- if (root==NULL){
- delete(xmldata);
- mxmlDelete(tree);
- node=root=tree=NULL;
- return(false);
- };
-
- information.PADsynth_used=getparbool("PADsynth_used",false);
-
- exitbranch();
- if (tree!=NULL) mxmlDelete(tree);
- delete(xmldata);
- node=root=tree=NULL;
-
- return(true);
-};
-
-
-/* SAVE XML members */
-
-int XMLwrapper::saveXMLfile(char *filename){
- char *xmldata=getXMLdata();
- if (xmldata==NULL) return(-2);
-
- int compression=config.cfg.GzipCompression;
-
- int fnsize=strlen(filename)+100;
- char *filenamenew=new char [fnsize];
- snprintf(filenamenew,fnsize,"%s",filename);
-
- int result=dosavefile(filenamenew,compression,xmldata);
-
- delete(filenamenew);
- delete(xmldata);
- return(result);
-};
-
-char *XMLwrapper::getXMLdata(){
- xml_k=0;
- ZERO(tabs,STACKSIZE+2);
-
- mxml_node_t *oldnode=node;
-
- node=info;
- //Info storing
- addparbool("PADsynth_used",information.PADsynth_used);
-
- node=oldnode;
- char *xmldata=mxmlSaveAllocString(tree,XMLwrapper_whitespace_callback);
-
- return(xmldata);
-};
-
-
-int XMLwrapper::dosavefile(char *filename,int compression,char *xmldata){
- if (compression==0){
- FILE *file;
- file=fopen(filename,"w");
- if (file==NULL) return(-1);
- fputs(xmldata,file);
- fclose(file);
- } else {
- if (compression>9) compression=9;
- if (compression<1) compression=1;
- char options[10];
- snprintf(options,10,"wb%d",compression);
-
- gzFile gzfile;
- gzfile=gzopen(filename,options);
- if (gzfile==NULL) return(-1);
- gzputs(gzfile,xmldata);
- gzclose(gzfile);
- };
-
- return(0);
-};
-
-
-
-void XMLwrapper::addpar(char *name,int val){
- addparams2("par","name",name,"value",int2str(val));
-};
-
-void XMLwrapper::addparreal(char *name,REALTYPE val){
- addparams2("par_real","name",name,"value",real2str(val));
-};
-
-void XMLwrapper::addparbool(char *name,int val){
- if (val!=0) addparams2("par_bool","name",name,"value","yes");
- else addparams2("par_bool","name",name,"value","no");
-};
-
-void XMLwrapper::addparstr(char *name,char *val){
- mxml_node_t *element=mxmlNewElement(node,"string");
- mxmlElementSetAttr(element,"name",name);
- mxmlNewText(element,0,val);
-};
-
-
-void XMLwrapper::beginbranch(char *name){
- push(node);
- node=addparams0(name);
-};
-
-void XMLwrapper::beginbranch(char *name,int id){
- push(node);
- node=addparams1(name,"id",int2str(id));
-};
-
-void XMLwrapper::endbranch(){
- node=pop();
-};
-
-
-
-/* LOAD XML members */
-
-int XMLwrapper::loadXMLfile(const char *filename){
- if (tree!=NULL) mxmlDelete(tree);
- tree=NULL;
-
- ZERO(&parentstack,(int)sizeof(parentstack));
- ZERO(&values,(int)sizeof(values));
-
- stackpos=0;
-
- char *xmldata=doloadfile(filename);
- if (xmldata==NULL) return(-1);//the file could not be loaded or uncompressed
-
- root=tree=mxmlLoadString(NULL,xmldata,MXML_OPAQUE_CALLBACK);
-
- delete(xmldata);
-
- if (tree==NULL) return(-2);//this is not XML
-
-
- node=root=mxmlFindElement(tree,tree,"ZynAddSubFX-data",NULL,NULL,MXML_DESCEND);
- if (root==NULL) return(-3);//the XML doesnt embbed zynaddsubfx data
- push(root);
-
- values.xml_version.major=str2int(mxmlElementGetAttr(root,"version-major"));
- values.xml_version.minor=str2int(mxmlElementGetAttr(root,"version-minor"));
-
- return(0);
-};
-
-
-char *XMLwrapper::doloadfile(const char *filename){
- char *xmldata=NULL;
- int filesize=-1;
-
- //try get filesize as gzip data (first)
- gzFile gzfile=gzopen(filename,"rb");
- if (gzfile!=NULL){//this is a gzip file
- // first check it's size
- while(!gzeof(gzfile)) {
- gzseek (gzfile,1024*1024,SEEK_CUR);
- if (gztell(gzfile)>10000000) {
- gzclose(gzfile);
- goto notgzip;//the file is too big
- };
- };
- filesize=gztell(gzfile);
-
- //rewind the file and load the data
- xmldata=new char[filesize+1];
- ZERO(xmldata,filesize+1);
-
- gzrewind(gzfile);
- gzread(gzfile,xmldata,filesize);
-
- gzclose(gzfile);
- return (xmldata);
- } else {//this is not a gzip file
- notgzip:
- FILE *file=fopen(filename,"rb");
- if (file==NULL) return(NULL);
- fseek(file,0,SEEK_END);
- filesize=ftell(file);
-
- xmldata=new char [filesize+1];
- ZERO(xmldata,filesize+1);
-
- rewind(file);
- fread(xmldata,filesize,1,file);
-
- fclose(file);
- return(xmldata);
- };
-};
-
-bool XMLwrapper::putXMLdata(char *xmldata){
- if (tree!=NULL) mxmlDelete(tree);
- tree=NULL;
-
- ZERO(&parentstack,(int)sizeof(parentstack));
- ZERO(&values,(int)sizeof(values));
-
- stackpos=0;
-
- if (xmldata==NULL) return (false);
-
- root=tree=mxmlLoadString(NULL,xmldata,MXML_OPAQUE_CALLBACK);
-
- if (tree==NULL) return(false);
-
- node=root=mxmlFindElement(tree,tree,"ZynAddSubFX-data",NULL,NULL,MXML_DESCEND);
- if (root==NULL) return (false);;
- push(root);
-
- return(true);
-};
-
-
-
-int XMLwrapper::enterbranch(char *name){
- node=mxmlFindElement(peek(),peek(),name,NULL,NULL,MXML_DESCEND_FIRST);
- if (node==NULL) return(0);
-
- push(node);
- return(1);
-};
-
-int XMLwrapper::enterbranch(char *name,int id){
- snprintf(tmpstr,TMPSTR_SIZE,"%d",id);
- node=mxmlFindElement(peek(),peek(),name,"id",tmpstr,MXML_DESCEND_FIRST);
- if (node==NULL) return(0);
-
- push(node);
- return(1);
-};
-
-
-void XMLwrapper::exitbranch(){
- pop();
-};
-
-
-int XMLwrapper::getbranchid(int min, int max){
- int id=str2int(mxmlElementGetAttr(node,"id"));
- if ((min==0)&&(max==0)) return(id);
-
- if (id<min) id=min;
- else if (id>max) id=max;
-
- return(id);
-};
-
-int XMLwrapper::getpar(char *name,int defaultpar,int min,int max){
- node=mxmlFindElement(peek(),peek(),"par","name",name,MXML_DESCEND_FIRST);
- if (node==NULL) return(defaultpar);
-
- const char *strval=mxmlElementGetAttr(node,"value");
- if (strval==NULL) return(defaultpar);
-
- int val=str2int(strval);
- if (val<min) val=min;
- else if (val>max) val=max;
-
- return(val);
-};
-
-int XMLwrapper::getpar127(char *name,int defaultpar){
- return(getpar(name,defaultpar,0,127));
-};
-
-int XMLwrapper::getparbool(char *name,int defaultpar){
- node=mxmlFindElement(peek(),peek(),"par_bool","name",name,MXML_DESCEND_FIRST);
- if (node==NULL) return(defaultpar);
-
- const char *strval=mxmlElementGetAttr(node,"value");
- if (strval==NULL) return(defaultpar);
-
- if ((strval[0]=='Y')||(strval[0]=='y')) return(1);
- else return(0);
-};
-
-void XMLwrapper::getparstr(char *name,char *par,int maxstrlen){
- ZERO(par,maxstrlen);
- node=mxmlFindElement(peek(),peek(),"string","name",name,MXML_DESCEND_FIRST);
-
- if (node==NULL) return;
- if (node->child==NULL) return;
- if (node->child->type!=MXML_OPAQUE) return;
-
- snprintf(par,maxstrlen,"%s",node->child->value.element.name);
-
-};
-
-REALTYPE XMLwrapper::getparreal(char *name,REALTYPE defaultpar){
- node=mxmlFindElement(peek(),peek(),"par_real","name",name,MXML_DESCEND_FIRST);
- if (node==NULL) return(defaultpar);
-
- const char *strval=mxmlElementGetAttr(node,"value");
- if (strval==NULL) return(defaultpar);
-
- return(str2real(strval));
-};
-
-REALTYPE XMLwrapper::getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max){
- REALTYPE result=getparreal(name,defaultpar);
-
- if (result<min) result=min;
- else if (result>max) result=max;
- return(result);
-};
-
-
-/** Private members **/
-
-char *XMLwrapper::int2str(int x){
- snprintf(tmpstr,TMPSTR_SIZE,"%d",x);
- return(tmpstr);
-};
-
-char *XMLwrapper::real2str(REALTYPE x){
- snprintf(tmpstr,TMPSTR_SIZE,"%g",x);
- return(tmpstr);
-};
-
-int XMLwrapper::str2int(const char *str){
- if (str==NULL) return(0);
- int result=strtol(str,NULL,10);
- return(result);
-};
-
-REALTYPE XMLwrapper::str2real(const char *str){
- if (str==NULL) return(0.0);
- REALTYPE result=strtod(str,NULL);
- return(result);
-};
-
-
-mxml_node_t *XMLwrapper::addparams0(char *name){
- mxml_node_t *element=mxmlNewElement(node,name);
- return(element);
-};
-
-mxml_node_t *XMLwrapper::addparams1(char *name,char *par1,char *val1){
- mxml_node_t *element=mxmlNewElement(node,name);
- mxmlElementSetAttr(element,par1,val1);
- return(element);
-};
-
-mxml_node_t *XMLwrapper::addparams2(char *name,char *par1,char *val1,char *par2, char *val2){
- mxml_node_t *element=mxmlNewElement(node,name);
- mxmlElementSetAttr(element,par1,val1);
- mxmlElementSetAttr(element,par2,val2);
- return(element);
-};
-
-
-
-
-void XMLwrapper::push(mxml_node_t *node){
- if (stackpos>=STACKSIZE-1) {
- printf("BUG!: XMLwrapper::push() - full parentstack\n");
- return;
- };
- stackpos++;
- parentstack[stackpos]=node;
-
-// printf("push %d - %s\n",stackpos,node->value.element.name);
-
-};
-mxml_node_t *XMLwrapper::pop(){
- if (stackpos<=0) {
- printf("BUG!: XMLwrapper::pop() - empty parentstack\n");
- return (root);
- };
- mxml_node_t *node=parentstack[stackpos];
- parentstack[stackpos]=NULL;
-
-// printf("pop %d - %s\n",stackpos,node->value.element.name);
-
- stackpos--;
- return(node);
-};
-
-mxml_node_t *XMLwrapper::peek(){
- if (stackpos<=0) {
- printf("BUG!: XMLwrapper::peek() - empty parentstack\n");
- return (root);
- };
- return(parentstack[stackpos]);
-};
-
-
-
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.h
deleted file mode 100644
index 765622a2..00000000
--- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Misc/XMLwrapper.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- ZynAddSubFX - a software synthesizer
-
- XML.h - XML wrapper
- Copyright (C) 2003-2005 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 <mxml.h>
-#ifndef REALTYPE
-#define REALTYPE float
-#endif
-
-#ifndef XML_WRAPPER_H
-#define XML_WRAPPER_H
-
-#define TMPSTR_SIZE 50
-
-//the maxim tree depth
-#define STACKSIZE 100
-
-class XMLwrapper{
- public:
- XMLwrapper();
- ~XMLwrapper();
-
- /********************************/
- /* SAVE to XML */
- /********************************/
-
- //returns 0 if ok or -1 if the file cannot be saved
- int saveXMLfile(char *filename);
-
- //returns the new allocated string that contains the XML data (used for clipboard)
- //the string is NULL terminated
- char *getXMLdata();
-
- //add simple parameter (name and value)
- void addpar(char *name,int val);
- void addparreal(char *name,REALTYPE val);
-
- //add boolean parameter (name and boolean value)
- //if the value is 0 => "yes", else "no"
- void addparbool(char *name,int val);
-
- //add string parameter (name and string)
- void addparstr(char *name,char *val);
-
- //add a branch
- void beginbranch(char *name);
- void beginbranch(char *name, int id);
-
- //this must be called after each branch (nodes that contains child nodes)
- void endbranch();
-
- /********************************/
- /* LOAD from XML */
- /********************************/
-
- //returns 0 if ok or -1 if the file cannot be loaded
- int loadXMLfile(const char *filename);
-
- //used by the clipboard
- bool putXMLdata(char *xmldata);
-
- //enter into the branch
- //returns 1 if is ok, or 0 otherwise
- int enterbranch(char *name);
-
-
- //enter into the branch with id
- //returns 1 if is ok, or 0 otherwise
- int enterbranch(char *name, int id);
-
- //exits from a branch
- void exitbranch();
-
- //get the the branch_id and limits it between the min and max
- //if min==max==0, it will not limit it
- //if there isn't any id, will return min
- //this must be called only imediately after enterbranch()
- int getbranchid(int min, int max);
-
- //it returns the parameter and limits it between min and max
- //if min==max==0, it will not limit it
- //if no parameter will be here, the defaultpar will be returned
- int getpar(char *name,int defaultpar,int min,int max);
-
- //the same as getpar, but the limits are 0 and 127
- int getpar127(char *name,int defaultpar);
-
- int getparbool(char *name,int defaultpar);
-
- void getparstr(char *name,char *par,int maxstrlen);
- REALTYPE getparreal(char *name,REALTYPE defaultpar);
- REALTYPE getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max);
-
- bool minimal;//false if all parameters will be stored (used only for clipboard)
-
- struct {
- bool PADsynth_used;
- }information;
-
- //opens a file and parse only the "information" data on it
- //returns "true" if all went ok or "false" on errors
- bool checkfileinformation(char *filename);
-
- private:
-
- int dosavefile(char *filename,int compression,char *xmldata);
- char *doloadfile(const char *filename);
-
-
- mxml_node_t *tree;//all xml data
- mxml_node_t *root;//xml data used by zynaddsubfx
- mxml_node_t *node;//current node
- mxml_node_t *info;//this node is used to store the information about the data
-
- //adds params like this:
- // <name>
- //returns the node
- mxml_node_t *addparams0(char *name);
-
- //adds params like this:
- // <name par1="val1">
- //returns the node
- mxml_node_t *addparams1(char *name,char *par1,char *val1);
-
- //adds params like this:
- // <name par1="val1" par2="val2">
- //returns the node
- mxml_node_t *addparams2(char *name,char *par1,char *val1,char *par2, char *val2);
-
- char *int2str(int x);
- char *real2str(REALTYPE x);
-
- int str2int(const char *str);
- REALTYPE str2real(const char *str);
-
- char tmpstr[TMPSTR_SIZE];
-
-
- //this is used to store the parents
- mxml_node_t *parentstack[STACKSIZE];
- int stackpos;
-
-
- void push(mxml_node_t *node);
- mxml_node_t *pop();
- mxml_node_t *peek();
-
- //theese are used to store the values
- struct{
- struct {
- int major,minor;
- }xml_version;
- }values;
-
-};
-
-#endif