/* ZynAddSubFX - a software synthesizer Echo.h - Echo Effect 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 or later) 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 ECHO_H #define ECHO_H #include "Effect.h" #include "../Misc/Stereo.h" /**Echo Effect*/ class Echo:public Effect { public: Echo(bool insertion_, float *efxoutl_, float *efxoutr_, unsigned int srate, int bufsize); ~Echo(); void out(const Stereo &input); void setpreset(unsigned char npreset); /** * Sets the value of the chosen variable * * The possible parameters are: * -# Volume * -# Panning * -# Delay * -# L/R Delay * -# L/R Crossover * -# Feedback * -# Dampening * @param npar number of chosen parameter * @param value the new value */ void changepar(int npar, unsigned char value); /** * Gets the specified parameter * * The possible parameters are * -# Volume * -# Panning * -# Delay * -# L/R Delay * -# L/R Crossover * -# Feedback * -# Dampening * @param npar number of chosen parameter * @return value of parameter */ unsigned char getpar(int npar) const; int getnumparams(void); void cleanup(void); private: //Parameters unsigned char Pvolume; /**<#1 Volume or Dry/Wetness*/ unsigned char Pdelay; /**<#3 Delay of the Echo*/ unsigned char Plrdelay; /**<#4 L/R delay difference*/ unsigned char Pfb; /**<#6Feedback*/ unsigned char Phidamp; /**<#7Dampening of the Echo*/ void setvolume(unsigned char _Pvolume); void setdelay(unsigned char _Pdelay); void setlrdelay(unsigned char _Plrdelay); void setfb(unsigned char _Pfb); void sethidamp(unsigned char _Phidamp); //Real Parameters float fb, hidamp; //Left/Right delay lengths Stereo delayTime; float lrdelay; float avgDelay; void initdelays(void); //2 channel ring buffer Stereo delay; Stereo old; //position of reading/writing from delaysample Stereo pos; //step size for delay buffer Stereo delta; Stereo ndelta; }; #endif