乐鑫技术交流
直播中

杨杰

7年用户 1101经验值
私信 关注
[问答]

使用ESP32-LyraTD-MSC做文字转语音总是宕机怎么解决?

使用ESP32-LyraTD-MSC做文字转语音,

再上传语音buffer时,总是宕机。困扰一天也不能解决。

1.分配内存

    int num = 3;

    int sz = 8 * num * 1024 * sizeof(char);

    int sz1 = 8 * (num+1) * 1024 * sizeof(char);

    char *buff = (char *)malloc(sz);

    if (NULL == buff) {

        ESP_LOGE(TAG, "Memory allocation failed!");

    }

    memset(buff, 0, sz);



    int max_len = 1 * 1024;

    char *data = (char *)malloc(max_len);

    memset(data, 0, max_len);



2.在语音唤醒后,启动录音

while (1)

{

    if (enable_wn) {

            raw_stream_read(raw_read, (char *)buffer, size * sizeof(short));



            if (wakenet->detect(model_wn_data, (int16_t *)buffer) ==  WAKE_UP) {

                ESP_LOGI(TAG, "wake up");

                enable_wn = false;

            }

        }

        else

        {

            ESP_LOGI(TAG, "get voice begin!");



            esp_http_client_config_t config = {

                .url = baidu_asr_url,

                .event_handler = _http_event_handler,

                .buffer_size = sz1,

                .buffer_size_tx = sz1,

            };      

            esp_http_client_handle_t client = esp_http_client_init(&config);

            esp_http_client_set_method(client, HTTP_METHOD_POST);

            esp_http_client_set_post_field(client, (const char *)buff, sz);

            esp_http_client_set_header(client, "Content-Type", "audio/pcm;rate=16000");

            memset(temp, 0, 128);

            snprintf(temp, 128, "%d", sz);

            esp_http_client_set_header(client, "Content-Length", temp);  

            while (1) {

                err = esp_http_client_perform(client);

                if (err != ESP_ERR_HTTP_EAGAIN) {

                    break;

                }

            }

            if (err == ESP_OK) {

                ESP_LOGI(TAG, "HTTPS Status = %d, content_length = %d",

                        esp_http_client_get_status_code(client),

                        esp_http_client_get_content_length(client));

            } else {

                ESP_LOGE(TAG, "Error perform http request %s", esp_err_to_name(err));

            }

            esp_http_client_cleanup(client);



            enable_wn = true;

            memset(buff, 0, sz);

        }

}



3.困惑:

变量num 决定了要录音的时间长短,数值为3可以运行,结果如附件3



改为6无法运行,内存分配首先失败了,结果如附件2



4.问题:

如何做一个大的buffer的Post请求?官方如何解决上传语音数据,文字转语音的问题。(网上的有的教程基于早期版本,代码已经无法运行了)

更多回帖

发帖
×
20
完善资料,
赚取积分