Pocket‑TTS: 軽量CPU専用テキスト・トゥ・スピーチライブラリ
Pocket‑TTS: 軽量でCPU専用のテキスト・トゥ・スピーチライブラリ
テキスト・トゥ・スピーチ(TTS)は、デジタルアシスタントからアクセシビリティツールまで、様々なアプリケーションで不可欠な要素となっています。従来のソリューションは強力なGPUを必要としたり、有料のWeb APIに頼ったりするため、エッジデバイスやプライバシーを重視した導入には不向きです。Pocket‑TTS は、完全にCPU上で実行できる高品質・低レイテンシのTTS体験を提供し、この課題を解決します。
TL;DR – Pocket‑TTS は 100 M パラメータのモデルで、2つのCPUコア上で音声合成を行い、約200 ms の最初のチャンクレイテンシと MacBook Air M4 での約6倍のリアルタイム速度を実現します。
pip install pocket-ttsまたはuv add pocket-ttsでインストールし、CLI からpocket-tts generate、または Python からTTSModel.load_model()を呼び出してください。
目次
- Pocket‑TTS はなぜ必要か
- はじめに
- 音声クローニング
- CLI & HTTP サーバー
- Python API 統合
- 性能 & ベンチマーク
- 拡張 & コントリビューション
- ライセンス & 使用注意事項
Pocket‑TTS はなぜ必要か
| 機能 | Pocket‑TTS | 競合(典型的) |
|---|---|---|
| モデルサイズ | 100 M パラメータ | 700 M–1 B+ |
| ランタイム | 2 CPU コア | GPU または TPU |
| レイテンシ | ~200 ms | 1–2 s |
| デプロイ | pip/uv インストール | Docker + GPU、Web API |
| 音声ライブラリ | 8 つのプリビルト音声 + wav 入力 | 制限があるかない |
| 言語 | 英語のみ(近日多言語対応) | 多言語 |
Pocket‑TTS は「ポケットに収まる TTS」というアイデアから設計されました。以下の特徴が差別化のポイントです。
- CPU 専用 – どんな最新の CPU でも動作し、CUDA や GPU は不要。
- 小さめのフットプリント – 100 M パラメータのトランスフォーマー(約30 MB)でリポジトリを軽量化。
- 音声ストリーミング – モデルが継続生成しながらリアルタイムで音声をストリームできる。
- 音声クローニング – wav ファイルを提供すれば、その音声に合わせて声状態を生成。
- CLI & HTTP API – シンプルなコマンドラインと高速ローカルサーバーで統合が容易。
結果として、ノートパソコン、Raspberry Pi スタイル SBC、エッジインフェレンスチップ上で即座に動作するプラグアンドプレイ型ライブラリが完成します。
はじめに
Pocket‑TTS は純粋な Python パッケージで、PyTorch 2.5+ が必要です。最も簡単な入手方法は uv(限定環境向け推奨)または pip です。
uv でインストールする
uv add pocket-tts
uvx pocket-tts generate "Hello World!"
uvxは一時環境でコマンドを実行します。素早いテストに最適です。
pip でインストールする
pip install --upgrade pocket-tts
pocket-tts generate "Hello World!"
上記例ではデフォルト音声(alba)をダウンロードし、tts_output.wav に書き出します。
Colab 例
!pip install pocket-tts
from pocket_tts import TTSModel
import scipy.io.wavfile as wav
model = TTSModel.load_model()
voice_state = model.get_state_for_audio_prompt("alba")
audio = model.generate_audio(voice_state, "Hello from Colab!")
wav.write("output.wav", model.sample_rate, audio.cpu().numpy())
最初のモデル読み込みは約30 秒かかりますが、その後の呼び出しはメモリに保持されます。
音声クローニング
Pocket‑TTS はローカル wav ファイルまたは Hugging Face ホストの wav を受け付け、音声クローニングをサポートします。
pocket-tts generate "This is my cloned voice" --voice ./my_voice.wav
Hugging Face の URL を渡すことも可能です。
pocket-tts generate "I love Hugging Face" \
--voice "hf://kyutai/tts-voices/expresso/ex01-ex02_default_001_channel2_198s.wav"
音声ファイルは約16 kHz、16‑bit PCM である必要があります。リポジトリ内の
voice_catalog.mdに例音声リストがあります。
音声状態の管理
短時間で複数の音声を使用する場合、音声状態をメモリに保持しておくと便利です。
model = TTSModel.load_model()
voice_alba = model.get_state_for_audio_prompt("alba")
voice_marius = model.get_state_for_audio_prompt("marius")
# モデルを再初期化せずに再利用
CLI & HTTP サーバー
CLI
Pocket‑TTS は高レベルのコマンドを二つ提供します。
generate– テキストから wav ファイルを生成。serve– ローカル FastAPI HTTP サーバーを起動。
サーバーを起動し、Web UI にアクセスします。
uvx pocket-tts serve # pip でインストールした場合は pocket-tts serve
http://localhost:8000 を開くと、ブラウザ内のインタフェースがレスポンシブで、約6倍のリアルタイム速度でモデルがメモリに保持されます。
HTTP API
API は /generate エンドポイントを公開し、POST JSON ペイロードを受け付けます。
{ "text": "Hello, world!", "voice": "alba" }
curl -X POST http://localhost:8000/generate \
-H "Content-Type: application/json" \
-d '{"text":"Hello","voice":"alba"}' \
--output out.wav
stream=true を設定すると、音声をチャンク単位でストリームします。
Python API 統合
サービスに TTS を埋め込む場合、直接ライブラリを利用します。
from pocket_tts import TTSModel
import torch
model = TTSModel.load_model()
voice_state = model.get_state_for_audio_prompt("alba")
text = "Complex sentence that may be very long ..."
# Audio は 1‑D torch Tensor
audio = model.generate_audio(voice_state, text)
# 保存またはストリーム
torch.save(audio, "demo.pt")
API は意図的に軽量化されており、モデルと音声状態は標準的な PyTorch オブジェクトです。再再生や非同期環境で同じ音声を使う場合はキャッシュしておきましょう。
性能 & ベンチマーク
リポジトリの docs/tech_report.md で詳細分析が行われていますが、主要ポイントは次の通りです。
- レイテンシ – Apple M4 で最初のチャンク約200 ms、Intel i7‑12700K で約350 ms。
- 速度 – 同じ CPU で 6 倍のリアルタイム生成。
- CPU 使用率 – 2 コアのみ使用、メモリは 2 GB 以下。
- モデルサイズ – 100 M パラメータ(30 MB ディスク、ロード時 約120 MB VRAM)。
音声ストリーミング特性により、合成完了前に再生を開始でき、インタラクティブアプリケーションで重要なメリットがあります。
拡張 & コントリビューション
Pocket‑TTS は MIT ライセンス下でオープンソースです。以下の領域での貢献を歓迎します。
- 新音声 – モデルをフォークし、
voice_catalog.mdを更新して PR を送信。 - 多言語サポート – 現在の英語チェックポイントを他言語へ移植。
- 量子化 – int8 や float16 バリエーションを追加してランタイムをさらに縮小。
- WebAssembly – ブラウザ上で動作する Rust Candle バージョンを統合。
開発ガイドライン:
- テスト実行: pytest。
- ドキュメントビルド: mkdocs build。
- CI は uv で依存関係をインストール。
詳細は CONTRIBUTING.md をご覧ください。
ライセンス & 使用注意事項
Pocket‑TTS は MIT ライセンスで公開されています。音声資産は個別のライセンス対象(voice_catalog.md 参照)。
免責事項 – リポジトリはインパーソナレーション、ディスインフォーメーション、または不適切なコンテンツの誤用を明示的に禁止しています。常に合法かつ倫理的に使用してください。
TL;DR
Pocket‑TTS は軽量で CPU フレンドリーな TTS ライブラリです。どの最新プロセッサ上でも動作し、数分でインストール、音声生成、HTTP サービス化が可能です。GPU 依存のない高速でオープンソースの TTS を探している開発者にとって、Pocket‑TTS は最適な選択です。