Browse Source

Make NanoMeter usable for generic things

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.02
falkTX 3 years ago
parent
commit
96c64ba7a9
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
4 changed files with 42 additions and 33 deletions
  1. +6
    -31
      plugins/Cardinal/src/HostAudio.cpp
  2. +1
    -1
      plugins/Cardinal/src/ModuleWidgets.hpp
  3. +5
    -1
      plugins/Cardinal/src/Widgets.hpp
  4. +30
    -0
      plugins/Cardinal/src/plugin.hpp

+ 6
- 31
plugins/Cardinal/src/HostAudio.cpp View File

@@ -23,36 +23,6 @@


USE_NAMESPACE_DISTRHO; USE_NAMESPACE_DISTRHO;


/*
* Find the highest absolute and normalized value within a float array.
*/
static inline
float d_findMaxNormalizedFloat(const float floats[], const std::size_t count)
{
DISTRHO_SAFE_ASSERT_RETURN(floats != nullptr, 0.0f);
DISTRHO_SAFE_ASSERT_RETURN(count > 0, 0.0f);

static const float kEmptyFloats[8192] = {};

if (count <= 8192 && std::memcmp(floats, kEmptyFloats, count) == 0)
return 0.0f;

float tmp, maxf2 = std::abs(floats[0]);

for (std::size_t i=1; i<count; ++i)
{
tmp = std::abs(*floats++);

if (tmp > maxf2)
maxf2 = tmp;
}

if (maxf2 > 1.0f)
maxf2 = 1.0f;

return maxf2;
}

template<int numIO> template<int numIO>
struct HostAudio : Module { struct HostAudio : Module {
CardinalPluginContext* const pcontext; CardinalPluginContext* const pcontext;
@@ -65,6 +35,8 @@ struct HostAudio : Module {
// for rack core audio module compatibility // for rack core audio module compatibility
dsp::RCFilter dcFilters[numIO]; dsp::RCFilter dcFilters[numIO];
bool dcFilterEnabled = (numIO == 2); bool dcFilterEnabled = (numIO == 2);

// for stereo meter
volatile bool resetMeters = true; volatile bool resetMeters = true;
float gainMeterL = 0.0f; float gainMeterL = 0.0f;
float gainMeterR = 0.0f; float gainMeterR = 0.0f;
@@ -190,7 +162,10 @@ struct HostAudioNanoMeter : NanoMeter {
HostAudio<numIO>* const module; HostAudio<numIO>* const module;


HostAudioNanoMeter(HostAudio<numIO>* const m) HostAudioNanoMeter(HostAudio<numIO>* const m)
: module(m) {}
: module(m)
{
hasGainKnob = true;
}


void updateMeters() override void updateMeters() override
{ {


+ 1
- 1
plugins/Cardinal/src/ModuleWidgets.hpp View File

@@ -29,7 +29,7 @@ template<int hp>
struct ModuleWidgetWithSideScrews : ModuleWidget { struct ModuleWidgetWithSideScrews : ModuleWidget {
static constexpr const float startX_In = 10.65f; static constexpr const float startX_In = 10.65f;
static constexpr const float startX_Out = (hp - 3) * 15 + startX_In; static constexpr const float startX_Out = (hp - 3) * 15 + startX_In;
static constexpr const float startY = 73.0f; // note out bg box has 2px extra
static constexpr const float startY = 73.0f; // note: out bg box has 2px extra
static constexpr const float padding = 29.0f; static constexpr const float padding = 29.0f;
static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f /*+ padding * 0.35f*/; static constexpr const float middleX = startX_In + (startX_Out - startX_In) * 0.5f /*+ padding * 0.35f*/;




+ 5
- 1
plugins/Cardinal/src/Widgets.hpp View File

@@ -242,6 +242,7 @@ struct NanoKnob : Knob {
}; };


struct NanoMeter : Widget { struct NanoMeter : Widget {
bool hasGainKnob = false;
float gainMeterL = 0.0f; float gainMeterL = 0.0f;
float gainMeterR = 0.0f; float gainMeterR = 0.0f;


@@ -252,7 +253,7 @@ struct NanoMeter : Widget {
if (layer != 1) if (layer != 1)
return; return;


const float usableHeight = box.size.y - 10.0f;
const float usableHeight = box.size.y - (hasGainKnob ? 10.0f : 0.0f);


// draw background // draw background
nvgBeginPath(args.vg); nvgBeginPath(args.vg);
@@ -281,6 +282,9 @@ struct NanoMeter : Widget {
nvgFill(args.vg); nvgFill(args.vg);
nvgStroke(args.vg); nvgStroke(args.vg);


if (! hasGainKnob)
return;

nvgLineCap(args.vg, NVG_ROUND); nvgLineCap(args.vg, NVG_ROUND);


nvgBeginPath(args.vg); nvgBeginPath(args.vg);


+ 30
- 0
plugins/Cardinal/src/plugin.hpp View File

@@ -44,3 +44,33 @@ extern Model* modelHostTime;
extern Model* modelIldaeil; extern Model* modelIldaeil;
extern Model* modelMPV; extern Model* modelMPV;
extern Model* modelTextEditor; extern Model* modelTextEditor;

/*
* Find the highest absolute and normalized value within a float array.
*/
static inline
float d_findMaxNormalizedFloat(const float floats[], const std::size_t count)
{
DISTRHO_SAFE_ASSERT_RETURN(floats != nullptr, 0.0f);
DISTRHO_SAFE_ASSERT_RETURN(count > 0, 0.0f);

static const float kEmptyFloats[8192] = {};

if (count <= 8192 && std::memcmp(floats, kEmptyFloats, count) == 0)
return 0.0f;

float tmp, maxf2 = std::abs(floats[0]);

for (std::size_t i=1; i<count; ++i)
{
tmp = std::abs(*floats++);

if (tmp > maxf2)
maxf2 = tmp;
}

if (maxf2 > 1.0f)
maxf2 = 1.0f;

return maxf2;
}

Loading…
Cancel
Save