arduino-audio-tools
Loading...
Searching...
No Matches
AnalogDriverBase.h
Go to the documentation of this file.
1#pragma once
2#include "AudioToolsConfig.h"
3#if defined(USE_ANALOG)
4
5#include "AnalogConfig.h"
6
7namespace audio_tools {
8
10public:
11 virtual bool begin(AnalogConfig cfg) = 0;
12 virtual void end() = 0;
13 virtual size_t write(const uint8_t *src, size_t size_bytes) { return 0;}
14 virtual size_t readBytes(uint8_t *dest, size_t size_bytes) = 0;
15 virtual int available() = 0;
16 virtual int availableForWrite() { return DEFAULT_BUFFER_SIZE; }
17
18protected:
22 static void scaleTo16Bits(uint8_t *data, size_t size_bytes, int adc_bits,
23 bool is_centered) {
24 if (adc_bits <= 0 || adc_bits >= 16) return;
25 const int32_t factor = 1 << (16 - adc_bits);
26 const int32_t offset = is_centered ? 0 : 1 << (adc_bits - 1);
27 int16_t *samples = reinterpret_cast<int16_t *>(data);
28 size_t sample_count = size_bytes / sizeof(int16_t);
29 for (size_t i = 0; i < sample_count; i++) {
30 int32_t value = (static_cast<int32_t>(samples[i]) - offset) * factor;
31 if (value > 32767) value = 32767;
32 if (value < -32768) value = -32768;
33 samples[i] = static_cast<int16_t>(value);
34 }
35 }
36};
37
38} // ns
39#endif
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
ESP32 specific configuration for i2s input via adc. The default input pin is GPIO34....
Definition AnalogConfigESP32.h:22
Definition AnalogDriverBase.h:9
static void scaleTo16Bits(uint8_t *data, size_t size_bytes, int adc_bits, bool is_centered)
Definition AnalogDriverBase.h:22
virtual size_t write(const uint8_t *src, size_t size_bytes)
Definition AnalogDriverBase.h:13
virtual bool begin(AnalogConfig cfg)=0
virtual int availableForWrite()
Definition AnalogDriverBase.h:16
virtual size_t readBytes(uint8_t *dest, size_t size_bytes)=0
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6