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;
895 virtual size_t write(
const uint8_t *data,
size_t len)
override {
896 if (
p_print ==
nullptr)
return 0;
902 if (
p_print ==
nullptr)
return 0;
921 if (byte_rate == 0) {
922 LOGE(
"Audio Info not defined");
1004 size_t write(
const uint8_t *data,
size_t len)
override {
1011 if (
p_in ==
nullptr)
return 0;
1016 if (
p_in ==
nullptr) {
1034 LOGD(
"wait us: %ld",
static_cast<long>(waitUs));
1036 int64_t waitMs = waitUs / 1000;
1037 if (waitMs > 0)
delay(waitMs);
1040 LOGD(
"negative delay!")
1074template <
typename T=
int16_t,
typename SumT=
float>
1089 if (index <
size()) {
1093 LOGE(
"Invalid index %d - max is %d", index,
size() - 1);
1113 LOGE(
"Invalid index %d - max is %d", index,
size() - 1);
1133 LOGW(
"readBytes: %d", (
int)len);
1171 if (idx < 0 || idx >=
size()) {
1199 if (idx < 0 || idx >=
size())
return nullptr;
1239 int samples = byteCount /
sizeof(T);
1242 int stream_count =
size();
1244 int samples_eff_max = 0;
1245 for (
int j = 0; j < stream_count; j++) {
1249 if (samples_eff > samples_eff_max) samples_eff_max = samples_eff;
1254 for (
int j = 0; j < samples_eff_max; j++) {
1257 return samples_eff_max *
sizeof(T);
1263 for (
int j = 0; j <
size(); j++) {
1271 for (
int j = 0; j < samples_eff; j++) {
1277 memset(
result_vect.data(), 0,
sizeof(SumT) * samples);
1290template <
typename T>
1324 LOGD(
"readBytes: %d", (
int)len);
1325 T *p_data = (T *)data;
1326 int result_len = min((
size_t)
available(), len);
1329 for (
int j = 0; j < frames; j++) {
1330 for (
int i = 0; i <
records.size(); i++) {
1331 for (
int ch = 0; ch <
records[i].channels; ch++) {
1332 p_data[result_idx++] =
1337 return result_idx *
sizeof(T);
1351 records[channel].weight = weight;
1365 int result =
records[0].stream->available();
1367 int tmp =
records[j].stream->available();
1420 size_t (*
cb_write)(
const uint8_t *data,
size_t len)) {
1476 if (tmp_available < 0)
return result;
1478 return tmp_available;
1498 size_t write(
const uint8_t *data,
size_t len)
override {
1506 size_t result = len;
1508 result =
cb_update((uint8_t *)data, len);
1539 size_t (*
cb_write)(
const uint8_t *data,
size_t len) =
nullptr;
1540 size_t (*
cb_read)(uint8_t *data,
size_t len) =
nullptr;
1556template <
typename T =
int16_t,
class TF =
float>
1590 LOGE(
"channels must not be 0");
1601 virtual size_t write(
const uint8_t *data,
size_t len)
override {
1602 if (
p_out ==
nullptr)
return 0;
1603 size_t result =
converter.convert((uint8_t *)data, len);
1608 if (
p_io ==
nullptr)
return 0;
1610 result =
converter.convert(data, result);
1615 if (
p_io ==
nullptr)
return 0;
1620 if (
p_out ==
nullptr)
return 0;
1681 LOGI(
"VolumeMeter::setAudioInfo: channels %d", channels);
1691 size_t write(
const uint8_t *data,
size_t len)
override {
1693 size_t result = len;
1694 if (
p_out !=
nullptr) {
1715 LOGE(
"begin not called!");
1719 LOGE(
"invalid channel %d", channel);
1763 return total / count;
1831 if (data ==
nullptr || len == 0)
return;
1835 updateVolumesT<int8_t>(data, len);
1838 updateVolumesT<int16_t>(data, len);
1841 updateVolumesT<int24_t>(data, len);
1844 updateVolumesT<int32_t>(data, len);
1852 template <
typename T>
1854 T *bufferT = (T *)buffer;
1855 int samplesCount = size /
sizeof(T);
1857 for (
int j = 0; j < samplesCount; j++) {
1858 float tmp = abs(
static_cast<float>(bufferT[j]));
1891 unsigned long current_time =
millis();
1893 if (above_threshold) {
2031 size_t write(
const uint8_t *data,
size_t len)
override {
2108 uint16_t (*
callback)(uint8_t *data, uint16_t len) =
nullptr;
2146 bool do_restart =
active;
2147 if (do_restart)
end();
2174 LOGI(
"sample_rate: %u -> time: %u milliseconds",
2223 virtual size_t writeExt(
const uint8_t *data,
size_t len)
override {
2237 virtual size_t readExt(uint8_t *data,
size_t len)
override {
2253 unsigned long ms =
millis();
2257 uint16_t rate = 1 * 1000 / diff;
2283 if (src !=
nullptr) {
2290 if (buffer_available < available_bytes) {
2292 uint16_t to_clear = available_bytes - buffer_available;
2293 uint8_t tmp[to_clear];
2302 if (src->
buffer !=
nullptr && src->
frame !=
nullptr &&
2304 uint16_t available_bytes =
2306 if (available_bytes !=
2308 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 esp32.h:268
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