- Sopro TTS は英語ベースの軽量な テキスト音声変換モデル で、ゼロショット音声クローニングとストリーミング生成をサポート
- 1億6900万パラメータを持ち、CPUで 0.25 RTF の速度で30秒の音声を約7.5秒で生成
- 3〜12秒の参照音声だけで話者の声を複製でき、WaveNetスタイルの dilated conv と軽量な cross-attention 構造を使用
- 単一の L40S GPU で学習された低予算プロジェクトで、データ品質を改善すれば性能向上の余地あり
- ストリーミングおよび非ストリーミングモード、CLI・Python API・Webデモをすべてサポートしており、開発者の実験や統合への活用性が高い
Sopro TTS 概要
- Sopro はポルトガル語で「息吹」を意味し、軽量な英語TTSモデルとして開発
- Transformer の代わりに dilated convolution と cross-attention を組み合わせた構造
- 単一の L40S GPU で学習された個人プロジェクト
- 主な特徴
- 169Mパラメータ、ストリーミング対応、ゼロショット音声クローニング
- CPU基準で 0.25 RTF、30秒の音声を7.5秒で生成
- 3〜12秒の参照音声で音声クローニングが可能
インストールと実行
- 最小限の依存バージョンのみが指定されており、別途環境を作成せずにインストール可能
- 例:
torch==2.6.0 バージョンでは M3 CPU で約3倍の性能向上
- インストール方法
- PyPI:
pip install sopro
- GitHub リポジトリ:
git clone 後に pip install -e .
使用例
- CLI 実行例
- テキスト、参照音声、出力ファイルを指定可能
--style_strength, --no_stop_head, --stop_threshold, --stop_patience などの詳細制御パラメータを提供
- Python API 例
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") でモデルを読み込み
- 非ストリーミングとストリーミングの両方をサポート
- ストリーミングモードでは、生成された音声チャンクを順次結合可能
インタラクティブなストリーミングデモ
- インストール後、
uvicorn demo.server:app コマンドでローカルサーバーを起動
- または Docker でビルドおよび実行可能
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
- ブラウザで
http://localhost:8000 にアクセスするとデモを確認可能
注意事項と限界
- 出力の一貫性が不足する可能性があり、パラメータ調整が必要
- 音声クローニング品質はマイク品質と周囲の騒音に大きく依存
- 非ストリーミング版のほうが高音質
- 生成長は約32秒(400フレーム) に制限され、超過すると幻覚的な出力が発生
- torchaudio 使用時は ffmpeg が必要、
soundfile の使用を推奨
- 学習データは 事前トークナイズ済みの形式で、元の音声は保存容量の問題により破棄済み
- 今後 学習コードの公開および多言語対応の拡大 を計画していると述べられている
学習データ
- Emilia YODAS、LibriTTS-R、Mozilla Common Voice 22、MLS データセットを使用
参考および基盤技術
- Mimi Codec (Kyutai)、WaveNet、Attentive Stats Pooling、AudioLM、CSM などの研究およびコードを基盤として活用
1件のコメント
Hacker Newsのコメント
素晴らしくて実用的なプロジェクトだと思う
個人的には、Chatterbox-TTS-Server が最良の代替だと思っている
速度は遅いが、音質はかなり高い
このモデルは 音声クローニング と感情ベクトルによる手動の感情制御が可能で、非常に強力なツールだと感じる
現在進行中のモデルオーケストレーションプロジェクトで特に役立った
外部の感情分類モデルが LLM のペルソナと TTS 出力を同時に制御し、一貫性を維持する
感情状態によって「記憶」の検索確率も変化するが、IndexTTS2 ほど細かな制御ができる TTS はほとんどない
Sopro TTS の出力は GitHub の動画を見る限り深刻に悪く、実用には耐えないレベルだ
一方で Chatterbox は驚くような結果を出す
私の GPU は RTX5090 だが、1秒の生成に約2秒のランタイムで非常に速い
1つ目のサンプル と 2つ目のサンプル を参考にできる。後者はユーチューバー ArbitorIan の声をクローニングしたデモだ
本当にすごい!
私はローカルで Kokoro (82M) を使っているが、動作も速く 音質 も素晴らしい
私は ricky0123/vad で音声アクティベーションを処理し、Web Speech API で高速認識した後に商用 TTS を使っている
まだオープンソースでは速度の良いものを見つけられていない
「zero-shot」がどういう意味なのか気になった
few-shot はいくつかの例を与えてモデルを誘導することで、multi-shot は複数回のプロンプトと修正の過程を経るものだ
長いコンパイルなしで Mission Impossible 級の音声クローニングを実現したような感じだ
関連する YouTube動画 と ことば遊びの詩 も共有しておく
英語で試してみたが、かなり впечатляющийだった
低予算 のプロジェクトとしては驚くべき結果で、使うのもとても簡単だった
ドイツ語版があればぜひ使ってみたい
制約を考えればかなり印象的な結果だ
もっと強力なバージョン(アーティファクトが少なく、より多くの計算資源を必要とするもの)を公開する予定があるのか気になる
普段は Chatterbox を使っているが、これが高音質に発展すれば良い代替になりそうだ
計算コストはかなり高いが、コミュニティの反応が良ければさらに発展させるつもりだ
ちなみに Chatterbox は素晴らしいモデルであり、インスピレーションの源でもある
「zero-shot」の意味が気になった
Big O 記法よりもさらに恣意的だ
つまり、モデルが P(Audio|Voice) の条件付き確率を学習し、訓練中に見ていない音声クラスに対してサンプリングできるなら zero-shot だ
参照オーディオを与えることはモデルの重みを変えるのではなく、コンテキストを与えること に当たる
オーディオを聴いてみたが、音質があまりにもひどく て驚いた
15年前のコンピュータ音声以下で、なぜ人々が良いと言うのか理解できない
複数のブラウザで試したが同じだった
そこまでひどいなら別の問題があるかもしれないので、一緒に見てみたい
本当に素晴らしい技術だ
今後さらに良くなると思う
ただ、暫定措置でもいいので ざらついた音色(razziness) を減らす簡単なオーディオ後処理を追加するとよさそうだ
こうしたモデルの中に、speech-to-speech のボイスチェンジャー のように動くものがあるのか気になる
つまり、1つの固定音声サンプル(プロンプト)とリアルタイムの入力オーディオストリームを受け取り、入力の声をプロンプトの トーンと音色 に変換する方式だ
V-tuber のような用途ではプロンプトを頻繁に変える必要がないので、1回の fine-tuning で固定の音色を当てることもできそうだ
ただしストリーミング処理は自分で実装する必要がある
オーディオ A(スタイル)と B(コンテンツ)を入力し、A の 音色 と B の 発音・抑揚 を組み合わせる
こうしたモデルは実質的に「TTS」というより S+STS (speech+style to speech) と見る方が適切だ
公式ブログ に詳しく説明されている
ただし元の作者と開発者の間で対立があるので、メインフォークは避けて、英語で管理されている最新フォークを探すのがよい