andrewm@0: /* andrewm@0: This code accompanies the textbook: andrewm@0: andrewm@0: Digital Audio Effects: Theory, Implementation and Application andrewm@0: Joshua D. Reiss and Andrew P. McPherson andrewm@0: andrewm@0: --- andrewm@0: andrewm@0: Compressor: dynamic range compression effect andrewm@0: See textbook Chapter 6: Dynamics Processing andrewm@0: andrewm@0: Code by Joshua Reiss, Brecht de Man and Andrew McPherson andrewm@0: andrewm@0: --- andrewm@0: andrewm@0: This program is free software: you can redistribute it and/or modify andrewm@0: it under the terms of the GNU General Public License as published by andrewm@0: the Free Software Foundation, either version 3 of the License, or andrewm@0: (at your option) any later version. andrewm@0: andrewm@0: This program is distributed in the hope that it will be useful, andrewm@0: but WITHOUT ANY WARRANTY; without even the implied warranty of andrewm@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the andrewm@0: GNU General Public License for more details. andrewm@0: andrewm@0: You should have received a copy of the GNU General Public License andrewm@0: along with this program. If not, see . andrewm@0: */ andrewm@0: andrewm@0: #ifndef __PLUGINPROCESSOR_H_88534BAA__ andrewm@0: #define __PLUGINPROCESSOR_H_88534BAA__ andrewm@0: andrewm@0: #include "../JuceLibraryCode/JuceHeader.h" andrewm@0: #include andrewm@0: class CompressorAudioProcessor : public AudioProcessor andrewm@0: { andrewm@0: public: andrewm@0: CompressorAudioProcessor(); andrewm@0: ~CompressorAudioProcessor(); andrewm@0: andrewm@0: int bufferSize; andrewm@0: andrewm@0: void prepareToPlay (double sampleRate, int samplesPerBlock); andrewm@0: void releaseResources(); andrewm@0: void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages); andrewm@0: andrewm@0: void compressor(AudioSampleBuffer &buffer, int m);// compressor functions andrewm@0: andrewm@0: template const T& max ( const T& a, const T& b ); andrewm@0: andrewm@0: AudioProcessorEditor* createEditor(); andrewm@0: andrewm@0: bool hasEditor() const; andrewm@0: andrewm@0: AudioPlayHead::CurrentPositionInfo lastPosInfo; andrewm@0: andrewm@0: int round(float inn); andrewm@0: const String getName() const; andrewm@0: andrewm@0: int getNumParameters(); andrewm@0: andrewm@0: float getParameter (int index); andrewm@0: void setParameter (int index, float newValue); andrewm@0: andrewm@0: const String getParameterName (int index); andrewm@0: const String getParameterText (int index); andrewm@0: andrewm@0: const String getInputChannelName (int channelIndex) const; andrewm@0: const String getOutputChannelName (int channelIndex) const; andrewm@0: bool isInputChannelStereoPair (int index) const; andrewm@0: bool isOutputChannelStereoPair (int index) const; andrewm@0: andrewm@0: bool silenceInProducesSilenceOut() const; andrewm@0: double getTailLengthSeconds() const; andrewm@0: bool acceptsMidi() const; andrewm@0: bool producesMidi() const; andrewm@0: andrewm@0: int getNumPrograms(); andrewm@0: int getCurrentProgram(); andrewm@0: void setCurrentProgram (int index); andrewm@0: const String getProgramName (int index); andrewm@0: void changeProgramName (int index, const String& newName); andrewm@0: andrewm@0: //============================================================================== andrewm@0: void getStateInformation (MemoryBlock& destData); andrewm@0: void setStateInformation (const void* data, int sizeInBytes); andrewm@0: andrewm@0: float getThreshold(); andrewm@0: float getRatio(); andrewm@0: float getGain(); andrewm@0: float getAttackTime(); andrewm@0: float getReleaseTime(); andrewm@0: void setThreshold(float T); andrewm@0: void setGain(float G); andrewm@0: void setRatio(float R); andrewm@0: void setAttackTime(float A); andrewm@0: void setReleaseTime(float R); andrewm@0: void resetAll(); andrewm@0: andrewm@0: // parameters andrewm@0: andrewm@0: bool compressorONOFF; andrewm@0: int M; andrewm@0: bool autoTime; andrewm@0: andrewm@0: private: andrewm@0: AudioSampleBuffer inputBuffer; andrewm@0: andrewm@0: // int bufferSize; andrewm@0: //these are used to persist UI's size- values are stored along with filter's other parameters, and UI component will update them when it gets resized. andrewm@0: int lastUIWidth, lastUIHeight; andrewm@0: andrewm@0: HeapBlock x_g, x_l,y_g, y_l,c;// input, output, control andrewm@0: // parameters andrewm@0: float ratio,threshold,makeUpGain,tauAttack,tauRelease,alphaAttack,alphaRelease,yL_prev; andrewm@0: int nhost; andrewm@0: int samplerate; andrewm@0: andrewm@0: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CompressorAudioProcessor); andrewm@0: }; andrewm@0: andrewm@0: #endif // __PLUGINPROCESSOR_H_88534BAA__