Unity Sentisを使ってonnxでデバイスのみで動くTTSを実装する

初めに

UnityがUnitySentisを使ってTTSを実装できるようなサンプル?モデルを公開しているので、動かしていきます

huggingface.co

Demo

デモでは、文字を入力した後にspaceを押して音声を生成・再生しています

youtu.be

リポジトリは以下で公開しています

github.com

開発環境

  • Unity 2023.3.0b2
  • unity.sentis : 1.4.0-pre.2
  • MacOS 14.3.1

ライブラリのインストール

まずは、Unityを起動します。その後にUnity Sentisをインストールします

以下の画像ように Package Manager → Install package by name で以下を設定します

name : com.unity.sentis
version: 1.4.0-pre.2

モデルの設定

次にTTSを使用するためのモデルの設定を行います

Unityでは、TTSのモデル(pthやsafetensors)は扱いづらいので、ONNXにしたものを使用します

今回は、以下で公式が公開していているunity/sentis-jets-text-to-speechを使用します

以下のコマンドでリポジトリをcloneします

git lfs install
git clone https://huggingface.co/unity/sentis-jets-text-to-speech

こららのフォルダを以下の画像のように配置します

この時に sentis ファイル phoneme_dict.txt ファイルをAssets/StreamingAssetsディレクトリ に入れないと動きません

Assets/StreamingAssets

スクリプト

スクリプトの設定

次に UnityでONNX経由してTTSを行うためにスクリプトを設定します。 画像のように公式が用意している RunJets を 任意のところにアタッチします。この時に AudioSource を同じオブジェクトにアタッチします

TTSの実行と再生

デモ動画はInput Fieldから自由に入力できるようにしていますが、記事の場合はInspecotorから文字を入れることで任意の文字から音声を生成できます

任意の文字を入れて実行すると音声が生成されて、再生されます