@@ -70,7 +70,10 @@ int PDMClass::begin(int channels, int sampleRate) {
7070 _gain = 24 ;
7171 }
7272
73- if (py_audio_init (channels, sampleRate, _gain, 0 .9883f )) {
73+ g_pcmbuf = (uint16_t *)_doubleBuffer.data ();
74+ _doubleBuffer.swap (0 );
75+
76+ if (py_audio_init (channels, sampleRate, gain_db, 0 .9883f )) {
7477 py_audio_start_streaming ();
7578 _init = 1 ;
7679 return 1 ;
@@ -114,16 +117,29 @@ void PDMClass::setBufferSize(int bufferSize)
114117 _doubleBuffer.setSize (bufferSize);
115118}
116119
120+ size_t PDMClass::getBufferSize ()
121+ {
122+ return _doubleBuffer.getSize ();
123+ }
124+
125+ #define HALF_TRANSFER_SIZE (64 *_channels)
126+ static int g_pcmbuf_size=0 ;
127+
117128void PDMClass::IrqHandler (bool halftranfer)
118129{
119- if (_doubleBuffer.available () == 0 ) {
120- g_pcmbuf = (uint16_t *)_doubleBuffer.data ();
130+ if (g_pcmbuf_size < _doubleBuffer.getSize ()) {
121131 audio_pendsv_callback ();
122- _doubleBuffer.swap (_doubleBuffer.availableForWrite ());
123- }
124-
125- if (_onReceive) {
126- _onReceive ();
132+ g_pcmbuf += (HALF_TRANSFER_SIZE/2 );
133+ g_pcmbuf_size += HALF_TRANSFER_SIZE;
134+
135+ if (g_pcmbuf_size == _doubleBuffer.getSize ()) {
136+ _doubleBuffer.swap (g_pcmbuf_size);
137+ g_pcmbuf = (uint16_t *)_doubleBuffer.data ();
138+ g_pcmbuf_size = 0 ;
139+ if (_onReceive) {
140+ _onReceive ();
141+ }
142+ }
127143 }
128144}
129145
@@ -136,6 +152,10 @@ void PDMIrqHandler(bool halftranfer)
136152void PDMsetBufferSize (int size) {
137153 PDM.setBufferSize (size);
138154}
155+
156+ size_t PDMgetBufferSize () {
157+ return PDM.getBufferSize ();
158+ }
139159}
140160
141161PDMClass PDM (0 , 0 , 0 );
0 commit comments