31 virtual bool begin() {
return true; }
34 virtual size_t readBytes(uint8_t *data,
size_t len) {
48 virtual size_t write(
const uint8_t *data,
size_t len) {
124 setValue(source.buffer, source.buffer_size, source.memory_type);
126 source.setValue(
nullptr, 0, source.memory_type);
168 virtual size_t write(uint8_t
byte)
override {
171 if (
buffer ==
nullptr)
return 0;
181 virtual size_t write(
const uint8_t *
data,
size_t len)
override {
185 for (
size_t j = 0; j < len; j++) {
196 if (
buffer ==
nullptr)
return 0;
225 while (count < len) {
245 virtual void end()
override {
251 virtual void clear(
bool reset =
false) {
264 LOGW(
"data is read only");
274 if (memcmp(
"WAVE",
buffer + 8, 4) == 0) {
294#if defined(USE_PSRAM) && defined(ARDUINO)
296 buffer = (
buffer ==
nullptr) ? (uint8_t *)ps_calloc(size, 1)
297 : (uint8_t *)ps_realloc(
buffer, size);
301 buffer = (
buffer ==
nullptr) ? (uint8_t *)calloc(size, 1)
302 : (uint8_t *)realloc(
buffer, size);
330 this->buffer = (uint8_t *)
buffer;
349 if (
this == &source)
return;
423 virtual size_t readBytes(uint8_t *data,
size_t len)
override {
427 virtual size_t write(
const uint8_t *data,
size_t len)
override {
453template <
class T =
int16_t>
537 LOGD(
"GeneratedSoundStream::readBytes: %u", (
unsigned int)len);
573 if (buffer_size > 0)
resize(buffer_size);
579 if (buffer_size > 0)
resize(buffer_size);
585 if (buffer_size > 0)
resize(buffer_size);
591 if (buffer_size > 0)
resize(buffer_size);
597 if (buffer_size > 0)
resize(buffer_size);
616 size_t write(
const uint8_t *data,
size_t len)
override {
619 for (
int j = 0; j < len; j++) {
620 result +=
write(data[j]);
674 if (
p_in ==
nullptr)
return 0;
700 if (free_space == 0) {
715 virtual size_t writeExt(
const uint8_t *data,
size_t len) {
718 virtual size_t readExt(uint8_t *data,
size_t len) {
731template <
typename T =
int16_t>
763 virtual size_t write(
const uint8_t *data,
size_t len) {
766 size_t result_written =
p_out->
write(data, result);
767 return len * result_written / result;
844 virtual size_t write(
const uint8_t *data,
size_t len)
override {
913 bool is_regular_update =
true;
916 is_regular_update =
false;
919 return is_regular_update;
943 uint32_t end_time =
millis();
961 snprintf(msg, 70,
"%s ==> Samples per second: %d",
name,
1077 virtual size_t write(
const uint8_t *data,
size_t len)
override {
1078 if (
p_print ==
nullptr)
return 0;
1084 if (
p_print ==
nullptr)
return 0;
1103 if (byte_rate == 0) {
1104 LOGE(
"Audio Info not defined");
1186 size_t write(
const uint8_t *data,
size_t len)
override {
1193 if (
p_in ==
nullptr)
return 0;
1198 if (
p_in ==
nullptr) {
1216 LOGD(
"wait us: %ld",
static_cast<long>(waitUs));
1218 int64_t waitMs = waitUs / 1000;
1219 if (waitMs > 0)
delay(waitMs);
1222 LOGD(
"negative delay!")
1256template <
typename T=
int16_t,
typename SumT=
float>
1271 if (index <
size()) {
1275 LOGE(
"Invalid index %d - max is %d", index,
size() - 1);
1295 LOGE(
"Invalid index %d - max is %d", index,
size() - 1);
1315 LOGW(
"readBytes: %d", (
int)len);
1353 if (idx < 0 || idx >=
size()) {
1381 if (idx < 0 || idx >=
size())
return nullptr;
1421 int samples = byteCount /
sizeof(T);
1424 int stream_count =
size();
1426 int samples_eff_max = 0;
1427 for (
int j = 0; j < stream_count; j++) {
1431 if (samples_eff > samples_eff_max) samples_eff_max = samples_eff;
1436 for (
int j = 0; j < samples_eff_max; j++) {
1439 return samples_eff_max *
sizeof(T);
1445 for (
int j = 0; j <
size(); j++) {
1453 for (
int j = 0; j < samples_eff; j++) {
1459 memset(
result_vect.data(), 0,
sizeof(SumT) * samples);
1472template <
typename T>
1506 LOGD(
"readBytes: %d", (
int)len);
1507 T *p_data = (T *)data;
1508 int result_len = min((
size_t)
available(), len);
1511 for (
int j = 0; j < frames; j++) {
1512 for (
int i = 0; i <
records.size(); i++) {
1513 for (
int ch = 0; ch <
records[i].channels; ch++) {
1514 p_data[result_idx++] =
1519 return result_idx *
sizeof(T);
1533 records[channel].weight = weight;
1547 int result =
records[0].stream->available();
1549 int tmp =
records[j].stream->available();
1602 size_t (*
cb_write)(
const uint8_t *data,
size_t len)) {
1658 if (tmp_available < 0)
return result;
1660 return tmp_available;
1680 size_t write(
const uint8_t *data,
size_t len)
override {
1688 size_t result = len;
1690 result =
cb_update((uint8_t *)data, len);
1721 size_t (*
cb_write)(
const uint8_t *data,
size_t len) =
nullptr;
1722 size_t (*
cb_read)(uint8_t *data,
size_t len) =
nullptr;
1738template <
typename T =
int16_t,
class TF =
float>
1772 LOGE(
"channels must not be 0");
1783 virtual size_t write(
const uint8_t *data,
size_t len)
override {
1784 if (
p_print ==
nullptr)
return 0;
1785 size_t result =
converter.convert((uint8_t *)data, len);
1792 result =
converter.convert(data, result);
1802 if (
p_print ==
nullptr)
return 0;
1859 LOGI(
"VolumeMeter::setAudioInfo: channels %d", channels);
1869 size_t write(
const uint8_t *data,
size_t len)
override {
1871 size_t result = len;
1872 if (
p_out !=
nullptr) {
1893 LOGE(
"begin not called!");
1897 LOGE(
"invalid channel %d", channel);
1941 return total / count;
2009 if (data ==
nullptr || len == 0)
return;
2013 updateVolumesT<int8_t>(data, len);
2016 updateVolumesT<int16_t>(data, len);
2019 updateVolumesT<int24_t>(data, len);
2022 updateVolumesT<int32_t>(data, len);
2030 template <
typename T>
2032 T *bufferT = (T *)buffer;
2033 int samplesCount = size /
sizeof(T);
2035 for (
int j = 0; j < samplesCount; j++) {
2036 float tmp = abs(
static_cast<float>(bufferT[j]));
2069 unsigned long current_time =
millis();
2071 if (above_threshold) {
2209 size_t write(
const uint8_t *data,
size_t len)
override {
2286 uint16_t (*
callback)(uint8_t *data, uint16_t len) =
nullptr;
2324 bool do_restart =
active;
2325 if (do_restart)
end();
2352 LOGI(
"sample_rate: %u -> time: %u milliseconds",
2401 virtual size_t writeExt(
const uint8_t *data,
size_t len)
override {
2415 virtual size_t readExt(uint8_t *data,
size_t len)
override {
2431 unsigned long ms =
millis();
2435 uint16_t rate = 1 * 1000 / diff;
2461 if (src !=
nullptr) {
2468 if (buffer_available < available_bytes) {
2470 uint16_t to_clear = available_bytes - buffer_available;
2471 uint8_t tmp[to_clear];
2480 if (src->
buffer !=
nullptr && src->
frame !=
nullptr &&
2482 uint16_t available_bytes =
2484 if (available_bytes !=
2486 LOGE(
"data underflow");
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define TRACEI()
Definition AudioLoggerIDF.h:32
#define TRACED()
Definition AudioLoggerIDF.h:31
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27
#define LOGE(...)
Definition AudioLoggerIDF.h:30
#define IRAM_ATTR
Definition AudioStreams.h:13
#define DEFAULT_BUFFER_SIZE
Definition avr.h:20
#define assert(T)
Definition avr.h:10
virtual int availableForWrite()
Definition Arduino.h:128
virtual size_t write(const uint8_t *data, size_t len)
Definition Arduino.h:120
virtual void flush()
Definition Arduino.h:130
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140
virtual int available()
Definition Arduino.h:139
#define URL_CLIENT_TIMEOUT
Definition esp8266.h:23
MemoryType
Memory types.
Definition AudioTypes.h:33
RxTxMode
The Microcontroller is the Audio Source (TX_MODE) or Audio Sink (RX_MODE). RXTX_MODE is Source and Si...
Definition AudioTypes.h:26
@ RAM
Definition AudioTypes.h:33
@ PS_RAM
Definition AudioTypes.h:33
@ FLASH_RAM
Definition AudioTypes.h:33
@ RX_MODE
Definition AudioTypes.h:26
@ US
Definition AudioTypes.h:44