aboutsummaryrefslogtreecommitdiff
path: root/src/PluginProcessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/PluginProcessor.cpp')
-rw-r--r--src/PluginProcessor.cpp188
1 files changed, 188 insertions, 0 deletions
diff --git a/src/PluginProcessor.cpp b/src/PluginProcessor.cpp
new file mode 100644
index 0000000..825d31a
--- /dev/null
+++ b/src/PluginProcessor.cpp
@@ -0,0 +1,188 @@
+#include "PluginProcessor.h"
+#include "UI/PluginEditor.h"
+
+//==============================================================================
+SchroederReverbAudioProcessor::SchroederReverbAudioProcessor()
+ : AudioProcessor (BusesProperties()
+ #if ! JucePlugin_IsMidiEffect
+ #if ! JucePlugin_IsSynth
+ .withInput ("Input", juce::AudioChannelSet::stereo(), true)
+ #endif
+ .withOutput ("Output", juce::AudioChannelSet::stereo(), true)
+ #endif
+ )
+{
+}
+
+SchroederReverbAudioProcessor::~SchroederReverbAudioProcessor()
+{
+}
+
+//==============================================================================
+const juce::String SchroederReverbAudioProcessor::getName() const
+{
+ return JucePlugin_Name;
+}
+
+bool SchroederReverbAudioProcessor::acceptsMidi() const
+{
+ #if JucePlugin_WantsMidiInput
+ return true;
+ #else
+ return false;
+ #endif
+}
+
+bool SchroederReverbAudioProcessor::producesMidi() const
+{
+ #if JucePlugin_ProducesMidiOutput
+ return true;
+ #else
+ return false;
+ #endif
+}
+
+bool SchroederReverbAudioProcessor::isMidiEffect() const
+{
+ #if JucePlugin_IsMidiEffect
+ return true;
+ #else
+ return false;
+ #endif
+}
+
+double SchroederReverbAudioProcessor::getTailLengthSeconds() const
+{
+ return 0.0;
+}
+
+int SchroederReverbAudioProcessor::getNumPrograms()
+{
+ return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs,
+ // so this should be at least 1, even if you're not really implementing programs.
+}
+
+int SchroederReverbAudioProcessor::getCurrentProgram()
+{
+ return 0;
+}
+
+void SchroederReverbAudioProcessor::setCurrentProgram (int index)
+{
+ juce::ignoreUnused (index);
+}
+
+const juce::String SchroederReverbAudioProcessor::getProgramName (int index)
+{
+ juce::ignoreUnused (index);
+ return {};
+}
+
+void SchroederReverbAudioProcessor::changeProgramName (int index, const juce::String& newName)
+{
+ juce::ignoreUnused (index, newName);
+}
+
+//==============================================================================
+void SchroederReverbAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
+{
+ // Use this method as the place to do any pre-playback
+ // initialisation that you need..
+ juce::ignoreUnused (sampleRate, samplesPerBlock);
+}
+
+void SchroederReverbAudioProcessor::releaseResources()
+{
+ // When playback stops, you can use this as an opportunity to free up any
+ // spare memory, etc.
+}
+
+bool SchroederReverbAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
+{
+ #if JucePlugin_IsMidiEffect
+ juce::ignoreUnused (layouts);
+ return true;
+ #else
+ // This is the place where you check if the layout is supported.
+ // In this template code we only support mono or stereo.
+ // Some plugin hosts, such as certain GarageBand versions, will only
+ // load plugins that support stereo bus layouts.
+ if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono()
+ && layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo())
+ return false;
+
+ // This checks if the input layout matches the output layout
+ #if ! JucePlugin_IsSynth
+ if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())
+ return false;
+ #endif
+
+ return true;
+ #endif
+}
+
+void SchroederReverbAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer,
+ juce::MidiBuffer& midiMessages)
+{
+ juce::ignoreUnused (midiMessages);
+
+ juce::ScopedNoDenormals noDenormals;
+ auto totalNumInputChannels = getTotalNumInputChannels();
+ auto totalNumOutputChannels = getTotalNumOutputChannels();
+
+ // In case we have more outputs than inputs, this code clears any output
+ // channels that didn't contain input data, (because these aren't
+ // guaranteed to be empty - they may contain garbage).
+ // This is here to avoid people getting screaming feedback
+ // when they first compile a plugin, but obviously you don't need to keep
+ // this code if your algorithm always overwrites all the output channels.
+ for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i)
+ buffer.clear (i, 0, buffer.getNumSamples());
+
+ // This is the place where you'd normally do the guts of your plugin's
+ // audio processing...
+ // Make sure to reset the state if your inner loop is processing
+ // the samples and the outer loop is handling the channels.
+ // Alternatively, you can process the samples with the channels
+ // interleaved by keeping the same state.
+ for (int channel = 0; channel < totalNumInputChannels; ++channel)
+ {
+ auto* channelData = buffer.getWritePointer (channel);
+ juce::ignoreUnused (channelData);
+ // ..do something to the data...
+ }
+}
+
+//==============================================================================
+bool SchroederReverbAudioProcessor::hasEditor() const
+{
+ return true; // (change this to false if you choose to not supply an editor)
+}
+
+juce::AudioProcessorEditor* SchroederReverbAudioProcessor::createEditor()
+{
+ return new SchroederReverbAudioProcessorEditor (*this);
+}
+
+//==============================================================================
+void SchroederReverbAudioProcessor::getStateInformation (juce::MemoryBlock& destData)
+{
+ // You should use this method to store your parameters in the memory block.
+ // You could do that either as raw data, or use the XML or ValueTree classes
+ // as intermediaries to make it easy to save and load complex data.
+ juce::ignoreUnused (destData);
+}
+
+void SchroederReverbAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
+{
+ // You should use this method to restore your parameters from this memory block,
+ // whose contents will have been created by the getStateInformation() call.
+ juce::ignoreUnused (data, sizeInBytes);
+}
+
+//==============================================================================
+// This creates new instances of the plugin..
+juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
+{
+ return new SchroederReverbAudioProcessor();
+}