pdf-icon

Module LLM - テキスト読み上げ(TTS)

このサンプルは、Arduino プラットフォーム上で M5ModuleLLM ライブラリを使用して、TTS モデルによる音声合成と再生を行う方法を示します。

準備作業

  1. Module LLM Arduino クイックスタートを参照し、開発環境のセットアップと M5ModuleLLM ドライバライブラリのインストールを行います。

  2. Module LLM ソフトウェアパッケージ更新ガイドを参照し、以下のモデルパッケージとソフトウェアパッケージをインストールします。

apt install llm-melotts
apt install llm-model-melotts-en-default
  1. 以下のサンプルで使用するハードウェア:

TTS CoreS3

/*
* 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);
}
  1. コードを CoreS3 にアップロードします。
  1. Arduino IDE でシリアルモニターを開き、ボーレートを 115200 に設定します。テキストを入力して Enter キーを押すと送信されます。
  1. Module LLM がテキストを音声合成し、再生します。

その他の言語

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";
On This Page