#include "PluginProcessor.h" #include "PluginEditor.h" #include "xmmintrin.h" ReFinedAudioProcessor::ReFinedAudioProcessor() { parameters = new AudioProcessorValueTreeState(*this, nullptr); parameters->createAndAddParameter("red", "red", "", NormalisableRange(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); }); parameters->createAndAddParameter("green", "green", "", NormalisableRange(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); }); parameters->createAndAddParameter("blue", "blue", "", NormalisableRange(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); }); parameters->createAndAddParameter("x2", "x2", "", NormalisableRange(0.f, 1.f), 0.f, [](float val) { return val < 0.5f ? "Off" : "On"; }, [](const String& s) { return s.trim() == "1" || s.trim().toLowerCase() == "on" ? 1.f : 0.f; }); } ReFinedAudioProcessor::~ReFinedAudioProcessor() { } const String ReFinedAudioProcessor::getName() const { return JucePlugin_Name; } bool ReFinedAudioProcessor::acceptsMidi() const { return false; } bool ReFinedAudioProcessor::producesMidi() const { return false; } double ReFinedAudioProcessor::getTailLengthSeconds() const { return 0.0; } int ReFinedAudioProcessor::getNumPrograms() { return 1; } int ReFinedAudioProcessor::getCurrentProgram() { return 0; } void ReFinedAudioProcessor::setCurrentProgram (int /*index*/) { } const String ReFinedAudioProcessor::getProgramName (int /*index*/) { return String(); } void ReFinedAudioProcessor::changeProgramName (int /*index*/, const String& /*newName*/) { } void ReFinedAudioProcessor::prepareToPlay (double newSampleRate, int /*samplesPerBlock*/) { dsp.setSampleRate(newSampleRate); } void ReFinedAudioProcessor::releaseResources() { } void ReFinedAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffer& /*midiMessages*/) { { const float low = parameters->getParameter("red")->getValue(); const float mid = parameters->getParameter("green")->getValue(); const float high = parameters->getParameter("blue")->getValue(); const float x2mode = parameters->getParameter("x2")->getValue(); dsp.setLow(0.9f * low + 0.05f * mid + 0.05f * high); dsp.setMid(0.9f * mid + 0.05f * high + 0.05f * low); dsp.setHigh(0.9f * high + 0.05f * low + 0.05f * mid); dsp.setX2Mode(x2mode > 0.5f); } const int numChannels = buffer.getNumChannels(); const int numSamples = buffer.getNumSamples(); float* chL = buffer.getWritePointer(0); float* chR = numChannels > 1 ? buffer.getWritePointer(1) : nullptr; dsp.processBlock(chL, chR, numSamples); } bool ReFinedAudioProcessor::hasEditor() const { return true; } AudioProcessorEditor* ReFinedAudioProcessor::createEditor() { return new ReFinedAudioProcessorEditor (*this); } void ReFinedAudioProcessor::getStateInformation (MemoryBlock& destData) { XmlElement xml("REFINED"); for (int i = 0; i < getNumParameters(); ++i) xml.setAttribute(getParameterName(i), getParameter(i)); copyXmlToBinary(xml, destData); } void ReFinedAudioProcessor::setStateInformation (const void* data, int sizeInBytes) { ScopedPointer xml(getXmlFromBinary(data, sizeInBytes)); if (xml != nullptr) { for (int i = 0; i < getNumParameters(); ++i) setParameterNotifyingHost(i, (float) xml->getDoubleAttribute(getParameterName(i), getParameter(i))); } } AudioProcessor* JUCE_CALLTYPE createPluginFilter() { return new ReFinedAudioProcessor(); }