中級 10 分Qwen

ローカルでのQwen3-TTS:音声合成と音声 クローニング済み

Qwen3-TTSは、AlibabaのQwenチームがApache 2.0ライセンスでオープンウェイトとして公開した音声合成モデルのファミリーです。数GBに収まり、十前後の言語の中にはフランス語も含まれ、三つの異なることができます。定 predefined voiceでテキストを読み上げること、説明から声を作ること、短い音声サンプルから声質を再現することです。このガイドでは、公式Pythonパッケージを使ってQwen3-TTSをローカルで動かす方法、選ぶべきバリアント、そして音声クローニングが許容される範囲を説明します。ここでは品質や速度の測定値は示しません。測定を実施しておらず、現行バージョンについては公式ソースを参照する必要があるためです。

著者 Thomas P.·更新 2026-10-15·Windows・macOS・Linuxでテスト済み

#クラウド音声ではなくQwen3-TTSを選ぶ理由

オンラインの音声合成サービスは音質に優れていますが、預けた文章はすべて自分のマシンから外部へ送られ、文字単位で課金され、停止される可能性のあるアカウントに依存します。社内文書の読み上げ、ホームオートメーションアシスタント、またはアプリケーションのプロトタイプでは、完全にローカルで動作する音声を使うことで、この3つの依存関係を一度に解消できます。

オープンなエコシステムでは、これまで2つの系統が共存していました。一方にはPiperやKokoroのような非常に軽量なモデルがあり、プロセッサー上で高速に動作する一方、音声は固定され、クローン機能はありません。もう一方には、より大規模で表現力の高いモデルがあり、英語と中国語を中心とするものが多くあります。Qwen3-TTSはその中間に位置します。コンパクトな重みを備えながら、自然言語によるスタイル指示を受け付けるLLM型アーキテクチャを採用し、リリース時点からフランス語を明示的にサポートしています。

このファミリーの特徴は、何でもこなす一つのモデルではなく、三つの動作に分かれていることです。必要なバリアントだけをダウンロードできるため、テキストLLMと共有する8または12 GBのGPUでは重要です。

i
このガイドで扱わないこと
Qwen3-TTS、Kokoro、Voxtralの音声品質を比較するものではなく、スループットも示していません。再現可能なテストは実施していません。そのような比較には、プロトコル、記載されたハードウェア、公開された音声ファイルが必要です。このガイドは、GitHubのQwenLM/Qwen3-TTSリポジトリと、組織QwenのHugging Faceモデルページに基づいています。インストール時に再確認してください。モデル名とPython APIのパラメーターは変化します。

#利用可能なモデル:Base、CustomVoice、VoiceDesign

ローカルAI SNS制作キット

自分の環境で作るショート動画とカルーセル:自然なAIナレーション、単語ごとの字幕、自動編集、投稿文を、サブスクリプションなしで実現します。

  • 永久に利用できるオンラインスペース
  • PDF + ファイル
  • 30日間返金対応

リリース時点で、このファミリーにはパラメーター数0,6および1,7十億の二つのモデルサイズがあり、それぞれ三つの機能バリエーションに展開され、共有オーディオトークナイザーも含まれます。Hugging Faceの識別子はQwen/Qwen3-TTS-12Hz-<サイズ>-<バリエーション>というパターンに従います。「12Hz」はオーディオコーデックの周波数を指します。モデルは発話1秒あたり十二フレームの音響トークンを生成するため、より密度の高いコーデックと比べて計算資源が少なくて済みます。

CustomVoice
あらかじめ用意された音声で、それぞれ固有の声質と母語があり、スタイル指示(「ゆっくり、安心させるような口調で話す」)で制御できます。音声について悩まずにテキストを読み上げたい場合は、このバリアントを選びます。0,6Bと1,7Bで利用できます。
VoiceDesign
必要な音声を自然言語(年齢、知覚される性別、活気、アクセント、感情)で説明すると、モデルがそれを生成します。参照用の録音は不要なので、実在の人物を模倣することもありません。1.7Bとして公開されています。
Base
数秒間の音声サンプルとその文字起こしからクローンします。最も強力なバリアントであり、同意に関する問題がある唯一のバリアントです。この問題については後述します。0,6Bと1,7Bで利用できます。
Tokenizer-12Hz
音声をエンコードおよびデコードするオーディオコーデックです。上記のバリアントによって自動的にダウンロードされます。高度な用途の場合にのみ操作する必要があります。

対応言語として、中国語、英語、日本語、韓国語、ドイツ語、フランス語、ロシア語、ポルトガル語、スペイン語、イタリア語が案内されており、さらに複数の中国語方言にも対応しています。言語パラメーターには「French」のような明示的な名前を指定するか、モデルにテキストの言語を検出させる「Auto」を指定できます。フランス語では、値を明示すると固有名詞や英語由来語の発音が不安定になるのを防げます。

→
どのサイズを選ぶか
bfloat16の重みはパラメーター1つあたり約2バイトを占めます。したがって、コーデックと作業メモリを除くと、0,6B版では約1,2 GB、1,7B版では3,4 GBの規模になります。これは計算値であり、実測値ではありません。GPUですでにテキストモデルを稼働させている場合は、0,6Bのほうがより多くの空きを残します。音声合成が主な用途であれば、1,7BはQwenチームが例で推奨しているモデルであり、VoiceDesignを提供する唯一のモデルです。

#ハードウェアとソフトウェアの前提条件

システム
Linux x86_64がリポジトリで文書化されている対象です。macOSとWindowsも利用できますが、詳細な留意事項については専用セクションで説明します。
GPU
CUDA対応のNVIDIAが想定された方法です。RTX 3060 12 GBなら、1.7B単体には十分です。プロセッサー上での実行は一文を試すには機能しますが、対話的な用途には適していません。
Python
リポジトリでは、専用の仮想環境でPython 3.12を使用することを推奨しています。システム環境や別のオーディオプロジェクトの環境にはインストールしないでください。パッケージが要求するPyTorchとtransformersのバージョンが競合する可能性があります。
ディスク容量
ダウンロードした各バリアントにつき数GBを見込みます。保存先はデフォルトではHugging Faceのキャッシュ(~/.cache/huggingface)です。
ネットワーク
重みをダウンロードする初回起動時のみ必要です。その後はすべてオフラインで動作します。

最後の前提条件は技術的なものではありません。Baseバリアントを使う予定なら、その音声を利用する権利のある録音を用意してください。学習用には、自分の声が最も簡単で安全なケースです。

#手順1:qwen-ttsパッケージをインストールする

公式のPythonパッケージはPyPIではqwen-ttsという名前で、qwen_ttsとしてインポートします。依存関係としてPyTorchとtransformersを導入します。以下のインストールでは標準的な仮想環境を使用しますが、普段使っているのであればcondaでも問題ありません。

ターミナル
# Environnement isolé
python3.12 -m venv ~/qwen3-tts
source ~/qwen3-tts/bin/activate
pip install --upgrade pip

# Paquet officiel
pip install -U qwen-tts

# Lecture et écriture de fichiers audio pour les exemples
pip install soundfile

リポジトリでは、最近のGPUで推論を高速化するためのFlashAttention 2を任意で利用できます。コンパイルには時間がかかり、CUDA/PyTorchの組み合わせによっては失敗します。必須ではありません。これがなくても、モデルはPyTorchの標準アテンションを使用します。ほかの部分が動作するようになってから、1回だけインストールしてください。

ターミナル(任意)
pip install -U flash-attn --no-build-isolation

先に進む前に、import passeとPyTorchがGPUを正しく認識していることを確認してください。

ターミナル
python -c "import torch, qwen_tts; print(torch.__version__, torch.cuda.is_available())"
!
オーディオのシステム依存関係
Pythonのオーディオライブラリは、システムツール(soundfile用のlibsndfile、パッケージのバージョンによってはsoxまたはffmpeg)に依存することがあります。不足しているライブラリが原因でインポートに失敗した場合は、パッケージマネージャー(apt、dnf、pacman)でインストールしてから再実行してください。エラーメッセージには、必要なライブラリが必ず示されます。

#ステップ2:Qwen3-TTSでフランス語の最初の一文を生成する

CustomVoiceバリアントは、最初の試行に最も直接的です。参照用の録音も、作成する説明文も必要ありません。モデルを読み込み、リポジトリの一覧から音声を選び、テキストと言語を渡します。最初の呼び出しで、Hugging Faceから重みがダウンロードされます。

premiere_voix.py
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
    device_map="cuda:0",
    dtype=torch.bfloat16,
)

wavs, sr = model.generate_custom_voice(
    text="Bonjour, ceci est un test de synthèse vocale locale avec Qwen3-TTS.",
    language="French",
    speaker="Ryan",
    instruct="Ton calme et posé, débit modéré.",
)

sf.write("sortie_custom_voice.wav", wavs[0], sr)
print("Fichier écrit à", sr, "Hz")

説明が必要なパラメーターは3つあります。speakerフィールドは、あらかじめ用意された音声の1つを指定します。母語と各声質の説明を含む正確な一覧は、READMEとCustomVoiceモデルのHugging Faceページに記載されています。これらの音声はすべてフランス語を読み上げられますが、それぞれ母語に一貫したアクセントが残ります。これは美的な選択であり、欠点ではありません。instructフィールドは、自然言語によるスタイル指示です。感情、リズム、意図などを指定します。これは任意です。最後に、この関数は波形のリストとサンプリング周波数を返すため、複数のテキストをまとめて処理できます。

バッチ生成
textes = [
    "Première phrase à lire.",
    "Deuxième phrase, avec une intonation différente.",
]
wavs, sr = model.generate_custom_voice(
    text=textes,
    language=["French", "French"],
    speaker=["Ryan", "Serena"],
    instruct=["Neutre.", "Enjouée, un peu plus rapide."],
)
for i, w in enumerate(wavs):
    sf.write(f"lot_{i}.wav", w, sr)
→
Ollamaを共有するGPU上で
Ollamaは、OLLAMA_KEEP_ALIVEで指定した期間、モデルをメモリに読み込んだままにします。GPUが足りるはずなのに音声合成がCUDAメモリエラーで失敗する場合は、テスト中だけテキストモデルをアンロードするか、Qwen3-TTSを0.6Bで読み込んでください。Q4_K_Mの7Bはすでに約5 GBを占有します。

#ステップ3:説明から音声を設計する

VoiceDesignは、誰かをまねずに、一覧にない音声が欲しいという頻繁なニーズに応えます。1つまたは2つの文で結果を説明すると、モデルが指示に一貫した声質を生成します。また、実在の声を再現しないため、製品にはこのバリアントを優先して使うのが適しています。

voice_design.py
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
    device_map="cuda:0",
    dtype=torch.bfloat16,
)

wavs, sr = model.generate_voice_design(
    text="Votre rendez-vous est confirmé pour demain à quatorze heures.",
    language="French",
    instruct="Voix féminine d'une quarantaine d'années, grave et chaleureuse, "
             "articulation nette, rythme lent, sans emphase.",
)

sf.write("sortie_voice_design.wav", wavs[0], sr)

説明は、比喩よりも音響的特徴(高さ、速度、エネルギー、明瞭さ)を記述したほうがうまく機能します。「夜間ラジオのアナウンサーの声」よりも、「低く、ゆっくりとして、柔らかな男性の声」のほうが安定した結果になります。このように設計した音声は、呼び出しごとに固定されるわけではありません。何百もの文で同じ音声が必要な場合は、まず納得のいく最初のサンプルを生成し、それをBaseバリアントの参照音声として使用してください。そうすれば合成音声をクローンすることになり、同意に関する問題はありません。

#手順4:所有者の同意を得て音声をクローンする

Baseバリアントは、短い音声サンプルとその文字起こしから声質を再現します。明瞭な発話が数秒あれば、識別可能な音声を得るのに十分です。これはこのファミリーで最も印象的な機能であり、コードを1行書く前から最も慎重な準備を必要とします。

!
同意:オプションではなくルール
人の声は人格の属性であり、フランスではプライバシー(民法第9条)に基づいて保護されています。また、音声録音はGDPRの意味における個人データです。第三者の声を明示的かつ文書化された同意なしにクローンすると、民事責任を問われる可能性があり、用途が欺瞞的であれば刑事責任も問われます。さらに、欧州AI規則は2026年8月以降、音声コンテンツが人工的に生成または操作されたものであることを表示するよう求めています。自分自身の声、特定の用途について書面で同意した人の声、またはVoiceDesignから生成した合成音声だけをクローンしてください。それ以外は一切認められません。

参照音声を準備するには、静かな場所で、BGMや残響なしに、自然に話した五〜十秒の文を録音してください。句読点も含めて一語ずつ文字起こしします。モデルが音声と対応付けて声質を学習するのは、このテキストです。モノラルのWAVファイルが最も安全な形式です。

clonage.py
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,
)

wavs, sr = model.generate_voice_clone(
    text="Voici une phrase que je n'ai jamais prononcée, lue avec ma propre voix.",
    language="French",
    ref_audio="ma_reference.wav",
    ref_text="Bonjour, je m'appelle Thomas et j'enregistre cette phrase pour tester le clonage.",
)

sf.write("sortie_clone.wav", wavs[0], sr)

このリポジトリでは、本番環境で役立つ高度な用途を二つ解説しています。まず、参照音声の「声紋」を一度だけ事前計算し、その後は音声を再読み込みせず各文で再利用できます。これは、ドキュメントリーダーや継続的に話すアシスタントに必要な機能です。次に、文字起こしを使わず話者の声紋だけを使用するモードがあります。こちらは高速ですが、忠実度は低くなります。これらのパラメーターの正確な名前はREADMEに記載されています。パッケージの初期バージョン間で変更されているため、古いチュートリアルではなく、インストール済みのドキュメントを読むことが重要です。

結果を改善するもの
きれいな参照音声、正確な文字起こし、「Auto」ではなく指定した言語、そして句読点を付けたターゲットテキスト(モデルはコンマやピリオドで息継ぎします)。
品質を低下させるもの
背景ノイズ、短すぎるまたは長すぎる参照音声、ささやき声、曖昧な文字起こし、そして曖昧なケースで数字を文字ではなく数値で記述すること。
文書化すべき事項
誰が同意したのか、どの用途についてか、いつ同意したのか、録音はどこに保管されているのか。個人プロジェクトなら、参照ファイルの横に単純なテキストファイルを置くだけで十分です。業務用途なら、正式な処理記録が必要です。

#手順5:Webインターフェースとサーバー

このパッケージは、スクリプトを書かずに音声や指示を試せる、コマンドラインのGradioデモをインストールします。起動時にモデルを読み込み、ローカルのWebページを公開します。

ターミナル
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 127.0.0.1 --port 8000

マシンが保護されていない間は、リッスンアドレスを127.0.0.1のままにしてください。Gradioはデフォルトでは誰も認証せず、ネットワーク上に公開された音声クローニングインターフェースは軽視できません。別の端末からアクセスする必要がある場合は、他のローカルサービスと同様に、SSHトンネルまたは認証付きのリバースプロキシを経由してください。

アプリケーションに統合する場合、Qwenチームは、vLLMのマルチモーダル拡張であるvLLM-Omniを案内しています。これはHTTP APIとストリーミング出力(生成が完了する前に音声の出力が始まります)でモデルを提供できます。レイテンシーが重要な音声アシスタントでは、この方法を検討するとよいでしょう。音声ファイルをバッチ生成する場合は、直接Pythonスクリプトを使えば十分で、余分な層も避けられます。

#Apple SiliconとWindows:コミュニティによる手段であることを明記

公式リポジトリでは、CUDAを使用するLinuxについて説明しています。その他のプラットフォームについては、以下はコミュニティのエコシステムに属するものです。これらの手順は私たち自身では検証しておらず、状況は月ごとに変化します。

Apple Silicon搭載Mac
公式パッケージはPyTorchを基盤としているため、dtype float16またはfloat32でdevice_map="mps"を試せます(bfloat16はMPSで常にサポートされるとは限りません)が、未対応の操作が発生する可能性があります。Macで最も自然な方法はMLXへの移植です。コミュニティプロジェクトのmlx-audioはQwen3-TTSへの対応を発表しています。取り組む前に、そのリポジトリでどのバリアントがどの程度成熟した状態で対応されているかを確認してください。
ネイティブWindows
CUDA対応のPyTorchは通常どおりインストールできますが、FlashAttentionはWindowsでのコンパイルが難しいため、使わずにデフォルトのアテンションを使用してください。一部のオーディオ依存関係ではシステムバイナリ(たとえばPATH内のffmpeg)が必要です。サードパーティ製の「ワンクリック」インストーラーも出回っていますが、固定されたパッケージバージョンを同梱していることが多いため、何をインストールするのかを確認してください。
WSL2経由のWindows
これは公式ドキュメントに最も近い方法です。WSL2上のUbuntuディストリビューションで、最近のNVIDIA Windowsドライバーを使用するとGPUが認識され、このガイドのコマンドに正確に従えます。代償として、層が1つ増え、Windowsファイルへのアクセスが少し遅くなります。
i
量子化形式
テキストモデルとは異なり、Qwen3-TTSには公式のOllamaパスもGGUFもありません。音声合成では、llama.cppがそのまま扱えないオーディオコーデックを使用するためです。コミュニティによる変換が登場する可能性はありますが、QwenLMのリポジトリで参照されるまでは実験的なものとして扱ってください。

#トラブルシューティング

読み込み時のCUDA out of memory
別のプロセスがGPU(Ollama、アクセラレーションを有効にしたブラウザー、Stable Diffusionのセッション)を使用しています。nvidia-smiで確認し、解放するか、0,6Bバリアントに切り替えてください。
ダウンロードが中断されたか、リポジトリが見つかりません
組織QwenのHugging Faceページでモデルの正確な識別子を確認してください。執筆後にバリアント名が変わっている可能性があります。部分的なダウンロードは、スクリプトを再実行すれば再開されます。
transformersまたはtorchでのimport liéeエラー
同じ環境にインストールされた別のプロジェクトとのバージョン競合です。クリーンな仮想環境を作り直し、qwen-ttsとsoundfileだけを再インストールしてください。
フランス語の発音がおかしい
language="French"を「Auto」の代わりに明示し、読み方が曖昧になる場合は数字を綴りで書き、句読点を付けてください。略語は、ピリオドまたはスペースで区切ると読みやすくなります。
参照音声に似ていないクローン
静かな環境で参照音声を録り直し、文字起こしを一語ずつ確認し、0.6Bを使っていた場合は1.7Bを試してください。長すぎるサンプルは役に立ちません。ノイズのある一分間より、明瞭な発話を数秒収録したものの方が優れています。
無音または空のファイル
リスト全体ではなく、正しくwavs[0]を書いていること、またモデルが返すサンプリング周波数がsoundfileに渡したものと同じであることを確認してください。
極端に遅い
モデルはおそらくCPU上で動作しています。手順1のtorch.cuda.is_available()テストはTrueを返す必要があります。そうでない場合は、使用しているドライバーに対応するCUDAバージョンでPyTorchを再インストールしてください。

#さらに詳しく

Qwen3-TTSは、ローカル音声パイプラインの「話す」部分を担います。もう半分の「理解」や、より軽量な合成モデルとの比較については、関連するテーマをすでにいくつか扱っています。このガイドで挙げるパッケージとモデルのバージョンは、執筆時点のQwenLM/Qwen3-TTSリポジトリのものです。相違がある場合は、リポジトリとHugging Faceのモデルページを正しい情報源としてください。

Kokoro TTS:自然な音声を生成する軽量なローカルモデル
クローニングなしで、プロセッサー上でリアルタイムより速く話す、パラメーター数8,200万のモデルです。表現力より省リソース性を優先する場合に適しています。https://quelllm.fr/guide/kokoro-tts-voix-locale
100%ローカルの音声アシスタント:Whisper + Ollama + Piper
音声を聞き、推論し、話して応答する一連の処理です。GPUが対応していれば、Qwen3-TTSで音声合成時のPiperを置き換えられます。https://quelllm.fr/guide/assistant-vocal-local-whisper-piper
Voxtral 4B TTSモデルカード
Qwen3-TTSを数値比較なしで位置づけるための、欧州側におけるもう一つの最近のオープン音声合成モデルです。https://quelllm.fr/modele/voxtral-4b-tts
このガイドは役に立ちましたか?

ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。