
2026/01/09 5:37
**Sopro TTS:** CPU 上で動作し、ゼロショット音声クローン機能を備えた 1,690 万パラメータのモデル。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## Summary Soproは、1億6900万パラメータで構築された軽量な英語テキスト・トゥー・スピーチシステムです。リアルタイムのストリーミング合成と、わずか数秒の参照音声からのゼロショットボイスクラーニングを提供します。そのアーキテクチャは重いTransformerをドリーテッドWaveNetスタイルの畳み込みと軽量なクロスアテンション層に置き換え、M3コアマシンでCPUリアルタイム係数0.25(約7.5秒で30秒分の音声生成)を達成します。モデルは依存関係が最小限で、PyTorch 2.6.0のみを必要とし、低スペックハードウェアでも効率的に動作します。 Soproは単純なPython API(`SoproTTS.synthesize`)、コマンドラインインターフェイス(`soprotts …`)、およびUvicornまたはDockerで起動できる対話型Webデモを通じて、非ストリーミング(`SoproTTS.synthesize`)とストリーミング(`SoproTTS.stream`)の両方のモードをサポートします。ストリーミング出力は非ストリーミングモードとビットレベルで完全に一致しないため、最高品質を求めるユーザーは非ストリーミング合成を使用することが推奨されます。 トレーニングにはEmilia YODAS、LibriTTS‑R、Mozilla Common Voice 22、およびMLSなどの公開コーパスからデータが採用され、WaveNet、Attentive Stats Pooling、AudioLM、CSMといった確立された手法を組み込んでいます。ボイスクラーニングの品質はマイクロフォンの品質に依存し、システムは略語よりも音素レベルの参照音声を好みます。 Soproは低リソースフットプリント、CPUフレンドリー、そして簡単な統合性を備えているため、チャットボット、アクセシビリティツール、組み込みデバイス、および軽量TTSと高品質ボイスクラーニングが必要なリアルタイムアプリケーションに最適です。
本文
Sopro TTS – README(日本語訳)
概要
Sopro(ポルトガル語で「息/吹き込み」を意味)は、サイドプロジェクトとして作成した軽量な英語テキスト‑to‑speechモデルです。
- WaveNet のようにダイレーテッド畳み込みを使用し、Transformer ではなく軽量クロスアテンションで実装しています。
- すべての声で最先端というわけではありませんが、非常に低コスト(L40S GPU1台)で構築しました。
- データを改善することでさらに向上させることが可能です。
主な特徴
- パラメータ数:169 M
- ストリーミング合成
- ゼロショット音声クローン化
- CPU で約0.25 RTF(例:M3 ベースモデルで30 s の音声を7.5 s で生成)
- 音声クローン化には3–12 s の参照音声が必要
インストール
最小依存関係
# 任意:クリーンな Conda 環境を作成 conda create -n soprotts python=3.10 conda activate soprotts # PyPI からインストール pip install sopro # またはリポジトリから git clone https://github.com/samuel-vitorino/sopro cd sopro pip install -e .
ヒント
M3 CPU 上では(torch==2.6.0を除く)で約 3 倍のパフォーマンスが得られます。torchvision
利用方法
コマンドラインインターフェース (CLI)
soprotts \ --text "Sopro is a lightweight 169 million parameter text-to-speech model. Some of the main features are streaming, zero-shot voice cloning, and 0.25 real-time factor on the CPU." \ --ref_audio ref.wav \ --out out.wav
追加オプション:
– FiLM の強度を制御(デフォルト 1.0)。--style_strength
– 早期停止を無効化。--no_stop_head
,--stop_threshold
– 最終フレームと判定される連続数。--stop_patience
Python API
非ストリーミング
from sopro import SoproTTS tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") wav = tts.synthesize( "Hello! This is a non-streaming Sopro TTS example.", ref_audio_path="ref.wav", ) tts.save_wav("out.wav", wav)
ストリーミング
import torch from sopro import SoproTTS tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") chunks = [] for chunk in tts.stream( "Hello! This is a streaming Sopro TTS example.", ref_audio_path="ref.mp3", ): chunks.append(chunk.cpu()) wav = torch.cat(chunks, dim=-1) tts.save_wav("out_stream.wav", wav)
インタラクティブストリーミングデモ
pip install -r demo/requirements.txt uvicorn demo.server:app --host 0.0.0.0 --port 8000 # または Docker docker build -t sopro-demo . docker run --rm -p 8000:8000 sopro-demo
ブラウザで http://localhost:8000 を開きます。
注意事項・ヒント
- 一貫性 – パラメータを微調整して良いサンプルを得るまで試行錯誤してください。
- 音声クローン化 はマイクの品質と周囲ノイズに大きく左右されます。分布外の声では失敗する可能性があります。
- 略語や記号よりも音素表記を好む(例:
→1 + 2
)。ただし Sopro は多くの略語(1 plus 2
,CPU
等)に対応しています。TTS - ストリーミング版は非ストリーミングとビット単位で完全一致しないため、最高品質を求めるなら非ストリーミングを推奨します。
を使う場合は ffmpeg が必要になることがあります。torchaudio
の使用が推奨です。soundfile- 生成は約32 s(400フレーム)までに制限されます。それ以上だとモデルが幻覚を起こしやすくなります。
今後の計画
- コードが整理できたらトレーニングコードを公開予定。
- 原音をトレーニング時に使用して話者埋め込み/声類似性を向上。
- 生成速度向上のため Conv の状態キャッシュ化。
- 言語サポートと総合品質の拡充。
トレーニングデータ
- Emilia YODAS
- LibriTTS‑R
- Mozilla Common Voice 22
- MLS
謝辞
- Mimi Codec (Kyutai)
- WaveNet
- Attentive Stats Pooling
- AudioLM
- CSM
このプロジェクトがお役に立ったら、コーヒーを購入していただけると嬉しいです: https://buymeacoffee.com/samuelvitorino