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

×

・はじめに / 大事なこと


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

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

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

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

編集履歴:
「irodori-tts-500m-v2-voicedesignのWebUI」項目の追加
「IrodoriTTSのOpenAI API互換ラッパーソフトを使ってSillyTavernでTTSしてみる」項目の追加


・Irodori-TTS-v2ってなんぞ


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

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

Irodori-TTS(v1)から以下のように進化したらしい。
VAEをアップグレードしました:音声VAEをAratako/Semantic-DACVAE-Japanese-32dimに切り替え、より高品質な日本語音声生成を可能にしました。
拡張トレーニング:トレーニングステップ数を2.5倍に増やしたことで、収束性、安定性、および全体的な音声忠実度が向上しました。
データと前処理の改善:モデルの堅牢性と出力品質を向上させるため、洗練されたテキスト前処理パイプラインとより厳格なデータフィルタリングを実装しました。
(Google翻訳)
引用:https://huggingface.co/Aratako/Irodori-TTS-500M-v2

T5Gemma-TTSと比較すると、
絵文字による感情表現多言語対応商用利用の可否音声クローニング性能漢字の読み能力
Irodori-TTS(v2)☓(日本語のみ)MITライセンス+倫理的制約(※1)○(※3)△?(※2)
T5Gemma-TTS○(日英中対応)☓(NG、+倫理的制約(※1))○(Irodori-TTSと比べると少し劣る?(※3))(Irodori-TTSと比べると)○

(※1)倫理的制約

(※2) 複雑な読み方の漢字はひらがな、カタカナへ変換した方が良いらしいがv1ほど読み間違えない
(※3) Voicevoxの「中国うさぎ」を参照音声として軽くテストした感じだと Irodori-TTS(v2)> T5Gemma-TTS > Qwen3-TTS という結果に

・LinuxにDockerでインストール

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

Dockerfile、docker-compose.yml

・irodori-tts-500m-v2のWebUI


「Checkpoint 」欄に「Aratako/Irodori-TTS-500M-v2」と入力して「Load Model」でモデルをロードします。


「Text」欄に生成したい音声のテキストを入力します。(例えば"こんばんは。"など...)
ボイスクローニング機能を使う際はリファレンス音声を「Reference Audio Upload」からアップロードします。
ボイスクローニング機能を使わない場合はそのままで大丈夫です。


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

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

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

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

↓Irodori-TTS-v2で「Reference Audio」Voicevoxで出力した上のボイスを、「Text」に「こんにちは、私はAIです。これは音声合成のテストです。」でいくつか生成してみて、良さげなのを選んだ結果です。
音声ファイルへのリンク

↓ちなみにT5Gemma-TTSで同様にクローニングした際の音声です。(もうちょっとガチャれば良かったかも?)
音声ファイルへのリンク

・irodori-tts-500m-v2-voicedesignのWebUI


「Load Model」でモデルをロードします。
「Text」欄に生成したい音声のテキストを入力します。(例えば"こんばんは。"など...)
「Caption / Style Prompt (optional)」に声の特徴や読み上げ方など(※)のキャプションを入力します。(オプション)
(※)年齢/性別/感情/話し方など
(例:若い女性が楽しげに喋っている)

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

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

Irodori-TTS-500M-v2 / EMOJI_ANNOTATIONS.mdから対応絵文字をご覧ください。

「irodori-tts-500m-v2」の方で参照音声にVoicevoxの「中国うさぎ」のボイスを利用させてもらった感じでは、絵文字による感情表現と相性が悪い?
→ボイスクローニングと相性が悪いのか、参照元の「中国うさぎ」の声質と相性が悪いかはわからん
→どうもボイスクローニングと相性が悪いっぽい?でも絵文字なしだと棒読みになるから効果自体はあるっぽい?

ボイスクローニング無しなら絵文字なしのテキストオンリーでも文脈に応じた感情の乗った音声になるので絵文字は補助的な使用が良いかも

・IrodoriTTSのOpenAI API互換ラッパーソフトを使ってSillyTavernでTTSしてみる

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

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

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

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

上記のソフトウェアではirodori-tts-500m-v2-voicedesign(自然言語キャプションで声質・感情を制御できる)とirodori-tts-500m-v2(参照音声による話者クローンモデル)の2つのモデルが使えますが、今回はirodori-tts-500m-v2を使って参照音声有りでTTSしてみます。

※環境変数の「FIXED_SECONDS」 (生成する音声の固定長)をデフォルトの30.0から60.0程度に上げたほうが良いかも?

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


http://{サーバーのアドレス}:{Port}/v1/audio/voice_contents
# 例:http://localhost:8880/v1/audio/voice_contents
# ローカル環境なら:http://host.docker.internal:8880/v1/audio/voice_contents
上記のURLにアクセスしてidを調べます。
今回は参照音声に「001_中国うさぎ(ノーマル)_おはようございます。.wav」を「voices」ディレクトリに入れました。
この場合だとidは「001_中国うさぎ(ノーマル)_おはようございます。」になります。


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


「Model: 」に「irodori-tts-500m-v2」と入力します。
※今回はボイスクローニングを試すため

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

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

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

ちなみに

・Citation

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

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

広告募集中