Chuyển tới nội dung chính

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ênStream đồng thời
GPU (PyTorch), RTX 3060~115 ms16 (tối đa 32), mỗi stream RTF ≈ 0,5–0,6
CPU (ONNX) int8~140 ms2
CPU (ONNX) fp32~300 ms1

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.