個人的な日本語ローカルLLM関連のメモ用Wikiです。一般の方は編集できません。

×

・はじめに / 大事なこと


権利的に明らかにクリーンな音声以外を参照音声として使うのはやめましょう。
例えば有名人、政治家、アイドルなどの音声を使うのは絶対にやめましょう。

この記事では、参照音声にVoicevoxの「中国うさぎ」のボイスを利用させてもらいます。

VOICEVOX ずんだもん、東北ずん子、東北きりたん、東北イタコ、四国めたん、九州そら、中国うさぎ、中部つるぎ音源利用規約

合成音声モデルの規約によっては、利用、表現を制限しているものもあります。(例えば性的な利用不可、政治目的不可など)
規約をよく読んで、規約を守って利用しましょう。



・Irodori-TTS-v3ってなに?

https://huggingface.co/Aratako/Irodori-TTS-600M-v3...

T5Gemma-TTSの作者、@Aratako_LMさんが作った絵文字によって声の感情表現に対応している日本語テキスト音声合成モデル、Irodori-TTSの最新版
※対応絵文字についてはこちらのページをご覧ください

Irodori-TTS-v2がリファレンス音声によるボイスクローニングに対応した「Base model」(Aratako/Irodori-TTS-500M-v2)とボイスクローニング不可だがキャプションによるボイスデザインが可能な「VoiceDesign model」(Aratako/Irodori-TTS-500M-v2-VoiceDesign)の2つだったのが、リファレンス音声によるボイスクローニングに対応した「Base model」(Aratako/Irodori-TTS-500M-v3)とボイスクローニング対応かつ、キャプションによるボイスデザインが可能な「VoiceDesign model」(Aratako/Irodori-TTS-600M-v3-VoiceDesign)になった。

・LinuxにDockerでインストール

DockerやDocker Composeなどはインストール済みとして進めます。
Dockerあんまり詳しくないので無駄にデカいイメージ使ってたりいらないコマンドとか入ってるかもと思いますが生暖かい目で見逃してください。
※NVIDIA製GPUを載せたPC向けのDockerfile、docker-compose.ymlです。

Dockerfile


docker-compose.yml (「Base model」(Aratako/Irodori-TTS-500M-v3)リファレンス音声によるボイスクローニング)


docker-compose.yml (「VoiceDesign model」(Aratako/Irodori-TTS-600M-v3-VoiceDesign)ボイスクローニング対応&キャプションによるボイスデザイン)

・「python gradio_app.py」(「Base model」Aratako/Irodori-TTS-500M-v3)のWebUI



「Text」欄に生成したい音声のテキストを入力します。(例えば"こんばんは。"など...)
「Emoji Palette」から対応絵文字を選択、入力できます。

ボイスクローニング機能を使う際はリファレンス音声を「Reference Audio Upload」からアップロードします。
ボイスクローニング機能を使わない場合はそのままで大丈夫です。


サンプリング設定などです。 正直よくわかってません...。
  • 「Num Steps」
デフォルト:40
ステップ数です。大きいいほど高品質ですが生成が遅くなります。
低ステップにすることで生成が高速になりますが音質は低下します。
  • 「Num Candidates」
デフォルト:1
一度に生成する音声の数を増やせます。(シード値のみ違う)
  • 「Seed」
デフォルト:(空欄:ランダム)
生成に使用するシード値を指定できます。
シード値を固定して入力テキストの絵文字の有無のみを変えて結果を比較したするのに使えます。
  • 「Duration Scale」
デフォルト:1
自動推定された長さに掛ける倍率です。
例えば1.2でゆっくりめ、0.9でやや短くなります。
  • 「CFG Guidance Mode」
デフォルト:「independent」
「independent」(独立)、「joint」(結合)、「alternating」(交互)から選択します。
  • 「CFG Scale Text」
デフォルト:3
値を大きくするほど入力テキストが「強く」反映され、入力テキストにより忠実になりますが不自然、無感情になりやすくなります。
値を下げると自然な発音になりやすいですが、入力テキストが無視されやすくなります。
  • 「CFG Scale Speaker」
デフォルト:5
値を大きくするほど参照音声が「強く」反映されますが、大きすぎると声が「硬い」ものになります。

・リファレンス(参照)音声ありで生成してみる

【TTS】T5Gemma-TTSの簡単な使い方など/・リファレンス(参照)音声ありで生成してみる。のページで使ったVoicevoxの「中国うさぎ」のボイスをクローニングしてみます。

↓Voicevoxで出力したボイス(「おはようございます。」)
音声ファイルへのリンク

↓Irodori-TTS-500M-v3で「Reference Audio」Voicevoxで出力した上のボイスを、「Text」に「こんにちは、私はAIです。これは音声合成のテストです。」で生成してみた結果です。
音声ファイルへのリンク

↓ちなみにIrodori-TTS-v2で同様にクローニングした際の音声です。
音声ファイルへのリンク

・「gradio_app_voicedesign.py」(「VoiceDesign model」Aratako/Irodori-TTS-600M-v3-VoiceDesign)のWebUI


「Text」欄に生成したい音声のテキストを入力します。(例えば"こんばんは。"など...)
「Emoji Palette」から対応絵文字を選択、入力できます。


「Caption / Style Prompt (optional)」に声の特徴や読み上げ方など(※)のキャプションを入力します。(オプション)
(※)感情/話し方など (例:楽しげに喋っている, 悲しげにぼそぼそと話している)

ボイスクローニング機能を使う際はリファレンス音声を「Reference Audio Upload」からアップロードします。


サンプリング設定などです。
  • 「Num Steps」
デフォルト:40
ステップ数です。大きいいほど高品質ですが生成が遅くなります。
低ステップにすることで生成が高速になりますが音質は低下します。
  • 「Num Candidates」
デフォルト:1
一度に生成する音声の数を増やせます。(シード値のみ違う)
  • 「Seed」
デフォルト:(空欄:ランダム)
生成に使用するシード値を指定できます。
シード値を固定して入力テキストの絵文字の有無のみを変えて結果を比較したするのに使えます。
  • 「Duration Scale」
デフォルト:1
自動推定された長さに掛ける倍率です。
例えば1.2でゆっくりめ、0.9でやや短くなります。
  • 「CFG Guidance Mode」
デフォルト:「independent」
「independent」(独立)、「joint」(結合)、「alternating」(交互)から選択します。
  • 「CFG Scale Text」
デフォルト:3
値を大きくするほど入力テキストが「強く」反映され、入力テキストにより忠実になりますが不自然、無感情になりやすくなります。
値を下げると自然な発音になりやすいですが、入力テキストが無視されやすくなります。
  • 「CFG Scale Speaker」
デフォルト:5
値を大きくするほど参照音声が「強く」反映されますが、大きすぎると声が「硬い」ものになります。

・リファレンス(参照)音声とキャプションによるボイスデザインで生成してみる

【TTS】T5Gemma-TTSの簡単な使い方など/・リファレンス(参照)音声ありで生成してみる。のページで使ったVoicevoxの「中国うさぎ」のボイスをクローニングしてみます。

↓Voicevoxで出力したボイス(「おはようございます。」)
音声ファイルへのリンク

↓Irodori-TTS-600M-v3-VoiceDesignで「Reference Audio」Voicevoxで出力した上のボイスを、「Text」に「こんにちは、私はAIです。これは音声合成のテストです。」、キャプションに「楽しそうにハキハキと喋っている。」で生成してみた結果です。
音声ファイルへのリンク

↓参考に、Irodori-TTS-500M-v3で「Reference Audio」Voicevoxで出力した上のボイスを、「Text」に「こんにちは、私はAIです。これは音声合成のテストです。」で生成してみた結果です。
音声ファイルへのリンク

・絵文字での感情表現について

Irodori-TTS-500M-v3 / EMOJI_ANNOTATIONS.mdから対応絵文字をご覧ください。
キャプションではなく、入力テキスト欄に配置する必要がある(?)

テキストの前に絵文字を配置するのが良いかも?

・Irodori-TTSのOpenAI TTS API互換サーバーを使ってSillyTavernでTTSしてみる

上記のソフトウェアを利用させてもらい、SillyTavernでTTSしてみます。

DockerやDocker Composeなどはインストール済みとして進めます。
# リポジトリをクローン&ディレクトリ移動
git clone https://github.com/Aratako/Irodori-TTS-Server.git
cd Irodori-TTS-Server

# 環境変数を設定
cp .env.example .env

NVIDIA GPUを使うdocker-compose.yml


# ビルド・起動
docker compose up -d

起動したら「Irodori-TTS-Server」ディレクトリ内の「voices」ディレクトリに参照用の音声ファイルを置きます。
※ファイル名がそのままスピーカーIDになるので長い場合は変更しておいた方が良いかと

今回は参照音声に「001_中国うさぎ(ノーマル)_おはようございます。.wav」を「voices」ディレクトリに入れました。
この場合だとidは「001_中国うさぎ(ノーマル)_おはようございます。」になります。

Aratako / Irodori-TTS-ServerとSillyTavernでそのままTTSさせようとするとエラーが出てTTSが出来ませんのでSillyTavern側のファイルを修正します。
SillyTavern/public/scripts/extensions/tts/openai-compatible.js
をテキストエディタで開き、169行目の「response_format: 'mp3',」を「response_format: 'wav',」に変更、保存します。


SillyTavernの拡張機能タブを開いて、「TTS」の項目を開きます。
「Select TTS Provider」から「OpenAI Compatible」を選択して「Provider Endpoint:」に下記の通りに入力します。
Portは弄ってなければ「8088」がデフォルトです。
http://{サーバーのアドレス}:{Port}/v1/audio/speech
# 例:http://localhost:8088/v1/audio/speech
# ローカル環境なら:http://host.docker.internal:8088/v1/audio/speech


「Model: 」に「irodori-tts」と入力します。
「Available Voices (comma separated):」に先ほど確認したidを「,」区切りで入力します。(例:「001_中国うさぎ(ノーマル)_おはようございます。,」)

あとはSillyTavernのキャラカードを開いて、そのキャラクターにVoices(id)を割り当てればOKです。

その他のSillyTavernのTTS拡張機能の詳細はVOICEVOXなどをOpenAI互換TTS APIにしてAIに喋らせる / SillyTavernでの設定などページをご覧ください。

ちなみに

・Citation

@misc{irodori-tts,
  author = {Chihiro Arata},
  title = {Irodori-TTS: A Flow Matching-based Text-to-Speech Model with Emoji-driven Style Control},
  year = {2026},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/Aratako/Irodori-TTS}}
}

管理人/副管理人のみ編集できます

広告募集中