技術 約6分で読めます

Qwen3-TTS - pip一発で使えるオープンソース音声合成

最近のオープンソースTTSは選択肢が増えすぎていて追うのが大変だが、Qwen3-TTSは「セットアップの簡単さ」と「日本語品質」の両方で頭一つ抜けている印象だった。ComfyUIもワークフローも不要、Pythonスクリプト数行で音声が出る。

CosyVoiceとの関係

同じAlibaba内に2系統のTTSプロジェクトがあるので整理しておく。

プロジェクトチームアーキテクチャ
CosyVoice(1/2/3)Tongyi Lab 音声チームLLM + Flow Matching(DiT)
Qwen3-TTSQwenチーム離散マルチコードブックLM(DiTなし)

CosyVoiceは2024年から継続開発されているTTSで、LLMとDiTベースのFlow Matchingを組み合わせた設計。Qwen3-TTSはそれとは別チームが開発したもので、DiTを使わない離散マルチコードブックLMアーキテクチャを採用している。ベンチマークではCosyVoice 3を明示的に比較対象として載せている。

モデルバリエーション

モデルパラメータ機能指示制御
1.7B-CustomVoice17億9種のプリセット音声 + スタイル制御対応
1.7B-VoiceDesign17億自然言語による音声デザイン対応
1.7B-Base17億3秒ボイスクローン + ファインチューニング非対応
0.6B-CustomVoice6億軽量版プリセット音声非対応
0.6B-Base6億軽量版ボイスクローン非対応

全モデルがストリーミング生成に対応。専用トークナイザとして 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.6B4〜8GB古めのGPUでも動作
1.7B約16GBRTX 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-zhtest-en
CosyVoice 30.711.45
MiniMax-Speech0.831.65
F5-TTS1.561.83
Qwen3-TTS-1.7B-Base0.771.24

英語はSOTA。中国語はCosyVoice 3が僅差でリード。

多言語(10言語、WER↓)

言語WER話者類似度↑
中国語0.9280.799
英語0.9340.775
ドイツ語1.2350.775
イタリア語0.9480.817
韓国語1.7550.799
フランス語2.8580.714

10言語中6言語でWER最低値、全10言語で話者類似度が最高。

遅延

モデル初回パケット
Qwen3-TTS97ms
OpenAI TTS約150ms
ElevenLabs約200ms

他のオープンソースTTSとの比較

このブログで取り上げたTTSとの比較。

モデルパラメータ日本語ボイスクローンセットアップ
Qwen3-TTS0.6B / 1.7B✅(3秒)pip install
KugelAudio7B✅(5〜30秒)ComfyUI
Pocket TTS100Mpip install
Qwen3-Omni30B(3Bアクティブ)-

日本語対応でボイスクローンも使えてpip一発。この手軽さは他にない。

関連リンク