You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.7 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "utils.h"
#include "esp_log.h"
#include "esp_http_client.h"
#include <stdio.h>
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;
}