Soprano-TTS / soprano /utils /streaming.py
ekwek's picture
Upload 17 files
5d9390a verified
import sounddevice as sd
import torch
import time
def play_stream(stream, sample_rate=32000):
"""
Play streamed audio chunks to speakers in real time.
"""
with sd.OutputStream(
samplerate=sample_rate,
channels=1,
dtype='float32',
blocksize=0
) as out_stream:
start = time.time()
latency = None
first = True
for chunk in stream:
if first:
latency = time.time()-start
first = False
if isinstance(chunk, torch.Tensor):
chunk = chunk.detach().cpu()
# Ensure shape (N, 1)
if chunk.dim() == 1:
chunk = chunk.unsqueeze(1)
elif chunk.dim() == 2 and chunk.shape[0] == 1:
chunk = chunk.transpose(0, 1)
out_stream.write(chunk.numpy())
return latency