Pocket TTS 100M
Apple ネイティブランタイム · PocketTTS
PocketTTS は speech-swift に CoreML のネイティブ音声合成を追加します。全段階の既定値は CPU のみです。英語の Alba プリセットは 24 kHz、1,920 サンプル(80 ミリ秒)ずつ音声を配信します。
配信の完了を待つことでバックプレッシャーを適用します。各リクエストが状態とシードを所有します。キャンセル、コールバックの失敗、生成上限はエラーとなり、成功時は空の最終チャンクを送ります。このバンドルは音声クローンや他言語に対応しません。
初回使用時に公開済みバンドル aufklarer/Pocket-TTS-100M-CoreML-INT8 をダウンロードするか、ローカルのエクスポートを読み込みます。 CC BY 4.0 に従い Kyutai、FluidInference、Alba MacKenna の帰属表示を保持してください。
Swift と CLI の使用方法
speech speak "Hello world." --engine pocket --stream \
--pocket-bundle-dir /path/to/bundle --pocket-seed 42 -o hello.wavimport PocketTTS
let model = try PocketTTSModel.fromBundle(URL(fileURLWithPath: "/path/to/bundle"))
try await model.generateStreaming(text: "Hello world.") { chunk in
await consume(chunk.samples)
}HTTP と WebSocket
pocket-tts と音声 alba を指定します。HTTP ストリーミングは PCM が必要です。WebSocket は音声差分を送信します。既定モデルは変わりません。
curl http://localhost:8080/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{"model":"pocket-tts","voice":"alba","input":"Hello world.","response_format":"pcm","stream":true}' \
-o hello.pcmApple CPU ベンチマーク
Apple M5 Pro · 48 GiB · cpuOnly · first_audio_ms 78.9 · RTF 0.337 · peak_rss 866.8 MiB · n=5 · seed=42 · 2026-10-17
Pocket TTS 100M は speech-core の低遅延オンデバイス英語音声合成バックエンドです。公開ONNXバンドルは固定Alba音声を使い、各音響フレームの準備ができ次第ストリーミング出力します。
推論は真にインターリーブされ、1つの自己回帰潜在表現をデコードして出力してから次を生成します。非最終コールバックは毎回1,920個のFloat32サンプル(24 kHzで80 ms)を返し、バッファ型TTSエクスポートの固定グラフ待ちを避けます。
公開バンドル
| Item | Details |
|---|---|
| Model | soniqo/Pocket-TTS-100M-ONNX-INT8 |
| Release | v1.0.0 · ad5d3fae3fb2f10024583708597afca8337c094c |
| Bundle size | 120.3 MiB |
| Runtime | ONNX Runtime · C++17 · dynamic INT8 + FP32 |
| Output | 24 kHz mono Float32 PCM · 1,920 samples / 80 ms per frame |
| Language / voice | English · fixed Alba voice |
ダウンロードと検証
speech-coreのダウンローダーはv1.0.0に固定され、公開ファイルをすべてSHA-256で検証します。
bash scripts/download_pocket_tts_onnx.sh /models/pocket-tts-onnx
C++ API
#include <speech_core/models/onnx_pocket_tts.h>
speech_core::PocketTtsConfig config;
config.intra_threads = 2;
config.flow_steps = 4;
speech_core::OnnxPocketTts tts("/models/pocket-tts-onnx", config);
tts.synthesize("Hello world.", "en",
[](const float* samples, size_t length, bool is_final) {
// Each non-final callback is 1,920 Float32 samples:
// 80 ms at 24 kHz.
});
ストリーミング契約
コールバックは80 msフレームを1つずつ受け取り、最終コールバックがストリーム終端を示します。last_metrics()は条件処理、初回音声、総遅延、フレーム数、サンプル数、EOS、キャンセル、実際のシードを報告し、cancel()は実行中の合成を停止します。
Galaxy S23 Ultra ベンチマーク
公開v1.0.0バンドルのクリーンな再測定は、ONNX Runtime 1.27、CPU 2スレッド、Galaxy S23 Ultraで実施しました。UIや音声パイプライン全体を含まないエンジン直接値です。
| Metric | Result |
|---|---|
| TTFA p50 / p95 | 127.7 / 133.7 ms |
| Total latency p50 / p95 | 467.5 / 485.3 ms |
| Median RTF | 0.4495 |
| Peak RSS | 373.7 MiB |
往復インテリジビリティ
端末上で46件のコマンド/応答文を合成し、本番の24→16 kHzリサンプラーを通して、配備済みParakeet-EOUで文字起こししました。
| Metric | Result |
|---|---|
| Corpus | 46 phrases |
| Exact transcripts | 31 / 46 |
| WER / CER | 8.00% / 3.47% |
| Empty audio / transcript / EOS failures | 0 / 0 / 0 |
往復ASRが測るのは明瞭度であり、自然さや聴取者の好みではありません。聴感テストを補完する指標です。
統合状況
C++17 ONNXバックエンドはspeech-coreにマージ済みで、Windows、Linux、Android向けにビルドできます。現在のspeech-android SDK/JNIは引き続きKokoroを既定で選択します。Kotlinでのモデル選択、ダウンロード、SDK公開は今後の作業です。この節は ONNX 版について説明しています。ネイティブ Swift CoreML ランタイムは上記を参照してください。
制限とライセンス
- 英語のみ。公開チェックポイントは固定Alba音声を内蔵し、任意の音声クローニングには対応しません。
- モデルと音声はCC BY 4.0です。バンドルマニフェストのAlba MacKenna帰属表示を保持してください。
- 再帰グラフはCPU向けです。Androidの実行プロバイダーは端末とONNX Runtimeビルドで異なるため、ハードウェア加速は明示的に有効化します。
- speech-coreソースはApache 2.0、モデルバンドルは独自のCC BY 4.0条件です。