该示例演示了如何在 Arduino 平台上利用 M5ModuleLLM 库调用 TTS 模型实现文本合成音频并进行播放。
参考Module LLM Arduino 快速上手,完成基础环境搭建与 M5ModuleLLM 驱动库的安装。
参考Module LLM 软件包更新教程,完成以下模型包和软件包的安装。
apt install llm-melotts apt install llm-model-melotts-en-default /*
* SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
#include <Arduino.h>
#include <M5Unified.h>
#include <M5ModuleLLM.h>
#define CommSerialPort Serial
M5ModuleLLM module_llm;
String tts_work_id;
String language;
String received_question;
bool Input_completed;
void setup()
{
M5.begin();
M5.Display.setTextSize(2);
M5.Display.setTextScroll(true);
/* Init usb serial */
CommSerialPort.begin(115200);
language = "en_US";
/* Init module serial port */
int rxd = M5.getPin(m5::pin_name_t::port_c_rxd);
int txd = M5.getPin(m5::pin_name_t::port_c_txd);
Serial2.begin(115200, SERIAL_8N1, rxd, txd);
/* Init module */
module_llm.begin(&Serial2);
/* Make sure module is connected */
M5.Display.printf(">> Check ModuleLLM connection..\n");
while (1) {
if (module_llm.checkConnection()) {
break;
}
}
/* Reset ModuleLLM */
M5.Display.printf(">> Reset ModuleLLM..\n");
module_llm.sys.reset();
/* Setup TTS module and save returned work id */
M5.Display.printf(">> Initialize TTS..\n\n");
m5_module_llm::ApiMelottsSetupConfig_t melotts_config;
melotts_config.model = "melotts-en-default";
tts_work_id = module_llm.melotts.setup(melotts_config, "tts_setup", language);
M5.Display.printf(">> Initialization completed..\n\n");
}
void loop()
{
Input_completed = false;
if (CommSerialPort.available()) {
while (CommSerialPort.available()) {
char in_char = (char)CommSerialPort.read();
received_question += in_char;
if (received_question.endsWith("\r\n")) {
received_question.remove(received_question.length() - 2);
Input_completed = true;
break;
}
}
}
if (Input_completed) {
/* Push text to TTS module and wait inference result */
M5.Display.setTextColor(TFT_GREEN);
M5.Display.printf("<< %s\n", received_question.c_str());
M5.Display.setTextColor(TFT_YELLOW);
M5.Display.printf(">> ");
CommSerialPort.printf("<< \"%s\"\n", received_question.c_str());
CommSerialPort.print(">> ");
module_llm.tts.inference(tts_work_id, received_question.c_str(), 10000);
/* Clear for next question */
received_question.clear();
M5.Display.println();
CommSerialPort.println();
}
delay(20);
}
要支持更多不同的语言的 TTS 可以通过安装不同的模型包实现,以下为常用的 TTS 模型包,可以参考以下安装指令完成模型包安装后,修改案例程序中的配置字段,实现 TTS 语言的切换。
apt install llm-model-melotts-zh-cn language = "zh_CN";
melotts_config.model = "model-melotts-zh-cn"; apt install llm-model-melotts-en-default language = "en_US";
melotts_config.model = "melotts-en-default"; apt install llm-model-melotts-ja-jp language = "ja_JP";
melotts_config.model = "model-melotts-ja-jp";