Qwen3-TTS - pip一発で使えるオープンソース音声合成
最近のオープンソースTTSは選択肢が増えすぎていて追うのが大変だが、Qwen3-TTSは「セットアップの簡単さ」と「日本語品質」の両方で頭一つ抜けている印象だった。ComfyUIもワークフローも不要、Pythonスクリプト数行で音声が出る。
- リポジトリ: QwenLM/Qwen3-TTS
- HuggingFace: Qwen/Qwen3-TTS-12Hz-1.7B-Base
- デモ: Qwen/Qwen3-TTS
- 論文: arXiv:2601.15621
- ライセンス: Apache 2.0(商用利用可)
- 公開日: 2026年1月22日
CosyVoiceとの関係
同じAlibaba内に2系統のTTSプロジェクトがあるので整理しておく。
| プロジェクト | チーム | アーキテクチャ |
|---|---|---|
| CosyVoice(1/2/3) | Tongyi Lab 音声チーム | LLM + Flow Matching(DiT) |
| Qwen3-TTS | Qwenチーム | 離散マルチコードブックLM(DiTなし) |
CosyVoiceは2024年から継続開発されているTTSで、LLMとDiTベースのFlow Matchingを組み合わせた設計。Qwen3-TTSはそれとは別チームが開発したもので、DiTを使わない離散マルチコードブックLMアーキテクチャを採用している。ベンチマークではCosyVoice 3を明示的に比較対象として載せている。
モデルバリエーション
| モデル | パラメータ | 機能 | 指示制御 |
|---|---|---|---|
| 1.7B-CustomVoice | 17億 | 9種のプリセット音声 + スタイル制御 | 対応 |
| 1.7B-VoiceDesign | 17億 | 自然言語による音声デザイン | 対応 |
| 1.7B-Base | 17億 | 3秒ボイスクローン + ファインチューニング | 非対応 |
| 0.6B-CustomVoice | 6億 | 軽量版プリセット音声 | 非対応 |
| 0.6B-Base | 6億 | 軽量版ボイスクローン | 非対応 |
全モデルがストリーミング生成に対応。専用トークナイザとして Qwen3-TTS-Tokenizer-12Hz(16層マルチコードブック、12Hzサンプリング)が使われている。
3つのモード
CustomVoice — 9種類のプリセット高品質音声から選んで合成する。感情や話し方の指示にも対応。
プリセット音声:
- 中国語: Vivian、Serena、Uncle_Fu
- 方言: Dylan(北京)、Eric(四川)
- 英語: Ryan、Aiden
- 日本語: Ono_Anna
- 韓国語: Sohee
VoiceDesign — 「落ち着いた低い男性の声」「明るく若い女性の話し方」のように自然言語で声をデザインする。既存の誰かの声を使わずに権利フリーの音声を生成できるのが強み。
Base(ボイスクローン) — 3秒のリファレンス音声から声を複製する。ファインチューニングにも対応。
アーキテクチャ
Qwen3-TTSは離散マルチコードブックLMアーキテクチャを採用している。従来のLLM + DiT(Flow Matching)のカスケード構成ではなく、エンドツーエンドで音声を生成する。
Qwen3-TTS-Tokenizer-12Hz
専用の音声トークナイザ。12Hzのサンプリングレートで16層のマルチコードブックを使い、音声をトークン列に変換する。
- 12Hz = 1秒あたり12フレーム。従来のTTSトークナイザ(25〜50Hz)と比べてかなり低い周波数
- 低周波数でも16層のコードブックで情報量を補う設計
- これにより系列長が短くなり、LMの推論速度が向上する
Dual-Trackストリーミング
ストリーミング生成にはDual-Trackハイブリッドアーキテクチャを使用。1文字入力した時点から音声出力を開始でき、初回パケットレイテンシは97ms(0.6Bモデル)。
セットアップ
conda create -n qwen3-tts python=3.12 -y
conda activate qwen3-tts
pip install -U qwen-tts
# FlashAttention 2(推奨、NVIDIA GPU向け)
pip install -U flash-attn --no-build-isolation
これだけ。モデルの重みは初回実行時に自動ダウンロードされる。
使い方
ボイスクローン(Base)
3秒のリファレンス音声からクローンして合成する。
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-1.7B-Base",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
wavs, sr = model.generate_voice_clone(
text="こんにちは、これはテストです。",
language="Japanese",
ref_audio="reference.wav",
ref_text="リファレンス音声のテキスト",
)
sf.write("output.wav", wavs[0], sr)
複数文を同じ声で生成する場合は create_voice_clone_prompt() でプロンプトを使い回せる。
prompt_items = model.create_voice_clone_prompt(
ref_audio="reference.wav",
ref_text="リファレンス音声のテキスト",
)
wavs, sr = model.generate_voice_clone(
text=["1文目。", "2文目。"],
language=["Japanese", "Japanese"],
voice_clone_prompt=prompt_items,
)
プリセット音声(CustomVoice)
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
wavs, sr = model.generate_custom_voice(
text="今日はいい天気ですね。",
language="Japanese",
speaker="Ono_Anna",
instruct="穏やかに話してください",
)
sf.write("output.wav", wavs[0], sr)
声のデザイン(VoiceDesign)
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
wavs, sr = model.generate_voice_design(
text="こんにちは。",
language="Japanese",
instruct="落ち着いた低い男性の声で、ゆっくり話す",
)
sf.write("output.wav", wavs[0], sr)
Web UIデモ
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000
ブラウザからマイクで声を録る場合はHTTPS化が必要。
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base \
--ip 0.0.0.0 --port 8000 \
--ssl-certfile cert.pem \
--ssl-keyfile key.pem \
--no-ssl-verify
必要スペック
| モデル | VRAM目安 | 備考 |
|---|---|---|
| 0.6B | 4〜8GB | 古めのGPUでも動作 |
| 1.7B | 約16GB | RTX 3090 / 4090推奨 |
- Apple Silicon: MPS経由で動作可能。M3 MacBook Airでの動作報告あり(VoiceDesign 1.7B: 約4.2GB、Base 0.6B: 約2.3GB)
- CPU: 動作するが非推奨。RTF 3〜5x程度(30秒の音声に90〜150秒)
- FlashAttention 2: 推奨だが必須ではない。VRAM使用量と速度が改善される
ベンチマーク
Seed-TTS(WER↓、低いほど良い)
| モデル | test-zh | test-en |
|---|---|---|
| CosyVoice 3 | 0.71 | 1.45 |
| MiniMax-Speech | 0.83 | 1.65 |
| F5-TTS | 1.56 | 1.83 |
| Qwen3-TTS-1.7B-Base | 0.77 | 1.24 |
英語はSOTA。中国語はCosyVoice 3が僅差でリード。
多言語(10言語、WER↓)
| 言語 | WER | 話者類似度↑ |
|---|---|---|
| 中国語 | 0.928 | 0.799 |
| 英語 | 0.934 | 0.775 |
| ドイツ語 | 1.235 | 0.775 |
| イタリア語 | 0.948 | 0.817 |
| 韓国語 | 1.755 | 0.799 |
| フランス語 | 2.858 | 0.714 |
10言語中6言語でWER最低値、全10言語で話者類似度が最高。
遅延
| モデル | 初回パケット |
|---|---|
| Qwen3-TTS | 97ms |
| OpenAI TTS | 約150ms |
| ElevenLabs | 約200ms |
他のオープンソースTTSとの比較
このブログで取り上げたTTSとの比較。
| モデル | パラメータ | 日本語 | ボイスクローン | セットアップ |
|---|---|---|---|---|
| Qwen3-TTS | 0.6B / 1.7B | ✅ | ✅(3秒) | pip install |
| KugelAudio | 7B | ❌ | ✅(5〜30秒) | ComfyUI |
| Pocket TTS | 100M | ❌ | ✅ | pip install |
| Qwen3-Omni | 30B(3Bアクティブ) | ✅ | ❌ | - |
日本語対応でボイスクローンも使えてpip一発。この手軽さは他にない。
関連リンク
- Qwen3-Omni: 3BアクティブのMoEでテキスト・画像・音声・動画を統合処理するオムニモーダルモデル - Qwen3の音声出力はTalkerモジュール経由
- KugelAudio - 7BパラメータのオープンソースTTS(ComfyUI対応) - QwenをLLMバックボーンに使うTTS
- Pocket TTS - CPUで動く軽量テキスト音声合成 - 100Mの超軽量TTS
- AIと喋れる環境を作る(1)音声API調査編 - TTS APIの比較