|  | /*
  ZynAddSubFX - a software synthesizer
  PADnote.h - The "pad" 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 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 PAD_NOTE_H
#define PAD_NOTE_H
#include "SynthNote.h"
#include "../globals.h"
#include "../Params/PADnoteParameters.h"
#include "../Params/Controller.h"
#include "Envelope.h"
#include "LFO.h"
#include "../Params/Controller.h"
/**The "pad" synthesizer*/
class PADnote:public SynthNote
{
    public:
        PADnote(PADnoteParameters *parameters,
                Controller *ctl_,
                float freq,
                float velocity,
                int portamento_,
                int midinote,
                bool besilent);
        ~PADnote();
        void legatonote(float freq, float velocity, int portamento_,
                        int midinote, bool externcall);
        int noteout(float *outl, float *outr);
        int finished() const;
        void relasekey();
    private:
        void setup(float freq, float velocity, int portamento_,
                   int midinote, bool legato = false);
        void fadein(float *smps);
        void computecurrentparameters();
        bool finished_;
        PADnoteParameters *pars;
        int   poshi_l, poshi_r;
        float poslo;
        float basefreq;
        bool  firsttime, released;
        int nsample, portamento;
        int Compute_Linear(float *outl,
                           float *outr,
                           int freqhi,
                           float freqlo);
        int Compute_Cubic(float *outl,
                          float *outr,
                          int freqhi,
                          float freqlo);
        struct {
            /******************************************
            *     FREQUENCY GLOBAL PARAMETERS        *
            ******************************************/
            float Detune;  //cents
            Envelope *FreqEnvelope;
            LFO      *FreqLfo;
            /********************************************
             *     AMPLITUDE GLOBAL PARAMETERS          *
             ********************************************/
            float Volume;  // [ 0 .. 1 ]
            float Panning;  // [ 0 .. 1 ]
            Envelope *AmpEnvelope;
            LFO      *AmpLfo;
            struct {
                int   Enabled;
                float initialvalue, dt, t;
            } Punch;
            /******************************************
            *        FILTER GLOBAL PARAMETERS        *
            ******************************************/
            class Filter * GlobalFilterL, *GlobalFilterR;
            float FilterCenterPitch;  //octaves
            float FilterQ;
            float FilterFreqTracking;
            Envelope *FilterEnvelope;
            LFO *FilterLfo;
        } NoteGlobalPar;
        float globaloldamplitude, globalnewamplitude, velocity, realfreq;
        Controller *ctl;
};
#endif
 |