From 48775f20a0a3d29651e46339bf1266651efebef2 Mon Sep 17 00:00:00 2001 From: Dmitry Kaukov Date: Mon, 31 Mar 2025 22:31:15 +1100 Subject: [PATCH] Scale ADC to 16bit --- src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32.h | 6 ++++++ src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32.h b/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32.h index 83d7bf169..d38ddfba0 100644 --- a/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32.h +++ b/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32.h @@ -190,6 +190,12 @@ class AnalogDriverESP32 : public AnalogDriverBase { if (i2s_read(port_no, dest, size_bytes, &result, adc_config.timeout)!=ESP_OK){ TRACEE(); } + // Scale 12-bit ADC values to 16-bit + uint16_t *samples = reinterpret_cast(dest); + size_t sample_count = result / sizeof(uint16_t); + for (size_t i = 0; i < sample_count; i++) { + samples[i] <<= 4; // Scale 12-bit to 16-bit + } // make sure that the center is at 0 if (adc_config.is_auto_center_read){ auto_center.convert(dest, result); diff --git a/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h b/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h index 54638d1bd..664ef2fa6 100644 --- a/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h +++ b/src/AudioTools/CoreAudio/AudioAnalog/AnalogDriverESP32V1.h @@ -395,7 +395,7 @@ class AnalogDriverESP32V1 : public AnalogDriverBase { *result16 = 0; } } else { - *result16 = data; + *result16 = data << 4; // Scale 12-bit to 16-bit } result16++; } else {