Streaming
v3 Turbo stream theo từng frame trên cả hai engine. Lặp qua infer_stream và phát hoặc ghi từng chunk ngay khi nhận.
from vieneu import Vieneu
tts = Vieneu() # GPU → PyTorch + bộ lịch stream; CPU → ONNX
for chunk in tts.infer_stream("Xin chào các bạn!", voice="Mai Anh"):
play(chunk) # np.float32 @ 48 kHz
Độ trễ và đồng thời
| Engine | Âm đầu tiên | Stream đồng thời |
|---|---|---|
| GPU (PyTorch), RTX 3060 | ~115 ms | 16 (tối đa 32), mỗi stream RTF ≈ 0,5–0,6 |
| CPU (ONNX) int8 | ~140 ms | 2 |
| CPU (ONNX) fp32 | ~300 ms | 1 |
Trên GPU các stream dùng chung một CUDA graph qua continuous batching. Gọi infer_stream từ nhiều thread cùng lúc chính là cách phục vụ nhiều người nghe; Vieneu(max_streams=16) đặt trần. Yêu cầu đầu tiên sau khi GPU nghỉ tốn thêm 100–300 ms cho tới khi xung nhịp lên.
Toàn bộ số đo (TTFA và RTF theo max_streams, ước lượng cho GPU nhỏ hơn, số CPU) ở docs/streaming.md trong repo.
Định dạng chunk
Mỗi chunk là mảng numpy.float32 48 kHz, mono. Đổi sang PCM 16-bit cho phần lớn thiết bị:
import numpy as np
pcm16 = (np.clip(chunk, -1, 1) * 32767).astype(np.int16).tobytes()
Phục vụ qua HTTP
Muốn đưa streaming ra tiến trình hay ngôn ngữ khác, chạy server tương thích OpenAI trong repo. Nó stream pcm/wav dạng chunked hoặc SSE từ POST /v1/audio/speech, nên OpenAI SDK, Pipecat và LiveKit chạy được chỉ bằng đổi base_url. Xem Server tương thích OpenAI.
v3 Nano
Nano không stream theo frame: infer_stream trả từng chunk đã hoàn chỉnh. Cần thời gian tới âm đầu ngắn thì dùng Turbo.
Lựa chọn có sẵn trên cloud
Cùng dạng streaming này có sẵn không cần GPU tại endpoint streaming của Cloud API.