3#include "AudioTools/CoreAudio/BaseStream.h"
4#include "AudioTools/CoreAudio/AudioBasic/StrView.h"
9# define READTYPE uint8_t
27 FileLoopT(FileType
file,
int count = -1,
int rewindPos = -1,
int startPos = 0) {
41 current_file.readBytes(tmp, 4);
45 current_file.seek(start_pos);
46 size_open = total_size;
77 return total_size == -1 ? current_file.size() : total_size;
89 int available()
override {
91 if (total_size!=-1)
return size_open;
93 return isLoopActive() ? DEFAULT_BUFFER_SIZE : current_file.available();
96 size_t readBytes(uint8_t *data,
size_t len)
override {
97 LOGD(
"FileLoopT::readBytes %d at %d", (
int)len, (
int)current_file.position());
104 copy_len = min((
int)len, size_open);
108 int result1 = current_file.readBytes((READTYPE *)data, copy_len);
110 int open = copy_len - result1;
112 if (rewind_pos < 0) rewind_pos = 0;
113 LOGI(
"seek %d", rewind_pos);
115 current_file.seek(rewind_pos);
117 if (callback!=
nullptr){
120 result1 = current_file.readBytes((READTYPE*)data + result1, open);
125 int result = result1 + result2;
141 size_t write(
const uint8_t* data,
size_t len) {
return current_file.write(data, len);}
149 void (*callback)(FileLoopT &loop) =
nullptr;
150 FileType current_file;