啟明智顯分享|樂鑫ESP32-S3語音--文字轉語音(TTS)
阿新 • • 發佈:2022-05-27
今天,我們來研究樂鑫的語音助手框架ESP-Skainet其中的中文語音合成的例程。
編譯原例程
- 首先需要clone例程
git clone --recursive https://github.com/espressif/esp-skainet.git
該工程內部自帶一個idf,是執行的最佳版本,不過你任然可以使用自己的idf。
cd esp-skainet/examples/chinese_tts
cp sdkconfig.defaults.esp32s3 sdkconfig.defaults
idf.py set-target esp32s3
idf.py menuconfig
修改Audio Media Hal -> Audio Hardware board 改成ESP32-S3-Korvo-1
idf.py flash monitor -p /dev/ttyUSB0
歡迎使用樂鑫語音合成 I (266) tts_parser: unicode:0x6b22-> huan1 I (266) tts_parser: unicode:0x8fce -> ying2 I (276) tts_parser: unicode:0x4f7f -> shi3 I (276) tts_parser: unicode:0x7528 -> yong4 I (286) tts_parser: unicode:0x4e50 -> le4 I (286) tts_parser: unicode:0x946b -> xin1 I (296) tts_parser: unicode:0x8bed -> yu3 I (296) tts_parser: unicode:0x97f3-> yin1 I (306) tts_parser: unicode:0x5408 -> he2 I (306) tts_parser: unicode:0x6210 -> cheng2 請輸入短語:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_tts.h" #include "esp_tts_voice_xiaole.h" #include "esp_board_init.h" int app_main() { ESP_ERROR_CHECK(esp_board_init(AUDIO_HAL_16K_SAMPLES, 1, 16)); // 初始化codec晶片,配置好取樣率、聲道數、取樣大小 esp_tts_voice_t *voice = (esp_tts_voice_t *)&esp_tts_voice_xiaole; // 配置tts的聲音配置檔案,來自libvoice_set_xiaole esp_tts_handle_t *tts_handle = esp_tts_create(voice); // 建立tts物件 char *prompt1 = "你好我是啟明雲端"; // 需要轉換的文字 if (esp_tts_parse_chinese(tts_handle, prompt1)) // 文字解析成拼音 { int len[1] = {0}; do { short *pcm_data = esp_tts_stream_play(tts_handle, len, 3); // 拼音轉換成pcm音訊 esp_audio_play(pcm_data, len[0] * 2, portMAX_DELAY); //播放音訊 } while (len[0] > 0); } esp_tts_stream_reset(tts_handle); // 重置 tts 流並清除 TTS 例項的所有快取 return 0; }
這裡音訊的tts來自靜態庫libvoice_set_xiaole中,目前也只有這一個音色可供使用,其餘的tts相關函式則是屬於靜態庫libesp_tts_chinese。