45 [[nodiscard]]
bool update(
float new_peak,
float new_rms,
float dt,
float attack = 0.001f,
46 float release = 0.3f,
float hold_time = 1.5f) {
57 if (!std::isfinite(new_peak))
59 if (!std::isfinite(new_rms))
69 float attack_coeff = 1.0f - std::exp(-dt / attack);
70 float release_coeff = 1.0f - std::exp(-dt / release);
128 meter_buf_.write(data);
134 out = meter_buf_.read();
147 for (
int i = 0; i < num_samples; ++i) {
148 float s = std::abs(channels[ch][i]);
151 sum_sq += channels[ch][i] * channels[ch][i];
153 data.
peak[ch] = peak;
154 data.
rms[ch] = num_samples > 0 ? std::sqrt(sum_sq / num_samples) : 0;
void analyze_and_push(const float *const *channels, int num_channels, int num_samples)
Definition audio_bridge.hpp:140
bool pop_latest_meter(MeterData &out)
Definition audio_bridge.hpp:133
void push_meter(const MeterData &data)
Definition audio_bridge.hpp:127
Lock-free triple buffer for publishing the latest value from a writer thread to a reader thread witho...
Definition triple_buffer.hpp:45
Definition audio_bridge.hpp:9
Definition audio_bridge.hpp:23
bool update(float new_peak, float new_rms, float dt, float attack=0.001f, float release=0.3f, float hold_time=1.5f)
Update with new audio data.
Definition audio_bridge.hpp:45
float held_peak
Definition audio_bridge.hpp:26
float display_rms
Definition audio_bridge.hpp:25
float display_peak
Definition audio_bridge.hpp:24
float hold_counter
Definition audio_bridge.hpp:27
Definition audio_bridge.hpp:14
float rms[max_channels]
Definition audio_bridge.hpp:18
static constexpr int max_channels
Definition audio_bridge.hpp:15
float peak[max_channels]
Definition audio_bridge.hpp:17
int num_channels
Definition audio_bridge.hpp:19
Lock-free latest-value publication between two threads.