Mercurial > hg > audio_effects_textbook_code
diff effects/pingpongdelay/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/pingpongdelay/Source/PluginProcessor.h Fri Oct 10 15:41:23 2014 +0100 @@ -0,0 +1,124 @@ +/* + This code accompanies the textbook: + + Digital Audio Effects: Theory, Implementation and Application + Joshua D. Reiss and Andrew P. McPherson + + --- + + Ping-Pong Delay: stereo delay alternating between channels + See textbook Chapter 2: Delay Line Effects + + 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__ + +#include "../JuceLibraryCode/JuceHeader.h" + + +//============================================================================== +/** +*/ +class PingPongDelayAudioProcessor : public AudioProcessor +{ +public: + //============================================================================== + PingPongDelayAudioProcessor(); + ~PingPongDelayAudioProcessor(); + + //============================================================================== + 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 + { + kDelayLengthLeftParam = 0, + kDelayLengthRightParam, + kWetMixParam, + kFeedbackParam, + kReverseChannelsParam, + kNumParameters + }; + + // Adjustable parameters: + float delayLengthLeft_; // Length of left->right delay line in seconds + float delayLengthRight_; // Length of right->left delay line in seconds + float wetMix_; // Mix level of delayed signal (0-1) + float feedback_; // Feedback level (0-just less than 1) + bool reverseChannels_; // Whether to reverse the outputs from the delays + +private: + // Circular buffer variables for implementing delay + AudioSampleBuffer delayBuffer_; + int delayBufferLength_; + int delayReadPositionLeft_, delayReadPositionRight_; + int delayWritePosition_; + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PingPongDelayAudioProcessor); +}; + +#endif // __PLUGINPROCESSOR_H_4693CB6E__