3#include "AudioTools/CoreAudio/AudioBasic/Collections/Vector.h"
4#include "AudioTools/CoreAudio/AudioStreams.h"
70 return AudioStream::begin();
86 return DEFAULT_BUFFER_SIZE;
95 size_t readBytes(uint8_t* data,
size_t len)
override {
96 size_t result =
p_in->readBytes(data, len);
97 for (
int i = 0; i < len; i++) {
127 virtual size_t write(
const uint8_t* data,
size_t len)
override {
128 for (
int i = 0; i < len; i++) {
151 if (
p_out !=
nullptr) result =
p_out->write(data, len);
127 virtual size_t write(
const uint8_t* data,
size_t len)
override {
…}
162 LOGE(
"Invalid channel: %d", channel);
165 return freq[channel];
201 for (
int ch = 0; ch < info.
channels; ch++) {
217 LOGD(
"detectFrequencyForChannel: %d / len: %u", ch, (
unsigned int)len);
224 size_t min_lag = sample_rate / 1000;
225 size_t max_lag = sample_rate / 50;
228 LOGD(
"lag min/max: %u / %u", (
unsigned)min_lag, (
unsigned)max_lag);
230 float max_corr = 0.0f;
232 for (
size_t lag = min_lag; lag < max_lag; ++lag) {
235 sum += samples[i * channels] * samples[(i + lag) * channels];
237 if (sum > max_corr) {
243 LOGD(
"best_lag: %u / max_corr: %f", (
unsigned)best_lag, max_corr);
245 if (best_lag == 0)
return 0.0f;
246 return (
float)sample_rate / best_lag;
291 return AudioStream::begin();
307 return DEFAULT_BUFFER_SIZE;
317 size_t result =
p_in->readBytes(data, len);
320 detect<int16_t>((int16_t*)data, len /
sizeof(int16_t));
326 detect<int32_t>((int32_t*)data, len /
sizeof(int32_t));
338 virtual size_t write(
const uint8_t* data,
size_t len)
override {
341 detect<int16_t>((int16_t*)data, len /
sizeof(int16_t));
347 detect<int32_t>((int32_t*)data, len /
sizeof(int32_t));
352 if (
p_out !=
nullptr) result =
p_out->write(data, len);
338 virtual size_t write(
const uint8_t* data,
size_t len)
override {
…}
363 LOGE(
"Invalid channel: %d", channel);
366 return states[channel].freq;
402 for (
int ch = 0; ch < info.
channels; ch++) {
420 if (samples[i] <= 0 && samples[i + info.
channels] > 0) {
421 if (state.
count > 0) {