#include "utils.h" #include "esp_log.h" #include "esp_http_client.h" #include static char *TAG = "utils"; // 在这里定义函数 void exampleFunction() { ESP_LOGW(TAG, "[exampleFunction] test"); } char *Utils_STT(uint8_t *data, size_t len) { ESP_LOGD(TAG, "start http len=%u", len); esp_http_client_config_t config = { .url = "http://110.42.98.230:8456/post", .timeout_ms = 60000, // 增加超时时间 }; esp_http_client_handle_t client = esp_http_client_init(&config); char *result = NULL; esp_http_client_set_method(client, HTTP_METHOD_POST); esp_err_t err = esp_http_client_open(client, len); if (err == ESP_OK) { ESP_LOGW(TAG, "Failed to open client! - %d", err); } if (len > 0) { ESP_LOGW(TAG, "write client"); esp_http_client_write(client, (const char *)data, len); } int content_length = esp_http_client_fetch_headers(client); if (esp_http_client_is_chunked_response(client)) { ESP_LOGW(TAG, "http_client_is_chunked - YES"); esp_http_client_get_chunk_length(client, &content_length); } ESP_LOGW(TAG, "content_length=%d", content_length); result = (char *)malloc(content_length + 1); int read = esp_http_client_read_response(client, result, content_length); if (read != content_length) { ESP_LOGE(TAG, "HTTP_ERROR: read=%d, length=%d", read, content_length); free(result); result = NULL; } else { result[content_length] = 0; ESP_LOGW(TAG, "result: %s, size: %d", result, strlen(result)); } ESP_LOGW(TAG, "return - %s", result); return result; } // 定义函数,用于通过GET请求获取音频数据 esp_err_t Utils_GetAudio(const char *voiceId, uint8_t **audioData, size_t *audioLen) { esp_err_t err; esp_http_client_config_t config = { .url = "http://110.42.98.230:8456/voice/", .timeout_ms = 60000, // 增加超时时间 }; // 构建完整的URL char fullUrl[256]; snprintf(fullUrl, sizeof(fullUrl), "%s%s", config.url, voiceId); config.url = fullUrl; esp_http_client_handle_t client = esp_http_client_init(&config); if (client == NULL) { ESP_LOGE(TAG, "Failed to initialize HTTP client"); return ESP_FAIL; } // 设置HTTP方法为GET esp_http_client_set_method(client, HTTP_METHOD_GET); // 打开HTTP连接 err = esp_http_client_open(client, 0); if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err)); goto cleanup; } // 获取响应头 int content_length = esp_http_client_fetch_headers(client); if (esp_http_client_is_chunked_response(client)) { ESP_LOGW(TAG, "http_client_is_chunked - YES"); esp_http_client_get_chunk_length(client, &content_length); } ESP_LOGW(TAG, "content_length=%d", content_length); // 分配内存以存储音频数据 *audioData = (uint8_t *)malloc(content_length); if (*audioData == NULL) { ESP_LOGE(TAG, "Failed to allocate memory for audio data"); err = ESP_ERR_NO_MEM; goto cleanup; } // 读取音频数据 int read_len = esp_http_client_read(client, (char *)*audioData, content_length); if (read_len != content_length) { ESP_LOGE(TAG, "Failed to read audio data: read_len=%d, content_length=%d", read_len, content_length); free(*audioData); *audioData = NULL; err = ESP_FAIL; goto cleanup; } // 设置音频数据长度 *audioLen = read_len; cleanup: esp_http_client_cleanup(client); if (err == ESP_OK) { ESP_LOGI(TAG, "Successfully fetched audio data, length: %d", *audioLen); } return err; }