|
- /*
- ZynAddSubFX - a software synthesizer
-
- Note.h - Abstract Base Class for synthesizers
- Copyright (C) 2010-2010 Mark McCurry
- Author: 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
- 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 SYNTH_NOTE_H
- #define SYNTH_NOTE_H
- #include "../globals.h"
- #include "../Params/FilterParams.h"
-
- class SynthNote
- {
- public:
- SynthNote(float freq, float vel, int port, int note, bool quiet);
- virtual ~SynthNote() {}
-
- /**Compute Output Samples
- * @return 0 if note is finished*/
- virtual int noteout(float *outl, float *outr) = 0;
-
- //TODO fix this spelling error [noisey commit]
- /**Release the key for the note and start release portion of envelopes.*/
- virtual void relasekey() = 0;
-
- /**Return if note is finished.
- * @return finished=1 unfinished=0*/
- virtual int finished() const = 0;
-
- virtual void legatonote(float freq, float velocity,
- int portamento_, int midinote_,
- bool externcall) = 0;
- /* For polyphonic aftertouch needed */
- void setVelocity(float velocity_);
- protected:
- // Legato transitions
- class Legato
- {
- public:
- Legato(float freq, float vel, int port,
- int note, bool quiet);
-
- void apply(SynthNote ¬e, float *outl, float *outr);
- int update(float freq, float velocity, int portamento_,
- int midinote_, bool externalcall);
-
- private:
- bool silent;
- float lastfreq;
- LegatoMsg msg;
- int decounter;
- struct { // Fade In/Out vars
- int length;
- float m, step;
- } fade;
- struct { // Note parameters
- float freq, vel;
- int portamento, midinote;
- } param;
-
- public: /* Some get routines for legatonote calls (aftertouch feature)*/
- float getFreq() {return param.freq; }
- float getVelocity() {return param.vel; }
- int getPortamento() {return param.portamento; }
- int getMidinote() {return param.midinote; }
- void setSilent(bool silent_) {silent = silent_; }
- void setDecounter(int decounter_) {decounter = decounter_; }
- } legato;
- };
-
- #endif
|