3#include "AudioConfig.h"
9#include "AudioTools/CoreAudio/AudioLogger.h"
10#include "AudioTools/CoreAudio/AudioBasic/Collections/Vector.h"
17#define MIN(A, B) ((A) < (B) ? (A) : (B))
22using sample_rate_t = uint32_t;
28enum RxTxMode {UNDEFINED_MODE=0, TX_MODE=1, RX_MODE=2, RXTX_MODE=3 };
40static const char*
RxTxModeNames[4]={
"UNDEFINED_MODE",
"TX_MODE",
"RX_MODE",
"RXTX_MODE" };
46static const char* TimeUnitStr[3] {
"MS",
"US",
"HZ"};
81 return !(*
this ==
alt);
123 virtual void clear(){
129 virtual void logInfo(
const char* source=
"") {
150using AudioBaseInfo = AudioInfo;
151using AudioBaseInfoDependent = AudioInfoSupport;
152using AudioInfoDependent = AudioInfoSupport;
163 if (!notify_vector.contains(&
bi)) notify_vector.push_back(&
bi);
168 int pos = notify_vector.indexOf(&
bi);
169 if (pos<0)
return false;
170 notify_vector.erase(pos);
176 notify_vector.clear();
181 is_notify_active =
flag;
186 return is_notify_active;
191 bool is_notify_active =
true;
195 for(
auto n : notify_vector){
196 n->setAudioInfo(info);
210 virtual float volume() {
return volume_value; }
217 float volume_value = 1.0f;
226 virtual size_t write(
const uint8_t *data,
size_t len) = 0;
229 virtual operator bool() = 0;
230 virtual bool begin() = 0;
235 virtual void end() = 0;
237 void writeBlocking(
Print *out,
uint8_t* data,
size_t len){
242 int result = out->write(data+written, open);
257 uint32_t result = 1000000l / samplingRate;
258 if (1000000l % samplingRate!=0){
261 if (result <= limit){
262 LOGW(
"Time for samplingRate %u -> %u is < %u μs - we rounded up", (
unsigned int)samplingRate, (
unsigned int)result, (
unsigned int)limit);
276 uint32_t result = 1000l / samplingRate;
277 if (1000000l % samplingRate!=0){
280 if (result <= limit){
281 LOGW(
"Time for samplingRate %u -> %u is < %u μs - we rounded up", (
unsigned int)samplingRate, (
unsigned int)result, (
unsigned int)limit);
287 static float toRateUs(uint32_t time_us){
288 return 1000000.0 / time_us;
291 static float toRateMs(uint32_t time_ms){
292 return 1000.0 / time_ms;
332 template <
typename T>
337 return std::numeric_limits<T>::max();
343 template <
typename T>
344 static float minValueT(){
348 return std::numeric_limits<T>::min();
357 template <
typename T>
362 }
else if (value < -
mv){
373 }
else if (value < -
mv){
380 template <
typename T>
386 template <
typename T>
393 return static_cast<float>(value) /
maxValue(bits);
402 template <
typename FromT,
typename ToT>
420 template <
typename FromT,
typename ToT>
424 for (
int j=0;
j<samples;
j++){
441 I2S_RIGHT_JUSTIFIED_FORMAT,
442 I2S_LEFT_JUSTIFIED_FORMAT,
446static const char* i2s_formats[] = {
"I2S_STD_FORMAT",
"I2S_LSB_FORMAT",
"I2S_MSB_FORMAT",
"I2S_PHILIPS_FORMAT",
"I2S_RIGHT_JUSTIFIED_FORMAT",
"I2S_LEFT_JUSTIFIED_FORMAT",
"I2S_PCM"};
458static const char* i2s_signal_types[] = {
"Digital",
"Analog",
"PDM",
"TDM"};
467 int open =
sizeof(
T);
471 int read = p_stream->readBytes(
p_result+total, open);
482 int open = samples*
sizeof(
T);
487 int read = p_stream->readBytes(
p_result+total, open);
501 return total /
sizeof(
T);
508 int open = samples*
sizeof(
T);
518 return total /
sizeof(
T);
MemoryType
Memory types.
Definition AudioTypes.h:35
void waitFor(bool &flag)
wait for flag to be active
Definition AudioTypes.h:534
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:28
TimeUnit
Time Units.
Definition AudioTypes.h:45