#include "PluginProcessor.h" #include "PluginEditor.h" //============================================================================== CMLSProjectAudioProcessor::CMLSProjectAudioProcessor() #ifndef JucePlugin_PreferredChannelConfigurations : AudioProcessor(BusesProperties() #if ! JucePlugin_IsMidiEffect #if ! JucePlugin_IsSynth .withInput("Input", juce::AudioChannelSet::stereo(), true) #endif .withOutput("Output", juce::AudioChannelSet::stereo(), true) #endif ) #endif { // chaining the effects this->processorChain.reset(); } CMLSProjectAudioProcessor::~CMLSProjectAudioProcessor() {} //============================================================================== const juce::String CMLSProjectAudioProcessor::getName() const { return JucePlugin_Name; } bool CMLSProjectAudioProcessor::acceptsMidi() const { #if JucePlugin_WantsMidiInput return true; #else return false; #endif } bool CMLSProjectAudioProcessor::producesMidi() const { #if JucePlugin_ProducesMidiOutput return true; #else return false; #endif } bool CMLSProjectAudioProcessor::isMidiEffect() const { #if JucePlugin_IsMidiEffect return true; #else return false; #endif } double CMLSProjectAudioProcessor::getTailLengthSeconds() const { return 0.0; } int CMLSProjectAudioProcessor::getNumPrograms() { return 1; } int CMLSProjectAudioProcessor::getCurrentProgram() { return 0; } void CMLSProjectAudioProcessor::setCurrentProgram(int index) {} const juce::String CMLSProjectAudioProcessor::getProgramName(int index) { return {}; } void CMLSProjectAudioProcessor::changeProgramName(int index, const juce::String& newName) {} //============================================================================== void CMLSProjectAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) { // the place to do any pre-playback & initialisation juce::dsp::ProcessSpec spec; spec.sampleRate = sampleRate; spec.maximumBlockSize = samplesPerBlock; spec.numChannels = getTotalNumOutputChannels(); this->processorChain.prepare(spec); } void CMLSProjectAudioProcessor::releaseResources() {} #ifndef JucePlugin_PreferredChannelConfigurations bool CMLSProjectAudioProcessor::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. 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 } #endif void CMLSProjectAudioProcessor::processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer& midiMessages) { juce::ScopedNoDenormals noDenormals; auto totalNumInputChannels = getTotalNumInputChannels(); auto totalNumOutputChannels = getTotalNumOutputChannels(); for (int i = totalNumInputChannels; i < totalNumOutputChannels; ++i) buffer.clear(i, 0, buffer.getNumSamples()); // clear any output channels that don't have input data const auto numChannels = juce::jmax(totalNumInputChannels, totalNumOutputChannels); auto audioBlock = juce::dsp::AudioBlock(buffer).getSubsetChannelBlock(0, (int)numChannels); auto context = juce::dsp::ProcessContextReplacing(audioBlock); this->processorChain.process(context); } //============================================================================== bool CMLSProjectAudioProcessor::hasEditor() const { return true; } juce::AudioProcessorEditor* CMLSProjectAudioProcessor::createEditor() { return new CMLSProjectAudioProcessorEditor(*this); } //============================================================================== void CMLSProjectAudioProcessor::getStateInformation(juce::MemoryBlock& destData) { } void CMLSProjectAudioProcessor::setStateInformation(const void* data, int sizeInBytes) { } //============================================================================== void CMLSProjectAudioProcessor::setEqLowGain(float value) { auto& instance = this->processorChain.template get<0>(); instance.setEqLowGain(value); } void CMLSProjectAudioProcessor::setEqHighGain(float value) { auto& instance = this->processorChain.template get<0>(); instance.setEqHighGain(value); } void CMLSProjectAudioProcessor::setDistortionDrive(float value) { auto& instance = this->processorChain.template get<1>(); instance.setDrive(value); } void CMLSProjectAudioProcessor::setDistortionMix(float value) { auto& instance = this->processorChain.template get<1>(); instance.setMix(value); } //============================================================================== // This creates new instances of the plugin. juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() { return new CMLSProjectAudioProcessor(); }