BirdNet-goMikrofon/Arduino-audio-tools-main/arduino-audio-tools-main/examples/tests/adc/test-esp32-rx-v1-multichannel-soak/test-esp32-rx-v1-multichannel-soak.ino

98 lines
2.6 KiB
Arduino
Raw Normal View History

2026-09-26 01:20:55 +02:00
#include "Arduino.h"
#include "AudioTools.h"
#if defined(ESP32) && defined(USE_ANALOG) && !USE_LEGACY_I2S
using namespace audio_tools;
AnalogAudioStream analog_in;
uint8_t buffer[256];
uint32_t iterations = 0;
uint32_t short_reads = 0;
uint32_t last_report_ms = 0;
size_t min_bytes_read = sizeof(buffer);
size_t max_bytes_read = 0;
int min_avail_before = 0x7fffffff;
int max_avail_before = 0;
int min_avail_after = 0x7fffffff;
int max_avail_after = 0;
bool rx_active = false;
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10);
}
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
auto cfg = analog_in.defaultConfig(RX_MODE);
cfg.sample_rate = 12000;
cfg.channels = 2;
cfg.buffer_size = 128;
cfg.buffer_count = 4;
cfg.adc_channels[0] = ADC_CHANNEL_4;
cfg.adc_channels[1] = ADC_CHANNEL_5;
Serial.println("ESP32 RX V1 multichannel soak test");
Serial.printf("buffer_size: %u results\n", cfg.buffer_size);
Serial.printf("buffer_count: %u frames\n", cfg.buffer_count);
Serial.printf("expected readable bytes: %u\n",
(unsigned)(cfg.buffer_size * sizeof(int16_t)));
Serial.printf("effective ADC rate: %u Hz\n",
(unsigned)(cfg.sample_rate * cfg.channels));
rx_active = analog_in.begin(cfg);
if (!rx_active) {
Serial.println("analog_in.begin failed; stopping test");
while (true) {
delay(1000);
}
}
delay(50);
last_report_ms = millis();
}
void loop() {
if (!rx_active) {
delay(1000);
return;
}
int avail_before = analog_in.available();
size_t bytes_read = analog_in.readBytes(buffer, sizeof(buffer));
int avail_after = analog_in.available();
iterations++;
if (bytes_read != sizeof(buffer)) {
short_reads++;
}
if (bytes_read < min_bytes_read) min_bytes_read = bytes_read;
if (bytes_read > max_bytes_read) max_bytes_read = bytes_read;
if (avail_before < min_avail_before) min_avail_before = avail_before;
if (avail_before > max_avail_before) max_avail_before = avail_before;
if (avail_after < min_avail_after) min_avail_after = avail_after;
if (avail_after > max_avail_after) max_avail_after = avail_after;
uint32_t now = millis();
if (now - last_report_ms >= 1000) {
Serial.printf(
"iter=%lu short_reads=%lu bytes[min/max]=%u/%u "
"avail_before[min/max]=%d/%d avail_after[min/max]=%d/%d\n",
(unsigned long)iterations, (unsigned long)short_reads,
(unsigned)min_bytes_read, (unsigned)max_bytes_read, min_avail_before,
max_avail_before, min_avail_after, max_avail_after);
last_report_ms = now;
}
}
#else
void setup() {}
void loop() {}
#endif