Cardinal/plugins/Cardinal/src/plugin.hpp
falkTX 5e73b8c227
More mini details, fake audio runs, set host param values
Signed-off-by: falkTX <falktx@falktx.com>
2022-12-29 23:58:16 +00:00

114 lines
2.7 KiB
C++

/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2022 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.
*/
#pragma once
#include "rack.hpp"
#include "engine/TerminalModule.hpp"
#ifdef NDEBUG
# undef DEBUG
#endif
using namespace rack;
extern Plugin* pluginInstance;
extern Model* modelAudioFile;
extern Model* modelAudioToCVPitch;
extern Model* modelCarla;
extern Model* modelCardinalBlank;
extern Model* modelExpanderInputMIDI;
extern Model* modelExpanderOutputMIDI;
extern Model* modelGlBars;
extern Model* modelHostAudio2;
extern Model* modelHostAudio8;
extern Model* modelHostCV;
extern Model* modelHostMIDI;
extern Model* modelHostMIDICC;
extern Model* modelHostMIDIGate;
extern Model* modelHostMIDIMap;
extern Model* modelHostParameters;
extern Model* modelHostParametersMap;
extern Model* modelHostTime;
extern Model* modelIldaeil;
extern Model* modelMPV;
extern Model* modelSassyScope;
extern Model* modelTextEditor;
extern std::vector<Model*> hostTerminalModels;
/*
* Find the highest absolute and normalized value within a float array.
*/
template<std::size_t size>
static inline
float d_findMaxNormalizedFloat(const float floats[size])
{
static constexpr const float kEmptyFloats[size] = {};
if (std::memcmp(floats, kEmptyFloats, sizeof(float)*size) == 0)
return 0.f;
float tmp, maxf2 = std::abs(floats[0]);
for (std::size_t i=1; i<size; ++i)
{
if (!std::isfinite(floats[i]))
__builtin_unreachable();
tmp = std::abs(floats[i]);
if (tmp > maxf2)
maxf2 = tmp;
}
if (maxf2 > 1.f)
maxf2 = 1.f;
return maxf2;
}
/*
* Find the highest absolute and normalized value within a float array.
*/
static inline
float d_findMaxNormalizedFloat128(const float floats[128])
{
static constexpr const float kEmptyFloats[128] = {};
if (std::memcmp(floats, kEmptyFloats, sizeof(float)*128) == 0)
return 0.f;
float tmp, maxf2 = std::abs(floats[0]);
for (std::size_t i=1; i<128; ++i)
{
if (!std::isfinite(floats[i]))
__builtin_unreachable();
tmp = std::abs(floats[i]);
if (tmp > maxf2)
maxf2 = tmp;
}
if (maxf2 > 1.f)
maxf2 = 1.f;
return maxf2;
}