| 
							- /*
 -   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 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.
 - */
 - #ifndef SYNTH_NOTE_H
 - #define SYNTH_NOTE_H
 - #include "../globals.h"
 - 
 - class Allocator;
 - class Controller;
 - struct SynthParams
 - {
 -     Allocator &memory;   //Memory Allocator for the Note to use
 -     const Controller &ctl;
 -     const SYNTH_T    &synth;
 -     const AbsTime    &time;
 -     float     frequency; //Note base frequency
 -     float     velocity;  //Velocity of the Note
 -     bool      portamento;//True if portamento is used for this note
 -     int       note;      //Integer value of the note
 -     bool      quiet;     //Initial output condition for legato notes
 - };
 - 
 - struct LegatoParams
 - {
 -     float frequency;
 -     float velocity;
 -     bool portamento;
 -     int midinote;
 -     bool externcall;
 - };
 - 
 - class SynthNote
 - {
 -     public:
 -         SynthNote(SynthParams &pars);
 -         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 releasekey() = 0;
 - 
 -         /**Return if note is finished.
 -          * @return finished=1 unfinished=0*/
 -         virtual bool finished() const = 0;
 - 
 -         /**Make a note die off next buffer compute*/
 -         virtual void entomb(void) = 0;
 - 
 -         virtual void legatonote(LegatoParams pars) = 0;
 - 
 -         virtual SynthNote *cloneLegato(void) = 0;
 - 
 -         /* For polyphonic aftertouch needed */
 -         void setVelocity(float velocity_);
 - 
 -         //Realtime Safe Memory Allocator For notes
 -         class Allocator  &memory;
 -     protected:
 -         // Legato transitions
 -         class Legato
 -         {
 -             public:
 -                 Legato(const SYNTH_T &synth_, float freq, float vel, int port,
 -                        int note, bool quiet);
 - 
 -                 void apply(SynthNote ¬e, float *outl, float *outr);
 -                 int update(LegatoParams pars);
 - 
 -             private:
 -                 bool      silent;
 -                 float     lastfreq;
 -                 LegatoMsg msg;
 -                 int       decounter;
 -                 struct { // Fade In/Out vars
 -                     int   length;
 -                     float m, step;
 -                 } fade;
 -             public:
 -                 struct { // Note parameters
 -                     float freq, vel;
 -                     bool  portamento;
 -                     int   midinote;
 -                 } param;
 -                 const SYNTH_T &synth;
 - 
 -             public: /* Some get routines for legatonote calls (aftertouch feature)*/
 -                 float getFreq() {return param.freq; }
 -                 float getVelocity() {return param.vel; }
 -                 bool  getPortamento() {return param.portamento; }
 -                 int getMidinote() {return param.midinote; }
 -                 void setSilent(bool silent_) {silent = silent_; }
 -                 void setDecounter(int decounter_) {decounter = decounter_; }
 -         } legato;
 - 
 -         const Controller &ctl;
 -         const SYNTH_T    &synth;
 -         const AbsTime    &time;
 -         WatchManager     *wm;
 - };
 - 
 - #endif
 
 
  |