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;