Qwen3-TTSで“自前のローカル音声基盤アプリ”を設計する意味
はじめに
今回書きたいのは、Qwen3-TTSの性能レビューではありません。
自分が本当にやりたかったのは、
Qwen3-TTSを「音声を1本作るための道具」として使うことではなく、
自分で拡張できるローカル音声基盤として持つことでした。
既存の便利な仕組みや、すぐに試せる環境はたくさんあります。
便利なアプリケーションも多くある時代です。ただ、自分が欲しかったのはそこではありませんでした。
動画制作の流れの中に音声生成を差し込みたい
リアルタイム応答アプリから同じ声を使いたい
ローカルLLMとつないで、ローカルで考えてローカルで喋る形にしたい
profile や辞書や cache を、毎回捨てるのではなく資産として育てたい
必要なら入口を増やしたい
こうなってくると、必要なのは「便利な生成UI」よりも、
自分でほしい機能を追加していけるハブアプリケーション構築でした。
この記事では、Qwen3-TTSをどう評価したかではなく、
なぜ自前のローカル音声基盤を設計する意味があるのか、
そしてそれをどういうフォルダ・ファイル・プログラム構成で支えたのかを、初心者にも伝わる形で書いてみます。
なぜ“自分で設計する”ことに意味があるのか
ローカルで音声を出せるだけなら、それだけで満足する人も多いと思います。実際、それだけでも十分すごいです。
でも、少し使い始めると、だんだん「その先」が欲しくなります。
たとえば、
同じ声で別の文章を何本も作りたい
よく間違える単語の読みを直したい
声ごとに設定を分けたい
別のツールからも呼びたい
別のPCでも再現したい
こういう要求が出てくると、
単に生成できることより、応用する為のパイプラインのほうが大事になってきます。
つまり、価値の中心が「モデルの性能」から「構成の持ち方」へ移るわけです。
自前でローカル音声基盤を設計する意味は、まさにここにあります。
最初から完璧な巨大システムを作る必要はありません。でも、
コアをどこに置くか
声の資産をどこに置くか
読み方の辞書をどこに置くか
出力の履歴をどこに残すか
入口をどこで分けるか
このような土台をあらかじめ決めておくと、あとから育てやすさがまったく変わってきます。
ComfyUIのような便利な仕組みと、何が違うのか
ここは誤解されたくないのですが、
ComfyUIのような既存の仕組みがダメだという話ではありません。
違うのは、何を主役にするかです。
ComfyUI的な使い方は、視覚的に組みながら、その場で結果を出していくのに向いています。
つまり、「いまこの生成をどう回すか」が主役になりやすい。
一方で、自前のローカル音声基盤を設計する場合は、
「いま1回生成できるか」よりも、
その声を別の入口から再利用できるか
後からGUIを足せるか
別のアプリへ接続できるか
profile や dict を資産として育てられるか
ローカルLLMと結びつけられるか
といった、拡張性と再利用性のほうが主役になります。
今回の構成で言えば、CLI、After Effects 連携、リアルタイム応答アプリという複数の入口があっても、音声生成の中核は共通です。
つまり、入口を増やしても、声そのものの資産や読み方の資産は共有できます。
この「入口は複数でも、コアと資産は共通」という考え方が、自前設計の強みだと思っています。
実際に大事だったのは、モデル性能よりファイル構成だった
図1. Qwen3-TTSを“音声基盤”として持つために設計した最小構成
qwen3_tts_min/
scripts/
20_run_phase2.py
22_gui_text_to_wav.py
src/
phase2/
phase2_lib.py
profiles/
my_voice/
dict/
reading_dict.json
runs/
outputs/
requirements_min.txt今回いちばん大事だったのは、実はモデルそのものよりも、
どこに何を置くかでした。モデル自体はそもそも優秀ですしね。
最小構成にすると、役割ごとの分け方がかなりはっきり見えます。
自分の中では、ざっくり次のような役割分担がかなり大事でした。
src/phase2/
音声生成のコアscripts/
入口。CLIや橋渡し用profiles/
声の資産dict/
読み方の資産runs/
出力や途中成果物、履歴outputs/
最終的に使う wav の置き場
この分け方をしておくと、あとで考えやすくなります。
たとえば「声を増やしたい」と思ったら profiles/ を見る。
「読み間違いを直したい」と思ったら dict/ を触る。
「入口を増やしたい」と思ったら scripts/ を足す。
「本体の改善をしたい」と思ったら src/phase2/ を見る。
初心者にとっても、これはかなり大きいと思います。どこを見ればいいのかが最初からわかるからです。
AIコード全般の一般論まで広げるつもりはありませんが、少なくとも今回の文脈では、機能を増やす前に土台を固めておくことが一番効きました。
ローカルで持つと、profile・dict・cache が資産になる
図2. 音声の見本、文字起こし、キャッシュをまとめて持つことで、あとから育てやすくなる
profiles/my_voice/
profile.json
ref_audio.wav
ref_text.txt
cache/
voice_clone_prompt.pt
voice_clone_prompt.meta.jsonこの構成の気に入っているところは、毎回その場で使って終わりにならないことです。
声ごとの profile、見本音声、見本音声の文字起こし、読み方の辞書、
クローン用の cache、生成履歴。
こうしたものが、全部ローカルに残ります。
ここがすごく大事でした。
単発生成だと、どうしても「今回はうまくいった」「今回は微妙だった」で終わりやすい。
でも profile や dict を持ち回る構成だと、次に改善するときの足場が残ります。
声を増やしたいなら profile を増やす
読みを改善したいなら dict を更新する
クローンの土台を安定させたいなら ref_audio / ref_text を見直す
同じ設定で別の入口から使いたいなら、そのまま共有する
こういうふうに、毎回の調整が無駄にならないのが大きいです。
初心者でも「ちょっとずつ育てる」感覚で扱えるので、ここはかなり気に入っています。
入口を後から増やせることが、実はかなり大きい
図2. GUIもAE連携も応答アプリも、同じ音声基盤を呼ぶだけにしている
GUI / CLI / AE / 応答アプリ
↓
scripts/*.py
↓
src/phase2/phase2_lib.py
↓
profile / dict / cache / runs
↓
wav出力今回の構成では、もともと CLI や AE 連携、リアルタイム応答アプリの入口がありました。そして最小構成に切り出す過程で、初心者向けの GUI も後から追加しました。
ここで大事なのは、GUI が主役ということではありません。
むしろ逆で、コアが先に整理されていたから、GUI を後から足せたということです。

最初から全部入りの大きいアプリを作る必要はなく、
まずはコアと資産の置き場を分けておけば、あとから
GUI を足す
CLI を整える
AE に渡す
応答アプリにつなぐ
といった拡張がしやすくなります。
「最初から完璧な完成形を作る」より、後から入口を増やせる構成にしておくほうが、結果的に長く使いやすいと感じました。
既存サービスではやりにくい“その先”がある
今回、自前のローカル音声基盤を持ちたいと思った理由は、
単に自由度が高いから、というだけではありません。
自分の場合は、実際にその先の接続先がありました。
ひとつは After Effects 側です。音声を1本生成して終わりではなく、
制作フローの中でそのまま扱える形にしたかった。
もうひとつはリアルタイム応答アプリです。
こちらはもっとわかりやすくて、
ローカルLLMで返答を作り、それをローカルTTSで喋らせるところまで
視野に入っていました。
実際、RT版では Ollama を使ったローカル LLM 連携が実装済みで、
その返答を Qwen3-TTS 側に流す構成になっています。
ここが大きな差別化ポイントだと思っています。
「音声を作る」だけなら、もっと簡単な使い方はいくらでもあります。
でも、ローカルで考えて、ローカルで喋って、しかもそれを別の制作ツールやアプリへ差し込むというところまで考えると、自前で基盤を持つ意味が急に大きくなります。
API への差し替えについては、現時点で完成済みの複数 backend があるわけではありません。
ただ、差し替えやすい契約を意識した設計にはなっていて、将来的な
拡張余地として残せる状態でした。
つまり今の段階では、
ローカルLLMとの連携は実装済み
API差し替えは設計上の余地として確保
という整理が一番しっくりきます。
初心者でも、全部を理解しなくていい
たぶんこの記事で一番伝えたいのはここです。
実際に大事なのは、まず最低限だけ分かればいいということです。
たとえば、最初はこれくらいで十分です。
音声生成の本体はここ
声のフォルダはここ
読み方の辞書はここ
完成 wav はここに出る
このくらい見通しが立つだけでも、かなり違います。
そこから少しずつ、
profile を増やしてみる
dict を直してみる
GUI から使ってみる
別の入口を足してみる
と育てていけばいい。
今回、自分がやりたかったのも結局それでした。
「すごいAIを触る」ではなく、
自分の作業環境の中で、少しずつ育てられる部品として持つことです。
まとめ
今回の話の主役は、Qwen3-TTS の性能ではありません。
主役は、Qwen3-TTS をコアにしたローカル音声基盤を、
自分で設計して持つことのメリットです。
そのメリットを、自分なりにまとめるとこうなります。
単発生成で終わらず、資産が残る
profile・dict・cache を育てられる
入口を後から増やせる
AE や応答アプリのような別ツールへつなげられる
ローカルLLMと結びつけて、ローカルで考えてローカルで喋る構成へ進められる
初心者でも、土台を役割ごと分けておけば少しずつ理解できる
たぶん、自分が今回いちばん価値を感じたのは、「難しいAI技術を触ったこと」ではなく、それを自分でも扱える構成に落とせたことでした。
もし Qwen3-TTS やローカルTTSに興味はあるけれど、難しそうで手を出しづらいと感じているなら、最初から全部を理解しようとしなくても大丈夫だと思います。
まずは、あとから育てられる形にしておくこと。
そこから始めるだけでも、かなり景色が変わります。
