summaryrefslogtreecommitdiff
path: root/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h
diff options
context:
space:
mode:
Diffstat (limited to 'muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h')
-rw-r--r--muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h b/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h
new file mode 100644
index 00000000..6e4e2991
--- /dev/null
+++ b/muse_qt4_evolution/synti/zynaddsubfx/Synth/SUBnote.h
@@ -0,0 +1,98 @@
+/*
+ ZynAddSubFX - a software synthesizer
+
+ SUBnote.h - The subtractive synthesizer
+ 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 SUB_NOTE_H
+#define SUB_NOTE_H
+
+#include "../globals.h"
+#include "../Params/SUBnoteParameters.h"
+#include "../Params/Controller.h"
+#include "Envelope.h"
+#include "../DSP/Filter.h"
+
+class SUBnote{
+ public:
+ SUBnote(SUBnoteParameters *parameters,Controller *ctl_,REALTYPE freq,REALTYPE velocity,int portamento_,int midinote);
+ ~SUBnote();
+ int noteout(REALTYPE *outl,REALTYPE *outr);//note output,return 0 if the note is finished
+ void relasekey();
+ int finished();
+
+ int ready; //if I can get the sampledata
+
+ private:
+
+ void computecurrentparameters();
+ void initparameters(REALTYPE freq);
+ void KillNote();
+
+ SUBnoteParameters *pars;
+
+ //parameters
+ int stereo;
+ int numstages;//number of stages of filters
+ int numharmonics;//number of harmonics (after the too higher hamonics are removed)
+ int start;//how the harmonics start
+ REALTYPE basefreq;
+ REALTYPE panning;
+ Envelope *AmpEnvelope;
+ Envelope *FreqEnvelope;
+ Envelope *BandWidthEnvelope;
+
+ Filter *GlobalFilterL,*GlobalFilterR;
+
+ Envelope *GlobalFilterEnvelope;
+
+ //internal values
+ ONOFFTYPE NoteEnabled;
+ int firsttick,portamento;
+ REALTYPE volume,oldamplitude,newamplitude;
+
+ REALTYPE GlobalFilterCenterPitch;//octaves
+ REALTYPE GlobalFilterFreqTracking;
+
+ struct bpfilter{
+ REALTYPE freq,bw,amp; //filter parameters
+ REALTYPE a1,a2,b0,b2;//filter coefs. b1=0
+ REALTYPE xn1,xn2,yn1,yn2; //filter internal values
+ };
+
+ void initfilter(bpfilter &filter,REALTYPE freq,REALTYPE bw,REALTYPE amp,REALTYPE mag);
+ void computefiltercoefs(bpfilter &filter,REALTYPE freq,REALTYPE bw,REALTYPE gain);
+ void filter(bpfilter &filter,REALTYPE *smps);
+
+ bpfilter *lfilter,*rfilter;
+
+ REALTYPE *tmpsmp;
+ REALTYPE *tmprnd;//this is filled with random numbers
+
+ Controller *ctl;
+ int oldpitchwheel,oldbandwidth;
+ REALTYPE globalfiltercenterq;
+
+};
+
+
+
+
+#endif
+