This example demonstrates how to use the M5ModuleLLM library on the Arduino platform to call a TTS model for speech synthesis and playback.
Refer to the Module LLM Arduino Quick Start to set up the environment and install the M5ModuleLLM driver library.
Refer to the Module LLM Software Package Update Guide to install the following model and software packages:
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);
}
To support TTS in additional languages, install different model packages. Below are commonly used TTS models. After installation, modify the configuration in the example code to switch TTS languages.
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";