4#include "AudioStreams.h"
7# define M_PI (3.14159265358979323846f)
72 this->config = config;
73 this->sample_count = 0;
77 coeff = 2.0f * cos(omega);
90 float s0 = sample + coeff * s1 - s2;
103 magnitude_squared = real * real + imag * imag;
104 magnitude = sqrt(magnitude_squared);
132 bool isDetected(
float threshold)
const {
return magnitude > threshold; }
142 magnitude_squared = 0.0f;
167 int sample_count = 0;
170 float magnitude = 0.0f;
171 float magnitude_squared = 0.0f;
243 for (
int i = 0; i < info.
channels; i++) {
268 int channel,
float frequency,
float magnitude,
void*
ref)) {
284 size_t write(
const uint8_t* data,
size_t len)
override {
285 if (
p_print ==
nullptr)
return 0;
291 if (
p_print ==
nullptr)
return len;
294 return p_print->write(data, len);
312 size_t result =
p_stream->readBytes(data, len);
331 if (channel >= 0 && channel <
detectors.size()) {
332 return detectors[channel].getMagnitude();
347 if (channel >= 0 && channel <
detectors.size()) {
385 float magnitude,
void*
ref) =
nullptr;
398 if (channel >= 0 && channel <
detectors.size()) {
399 float magnitude =
detectors[channel].getMagnitude();
401 float frequency =
detectors[channel].getTargetFrequency();
422 template <
typename T>
425 const T* samples =
reinterpret_cast<const T*
>(data);
426 size_t num_samples = data_len /
sizeof(T);
428 for (
size_t i = 0; i < num_samples; i++) {
432 int channel = i % channels;
433 if (
detectors[channel].processSample(normalized)) {
450 if (value > 1.0f)
return 1.0f;
451 if (value < -1.0f)
return -1.0f;
477 processSamplesOfType<uint8_t>(data, data_len, channels);
480 processSamplesOfType<int16_t>(data, data_len, channels);
483 processSamplesOfType<int24_t>(data, data_len, channels);
486 processSamplesOfType<int32_t>(data, data_len, channels);