210 lines
5.1 KiB
C++
210 lines
5.1 KiB
C++
/*
|
|
* DISTRHO Cardinal Plugin
|
|
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 3 of
|
|
* the License, or any later version.
|
|
*
|
|
* This program 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.
|
|
*
|
|
* For a full copy of the GNU General Public License see the LICENSE file.
|
|
*/
|
|
|
|
#include <juce_audio_processors/juce_audio_processors.h>
|
|
|
|
#include "DistrhoPlugin.hpp"
|
|
#include "DistrhoUI.hpp"
|
|
|
|
DISTRHO_PLUGIN_EXPORT DISTRHO_NAMESPACE::Plugin* createSharedPlugin();
|
|
#define createPlugin ::createSharedPlugin
|
|
#include "src/DistrhoPluginInternal.hpp"
|
|
|
|
START_NAMESPACE_DISTRHO
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
class ParameterForDPF : public juce::AudioProcessorParameter
|
|
{
|
|
PluginExporter& plugin;
|
|
const uint index;
|
|
|
|
public:
|
|
ParameterForDPF(PluginExporter& plugin_, const uint index_)
|
|
: plugin(plugin_),
|
|
index(index_) {}
|
|
|
|
protected:
|
|
float getValue() const override
|
|
{
|
|
return plugin.getParameterRanges(index).getNormalizedValue(plugin.getParameterValue(index));
|
|
}
|
|
|
|
void setValue(const float newValue) override
|
|
{
|
|
plugin.setParameterValue(index, plugin.getParameterRanges(index).getUnnormalizedValue(newValue));
|
|
}
|
|
|
|
float getDefaultValue() const override
|
|
{
|
|
return plugin.getParameterDefault(index);
|
|
}
|
|
|
|
juce::String getName(int) const override
|
|
{
|
|
return plugin.getParameterName(index).buffer();
|
|
}
|
|
|
|
juce::String getLabel() const override
|
|
{
|
|
return plugin.getParameterUnit(index).buffer();
|
|
}
|
|
|
|
float getValueForText(const juce::String& text) const override
|
|
{
|
|
return 0.0f;
|
|
}
|
|
};
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
class CardinalWrapperProcessor : public juce::AudioProcessor
|
|
{
|
|
PluginExporter plugin;
|
|
|
|
static bool writeMidiCb(void* ptr, const MidiEvent& midiEvent)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static bool requestParameterValueChangeCb(void* ptr, uint32_t index, float value)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
public:
|
|
CardinalWrapperProcessor()
|
|
: plugin(this, writeMidiCb, requestParameterValueChangeCb)
|
|
{
|
|
for (uint i=0; i<plugin.getParameterCount(); ++i)
|
|
addParameter(new ParameterForDPF(plugin, i));
|
|
}
|
|
|
|
~CardinalWrapperProcessor() override
|
|
{
|
|
}
|
|
|
|
const juce::String getName() const override
|
|
{
|
|
return plugin.getName();
|
|
}
|
|
|
|
juce::StringArray getAlternateDisplayNames() const override
|
|
{
|
|
return juce::StringArray(plugin.getLabel());
|
|
}
|
|
|
|
void prepareToPlay(double sampleRate, int samplesPerBlock) override
|
|
{
|
|
plugin.deactivateIfNeeded();
|
|
plugin.setSampleRate(sampleRate);
|
|
plugin.setBufferSize(samplesPerBlock);
|
|
plugin.activate();
|
|
}
|
|
|
|
void releaseResources() override
|
|
{
|
|
plugin.deactivateIfNeeded();
|
|
}
|
|
|
|
void processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages) override
|
|
{
|
|
midiMessages.clear();
|
|
// AudioPlayHead* getPlayHead()
|
|
}
|
|
|
|
double getTailLengthSeconds() const override
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool acceptsMidi() const override
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool producesMidi() const override
|
|
{
|
|
return true;
|
|
}
|
|
|
|
juce::AudioProcessorEditor* createEditor() override;
|
|
|
|
bool hasEditor() const override
|
|
{
|
|
return true;
|
|
}
|
|
|
|
int getNumPrograms() override
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int getCurrentProgram() override
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void setCurrentProgram(int) override
|
|
{
|
|
}
|
|
|
|
const juce::String getProgramName(int) override
|
|
{
|
|
return {};
|
|
}
|
|
|
|
void changeProgramName(int, const juce::String&) override
|
|
{
|
|
}
|
|
|
|
void getStateInformation(juce::MemoryBlock& destData) override
|
|
{
|
|
}
|
|
|
|
void setStateInformation(const void* data, int sizeInBytes) override
|
|
{
|
|
}
|
|
};
|
|
|
|
class CardinalWrapperEditor : public juce::AudioProcessorEditor
|
|
{
|
|
public:
|
|
CardinalWrapperEditor(CardinalWrapperProcessor& processor)
|
|
: juce::AudioProcessorEditor(processor)
|
|
{}
|
|
|
|
~CardinalWrapperEditor() override
|
|
{}
|
|
};
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
END_NAMESPACE_DISTRHO
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
juce::AudioProcessor* createPluginFilter()
|
|
{
|
|
return new DISTRHO_NAMESPACE::CardinalWrapperProcessor;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
#define DISTRHO_IS_STANDALONE 0
|
|
#include "src/DistrhoPlugin.cpp"
|
|
#include "src/DistrhoUtils.cpp"
|