22template <
typename T = u
int8_t>
31 virtual bool read(T &result) = 0;
35 if (data ==
nullptr) {
40 for (
int j = 0; j < lenResult; j++) {
43 LOGD(
"readArray %d -> %d", len, lenResult);
61 for (
int j = 0; j < len; j++) {
62 if (!
write(data[j])) {
68 LOGD(
"writeArray %d -> %d", len, result);
82 virtual bool peek(T &result) = 0;
116 if (
size() == 0)
return 0.0f;
117 return 100.0f *
static_cast<float>(
available()) /
118 static_cast<float>(
size());
128 LOGE(
"resize not implemented for this buffer");
148template <
typename T = u
int8_t>
157 for (
int j = 0; j < result; j++) {
167 template <
int rows,
int channels>
170 for (
int j = 0; j < lenResult; j++) {
173 for (
int i = 0; i < channels; i++) {
193template <
typename T = u
int8_t>
237 bool read(T &result)
override {
238 bool success =
false;
246 bool peek(T &result)
override {
247 bool success =
false;
257 return max(result, 0);
266 if (len > len_available) {
278 return len_available;
281 len_available -= len;
319 size_t result = min(available_size, (
size_t)
buffer.size());
362template <
typename T = u
int8_t>
370 bool read(T &result)
override {
383 bool peek(T &result)
override {
397 for (
int j = 0; j < n; j++) {
402 if (count == 0)
break;
413 if (data ==
nullptr) {
418 if (to_read <= 0)
return 0;
421 int second = to_read - first;
423 memcpy(data + first,
_aucBuffer.data(), second *
sizeof(T));
433 if (data ==
nullptr) {
438 if (to_write <= 0)
return 0;
441 int second = to_write - first;
443 memcpy(
_aucBuffer.data(), data + first, second *
sizeof(T));
456 virtual bool write(T data)
override {
485 LOGI(
"resize: %d", len);
505 return (uint32_t)(index + 1) %
max_size; }
516template <
class File,
typename T>
533 LOGE(
"file is not valid");
543 if (
p_file ==
nullptr)
return 0;
544 int read_count = min(count,
available());
549 if (offset.
len1 > 0) {
557 for (
int i = 0; i < count; i++) {
558 LOGI(
"read #%d value %d", offset.
pos, (
int)data[i]);
566 bool peek(T &result)
override {
578 if (
p_file ==
nullptr)
return 0;
579 int read_count = min(count,
available());
584 if (offset.
len1 > 0) {
597 if (
p_file ==
nullptr)
return 0;
598 for (
int i = 0; i < len; i++) {
607 if (offset.
len1 > 0) {
667 int overflow = (pos + len) -
max_size;
674 result.
len = len - overflow;
675 result.
len1 = overflow;
682 int file_pos = pos *
sizeof(T);
684 LOGD(
"file_seek: %d", pos);
686 LOGE(
"seek %d", file_pos);
695 LOGD(
"file_write: %d", count);
696 if (
p_file ==
nullptr)
return 0;
697 int to_write_bytes =
sizeof(T) * count;
698 int bytes_written =
p_file->
write((
const uint8_t *)data, to_write_bytes);
700 int elements_written = bytes_written /
sizeof(T);
701 if (bytes_written != to_write_bytes) {
702 LOGE(
"write: %d -> %d bytes", to_write_bytes, bytes_written);
704 return elements_written;
709 LOGD(
"file_read: %d", count);
710 int read_bytes = count *
sizeof(T);
712 int result_count = result_bytes /
sizeof(T);
713 if (result_count != count) {
714 LOGE(
"readBytes: %d -> %d", read_bytes, result_bytes);
732template <
typename T = u
int8_t>
740 bool read(T &result)
override {
750 while (count < len) {
759 bool peek(T &result)
override {
857 return run_time == 0 ? 0 :
sample_count * 1000 / run_time;
875 LOGE(
"resize: buffer_size is 0");
892 LOGE(
"buffer count=1: not supported, use SingleBuffer or RingBuffer instead");
898 LOGW(
"resize() changes buffer_size: discarding buffered data");
905 for (
int j = 0; j < count; j++) {
907 LOGD(
"new buffer %p", buffer);
927 for (
size_t j = 0; j < (size_t)count -
buffer_count; j++) {
935 while (removed < to_remove && !avail.
empty()) {
936 delete avail[avail.
size() - 1];
940 if (removed < to_remove) {
941 LOGW(
"resize() could not shrink to %d buffers: %d still hold data",
942 count, (
int)(to_remove - removed));
984 while (ptr !=
nullptr) {
985 LOGD(
"deleting %p", ptr);
991 while (ptr !=
nullptr) {
992 LOGD(
"deleting %p", ptr);
1036template <
typename T = u
int8_t>
1063 if (sbuffer->
id ==
id) {
1090template <
class File,
typename T>
1111 if (!file)
return false;
1142 bool result =
read(data);
1160 return result /
sizeof(T);
1227 int len = strlen(file.
name());
1228 char file_name[len + 1];
1229 strncpy(file_name, file.
name(), len);
1244template <
typename T = u
int8_t>
1248 LOGI(
"BufferedArray(%d)", len);
1254 LOGD(
"getValues(%d,%d) - max %d", offset, length,
array.size());
1272 return &
array[offset];
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#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 assert(T)
Definition avr.h:10
virtual size_t readBytes(uint8_t *data, size_t len)
Definition Arduino.h:140