1 /*
2   ZynAddSubFX - a software synthesizer
3 
4   Echo.h - Echo Effect
5   Copyright (C) 2002-2005 Nasca Octavian Paul
6   Author: Nasca Octavian Paul
7 
8   This program is free software; you can redistribute it and/or
9   modify it under the terms of the GNU General Public License
10   as published by the Free Software Foundation; either version 2
11   of the License, or (at your option) any later version.
12 */
13 
14 #ifndef ECHO_H
15 #define ECHO_H
16 
17 #include "Effect.h"
18 #include "../Misc/Stereo.h"
19 
20 namespace zyn {
21 
22 /**Echo Effect*/
23 class Echo:public Effect
24 {
25     public:
26         Echo(EffectParams pars);
27         ~Echo();
28 
29         void out(const Stereo<float *> &input);
30         unsigned char getpresetpar(unsigned char npreset, unsigned int npar);
31         void setpreset(unsigned char npreset);
32         /**
33          * Sets the value of the chosen variable
34          *
35          * The possible parameters are:
36          *   -# Volume
37          *   -# Panning
38          *   -# Delay
39          *   -# L/R Delay
40          *   -# L/R Crossover
41          *   -# Feedback
42          *   -# Dampening
43          * @param npar number of chosen parameter
44          * @param value the new value
45          */
46         void changepar(int npar, unsigned char value);
47 
48         /**
49          * Gets the specified parameter
50          *
51          * The possible parameters are
52          *   -# Volume
53          *   -# Panning
54          *   -# Delay
55          *   -# L/R Delay
56          *   -# L/R Crossover
57          *   -# Feedback
58          *   -# Dampening
59          * @param npar number of chosen parameter
60          * @return value of parameter
61          */
62         unsigned char getpar(int npar) const;
63         int getnumparams(void);
64         void cleanup(void);
65 
66         static rtosc::Ports ports;
67     private:
68         //Parameters
69         unsigned char Pvolume;  /**<#1 Volume or Dry/Wetness*/
70         unsigned char Pdelay;   /**<#3 Delay of the Echo*/
71         unsigned char Plrdelay; /**<#4 L/R delay difference*/
72         unsigned char Pfb;      /**<#6Feedback*/
73         unsigned char Phidamp;  /**<#7Dampening of the Echo*/
74 
75         void setvolume(unsigned char _Pvolume);
76         void setdelay(unsigned char _Pdelay);
77         void setlrdelay(unsigned char _Plrdelay);
78         void setfb(unsigned char _Pfb);
79         void sethidamp(unsigned char _Phidamp);
80 
81         //Real Parameters
82         float fb, hidamp;
83         //Left/Right delay lengths
84         Stereo<int> delayTime;
85         float       lrdelay;
86         float       avgDelay;
87 
88         void initdelays(void);
89         //2 channel ring buffer
90         Stereo<float *> delay;
91         Stereo<float>   old;
92 
93         //position of reading/writing from delaysample
94         Stereo<int> pos;
95         //step size for delay buffer
96         Stereo<int> delta;
97         Stereo<int> ndelta;
98 };
99 
100 }
101 
102 #endif
103