Control Surface
main
MIDI Control Surface library for Arduino
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Audio
AudioVU.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <Audio.h>
4
#include <
MIDI_Inputs/InterfaceMIDIInputElements.hpp
>
5
6
#include "
MovingCoilBallistics.hpp
"
7
8
BEGIN_CS_NAMESPACE
9
16
class
AudioVU
:
public
Interfaces::MCU::IVU
{
17
public
:
31
template
<
class
T>
32
AudioVU
(T &
level
,
float
gain
= 1.0, uint8_t
max
= 255)
33
:
IVU
(
max
, true),
level
(
level
),
gain
(
gain
) {}
34
50
template
<
class
T>
51
AudioVU
(T &
level
,
MovingCoilBallistics
ballistics
,
float
gain
= 1.0,
52
uint8_t
max
= 255)
53
:
IVU
(
max
, true),
ballistics
(
ballistics
),
level
(
level
),
gain
(
gain
) {}
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
; }
84
91
void
setGain
(
float
gain
) { this->gain =
gain
; }
92
93
private
:
94
MovingCoilBallistics
ballistics
=
MovingCoilBallistics::responsiveVU
();
95
101
class
Analyzer
{
102
private
:
103
enum
{
Peak
,
RMS
}
type
;
104
void
*
analyzer
;
105
106
public
:
107
Analyzer
(AudioAnalyzePeak &
analyzer
)
//
108
:
type
(
Peak
),
analyzer
(&
analyzer
) {}
109
Analyzer
(AudioAnalyzeRMS &
analyzer
)
//
110
:
type
(
RMS
),
analyzer
(&
analyzer
) {}
111
112
float
read
()
const
{
113
switch
(
type
) {
114
case
Peak
:
115
return
static_cast<
AudioAnalyzePeak *
>
(
analyzer
)->
read
();
116
case
RMS
:
117
return
static_cast<
AudioAnalyzeRMS *
>
(
analyzer
)->
read
();
118
default
:
ERROR
(F(
"Error: Invalid type!"
), 0x1518);
return
0;
119
}
120
}
121
122
bool
available
()
const
{
123
switch
(
type
) {
124
case
Peak
:
125
return
static_cast<
AudioAnalyzePeak *
>
(
analyzer
)
126
->
available
();
127
case
RMS
:
128
return
static_cast<
AudioAnalyzeRMS *
>
(
analyzer
)
129
->
available
();
130
default
:
ERROR
(F(
"Error: Invalid type!"
), 0x1519);
return
false
;
131
}
132
}
133
}
level
;
134
135
float
gain
;
136
};
137
138
END_CS_NAMESPACE
ERROR
#define ERROR(msg, errc)
Definition
Error.hpp:19
InterfaceMIDIInputElements.hpp
MovingCoilBallistics.hpp
END_CS_NAMESPACE
#define END_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:14
BEGIN_CS_NAMESPACE
#define BEGIN_CS_NAMESPACE
Definition
Settings/NamespaceSettings.hpp:11
AudioVU::Analyzer::type
enum AudioVU::Analyzer::@034273110262015167150262056236327026252141372015 type
AudioVU::Analyzer::analyzer
void * analyzer
Definition
AudioVU.hpp:104
AudioVU::Analyzer::available
bool available() const
Definition
AudioVU.hpp:122
AudioVU::Analyzer::Analyzer
Analyzer(AudioAnalyzeRMS &analyzer)
Definition
AudioVU.hpp:109
AudioVU::Analyzer::read
float read() const
Definition
AudioVU.hpp:112
AudioVU::Analyzer::Analyzer
Analyzer(AudioAnalyzePeak &analyzer)
Definition
AudioVU.hpp:107
AudioVU::Analyzer::RMS
@ RMS
Definition
AudioVU.hpp:103
AudioVU::Analyzer::Peak
@ Peak
Definition
AudioVU.hpp:103
AudioVU::ballistics
MovingCoilBallistics ballistics
Definition
AudioVU.hpp:94
AudioVU::getValue
uint8_t getValue() override
Get the value of the VU meter.
Definition
AudioVU.hpp:60
AudioVU::AudioVU
AudioVU(T &level, MovingCoilBallistics ballistics, float gain=1.0, uint8_t max=255)
Create a new AudioVU object.
Definition
AudioVU.hpp:51
AudioVU::level
class AudioVU::Analyzer level
AudioVU::AudioVU
AudioVU(T &level, float gain=1.0, uint8_t max=255)
Create a new AudioVU object.
Definition
AudioVU.hpp:32
AudioVU::getOverload
bool getOverload() override
Definition
AudioVU.hpp:83
AudioVU::gain
float gain
Definition
AudioVU.hpp:135
AudioVU::setGain
void setGain(float gain)
Set the gain for the VU meter.
Definition
AudioVU.hpp:91
AudioVU::getFloatValue
float getFloatValue() override
Get the value of the VU meter.
Definition
AudioVU.hpp:70
Interfaces::MCU::IVU
An abstract interface for VU meters.
Definition
InterfaceMIDIInputElements.hpp:84
Interfaces::MCU::IVU::IVU
IVU(uint8_t max, bool alwaysDirty=false)
Definition
InterfaceMIDIInputElements.hpp:86
Interfaces::MCU::IVU::max
uint8_t max
Definition
InterfaceMIDIInputElements.hpp:110
MovingCoilBallistics
Definition
MovingCoilBallistics.hpp:7
MovingCoilBallistics::responsiveVU
static MovingCoilBallistics responsiveVU(float Tsfactor=2.0)
Definition
MovingCoilBallistics.hpp:40
Generated by
1.17.0