@@ -40,7 +40,7 @@ void render_sample_block(short *sample_buff_ch0, short *sample_buff_ch1, int num
4040 }
4141
4242 size_t bytes_written = 0 ;
43- for (int i = 0 ; i < num_samples ; i ++ ) {
43+ for (int i = 0 ; i < num_samples ; i ++ ) {
4444 /* low - high / low - high */
4545 const char samp32 [4 ] = {ptr_l [0 ], ptr_l [1 ], ptr_r [0 ], ptr_r [1 ]}; // ESP32 CPU is little-endian
4646
@@ -82,7 +82,7 @@ static void audio_buffer_reset(void)
8282
8383static void audio_render_task (void * pvParameter )
8484{
85- bool clear = true ;
85+ bool clear = false ;
8686 bool start = false;
8787 uint16_t count = 0 ;
8888 EventBits_t uxBits = 0 ;
@@ -94,18 +94,13 @@ static void audio_render_task(void *pvParameter)
9494 uint32_t size = 0 ;
9595 uint32_t remain = 0 ;
9696
97- xEventGroupWaitBits (
98- user_event_group ,
99- AUDIO_RENDER_RUN_BIT ,
100- pdFALSE ,
101- pdFALSE ,
102- portMAX_DELAY
103- );
104-
105- if (!clear ) {
97+ uxBits = xEventGroupGetBits (user_event_group );
98+ if (!clear && !(uxBits & AUDIO_RENDER_CLR_BIT )) {
10699 audio_buffer_reset ();
107100
108101 clear = true;
102+
103+ xEventGroupSetBits (user_event_group , AUDIO_RENDER_CLR_BIT );
109104 }
110105
111106 if (start ) {
@@ -143,6 +138,8 @@ static void audio_render_task(void *pvParameter)
143138 } else {
144139 if (xRingbufferGetCurFreeSize (audio_buff ) < 512 ) {
145140 start = true;
141+
142+ xEventGroupClearBits (user_event_group , AUDIO_RENDER_CLR_BIT );
146143 } else {
147144 vTaskDelay (1 / portTICK_RATE_MS );
148145 }
@@ -213,8 +210,6 @@ static void audio_render_task(void *pvParameter)
213210
214211void audio_render_init (void )
215212{
216- xEventGroupSetBits (user_event_group , AUDIO_RENDER_RUN_BIT );
217-
218213 memset (& buff_struct , 0x00 , sizeof (StaticRingbuffer_t ));
219214 audio_buff = xRingbufferCreateStatic (sizeof (buff_data ), RINGBUF_TYPE_BYTEBUF , buff_data , & buff_struct );
220215
0 commit comments