6#if defined(USE_ESP32_DSP)
13#define PRINT_FLUSH_OVERRIDE override
15#define PRINT_FLUSH_OVERRIDE
29 virtual size_t write(
const uint8_t *data,
size_t len)
override = 0;
31 virtual size_t write(uint8_t ch)
override {
68 for (
int j = 0; j < len / 2; j++) {
69 write((uint8_t *)&zero, 2);
115template <
typename T =
int16_t>
124 bool active =
true) {
175 virtual size_t write(
const uint8_t *data,
size_t len)
override {
176 LOGD(
"CsvOutput::write: %d", (
int)len);
178 LOGE(
"is not active");
187 LOGW(
"Channels not defined: using 2");
190 size_t lenChannels = len / (
sizeof(T) *
cfg.
channels);
191 if (lenChannels > 0) {
193 }
else if (len ==
sizeof(T)) {
195 T *data_value = (T *)data;
205 LOGE(
"Unsupported size: %d for channels %d and bits: %d", (
int)len,
223 for (
size_t j = 0; j < frameCount; j++) {
232 this->out_ptr->println();
251 bool active =
true) {
268 virtual size_t write(
const uint8_t *data,
size_t len)
override {
271 for (
size_t j = 0; j < len; j++) {
383 T
scale(T sample)
const {
return static_cast<T
>(
value * sample); }
388struct MixGain<int16_t> {
392 int16_t
scale(int16_t sample)
const {
return value.scale(sample); }
402struct MixGain<int32_t> {
406 int32_t
scale(int32_t sample)
const {
return value.scale(sample); }
410template <
typename T =
int16_t>
446 for (
int i = 0; i <
buffers.size(); i++) {
454 for (
int i = 0; i < count; i++) {
458 for (
int i = 0; i < count; i++) {
468 if (channel >= 0 && channel <
size()) {
471 LOGE(
"Invalid channel %d - max is %d", channel,
size() - 1);
498 size_t write(uint8_t)
override {
return 0; }
502 size_t write(
const uint8_t *data,
size_t len)
override {
515 size_t write(
int idx,
const uint8_t *buffer_c,
size_t bytes) {
516 LOGD(
"write idx %d: %d", idx, (
int)bytes);
520 if (p_buffer ==
nullptr) {
524 size_t samples = bytes /
sizeof(T);
526 result = p_buffer->
writeArray((T *)buffer_c, samples) *
sizeof(T);
529 "Available Buffer %d too small %d: requested: %d -> increase the "
546 if (p_buffer ==
nullptr)
return 0;
554 if (p_buffer ==
nullptr)
return 0;
555 return p_buffer->
available() *
sizeof(T);
576 LOGD(
"write to final out: %d",
static_cast<int>(samples *
sizeof(T)));
590 size_t available_samples =
buffers[j]->available();
591 samples = min(samples, available_samples);
610 if (bytes == 0)
return 0;
611 uint8_t silence[bytes];
612 memset(silence, 0, bytes);
618 if (bytes == 0)
return 0;
619 uint8_t silence[bytes];
620 memset(silence, 0, bytes);
621 return write(idx, silence, bytes);
666#if defined(USE_ESP32_DSP)
668 float mix_out[samples] = {0.0f};
669 float temp[samples] = {0.0f};
674 for (uint16_t i = 0; i < samples; i++) {
677 temp[i] =
static_cast<float>(s) * factor;
680 dsps_add_f32(mix_out, temp, mix_out, samples, 1, 1, 1);
684 for (
size_t i = 0; i < samples; i++) {
685 float v = mix_out[i];
686 output[i] =
static_cast<T
>(v);
691 memset(
output.data(), 0, samples *
sizeof(T));
694 for (
int i = 0; i < samples; i++) {
697 output[i] += factor.scale(sample);
750 LOGE(
"start must not be null");
761 size_t write(
const uint8_t *data,
size_t len)
override {
762 if (
p_next ==
nullptr)
return 0;
764 memcpy(
p_next, data, len);
808 size_t write(
const uint8_t *data,
size_t len)
override {
811 return writeT<int16_t>(data, len);
813 return writeT<int24_t>(data, len);
815 return writeT<int32_t>(data, len);
828 template <
typename T =
int16_t>
829 size_t writeT(
const uint8_t *buffer,
size_t size) {
830 int sample_count = size /
sizeof(T);
832 T *data = (T *)buffer;
833 T result[result_size];
840 result[i++] = data[j];
844 def.
p_out->
write((uint8_t *)result, result_size *
sizeof(T));
845 if (written != result_size *
sizeof(T)) {
846 LOGW(
"Could not write all samples");
static HardwareSerial Serial
Definition Arduino.h:179
@ HEX
Definition Arduino.h:54
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define PRINT_FLUSH_OVERRIDE
Definition AudioOutput.h:15
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual void flush()
Definition Arduino.h:130
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ TX_MODE
Definition AudioTypes.h:26