diff DPF-Prymula-audioplugins/dpf/distrho/src/DistrhoPlugin.cpp @ 3:84e66ea83026

DPF-Prymula-audioplugins-0.231015-2
author prymula <prymula76@outlook.com>
date Mon, 16 Oct 2023 21:53:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DPF-Prymula-audioplugins/dpf/distrho/src/DistrhoPlugin.cpp	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,252 @@
+/*
+ * DISTRHO Plugin Framework (DPF)
+ * Copyright (C) 2012-2023 Filipe Coelho <falktx@falktx.com>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any purpose with
+ * or without fee is hereby granted, provided that the above copyright notice and this
+ * permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "DistrhoPluginInternal.hpp"
+
+START_NAMESPACE_DISTRHO
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Static data, see DistrhoPluginInternal.hpp */
+
+uint32_t    d_nextBufferSize = 0;
+double      d_nextSampleRate = 0.0;
+const char* d_nextBundlePath = nullptr;
+bool        d_nextPluginIsDummy = false;
+bool        d_nextPluginIsSelfTest = false;
+bool        d_nextCanRequestParameterValueChanges = false;
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Static fallback data, see DistrhoPluginInternal.hpp */
+
+const String                     PluginExporter::sFallbackString;
+/* */ AudioPortWithBusId         PluginExporter::sFallbackAudioPort;
+const ParameterRanges            PluginExporter::sFallbackRanges;
+const ParameterEnumerationValues PluginExporter::sFallbackEnumValues;
+const PortGroupWithId            PluginExporter::sFallbackPortGroup;
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Plugin */
+
+Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCount)
+    : pData(new PrivateData())
+{
+   #if DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS > 0
+    pData->audioPorts = new AudioPortWithBusId[DISTRHO_PLUGIN_NUM_INPUTS+DISTRHO_PLUGIN_NUM_OUTPUTS];
+   #endif
+
+   #if defined(DPF_ABORT_ON_ERROR) || defined(DPF_RUNTIME_TESTING)
+    #define DPF_ABORT abort();
+   #else
+    #define DPF_ABORT
+   #endif
+
+    if (parameterCount > 0)
+    {
+        pData->parameterCount = parameterCount;
+        pData->parameters = new Parameter[parameterCount];
+    }
+
+    if (programCount > 0)
+    {
+       #if DISTRHO_PLUGIN_WANT_PROGRAMS
+        pData->programCount = programCount;
+        pData->programNames = new String[programCount];
+       #else
+        d_stderr2("DPF warning: Plugins with programs must define `DISTRHO_PLUGIN_WANT_PROGRAMS` to 1");
+        DPF_ABORT
+       #endif
+    }
+
+    if (stateCount > 0)
+    {
+       #if DISTRHO_PLUGIN_WANT_STATE
+        pData->stateCount = stateCount;
+        pData->states = new State[stateCount];
+       #else
+        d_stderr2("DPF warning: Plugins with state must define `DISTRHO_PLUGIN_WANT_STATE` to 1");
+        DPF_ABORT
+       #endif
+    }
+
+    #undef DPF_ABORT
+}
+
+Plugin::~Plugin()
+{
+    delete pData;
+}
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Host state */
+
+uint32_t Plugin::getBufferSize() const noexcept
+{
+    return pData->bufferSize;
+}
+
+double Plugin::getSampleRate() const noexcept
+{
+    return pData->sampleRate;
+}
+
+const char* Plugin::getBundlePath() const noexcept
+{
+    return pData->bundlePath;
+}
+
+bool Plugin::isDummyInstance() const noexcept
+{
+    return pData->isDummy;
+}
+
+bool Plugin::isSelfTestInstance() const noexcept
+{
+    return pData->isSelfTest;
+}
+
+#if DISTRHO_PLUGIN_WANT_TIMEPOS
+const TimePosition& Plugin::getTimePosition() const noexcept
+{
+    return pData->timePosition;
+}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_LATENCY
+void Plugin::setLatency(const uint32_t frames) noexcept
+{
+    pData->latency = frames;
+}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
+bool Plugin::writeMidiEvent(const MidiEvent& midiEvent) noexcept
+{
+    return pData->writeMidiCallback(midiEvent);
+}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST
+bool Plugin::canRequestParameterValueChanges() const noexcept
+{
+    return pData->canRequestParameterValueChanges;
+}
+
+bool Plugin::requestParameterValueChange(const uint32_t index, const float value) noexcept
+{
+    return pData->requestParameterValueChangeCallback(index, value);
+}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_STATE
+bool Plugin::updateStateValue(const char* const key, const char* const value) noexcept
+{
+    return pData->updateStateValueCallback(key, value);
+}
+#endif
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Init */
+
+void Plugin::initAudioPort(bool input, uint32_t index, AudioPort& port)
+{
+    if (port.hints & kAudioPortIsCV)
+    {
+        port.name    = input ? "CV Input " : "CV Output ";
+        port.name   += String(index+1);
+        port.symbol  = input ? "cv_in_" : "cv_out_";
+        port.symbol += String(index+1);
+    }
+    else
+    {
+        port.name    = input ? "Audio Input " : "Audio Output ";
+        port.name   += String(index+1);
+        port.symbol  = input ? "audio_in_" : "audio_out_";
+        port.symbol += String(index+1);
+    }
+}
+
+void Plugin::initParameter(uint32_t, Parameter&) {}
+
+void Plugin::initPortGroup(const uint32_t groupId, PortGroup& portGroup)
+{
+    fillInPredefinedPortGroupData(groupId, portGroup);
+}
+
+#if DISTRHO_PLUGIN_WANT_PROGRAMS
+void Plugin::initProgramName(uint32_t, String&) {}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_STATE
+void Plugin::initState(const uint32_t index, State& state)
+{
+    uint hints = 0x0;
+    String stateKey, defaultStateValue;
+
+   #if defined(_MSC_VER)
+    #pragma warning(push)
+    #pragma warning(disable:4996)
+   #elif defined(__clang__)
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+   #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+    #pragma GCC diagnostic push
+    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+   #endif
+    initState(index, stateKey, defaultStateValue);
+    if (isStateFile(index))
+        hints = kStateIsFilenamePath;
+   #if defined(_MSC_VER)
+    #pragma warning(pop)
+   #elif defined(__clang__)
+    #pragma clang diagnostic pop
+   #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+    #pragma GCC diagnostic pop
+   #endif
+
+    state.hints = hints;
+    state.key = stateKey;
+    state.label = stateKey;
+    state.defaultValue = defaultStateValue;
+}
+#endif
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Init */
+
+float Plugin::getParameterValue(uint32_t) const { return 0.0f; }
+void Plugin::setParameterValue(uint32_t, float) {}
+
+#if DISTRHO_PLUGIN_WANT_PROGRAMS
+void Plugin::loadProgram(uint32_t) {}
+#endif
+
+#if DISTRHO_PLUGIN_WANT_FULL_STATE
+String Plugin::getState(const char*) const { return String(); }
+#endif
+
+#if DISTRHO_PLUGIN_WANT_STATE
+void Plugin::setState(const char*, const char*) {}
+#endif
+
+/* ------------------------------------------------------------------------------------------------------------
+ * Callbacks (optional) */
+
+void Plugin::bufferSizeChanged(uint32_t) {}
+void Plugin::sampleRateChanged(double) {}
+
+// -----------------------------------------------------------------------------------------------------------
+
+END_NAMESPACE_DISTRHO