Control Surface  1.1.1
MIDI Control Surface library for Arduino
AudioVU.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Audio.h>
4 #include <MIDI_Inputs/MCU/VU.hpp>
5 
7 
9 
16 class AudioVU : public IVU {
17  public:
31  template <class T>
32  AudioVU(T &level, float gain = 1.0, uint8_t max = 255)
33  : IVU(max), level{level}, gain(gain) {}
34 
50  template <class T>
52  uint8_t max = 255)
54 
60  uint8_t getValue() override {
61  uint16_t value = getFloatValue() * max;
62  return value;
63  }
64 
70  float getFloatValue() override {
71  if (!level.available())
72  return 0;
73  float peakLevel = level.read();
74  float value = ballistics(peakLevel) * gain;
75  if (value > 1.0f)
76  value = 1.0f;
77  else if (value < 0.0f)
78  value = 0.0f;
79  return value;
80  }
81 
83  bool getOverload() override { return false; } // TODO
90  void setGain(float gain) { this->gain = gain; }
91 
92  private:
94 
100  class Analyzer {
101  private:
102  enum { Peak, RMS } type;
103  void *analyzer;
104 
105  public:
106  Analyzer(AudioAnalyzePeak &analyzer) //
107  : type(Peak), analyzer(&analyzer) {}
108  Analyzer(AudioAnalyzeRMS &analyzer) //
109  : type(RMS), analyzer(&analyzer) {}
110 
111  float read() const {
112  switch (type) {
113  case Peak:
114  return static_cast<AudioAnalyzePeak *>(analyzer)->read();
115  case RMS:
116  return static_cast<AudioAnalyzeRMS *>(analyzer)->read();
117  default: ERROR(F("Error: Invalid type!"), 0x1518); return 0;
118  }
119  }
120 
121  bool available() const {
122  switch (type) {
123  case Peak:
124  return static_cast<AudioAnalyzePeak *>(analyzer)
125  ->available();
126  case RMS:
127  return static_cast<AudioAnalyzeRMS *>(analyzer)
128  ->available();
129  default: ERROR(F("Error: Invalid type!"), 0x1519); return false;
130  }
131  }
132  } level;
133 
134  float gain;
135 };
136 
AudioVU::AudioVU
AudioVU(T &level, float gain=1.0, uint8_t max=255)
Create a new AudioVU object.
Definition: AudioVU.hpp:32
IVU
An abstract interface for VU meters.
Definition: VU.hpp:20
AudioVU::setGain
void setGain(float gain)
Set the gain for the VU meter.
Definition: AudioVU.hpp:90
AudioVU::getValue
uint8_t getValue() override
Get the value of the VU meter.
Definition: AudioVU.hpp:60
MovingCoilBallistics::responsiveVU
static MovingCoilBallistics responsiveVU(float Tsfactor=2.0)
Definition: MovingCoilBallistics.hpp:40
AudioVU::Analyzer::type
enum AudioVU::Analyzer::@3 type
AudioVU::level
class AudioVU::Analyzer level
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:9
AudioVU
A VU meter that reads from an Audio stream using the Analyzer class.
Definition: AudioVU.hpp:16
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition: Settings/NamespaceSettings.hpp:10
AudioVU::gain
float gain
Definition: AudioVU.hpp:134
AudioVU::getFloatValue
float getFloatValue() override
Get the value of the VU meter.
Definition: AudioVU.hpp:70
ERROR
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
VU.hpp
AudioVU::ballistics
MovingCoilBallistics ballistics
Definition: AudioVU.hpp:93
AudioVU::Analyzer::Peak
Definition: AudioVU.hpp:102
AudioVU::Analyzer::analyzer
void * analyzer
Definition: AudioVU.hpp:103
AudioVU::Analyzer
The AudioAnalyzePeak and AudioAnalyzeRMS classes don't implement a common interface,...
Definition: AudioVU.hpp:100
IVU::max
const uint8_t max
Definition: VU.hpp:33
MIDI_Notes::F
constexpr int8_t F
Definition: Notes.hpp:23
AudioVU::Analyzer::available
bool available() const
Definition: AudioVU.hpp:121
AudioVU::getOverload
bool getOverload() override
Definition: AudioVU.hpp:83
AudioVU::Analyzer::Analyzer
Analyzer(AudioAnalyzeRMS &analyzer)
Definition: AudioVU.hpp:108
MovingCoilBallistics
Definition: MovingCoilBallistics.hpp:7
AudioVU::Analyzer::RMS
Definition: AudioVU.hpp:102
MovingCoilBallistics.hpp
AudioVU::Analyzer::read
float read() const
Definition: AudioVU.hpp:111
AudioVU::Analyzer::Analyzer
Analyzer(AudioAnalyzePeak &analyzer)
Definition: AudioVU.hpp:106
AudioVU::AudioVU
AudioVU(T &level, MovingCoilBallistics ballistics, float gain=1.0, uint8_t max=255)
Create a new AudioVU object.
Definition: AudioVU.hpp:51