Qwen3-TTS テキスト読み上げAPIサーバを立ち上げる
もうね、WindowsからLinuxに変えようかな。
大体、最近のAI関係のものって、基本的にはLinuxで動かすもんなんじゃないかな。どの説明読んでも、大体Linuxベースで書かれていて、Windowsでもできますよって感じになっている。
さて、Qwen3-TTSっていう読み上げソフトがあって、それをAPIサーバにして、OpenWebUIとかでアクセスできるようにした備忘録のようなものです。
Qwen3-TTSについては、こちらで紹介されています。
前回、SillyTavernの読み上げをVOICEVOXを使ってできるようにしてみたんだけど、いかにもテキストを読み上げていますって感じで、いまいちでした。
しかし、時代は音声も生成する世の中になっているんですね。
じゃあやってみようってことですが、Windowsではなかなかうまくいかないものだったので、記録しておきます。
まず、レポジトリはこちら。
これを、Dockerで立ち上げてサーバにします。
Pythonは3.12にしてください。
わが家は3.14になっていたので、それでかなり苦戦しました。
それから、たぶんSoXは入っていないと思うので、これをインストールしてパスを通しておく必要もあります。
設定で「環境変数」って検索すれば、システムのプロパティが出てくるので、そこのPathに、C:\Program Files (x86)\sox-14-4-2 を追加する。
Flash Attention 2 っていうのもあるといいみたいだけど、Windowsではホイールがないと難しそうで、うちの環境にあうホイールは見つからなかったので、そこはスルー。無くても動きました。
さて、さくっと動くなら、
# Build and run with GPU support
docker build -t qwen3-tts-api .
docker run --gpus all -p 8880:8880 qwen3-tts-api
# Or use Docker Compose for easier management
docker-compose up qwen3-tts-gpu
これのどちらかですぐに動くはずです。
まずは、コンポーズでやってみました。
あ、まずは、適当なフォルダで git clone です。
git clone https://github.com/groxaxo/Qwen3-TTS-Openai-Fastapi
cd Qwen3-TTS-Openai-Fastapi
そして、
docker-compose up qwen3-tts-gpu
すんなりインストールされて、Dockerで動いているように見えました。
しかし、http://localhost:8880/ にアクセスしてもサーバが見つかりません。
色々サイトを駆け回り、調べましたが解りません。
で、コンポーズは諦めて、ビルドからやることにしました。
docker build -t qwen3-tts-api .
docker run --gpus all -p 8880:8880 qwen3-tts-api
ここでも、なかなかうまく行かず、ここでPython3.14をアンインストールして、3.12にダウングレードしました。
すると、最後までいって、http://localhost:8880/ にもアクセスできて、DEMO画面が表示されたのですが、GPUが認識されていません。
CPUでは動きましたが、激重でした。
これの原因はCUDA12.1が想定されているようなのですが、わが家は13.1なのが問題のようです。
で、次の手段として、vLLM-omniを使う方法。こっちの方が速いらしいし。
# Build vLLM-enabled image
docker build -t qwen3-tts-api:vllm --target vllm-production .
docker run --gpus all -p 8880:8880 -e TTS_BACKEND=vllm_omni -e TTS_WARMUP_ON_START=true qwen3-tts-api:vllm
# Or use Docker Compose
docker-compose --profile vllm up qwen3-tts-vllm
この2択です。
ビルドでやってみます。
docker build -t qwen3-tts-api:vllm --target vllm-production .
しかし、ログを見ていると、途中でvLLM-omniのインストールに失敗している様子です。
DockerFile.vllmというファイルがあるので、これを使うようにしてビルドします。
docker build -f Dockerfile.vllm -t qwen3-tts-api:vllm .
--target vllm-production を残したままだと、Dockerfile.vllmの記述にそんなターゲットは無いとエラーが出たので消しました。
ビルドが完了したら、
docker run --gpus all -p 8880:8880 -e TTS_BACKEND=vllm_omni -e TTS_WARMUP_ON_START=true qwen3-tts-api:vllm
で、実行します。
http://localhost:8880/ にアクセスしてDEMO画面が表示されればOKです。

そのまま生成をスタートすれば、流暢な英語の音声が流れました。
「Hello! Welcome to Qwen3-TTS, a powerful text-to-speech system. This is an example of synthesized speech.」
テキストを日本語にしてみます。
「こんにちは!強力なテキスト読み上げシステム、Qwen3-TTSへようこそ。これは合成音声のサンプルです。」
Voiceは「Vivian」のままで生成してみます。
我ながらよく頑張ったので、褒めてもらおうと思います。
「Yuki さん、Qwen3-TTS のインストールお疲れさまでした。よく頑張りましたね。この note もきっと誰かの役に立ちますよ。」
かなり片言な感じですね。
スクリプトを書いて、モデルを日本語に指定してみます。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8880/v1",
api_key="not-needed"
)
response = client.audio.speech.create(
model="tts-1-hd-ja",
voice="Vivian",
input="Yuki さん、Qwen3-TTS のインストールお疲れさまでした。よく頑張りましたね。この note もきっと誰かの役に立ちますよ。"
)
response.write_to_file("output.mp3")
print("音声ファイルを保存しました")どうかな。
まだ、ちょっと片言ですね。まぁいいです。Vivianありがとう。
Voiceをono_annaにしてみます。
さすが、日本語ネイティブです。annaありがとう。
では、後はAPIサーバとして接続するので、OpenWebUIなどで、
OpenAI
http://host.docker.internal:8880/v1
key: key (なんでもいい)
Voice:ono_anna
Model:tts-1-hd-ja
とか設定すればOKです。localhostではなく、host.docker.internal なところが注意です。
ではまた。
