Skip to content

Commit 6c803d0

Browse files
committed
AudioBuffer renewed
1 parent 37dfbd9 commit 6c803d0

File tree

2 files changed

+48
-22
lines changed

2 files changed

+48
-22
lines changed

src/Audio.cpp

Lines changed: 46 additions & 20 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.12b
7-
* Updated on: Jul 27.2024
6+
* Version 3.0.12c
7+
* Updated on: Jul 28.2024
88
* Author: Wolle (schreibfaul1)
99
*
1010
*/
@@ -67,46 +67,72 @@ void AudioBuffer::changeMaxBlockSize(uint16_t mbs) {
6767
uint16_t AudioBuffer::getMaxBlockSize() { return m_maxBlockSize; }
6868

6969
size_t AudioBuffer::freeSpace() {
70-
if(m_readPtr >= m_writePtr) { m_freeSpace = (m_readPtr - m_writePtr); }
71-
else { m_freeSpace = (m_endPtr - m_writePtr) + (m_readPtr - m_buffer); }
72-
if(m_f_start) m_freeSpace = m_buffSize;
73-
return m_freeSpace - 1;
70+
if(m_readPtr == m_writePtr) {
71+
if(m_f_start) m_freeSpace = m_buffSize;
72+
else m_freeSpace = 0;
73+
}
74+
if(m_readPtr < m_writePtr) {
75+
m_freeSpace = (m_endPtr - m_writePtr + 1) + (m_readPtr - m_buffer);
76+
}
77+
if(m_readPtr > m_writePtr) {
78+
m_freeSpace = m_readPtr - m_writePtr;
79+
}
80+
return m_freeSpace;
7481
}
7582

7683
size_t AudioBuffer::writeSpace() {
7784
xSemaphoreTakeRecursive(mutex_buffer, 3 * configTICK_RATE_HZ);
78-
if(m_readPtr >= m_writePtr) {
79-
m_writeSpace = (m_readPtr - m_writePtr - 1); // readPtr must not be overtaken
85+
if(m_readPtr == m_writePtr) {
86+
if(m_f_start) m_writeSpace = m_endPtr - m_writePtr + 1;
87+
else m_writeSpace = 0;
8088
}
81-
else {
82-
if((m_readPtr - m_buffer) == 0) m_writeSpace = (m_endPtr - m_writePtr - 1);
83-
else m_writeSpace = (m_endPtr - m_writePtr);
89+
if(m_readPtr < m_writePtr) {
90+
m_writeSpace = m_endPtr - m_writePtr + 1;
91+
}
92+
if(m_readPtr > m_writePtr) {
93+
m_writeSpace = m_readPtr - m_writePtr ;
8494
}
85-
if(m_f_start) m_writeSpace = m_buffSize - 1;
8695
xSemaphoreGiveRecursive(mutex_buffer);
8796
return m_writeSpace;
8897
}
8998

9099
size_t AudioBuffer::bufferFilled() {
91100
xSemaphoreTakeRecursive(mutex_buffer, 3 * configTICK_RATE_HZ);
92-
if(m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr); }
93-
else { m_dataLength = (m_endPtr - m_readPtr) + (m_writePtr - m_buffer); }
101+
if(m_readPtr == m_writePtr) {
102+
if(m_f_start) m_dataLength = 0;
103+
else m_dataLength = (m_endPtr - m_readPtr + 1) + (m_writePtr - m_buffer);
104+
}
105+
if(m_readPtr < m_writePtr) {
106+
m_dataLength = m_writePtr - m_readPtr;
107+
}
108+
if(m_readPtr > m_writePtr) {
109+
m_dataLength = (m_endPtr - m_readPtr + 1) + (m_writePtr - m_buffer);
110+
}
94111
xSemaphoreGiveRecursive(mutex_buffer);
95112
return m_dataLength;
96113
}
97114

98115
size_t AudioBuffer::getMaxAvailableBytes() {
99116
xSemaphoreTakeRecursive(mutex_buffer, 3 * configTICK_RATE_HZ);
100-
if(m_writePtr >= m_readPtr) { m_dataLength = (m_writePtr - m_readPtr - 1); }
101-
else { m_dataLength = (m_endPtr - m_readPtr); }
117+
if(m_readPtr == m_writePtr) {
118+
if(m_f_start)m_dataLength = 0;
119+
else m_dataLength = (m_endPtr - m_readPtr + 1) + (m_writePtr - m_buffer);
120+
}
121+
if(m_readPtr < m_writePtr) {
122+
m_dataLength = m_writePtr - m_readPtr;
123+
}
124+
if(m_readPtr > m_writePtr) {
125+
m_dataLength = (m_endPtr - m_readPtr + 1);
126+
}
102127
xSemaphoreGiveRecursive(mutex_buffer);
103128
return m_dataLength;
104129
}
105130

106131
void AudioBuffer::bytesWritten(size_t bw) {
107132
xSemaphoreTakeRecursive(mutex_buffer, 3 * configTICK_RATE_HZ);
108133
m_writePtr += bw;
109-
if(m_writePtr == m_endPtr) { m_writePtr = m_buffer; }
134+
if(m_writePtr == m_endPtr + 1) { m_writePtr = m_buffer; }
135+
if(m_writePtr > m_endPtr + 1) log_e("m_writePtr %i, m_endPtr %i", m_writePtr, m_endPtr);
110136
if(bw && m_f_start) m_f_start = false;
111137
xSemaphoreGiveRecursive(mutex_buffer);
112138
}
@@ -116,7 +142,7 @@ void AudioBuffer::bytesWasRead(size_t br) {
116142
m_readPtr += br;
117143
if(m_readPtr >= m_endPtr) {
118144
size_t tmp = m_readPtr - m_endPtr;
119-
m_readPtr = m_buffer + tmp;
145+
m_readPtr = m_buffer + tmp - 1;
120146
}
121147
xSemaphoreGiveRecursive(mutex_buffer);
122148
}
@@ -125,9 +151,9 @@ uint8_t* AudioBuffer::getWritePtr() { return m_writePtr; }
125151

126152
uint8_t* AudioBuffer::getReadPtr() {
127153
xSemaphoreTakeRecursive(mutex_buffer, 3 * configTICK_RATE_HZ);
128-
size_t len = m_endPtr - m_readPtr;
154+
int32_t len = m_endPtr - m_readPtr;
129155
if(len < m_maxBlockSize) { // be sure the last frame is completed
130-
memcpy(m_endPtr, m_buffer, m_maxBlockSize - len); // cpy from m_buffer to m_endPtr with len
156+
memcpy(m_endPtr + 1, m_buffer, m_maxBlockSize - (len - 1)); // cpy from m_buffer to m_endPtr with len
131157
}
132158
xSemaphoreGiveRecursive(mutex_buffer);
133159
return m_readPtr;

src/Audio.h

Lines changed: 2 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.12b
7-
* Updated on: Jul 27.2024
6+
* Version 3.0.12c
7+
* Updated on: Jul 28.2024
88
* Author: Wolle (schreibfaul1)
99
*/
1010

0 commit comments

Comments
 (0)