view devuvuzelator-vst.h @ 17:a30554ea74a3

* Makefile for OS/X UB
author Chris Cannam
date Fri, 18 Jun 2010 11:16:37 +0100
parents a1539d4e3b08
children
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

#ifndef _DEVUVUZELATOR_VST_H_
#define _DEVUVUZELATOR_VST_H_

#include "public.sdk/source/vst2.x/audioeffect.h"
#include "median.h"

class Devuvuzelator : public AudioEffect
{
    enum {
        FundamentalParam = 0,
        BandwidthParam = 1,
        HarmonicsParam = 2,
        ReductionParam = 3,
        NumParams      = 4
    };

public:
    Devuvuzelator(audioMasterCallback cb);
    ~Devuvuzelator();

    virtual void getEffectName(char *n) {
        vst_strncpy(n, "Devuvuzelator", kVstMaxEffectNameLen);
    }
    virtual void getProductString(char *n) {
        vst_strncpy(n, "Devuvuzelator", kVstMaxProductStrLen);
    }
    virtual void getVendorString(char *n) {
        vst_strncpy(n, "Queen Mary, University of London", kVstMaxVendorStrLen);
    }

    virtual void setParameter(VstInt32 index, float value);
    virtual float getParameter(VstInt32 index);
    virtual void getParameterLabel(VstInt32 index, char* label);
    virtual void getParameterDisplay(VstInt32 index, char* text);
    virtual void getParameterName(VstInt32 index, char* text);
    
    virtual void setSampleRate (float sampleRate) {
        m_sampleRate = sampleRate;
        AudioEffect::setSampleRate(sampleRate);
    }

    virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) {
        m_input = inputs[0];
        m_output = outputs[0];
        runImpl(sampleFrames);
    }

    void reset();
    void window(float *);
    void runImpl(unsigned long);
    void processFrame();
    void processSpectralFrame();

    static void fft(unsigned int n, bool inverse,
                    double *ri, double *ii, double *ro, double *io);

    float m_sampleRate;
    float *m_input;
    float *m_output;

    float m_fundamental;
    float m_bandwidth;
    int m_harmonics;
    float m_reduction;

    const int m_fftsize;
    const int m_winsize;
    const int m_increment;
    const float m_filtersecs;
    int m_fill;
    int m_read;
    float *m_buffer;
    float *m_outacc;
    double *m_frame;
    double *m_spare;
    double *m_real;
    double *m_imag;
    double *m_window;
    MedianFilter<double> **m_medians;
};

#endif