zynaddsubfx

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

commit cd70dfbc423ef04d2e1963b2e3983ea3800fdf54
parent 6e114bec1aeba28ac764467ad3b48600266819fb
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Fri, 11 Sep 2009 16:31:22 -0400

Relocated/generalized utility functions

* Replaced int2str, real2str, str2int, and str2real from XMLwrapper with
  stringTo<T> and stringFrom<T> function templates in Util.

* Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper

Diffstat:
MChangeLog | 6+++++-
Msrc/DSP/FFTwrapper.cpp | 16++++++++++++++++
Msrc/DSP/FFTwrapper.h | 3+++
Msrc/Misc/Util.cpp | 16----------------
Msrc/Misc/Util.h | 22+++++++++++++++++++---
Msrc/Misc/XMLwrapper.cpp | 47+++++++++++------------------------------------
Msrc/Misc/XMLwrapper.h | 33---------------------------------
7 files changed, 54 insertions(+), 89 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -894,8 +894,12 @@ - Fixed glitch in XMLwrapper, which would prevent file loading 11 Sep 2009 (Mark McCurry) - - Moved PADsynth_used from public struct to has/set methods in XMLwrapper + - Moved PADsynth_used from public struct to has/set methods in + XMLwrapper - Created wrapper functions, so that XMLwrapper can be somewhat usable when const - Removed multiple addparam methods and replaced it with one variable argument function + - Replaced int2str, real2str, str2int, and str2real from XMLwrapper + with stringTo<T> and stringFrom<T> function templates in Util. + - Moved newFFTFREQS and deleteFFTFREQS from Util to FFTwrapper diff --git a/src/DSP/FFTwrapper.cpp b/src/DSP/FFTwrapper.cpp @@ -98,3 +98,19 @@ void FFTwrapper::freqs2smps(FFTFREQS freqs,REALTYPE *smps) }; +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/src/DSP/FFTwrapper.h b/src/DSP/FFTwrapper.h @@ -63,5 +63,8 @@ private: fftw_real *tmpfftdata1,*tmpfftdata2; rfftw_plan planfftw,planfftw_inv; }; + +void newFFTFREQS(FFTFREQS *f, int size); +void deleteFFTFREQS(FFTFREQS *f); #endif diff --git a/src/Misc/Util.cpp b/src/Misc/Util.cpp @@ -104,19 +104,3 @@ bool fileexists(const char *filename) 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/src/Misc/Util.h b/src/Misc/Util.h @@ -23,10 +23,9 @@ #ifndef UTIL_H #define UTIL_H -#include <pthread.h> +#include <string> +#include <sstream> #include "../globals.h" -#include "Microtonal.h" -#include "../DSP/FFTwrapper.h" #include "Config.h" //Velocity Sensing function @@ -41,5 +40,22 @@ extern REALTYPE *denormalkillbuf;/**<the buffer to add noise in order to avoid d extern Config config; +template <class T> +std::string stringFrom(T x) +{ + std::stringstream ss; + ss << x; + return ss.str(); +} + +template <class T> +T stringTo(std::string str) +{ + std::stringstream ss(str); + T ans; + ss >> ans; + return ans; +} + #endif diff --git a/src/Misc/XMLwrapper.cpp b/src/Misc/XMLwrapper.cpp @@ -3,7 +3,9 @@ XMLwrapper.C - XML wrapper Copyright (C) 2003-2005 Nasca Octavian Paul + Copyright (C) 2009-2009 Mark McCurry Author: Nasca Octavian Paul + Mark McCurry 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 @@ -220,12 +222,12 @@ int XMLwrapper::dosavefile(const char *filename,int compression,const char *xmld void XMLwrapper::addpar(const string &name,int val) { - addparams("par",2,"name",name.c_str(),"value",int2str(val)); + addparams("par",2,"name",name.c_str(),"value",stringFrom<int>(val).c_str()); }; void XMLwrapper::addparreal(const string &name,REALTYPE val) { - addparams("par_real",2,"name",name.c_str(),"value",real2str(val)); + addparams("par_real",2,"name",name.c_str(),"value",stringFrom<REALTYPE>(val).c_str()); }; void XMLwrapper::addparbool(const string &name,int val) @@ -255,7 +257,7 @@ void XMLwrapper::beginbranch(const string &name,int id) if(verbose) cout << "beginbranch(" << id << ")" << name << endl; push(node); - node=addparams(name.c_str(),1,"id",int2str(id)); + node=addparams(name.c_str(),1,"id",stringFrom<int>(id).c_str()); }; void XMLwrapper::endbranch() @@ -293,8 +295,8 @@ int XMLwrapper::loadXMLfile(const string &filename) 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")); + values.xml_version.major=stringTo<int>(mxmlElementGetAttr(root,"version-major")); + values.xml_version.minor=stringTo<int>(mxmlElementGetAttr(root,"version-minor")); return(0); }; @@ -371,8 +373,7 @@ int XMLwrapper::enterbranch(const string &name,int id) { if(verbose) cout << "enterbranch("<<id<<") " << name << endl; - snprintf(tmpstr,TMPSTR_SIZE,"%d",id); - node=mxmlFindElement(peek(),peek(),name.c_str(),"id",tmpstr,MXML_DESCEND_FIRST); + node=mxmlFindElement(peek(),peek(),name.c_str(),"id",stringFrom<int>(id).c_str(),MXML_DESCEND_FIRST); if (node==NULL) return(0); push(node); @@ -391,7 +392,7 @@ void XMLwrapper::exitbranch() int XMLwrapper::getbranchid(int min, int max) const { - int id=str2int(mxmlElementGetAttr(node,"id")); + int id=stringTo<int>(mxmlElementGetAttr(node,"id")); if ((min==0)&&(max==0)) return(id); if (id<min) id=min; @@ -409,7 +410,7 @@ int XMLwrapper::getpar(const string &name,int defaultpar,int min,int max) const const char *strval=mxmlElementGetAttr(tmp,"value"); if (strval==NULL) return(defaultpar); - int val=str2int(strval); + int val=stringTo<int>(strval); if (val<min) val=min; else if (val>max) val=max; @@ -455,7 +456,7 @@ REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar) const const char *strval=mxmlElementGetAttr(tmp,"value"); if (strval==NULL) return(defaultpar); - return(str2real(strval)); + return(stringTo<REALTYPE>(strval)); }; REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max) const @@ -470,32 +471,6 @@ REALTYPE XMLwrapper::getparreal(const char *name,REALTYPE defaultpar,REALTYPE mi /** 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) const -{ - if (str==NULL) return(0); - int result=strtol(str,NULL,10); - return(result); -}; - -REALTYPE XMLwrapper::str2real(const char *str) const -{ - if (str==NULL) return(0.0); - REALTYPE result=strtod(str,NULL); - return(result); -}; - mxml_node_t *XMLwrapper::addparams(const char *name, unsigned int params, ...) const { /**@todo make this function send out a good error message if something goes diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h @@ -232,7 +232,6 @@ private: */ char *doloadfile(const std::string &filename) const; - mxml_node_t *tree;/**<all xml data*/ mxml_node_t *root;/**<xml data used by zynaddsubfx*/ mxml_node_t *node;/**<current node*/ @@ -251,38 +250,6 @@ private: */ mxml_node_t *addparams(const char *name, unsigned int params, ...) const; - /** - * Convert integer to string - * @param x integer input - * @returns string output - */ - char *int2str(int x); - - /** - * Convert integer to string - * @param x integer input - * @returns string output - */ - char *real2str(REALTYPE x); - - /** - * Convert string to int - * @param str string input - * @returns integer output - */ - int str2int(const char *str) const; - - /** - * Convert string to realtype - * @param x integer input - * @returns string output - */ - REALTYPE str2real(const char *str) const; - - /**Temporary string for various uses*/ - char tmpstr[TMPSTR_SIZE]; - - /**this is used to store the parents. * @todo Use the stack class provided by C++*/ mxml_node_t *parentstack[STACKSIZE];