116 for (
int i = 0; i < len; i++) {
146 virtual size_t write(
const uint8_t* data,
size_t len)
override {
147 for (
int i = 0; i < len; i++) {
181 LOGE(
"Invalid channel: %d", channel);
184 return freq[channel];
199 LOGE(
"Invalid channel: %d", channel);
202 return conf[channel];
211 bool isTonal(
int channel,
float threshold = 0.3f) {
251 float channel_confidence = 0.0f;
253 conf[ch] = channel_confidence;
272 float& confidenceOut) {
273 LOGD(
"detectFrequencyForChannel: %d / len: %u", ch, (
unsigned int)len);
274 confidenceOut = 0.0f;
281 size_t min_lag = sample_rate / 1000;
282 size_t max_lag = sample_rate / 50;
285 LOGD(
"lag min/max: %u / %u", (
unsigned)min_lag, (
unsigned)max_lag);
291 double s = (double)samples[i * channels];
295 double max_corr = 0.0;
297 for (
size_t lag = min_lag; lag < max_lag; ++lag) {
300 sum += (double)samples[i * channels] * (
double)samples[(i + lag) * channels];
302 if (sum > max_corr) {
308 LOGD(
"best_lag: %u / max_corr: %f", (
unsigned)best_lag, max_corr);
311 confidenceOut = (float)(max_corr / energy);
312 if (confidenceOut > 1.0f) confidenceOut = 1.0f;
313 if (confidenceOut < 0.0f) confidenceOut = 0.0f;
316 if (best_lag == 0)
return 0.0f;
317 return (
float)sample_rate / best_lag;
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
virtual int availableForWrite()
Definition Arduino.h:128
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139