Skip to content

Commit 1a7a808

Browse files
authored
jump faster over ID3 blocks
1 parent 9d1759e commit 1a7a808

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

src/Audio.cpp

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
*
44
* Created on: Oct 26.2018
55
*
6-
* Version 3.0.7b
7-
* Updated on: Nov 27.2023
6+
* Version 3.0.7c
7+
* Updated on: Nov 29.2023
88
* Author: Wolle (schreibfaul1)
99
*
1010
*/
@@ -101,6 +101,12 @@ size_t AudioBuffer::bufferFilled() {
101101
return m_dataLength;
102102
}
103103

104+
size_t AudioBuffer::getMaxAvailableBytes() {
105+
if(m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr); }
106+
else { m_dataLength = (m_endPtr - m_readPtr);}
107+
return m_dataLength;
108+
}
109+
104110
void AudioBuffer::bytesWritten(size_t bw) {
105111
m_writePtr += bw;
106112
if(m_writePtr == m_endPtr) {
@@ -1523,10 +1529,10 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
15231529
}
15241530
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15251531
if(m_controlCounter == 2){ // skip extended header if exists
1526-
if(ehsz > 256) {
1527-
ehsz -=256;
1528-
remainingHeaderBytes -= 256;
1529-
return 256;} // Throw it away
1532+
if(ehsz > len) {
1533+
ehsz -=len;
1534+
remainingHeaderBytes -= len;
1535+
return len;} // Throw it away
15301536
else {
15311537
m_controlCounter ++;
15321538
remainingHeaderBytes -= ehsz;
@@ -1583,10 +1589,10 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
15831589
}
15841590
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15851591
if(m_controlCounter == 5){ // If the frame is larger than 512 bytes, skip the rest
1586-
if(framesize > 1024){
1587-
framesize -= 1024;
1588-
remainingHeaderBytes -= 1024;
1589-
return 1024;
1592+
if(framesize > len){
1593+
framesize -= len;
1594+
remainingHeaderBytes -= len;
1595+
return len;
15901596
}
15911597
else {
15921598
m_controlCounter = 3; // check next frame
@@ -1672,13 +1678,13 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
16721678
frameid[3] = 0;
16731679
for(uint8_t i = 0; i < 4; i++) tag[i] = frameid[i]; // tag = frameid
16741680
remainingHeaderBytes -= 3;
1675-
size_t len = bigEndian(data + 3, 3);
1676-
universal_tmp = len;
1681+
size_t dataLen = bigEndian(data + 3, 3);
1682+
universal_tmp = dataLen;
16771683
remainingHeaderBytes -= 3;
16781684
char value[256];
1679-
if(len > 249) {len = 249; }
1680-
memcpy(value, (data + 7), len);
1681-
value[len + 1] = 0;
1685+
if(dataLen > 249) {dataLen = 249; }
1686+
memcpy(value, (data + 7), dataLen);
1687+
value[dataLen + 1] = 0;
16821688
m_chbuf[0] = 0;
16831689
if(startsWith(tag, "PIC")) { // image embedded in header
16841690
if(getDatamode() == AUDIO_LOCALFILE){
@@ -1700,20 +1706,20 @@ int Audio::read_ID3_Header(uint8_t *data, size_t len) {
17001706
showID3Tag(tag, value);
17011707
}
17021708
remainingHeaderBytes -= universal_tmp;
1703-
universal_tmp -= len;
1709+
universal_tmp -= dataLen;
17041710

1705-
if(len == 0) m_controlCounter = 98;
1711+
if(dataLen == 0) m_controlCounter = 98;
17061712
if(remainingHeaderBytes == 0) m_controlCounter = 98;
17071713

1708-
return 3 + 3 + len;
1714+
return 3 + 3 + dataLen;
17091715
}
17101716
// -- end section V2.2 -----------
17111717

17121718
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
17131719
if(m_controlCounter == 98){ // skip all ID3 metadata (mostly spaces)
1714-
if(remainingHeaderBytes > 256) {
1715-
remainingHeaderBytes -=256;
1716-
return 256;
1720+
if(remainingHeaderBytes > len) {
1721+
remainingHeaderBytes -=len;
1722+
return len;
17171723
} // Throw it away
17181724
else {
17191725
m_controlCounter = 99;
@@ -2704,11 +2710,12 @@ void Audio::processLocalFile() {
27042710
return;
27052711
}
27062712
if(InBuff.bufferFilled() > maxFrameSize){ // read the file header first
2707-
InBuff.bytesWasRead(readAudioHeader(InBuff.bufferFilled()));
2713+
InBuff.bytesWasRead(readAudioHeader(InBuff.getMaxAvailableBytes()));
27082714
}
27092715
return;
27102716
}
27112717
else{
2718+
log_e("%i", millis() - ctime);
27122719
if((InBuff.freeSpace() > maxFrameSize) && (m_file_size - byteCounter) > maxFrameSize && availableBytes){
27132720
// fill the buffer before playing
27142721
return;
@@ -2935,7 +2942,7 @@ void Audio::processWebFile() {
29352942
// we have a webfile, read the file header first - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
29362943
if(m_controlCounter != 100){
29372944
if(InBuff.bufferFilled() > maxFrameSize){ // read the file header first
2938-
int32_t bytesRead = readAudioHeader(maxFrameSize);
2945+
int32_t bytesRead = readAudioHeader(InBuff.getMaxAvailableBytes());
29392946
if(bytesRead > 0) InBuff.bytesWasRead(bytesRead);
29402947
}
29412948
return;
@@ -5429,7 +5436,7 @@ uint32_t Audio::flac_correctResumeFilePos(uint32_t resumeFilePos){
54295436
p2 = audiofile.read();
54305437
pos+=2;
54315438
while(!found || pos == m_file_size){
5432-
if(p1 == 0xFF && p2 == 0xF8){found = true; log_i("found"); break;}
5439+
if(p1 == 0xFF && p2 == 0xF8){found = true; break;}
54335440
p1 = p2;
54345441
p2 = audiofile.read();
54355442
pos++;

src/Audio.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
*
44
* Created on: Oct 28,2018
55
*
6-
* Version 3.0.7a
7-
* Updated on: Nov 11.2023
6+
* Version 3.0.7c
7+
* Updated on: Nov 29.2023
88
* Author: Wolle (schreibfaul1)
99
*/
1010

@@ -86,6 +86,7 @@ class AudioBuffer {
8686
size_t freeSpace(); // number of free bytes to overwrite
8787
size_t writeSpace(); // space fom writepointer to bufferend
8888
size_t bufferFilled(); // returns the number of filled bytes
89+
size_t getMaxAvailableBytes(); // max readable bytes in one block
8990
void bytesWritten(size_t bw); // update writepointer
9091
void bytesWasRead(size_t br); // update readpointer
9192
uint8_t* getWritePtr(); // returns the current writepointer

0 commit comments

Comments
 (0)