#define AUDIO_CODEC_DMA_DESC_NUM 8//6
#define AUDIO_CODEC_DMA_FRAME_NUM 340//240
===================================================================================
环形队列缓存要足够大:
buf_handle从(read_pre_back_ + 10)加大到(read_pre_back_ + 60),更多缓存,mic不容易卡顿:
buf_handle = xRingbufferCreate(RECV2_BUF_SIZE * (read_pre_back_ + 60), RINGBUF_TYPE_NOSPLIT);
===================================================================================
vTaskDelay(1)延时去掉,更实时:
void process_baidu_Asr(void *args){
while (1) {
//vTaskDelay(1); //
if(buf_handle!=nullptr){
size_t item_SIZE;
char * retbytes=(char * )xRingbufferReceive(buf_handle,&item_SIZE , pdMS_TO_TICKS(2000)); //xRingbufferReceiveUpTo
if (retbytes != NULL ) { //加了 && item_SIZE>10 会导致死锁??,导致一直不处理队列,发送那边直接死住,超时
if (client!=nullptr&& esp_websocket_client_is_connected(client) ){
xSemaphoreTake(ws_mutex, pdMS_TO_TICKS(max_send_wait_time_ms));
//esp_err_t err = esp_websocket_client_send_bin_partial(client, (const char *)retbytes,(int)(item_SIZE), portMAX_DELAY);
//为了防止返回PONG帧异常,esp_websocket_client_send_bin_partial改为esp_websocket_client_send_bin???:
esp_err_t err = esp_websocket_client_send_bin(client, (const char *)retbytes,(int)(item_SIZE), portMAX_DELAY);
if (err <0 ) {
ESP_LOGE(TAG, "Send bin failed1: %s , item_SIZE=%d ", esp_err_to_name(err),item_SIZE);
}
// err =esp_websocket_client_send_fin(client, portMAX_DELAY);
// if (err != ESP_OK)
// {
// ESP_LOGE(TAG, "Send bin failed2: %s", esp_err_to_name(err));
// }
xSemaphoreGive(ws_mutex);
}
vRingbufferReturnItem(buf_handle, (void *)retbytes);
}
}else{
vTaskDelay(3);
}
}
vTaskDelete(NULL);
}