Closed4

音声クローンが可能なLLMベースのTTS「SparkTTS」を試す

kun432kun432

GItHubレポジトリ

https://github.com/SparkAudio/Spark-TTS

Spark-TTS 🔥

概要

Spark-TTSは、大規模言語モデル(LLM)の能力を活用した、非常に高精度かつ自然な音声合成を実現する先進的なテキスト音声合成(TTS)システムです。研究用途にも実運用にも適した、効率的かつ柔軟で強力な設計がなされています。

主な特徴

  • シンプルかつ効率的:Spark-TTSは完全にQwen2.5上に構築されており、flow matchingのような追加の生成モデルを必要としません。音響特徴量を別モデルで生成する代わりに、LLMによって予測されたコードから直接音声を再構成します。この手法によりプロセスが簡素化され、効率性と処理の容易さが向上します。

  • 高品質な音声クローン:ゼロショット音声クローンに対応しており、特定の話者データによる訓練なしでもその話者の声を再現できます。これにより、クロスリンガル(言語間)およびコードスイッチング(言語の切り替え)に理想的な性能を発揮し、言語や話者間のシームレスな遷移が可能になります。

  • バイリンガル対応:中国語と英語の両方に対応しており、クロスリンガルおよびコードスイッチングシナリオにおけるゼロショット音声クローンも可能で、複数言語で自然で高精度な音声合成が実現されます。

  • 制御可能な音声生成:話者の性別、ピッチ、話速などのパラメータを調整することで、仮想話者の生成をサポートしています。

デモ

以下は、ゼロショット音声クローンを用いてSpark-TTSで生成したデモの一部です。さらに多くのデモは デモページ をご覧ください。

言語は英語と中国で、日本語には非対応

またコードのライセンスはMITだが、モデルのライセンスはCC-BY-NC-SA-4.0なので注意。

論文についてはAlphAxivを参照

https://www.alphaxiv.org/ja/overview/2503.01710

kun432kun432

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で生成された音声はリファレンスに沿った声質で生成される

リファレンスの音声はこれ

https://github.com/SparkAudio/Spark-TTS/blob/main/example/prompt_audio.wav

実行すると、--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)

実際に生成されたもの。

https://audio.com/kun432/audio/spark-tts-zh-sample

次に英語。同じリファレンス音声を使用して、発話するテキストだけ英語にした。

!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"

実際に生成されたもの

https://audio.com/kun432/audio/spark-tts-en-sample

どちらもリファレンス音声に基づいた音声として生成されているのがわかる。

kun432kun432

なお、生成中の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 |
+-----------------------------------------+------------------------+----------------------+
kun432kun432

Web UIでも音声クローンはできるが、どうやら性別・ピッチ・発話スピードなどのパラメータから音声を生成することもできるみたい。

また、よりGUIを使いやすくするコードの例もIssueに上がっている。

興味があれば。

https://github.com/SparkAudio/Spark-TTS/issues/10

このスクラップは4ヶ月前にクローズされました