/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2015 - ROLI Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE 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. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ #include "../JuceLibraryCode/JuceHeader.h" #include "../../GenericEditor.h" //============================================================================== /** */ class GainProcessor : public AudioProcessor { public: //============================================================================== GainProcessor() { addParameter (gain = new AudioParameterFloat ("gain", "Gain", 0.0f, 1.0f, 0.5f)); // Some VST-2 DAWs want the maximum amount of channels to be enabled by default if (wrapperType == wrapperType_VST) { busArrangement.inputBuses. getReference (0).channels = AudioChannelSet::discreteChannels (kVST2MaxChannels); busArrangement.outputBuses.getReference (0).channels = AudioChannelSet::discreteChannels (kVST2MaxChannels); } } ~GainProcessor() {} //============================================================================== void prepareToPlay (double, int) override {} void releaseResources() override {} void processBlock (AudioSampleBuffer& buffer, MidiBuffer&) override { buffer.applyGain (*gain); } //============================================================================== AudioProcessorEditor* createEditor() override { return new GenericEditor (*this); } bool hasEditor() const override { return true; } //============================================================================== const String getName() const override { return "Gain PlugIn"; } bool acceptsMidi() const override { return false; } bool producesMidi() const override { return false; } double getTailLengthSeconds() const override { return 0; } //============================================================================== int getNumPrograms() override { return 1; } int getCurrentProgram() override { return 0; } void setCurrentProgram (int) override {} const String getProgramName (int) override { return String(); } void changeProgramName (int , const String& ) override { } //============================================================================== void getStateInformation (MemoryBlock& destData) override { MemoryOutputStream (destData, true).writeFloat (*gain); } void setStateInformation (const void* data, int sizeInBytes) override { gain->setValueNotifyingHost (MemoryInputStream (data, static_cast (sizeInBytes), false).readFloat()); } //============================================================================== bool setPreferredBusArrangement (bool isInputBus, int busIndex, const AudioChannelSet& preferred) override { const int numChannels = preferred.size(); // do not allow disabling channels if (numChannels == 0) return false; // limit the amount of channels for VST-2 if (wrapperType == wrapperType_VST && numChannels > kVST2MaxChannels) return false; // always have the same channel layout on both input and output on the main bus if (! AudioProcessor::setPreferredBusArrangement (! isInputBus, busIndex, preferred)) return false; return AudioProcessor::setPreferredBusArrangement (isInputBus, busIndex, preferred); } private: //============================================================================== AudioParameterFloat* gain; enum { kVST2MaxChannels = 16 }; //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GainProcessor) }; //============================================================================== // This creates new instances of the plugin.. AudioProcessor* JUCE_CALLTYPE createPluginFilter() { return new GainProcessor(); }