implement pre-buffering

This commit is contained in:
Hendrik Langer 2018-08-28 00:56:48 +02:00
parent be2ad3de2f
commit ed1bb429f1
2 changed files with 21 additions and 0 deletions

View File

@ -170,6 +170,26 @@ void AudioFileSourceBuffer::fill()
}
}
bool AudioFileSourceBuffer::fill(uint32_t len, uint32_t max_delay)
{
if (!src->isOpen()) {
Serial.printf_P(PSTR("Source file not open\n"));
return false;
}
if (!src->loop()) return false;
fill();
uint32_t toFill = (len < buffSize) ? len : buffSize;
uint32_t startTimestamp = millis();
while (length < toFill && millis() - startTimestamp < max_delay) {
delay(100);
if (!src->loop()) return false;
fill();
}
if (length < len) return false;
return true;
}
bool AudioFileSourceBuffer::loop()

View File

@ -39,6 +39,7 @@ class AudioFileSourceBuffer : public AudioFileSource
virtual uint32_t getPos() override;
virtual bool loop() override;
virtual bool fill(uint32_t len, uint32_t max_delay);
virtual uint32_t getFillLevel();
enum { STATUS_FILLING=2, STATUS_UNDERFLOW };