/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2017 - ROLI Ltd. JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 5 End-User License Agreement and JUCE 5 Privacy Policy (both updated and effective as of the 27th April 2017). End User License Agreement: www.juce.com/juce-5-licence Privacy Policy: www.juce.com/juce-5-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #include "../JuceLibraryCode/JuceHeader.h" #include "../../GenericEditor.h" //============================================================================== /** */ class GainProcessor : public AudioProcessor { public: //============================================================================== GainProcessor() : AudioProcessor (BusesProperties().withInput ("Input", AudioChannelSet::stereo()) .withOutput ("Output", AudioChannelSet::stereo())) { addParameter (gain = new AudioParameterFloat ("gain", "Gain", 0.0f, 1.0f, 0.5f)); } ~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 isBusesLayoutSupported (const BusesLayout& layouts) const override { const AudioChannelSet& mainInLayout = layouts.getChannelSet (true, 0); const AudioChannelSet& mainOutLayout = layouts.getChannelSet (false, 0); return (mainInLayout == mainOutLayout && (! mainInLayout.isDisabled())); } 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(); }