OpenWebUIやSillyTavernでLLMからの応答を読み上げてほしい人は、結構居ると思います。
この際、問題になるのがOpenWebUIやSillyTavernといった海外製のフロントエンドでは、日本でよく使われているTTSエンジンのVOICEVOXなどのAPIには対応していない、という点です。
そこで、VOICEVOXなどのAPIをOpenAIのTTS API仕様に変換するソフトウェアを使います。
今回はAivisSpeechも使ってみたいので、fork版のnichiki/voicevox-openを使わせてもらいます。
合成音声モデルの規約によっては、利用、表現を制限しているものもあります。(例えば性的な利用不可、政治目的不可など)
規約をよく読んで、規約を守って利用しましょう。
編集履歴:
SillyTavern VOICEVOXとAPI接続で、しゃべるLLMを構築 OpenWebUIでもの記事からローカル環境でのURL例を記載
この際、問題になるのがOpenWebUIやSillyTavernといった海外製のフロントエンドでは、日本でよく使われているTTSエンジンのVOICEVOXなどのAPIには対応していない、という点です。
そこで、VOICEVOXなどのAPIをOpenAIのTTS API仕様に変換するソフトウェアを使います。
- Sunwood-ai-lab/svoicevox-openai-tts (https://github.com/Sunwood-ai-labs/voicevox-openai...
- nichiki/voicevox-openai-tts (https://github.com/nichiki/voicevox-openai-tts)
今回はAivisSpeechも使ってみたいので、fork版のnichiki/voicevox-openを使わせてもらいます。
合成音声モデルの規約によっては、利用、表現を制限しているものもあります。(例えば性的な利用不可、政治目的不可など)
規約をよく読んで、規約を守って利用しましょう。
編集履歴:
SillyTavern VOICEVOXとAPI接続で、しゃべるLLMを構築 OpenWebUIでもの記事からローカル環境でのURL例を記載
Linuxサーバーにインストールします。
Docker、Docker Composeをインストールしたものとして進めます。
このページではCPU版を動かしてみますが、GPU版を動かす方はNVIDIA製のGPU、GPUドライバのインストールなどが必要です。
AivisSpeechの音声合成モデル追加先ディレクトリを作成します。
AivisSpeechの「「docker-compose.aivis-speech.yml」を一部、編集します。
9行目あたりに、AivisSpeechの音声合成モデルを追加するために以下の通りに記載します。
Docker、Docker Composeをインストールしたものとして進めます。
このページではCPU版を動かしてみますが、GPU版を動かす方はNVIDIA製のGPU、GPUドライバのインストールなどが必要です。
git clone https://github.com/nichiki/voicevox-openai-tts
cd voicevox-openai-tts
AivisSpeechの音声合成モデル追加先ディレクトリを作成します。
mkdir -m 755 AivisSpeech-Engine
AivisSpeechの「「docker-compose.aivis-speech.yml」を一部、編集します。
9行目あたりに、AivisSpeechの音声合成モデルを追加するために以下の通りに記載します。
volumes:
- ./AivisSpeech-Engine:/home/user/.local/share/AivisSpeech-Engine-Dev

「管理者設定」から「オーディオ」を開いて、「Text-to-Speech」の「テキスト音声変換エンジン」を「OpenAI」に、「APIベースURL」を下記の通りに入力します。
http://{サーバーのアドレス}:{Port}/v1
# 例:http://localhost:8000/v1
# ローカル環境なら:http://host.docker.internal:8000/v1
アドレスの末尾に「/v1」を忘れずに記載しましょう。「API key」は何も入力しないと、OpenWebUIの設定を保存できないのでなんでも良いので入力します。
「TTSモデル」はデフォルトのままで大丈夫です。
「TTSボイス」については、下記のURLにアクセスして各モデル、ボイスタイプのスピーカーIDの値を確認の上、入力して設定を保存します。(ずんだもん、ノーマルなら”3”など)
http://{サーバーのアドレス}:50021/speakers参考:VOICEVOXを用いた開発メモ (https://zenn.dev/naoya_tech/scraps/df2ca4c264af8f)

SillyTavernの拡張機能タブを開いて、「TTS」の項目を開きます。
「Select TTS Provider」から「OpenAI Compatible」を選択して「Provider Endpoint:」に下記の通りに入力します。
http://{サーバーのアドレス}:{Port}/v1/audio/speech
# 例:http://localhost:8000/v1/audio/speech
# ローカル環境なら:http://host.docker.internal:8000/v1/audio/speech
[Model:]はデフォルトのままで大丈夫です。「Available Voices (comma separated) (利用可能な音声(カンマ区切り))」に、下記のURLにアクセスして各モデル、ボイスタイプのスピーカーIDの値を確認の上、入力します。(ずんだもんなら、「3,1,7,5」(ノーマル,あまあま,ツンツン,セクシー)…など)
http://{サーバーのアドレス}:50021/speakersここまで設定したら一旦、SillyTavernのページを再読み込みします。
SillyTavernのキャラクターカードを選択してチャット画面に入ってからもう一度、SillyTavernの拡張機能タブを開いて、「TTS」の項目を開きます。

ユーザーやキャラクターに対して、ボイスタイプの指定ができます。
「Available voices」からボイステストを行えます。
そのほかのTTS設定など
- 「Enabled」(有効化するかどうか)
- 「Narrate user messages」(ユーザーメッセージをナレーション,ユーザーの入力したテキストを読み上げるかどうか)
- 「Auto Generation」(自動生成,有効なら自動的に読み上げる)
- 「Narrate by paragraphs (when streaming)」(段落ごとにナレーション(ストリーミング時))
- 「Narrate by paragraphs (when not streaming)」(段落ごとにナレーション(ストリーミング時以外))
- 「Only narrate "quotes"」(「引用符」のみをナレーション,キャラのセリフ部分だけを読み上げるかどうか)
- 「Ignore text, even "quotes", inside asterisks」(*アスタリスク内のテキスト*(「引用符」も含む)を無視, 地の文を読み上げない)
- 「Narrate only the translated text」(翻訳されたテキストのみを読み上げる)
- 「Skip codeblocks」(コードブロックをスキップする)
- 「Skip <tagged> blocks」(<tagged> ブロックをスキップする)
- 「Pass Asterisks to TTS Engine」(アスタリスクをTTSエンジンに渡す, 地の文も読み上げる)
# AivisSpeech(Docker実行)
docker compose -f docker-compose.aivis-speech.yml up -d上記のコマンドでコンテナが立ち上がります。
基本的な使い方、設定はVOICEVOXの方と同じですが、スピーカーIDを確認する際は下記のURLにアクセスして確認します。
http://{サーバーのアドレス}:10101/speakersまた、AivisHub(https://hub.aivis-project.com/)から合成音声モデルファイルをダウンロードした際は、インストール時に作成したAivisSpeechの音声合成モデル追加先ディレクトリに、音声合成モデルファイル (AIVMX 形式)を置けば上記のURLにスピーカーIDが出てくるはずです。
【TTS】Irodori-TTS-v2の簡単な使い方などページの「IrodoriTTSのOpenAI API互換ラッパーソフトを使ってSillyTavernでTTSしてみる」をご覧ください。