import pyaudio
import threading
import queue
class AudioPlayer:
def __init__(self, sample_rate=24000):
self.sample_rate = sample_rate
self.queue = queue.Queue()
self.p = pyaudio.PyAudio()
self.stream = self.p.open(
format=pyaudio.paInt16,
channels=1,
rate=sample_rate,
output=True,
)
self.running = True
self.thread = threading.Thread(target=self._play_loop)
self.thread.start()
def _play_loop(self):
while self.running:
try:
audio = self.queue.get(timeout=0.1)
self.stream.write(audio)
except queue.Empty:
continue
def play(self, audio_bytes: bytes):
self.queue.put(audio_bytes)
def close(self):
self.running = False
self.thread.join()
self.stream.stop_stream()
self.stream.close()
self.p.terminate()
# Usage
player = AudioPlayer()
for chunk in client.tts.stream(text="Hello!", model="kugel-1-turbo"):
if hasattr(chunk, 'audio'):
player.play(chunk.audio)
player.close()