/*
  Copyright (C) 2003 Fons Adriaensen
    
  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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/


#ifndef __VCOSAWPULSE_H
#define __VCOSAWPULSE_H

#include "ladspaplugin.h"


class Ladspa_VCO_pulse1 : public LadspaPlugin
{
public:

    enum { NPHASE = 8, NCOEFF = 12, FILLEN = 256 };
    enum { OUTP, FREQ, EXPM, LINM, OCTN, TUNE, EXPG, LING, FILT, NPORT };

    Ladspa_VCO_pulse1 (SampleRate fsam) : LadspaPlugin (fsam) {}
    virtual void setport (PortIndex port, PortData *data);  
    virtual void active  (bool act);  
    virtual void runproc (SampleCount len, bool add);
    virtual ~Ladspa_VCO_pulse1 (void) {}  

private:

    float   *_port [NPORT];
    float   _p, _w, _y, _z;
    float   _f [FILLEN + NCOEFF];
    int     _j;
};


class Ladspa_VCO_saw1 : public LadspaPlugin
{
public:

    enum { NPHASE = 8, NCOEFF = 12, FILLEN = 256 };
    enum { OUTP, FREQ, EXPM, LINM, SYNC, OCTN, TUNE, EXPG, LING, FILT, NPORT };

    Ladspa_VCO_saw1 (SampleRate fsam) : LadspaPlugin (fsam) {}
    virtual void setport (PortIndex port, PortData *data);  
    virtual void active  (bool act);  
    virtual void runproc (SampleCount len, bool add);
    virtual ~Ladspa_VCO_saw1 (void) {}  

private:

    float   *_port [NPORT];
    float   _p, _w, _x, _y, _z, _d;
    float   _f [FILLEN + NCOEFF];
    int     _j;
};


class Ladspa_VCO_rec1 : public LadspaPlugin
{
public:

    enum { NPHASE = 8, NCOEFF = 12, FILLEN = 256 };
    enum { OUTP, FREQ, EXPM, LINM, WAVM, SYNC, OCTN, TUNE, EXPG, LING, WAVE, WMOD, FILT, NPORT };

    Ladspa_VCO_rec1 (SampleRate fsam) : LadspaPlugin (fsam) {}
    virtual void setport (PortIndex port, PortData *data);  
    virtual void active  (bool act);  
    virtual void runproc (SampleCount len, bool add);
    virtual ~Ladspa_VCO_rec1 (void) {}  

private:

    float   *_port [NPORT];
    float   _p, _w, _b, _x, _y, _z, _d;
    float   _f [FILLEN + NCOEFF];
    int     _j, _k;
};


#endif