音声クローンが可能なLLMベースのTTS「SparkTTS」を試す
GItHubレポジトリ
Spark-TTS 🔥
概要
Spark-TTSは、大規模言語モデル(LLM)の能力を活用した、非常に高精度かつ自然な音声合成を実現する先進的なテキスト音声合成(TTS)システムです。研究用途にも実運用にも適した、効率的かつ柔軟で強力な設計がなされています。
主な特徴
シンプルかつ効率的:Spark-TTSは完全にQwen2.5上に構築されており、flow matchingのような追加の生成モデルを必要としません。音響特徴量を別モデルで生成する代わりに、LLMによって予測されたコードから直接音声を再構成します。この手法によりプロセスが簡素化され、効率性と処理の容易さが向上します。
高品質な音声クローン:ゼロショット音声クローンに対応しており、特定の話者データによる訓練なしでもその話者の声を再現できます。これにより、クロスリンガル(言語間)およびコードスイッチング(言語の切り替え)に理想的な性能を発揮し、言語や話者間のシームレスな遷移が可能になります。
バイリンガル対応:中国語と英語の両方に対応しており、クロスリンガルおよびコードスイッチングシナリオにおけるゼロショット音声クローンも可能で、複数言語で自然で高精度な音声合成が実現されます。
制御可能な音声生成:話者の性別、ピッチ、話速などのパラメータを調整することで、仮想話者の生成をサポートしています。
デモ
以下は、ゼロショット音声クローンを用いてSpark-TTSで生成したデモの一部です。さらに多くのデモは デモページ をご覧ください。
言語は英語と中国で、日本語には非対応
またコードのライセンスはMITだが、モデルのライセンスはCC-BY-NC-SA-4.0なので注意。
論文についてはAlphAxivを参照
GradioのWebUIがあるっぽいのだけど、今回はColaboratory T4でCLIで試す。
レポジトリクローン
!git clone https://github.com/SparkAudio/Spark-TTS.git
%cd Spark-TTS
依存パッケージをインストール
!pip install -r requirements.txt
上記PyTorchなどがインストールされるのだが、Colaboratoryには元々PyTorchはインストールしてあって、そのためにtorchvisionのバージョンミスマッチが起きてしまう。CLIを動かした際にエラーになってしまうので、ここで再度PyTorchをインストールする。ColaboratoryはCUDA12.4なので、以下で。
!pip install -U torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124
モデルのダウンロード
from huggingface_hub import snapshot_download
snapshot_download("SparkAudio/Spark-TTS-0.5B", local_dir="pretrained_models/Spark-TTS-0.5B")
CLIは python -m cli.inference ...
で実行するのだが、cli
ディレクトリに__init__.py
がないためインポートに失敗する。作成しておく。
!touch cli/__init__.py
ではCLI
!python -m cli.inference \
--text "身临其境,换新体验。塑造开源语音合成新范式,让智能语音更自然。" \
--device 0 \
--save_dir "output" \
--model_dir pretrained_models/Spark-TTS-0.5B \
--prompt_text "吃燕窝就选燕之屋,本节目由26年专注高品质燕窝的燕之屋冠名播出。豆奶牛奶换着喝,营养更均衡,本节目由豆本豆豆奶特约播出。" \
--prompt_speech_path "example/prompt_audio.wav"
--prompt_text
と--prompt_speech_path
でリファレンスとなる音声ファイルとそのテキストを指定すると、--text
で生成された音声はリファレンスに沿った声質で生成される
リファレンスの音声はこれ
実行すると、--save_dir
で指定したディレクトリに出力される。
!ls -lt output
total 184
-rw-r--r-- 1 root root 184364 May 18 13:44 20250518134422.wav
Colaboratoryだと以下で再生できる
from IPython.display import Audio
Audio("output/20250518134422.wav", autoplay=True)
実際に生成されたもの。
次に英語。同じリファレンス音声を使用して、発話するテキストだけ英語にした。
!python -m cli.inference \
--text "Immerse yourself in a new experience. Shaping a new paradigm for open-source speech synthesis, making intelligent speech sound more natural." \
--device 0 \
--save_dir "output" \
--model_dir pretrained_models/Spark-TTS-0.5B \
--prompt_text "吃燕窝就选燕之屋,本节目由26年专注高品质燕窝的燕之屋冠名播出。豆奶牛奶换着喝,营养更均衡,本节目由豆本豆豆奶特约播出。" \
--prompt_speech_path "example/prompt_audio.wav"
実際に生成されたもの
どちらもリファレンス音声に基づいた音声として生成されているのがわかる。
なお、生成中のVRAM消費は4.5GBというところ。
Sun May 18 13:52:03 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA L4 Off | 00000000:00:03.0 Off | 0 |
| N/A 53C P0 47W / 72W | 4431MiB / 23034MiB | 47% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
Web UIでも音声クローンはできるが、どうやら性別・ピッチ・発話スピードなどのパラメータから音声を生成することもできるみたい。
また、よりGUIを使いやすくするコードの例もIssueに上がっている。
興味があれば。