Skip to content

Commit a7692a7

Browse files
committed
Fix Double buffer fill
1 parent f42c6f5 commit a7692a7

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

libraries/PDM/src/stm32/PDM.cpp

+17-8
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ int PDMClass::begin(int channels, long sampleRate) {
6969
gain_db = 24;
7070
}
7171

72-
//g_pcmbuf = (uint16_t*)_doubleBuffer.data();
72+
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
73+
_doubleBuffer.swap(0);
7374

7475
if(py_audio_init(channels, sampleRate, gain_db, 0.9883f)) {
7576
py_audio_start_streaming();
@@ -118,16 +119,24 @@ size_t PDMClass::getBufferSize()
118119
return _doubleBuffer.getSize();
119120
}
120121

122+
#define HALF_TRANSFER_SIZE (64*_channels)
123+
static int g_pcmbuf_size=0;
124+
121125
void PDMClass::IrqHandler(bool halftranfer)
122126
{
123-
if (_doubleBuffer.available() == 0) {
124-
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
127+
if (g_pcmbuf_size < _doubleBuffer.getSize()) {
125128
audio_pendsv_callback();
126-
_doubleBuffer.swap(_doubleBuffer.availableForWrite());
127-
128-
if (_onReceive) {
129-
_onReceive();
130-
}
129+
g_pcmbuf += (HALF_TRANSFER_SIZE/2);
130+
g_pcmbuf_size += HALF_TRANSFER_SIZE;
131+
132+
if(g_pcmbuf_size == _doubleBuffer.getSize()) {
133+
_doubleBuffer.swap(g_pcmbuf_size);
134+
g_pcmbuf = (uint16_t*)_doubleBuffer.data();
135+
g_pcmbuf_size = 0;
136+
if (_onReceive) {
137+
_onReceive();
138+
}
139+
}
131140
}
132141
}
133142

0 commit comments

Comments
 (0)