Mercurial > hg > audio_effects_textbook_code
diff effects/tremolo/Source/PluginProcessor.h @ 0:e32fe563e124
First commit
author | Andrew McPherson <andrewm@eecs.qmul.ac.uk> |
---|---|
date | Fri, 10 Oct 2014 15:41:23 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/effects/tremolo/Source/PluginProcessor.h Fri Oct 10 15:41:23 2014 +0100 @@ -0,0 +1,130 @@ +/* + This code accompanies the textbook: + + Digital Audio Effects: Theory, Implementation and Application + Joshua D. Reiss and Andrew P. McPherson + + --- + + Tremolo: amplitude modulation using a low-frequency oscillator + See textbook Chapter 5: Amplitude Modulation + + Code by Andrew McPherson, Brecht De Man and Joshua Reiss + + --- + + 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 3 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, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __PLUGINPROCESSOR_H_4693CB6E__ +#define __PLUGINPROCESSOR_H_4693CB6E__ + +#define _USE_MATH_DEFINES +#include "../JuceLibraryCode/JuceHeader.h" + + +//============================================================================== +/** +*/ +class TremoloAudioProcessor : public AudioProcessor +{ +public: + //============================================================================== + TremoloAudioProcessor(); + ~TremoloAudioProcessor(); + + //============================================================================== + void prepareToPlay (double sampleRate, int samplesPerBlock); + void releaseResources(); + void reset(); + void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages); + + + //============================================================================== + AudioProcessorEditor* createEditor(); + bool hasEditor() const; + + //============================================================================== + const String getName() const; + + int getNumParameters(); + + float getParameter (int index); + void setParameter (int index, float newValue); + + const String getParameterName (int index); + const String getParameterText (int index); + + const String getInputChannelName (int channelIndex) const; + const String getOutputChannelName (int channelIndex) const; + bool isInputChannelStereoPair (int index) const; + bool isOutputChannelStereoPair (int index) const; + + bool silenceInProducesSilenceOut() const; + double getTailLengthSeconds() const; + bool acceptsMidi() const; + bool producesMidi() const; + + //============================================================================== + int getNumPrograms(); + int getCurrentProgram(); + void setCurrentProgram (int index); + const String getProgramName (int index); + void changeProgramName (int index, const String& newName); + + //============================================================================== + void getStateInformation (MemoryBlock& destData); + void setStateInformation (const void* data, int sizeInBytes); + + //============================================================================== + + // these are used to persist the UI's size - the values are stored along with the + // filter's other parameters, and the UI component will update them when it gets + // resized. + int lastUIWidth_, lastUIHeight_; + + enum Parameters + { + kFrequencyParam, + kDepthParam, + kWaveformParam, + kNumParameters + }; + + enum Waveforms + { + kWaveformSine = 1, + kWaveformTriangle, + kWaveformSquare, + kWaveformSquareSlopedEdges, + kNumWaveforms + }; + + // Adjustable parameters: + float frequency_; // LFO frequency (Hz) + float depth_; // Depth of effect (0-1) + int waveform_; // What shape should be used for the LFO + +private: + float lfo(float phase, int waveform); + + float lfoPhase_; // Phase of the low-frequency oscillator + double inverseSampleRate_; // It's more efficient to multiply than divide, so + // cache the inverse of the sample rate + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TremoloAudioProcessor); +}; + +#endif // __PLUGINPROCESSOR_H_4693CB6E__