From 5ef519fe2cc10a3630ae83aa7cd5bb09258507fe Mon Sep 17 00:00:00 2001 From: Kwindla Hultman Kramer Date: Sun, 11 May 2025 15:40:31 -0700 Subject: [PATCH] Fix Deepgram TTS to use stream_raw() --- src/pipecat/services/deepgram/tts.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/pipecat/services/deepgram/tts.py b/src/pipecat/services/deepgram/tts.py index 93c710f9e..c9a026aa1 100644 --- a/src/pipecat/services/deepgram/tts.py +++ b/src/pipecat/services/deepgram/tts.py @@ -62,29 +62,18 @@ class DeepgramTTSService(TTSService): try: await self.start_ttfb_metrics() - response = await self._deepgram_client.speak.asyncrest.v("1").stream_memory( + response = await self._deepgram_client.speak.asyncrest.v("1").stream_raw( {"text": text}, options ) await self.start_tts_usage_metrics(text) yield TTSStartedFrame() - # The response.stream_memory is already a BytesIO object - audio_buffer = response.stream_memory - - if audio_buffer is None: - raise ValueError("No audio data received from Deepgram") - - # Read and yield the audio data in chunks - audio_buffer.seek(0) # Ensure we're at the start of the buffer - chunk_size = 1024 # Use a fixed buffer size - while True: + async for data in response.aiter_bytes(): await self.stop_ttfb_metrics() - chunk = audio_buffer.read(chunk_size) - if not chunk: - break - frame = TTSAudioRawFrame(audio=chunk, sample_rate=self.sample_rate, num_channels=1) - yield frame + if data: + yield TTSAudioRawFrame(audio=data, sample_rate=self.sample_rate, num_channels=1) + yield TTSStoppedFrame() except Exception as e: