Pocket TTS 100M

بيئة تشغيل أصلية لأجهزة Apple · PocketTTS

يضيف PocketTTS توليد الكلام الأصلي عبر CoreML إلى speech-swift. تعمل جميع المراحل على CPU فقط افتراضيًا. يبث صوت Alba الإنجليزي إطارات من 1,920 عينة بتردد 24 kHz، أي 80 مللي ثانية لكل إطار.

يوفر انتظار التسليم تحكمًا في تدفق البيانات. لكل طلب حالته وبذرته الخاصة. يُبلغ الإلغاء وفشل الاستقبال وحدود التوليد عن أخطاء؛ وعند النجاح تُرسل قطعة نهائية فارغة واحدة. لا تدعم هذه الحزمة استنساخ الصوت أو لغات أخرى.

نزّل الحزمة المنشورة aufklarer/Pocket-TTS-100M-CoreML-INT8 عند أول استخدام، أو حمّل تصديرًا محليًا. احتفظ بنسبة العمل إلى Kyutai وFluidInference وAlba MacKenna وفق CC BY 4.0.

استخدام Swift وCLI

speech speak "Hello world." --engine pocket --stream \
  --pocket-bundle-dir /path/to/bundle --pocket-seed 42 -o hello.wav
import 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.pcm

قياس أداء CPU على Apple

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 الثابت وتبث الصوت فور جاهزية كل إطار صوتي.

بث أول صوت

الاستدلال متداخل فعلاً: يُفك ترميز كل تمثيل ذاتي الانحدار ويُرسل قبل توليد التالي. يعيد كل callback غير نهائي 1,920 عينة Float32، أي 80 مللي ثانية عند 24 kHz، متجنباً الحد الثابت لرسوم TTS المخزنة مؤقتاً.

الحزمة المنشورة

ItemDetails
Modelsoniqo/Pocket-TTS-100M-ONNX-INT8
Releasev1.0.0 · ad5d3fae3fb2f10024583708597afca8337c094c
Bundle size120.3 MiB
RuntimeONNX Runtime · C++17 · dynamic INT8 + FP32
Output24 kHz mono Float32 PCM · 1,920 samples / 80 ms per frame
Language / voiceEnglish · fixed Alba voice

التنزيل والتحقق

يثبت برنامج تنزيل speech-core الإصدار v1.0.0 ويتحقق من كل ملف منشور باستخدام SHA-256.

bash scripts/download_pocket_tts_onnx.sh /models/pocket-tts-onnx

واجهة C++

#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.
    });

عقد البث

يستقبل callback إطاراً واحداً بطول 80 مللي ثانية في كل مرة، ويشير callback النهائي إلى نهاية البث. تعرض last_metrics() أزمنة التهيئة وأول صوت والإجمالي وعدد الإطارات والعينات وEOS والإلغاء والبذرة الفعلية. توقف cancel() التوليد النشط.

اختبار Galaxy S23 Ultra

استخدمت إعادة اختبار نظيفة للحزمة العامة v1.0.0 ONNX Runtime 1.27 وخيطَي CPU وهاتف Galaxy S23 Ultra. هذه قياسات مباشرة للمحرك ولا تشمل الواجهة أو خط الصوت الكامل.

MetricResult
TTFA p50 / p95127.7 / 133.7 ms
Total latency p50 / p95467.5 / 485.3 ms
Median RTF0.4495
Peak RSS373.7 MiB

وضوح الرحلة ذهاباً وإياباً

ولد اختبار الجهاز 46 عبارة أوامر وردود، ومررها عبر مسار إعادة أخذ العينات الإنتاجي من 24 إلى 16 kHz، ثم نسخها باستخدام Parakeet-EOU المنشور.

MetricResult
Corpus46 phrases
Exact transcripts31 / 46
WER / CER8.00% / 3.47%
Empty audio / transcript / EOS failures0 / 0 / 0

يقيس ASR ذهاباً وإياباً وضوح الكلام لا طبيعته أو تفضيل المستمع، ويكمل اختبارات الاستماع.

حالة التكامل

المتاح حالياً

دُمج محرك ONNX بلغة C++17 في speech-core ويمكن بناؤه لـ Windows وLinux وAndroid. ما زال مسار SDK/JNI الحالي في speech-android يختار Kokoro افتراضياً؛ اختيار النموذج في Kotlin والتنزيل وإتاحة SDK أعمال لاحقة. يصف هذا القسم إصدار ONNX؛ وبيئة Swift CoreML الأصلية موضحة أعلاه.

القيود والترخيص

المصادر