summaryrefslogtreecommitdiff
path: root/muse2/plugins/doublechorus/simplechorusmodel.h
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
committerRobert Jonsson <spamatica@gmail.com>2010-10-13 19:34:22 +0000
commit8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 (patch)
tree064ad3f2bf8daab0ad27b128abd86a9bbdb1e496 /muse2/plugins/doublechorus/simplechorusmodel.h
parenta27706d9629e8b592cca4659f865b70adef24e6d (diff)
new branch muse2, first checkin
Diffstat (limited to 'muse2/plugins/doublechorus/simplechorusmodel.h')
-rw-r--r--muse2/plugins/doublechorus/simplechorusmodel.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/muse2/plugins/doublechorus/simplechorusmodel.h b/muse2/plugins/doublechorus/simplechorusmodel.h
new file mode 100644
index 00000000..797e7030
--- /dev/null
+++ b/muse2/plugins/doublechorus/simplechorusmodel.h
@@ -0,0 +1,96 @@
+//===========================================================================
+//
+// simplechorus
+//
+// Version 0.0.1
+//
+//
+//
+//
+// Copyright (c) 2006 Nil Geisweiller
+//
+//
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// 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 for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA or point your web browser to http://www.gnu.org.
+//===========================================================================
+
+#ifndef __SIMPLECHORUSMODEL_H
+#define __SIMPLECHORUSMODEL_H
+
+#define MAXBUFFERLENGTH 192000
+#define MAXSINUSRESOLUTION 192000
+#define MINFREQ 0.05 //in Hz
+#define MAXFREQ 5.0 //in Hz
+#define EARSDISTANCE 0.12 //in meter
+#define MIDSOURCEDISTANCE 2.0 //in meter
+#define MAXDEPTH 1.0 //in meter, radius
+#define SOUNDSPEED 330.0 //in meter per second
+#define MINDELAYSEC 0.01 //in second
+#define MAXDELAYSEC 1.0 //in second
+#define COEFFILTER 0.97576 //0.26795
+#define PANAMP 0.75
+//with cutoff = samplerate/256
+//following (2-cos(x)) - sqrt((2-cos(x))^2 - 1) with x = 2*pi*cutoff/samplerate
+//#define M_PI 3.14159265358979
+
+class SimpleChorusModel {
+ private :
+ //parameters
+ float _pan;
+ float _LFOFreq;
+ float _depth;
+ //parameter state
+ float _sampleRate;
+ float _depthAmp;
+ float _leftAmp;
+ float _rightAmp;
+ float _filterCoef1;
+ float _filterCoef2;
+ int _leftMidDistance; //distance of the left micro in samples
+ int _rightMidDistance; //distance of the right micro in samples
+ //state
+ float _inct;
+ float _index; //time at the scale of sampleRate
+ float _leftBuffer[MAXBUFFERLENGTH];
+ float _rightBuffer[MAXBUFFERLENGTH];
+ float _ocsDistance; //in sample, distance of the micro with initial position
+ int _past_position_left;
+ int _past_position_right;
+ int _position;
+ public :
+ static int useCount;
+ static float sinus[MAXSINUSRESOLUTION];
+
+
+ void process_chorus(float leftInput, float rightInput,
+ float* leftOutput, float* rightOutput);
+
+ void setPan(float);
+ void setLFOFreq(float);
+ void setDepth(float);
+ void setSampleRate(float);
+ float getPan();
+ float getLFOFreq();
+ float getDepth();
+
+ void setChorus();
+
+ SimpleChorusModel(float samplerate);
+ ~SimpleChorusModel();
+
+};
+
+#endif