diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f2cb533f..f3c5c6df9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed an issue with Deepgram TTS that was introduced in the previous release. +### Performance + +- Load Cartesia voice on startup. + ## [0.0.25] - 2024-05-31 ### Added diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py index 68c63f11a..581b0d5c7 100644 --- a/src/pipecat/services/cartesia.py +++ b/src/pipecat/services/cartesia.py @@ -6,10 +6,9 @@ from cartesia.tts import AsyncCartesiaTTS -import time from typing import AsyncGenerator -from pipecat.frames.frames import AudioRawFrame, ErrorFrame, Frame +from pipecat.frames.frames import AudioRawFrame, Frame from pipecat.services.ai_services import TTSService from loguru import logger @@ -28,18 +27,18 @@ class CartesiaTTSService(TTSService): self._api_key = api_key self._voice_name = voice_name - self._client = None + try: + self._client = AsyncCartesiaTTS(api_key=self._api_key) + voices = self._client.get_voices() + voice_id = voices[self._voice_name]["id"] + self._voice = self._client.get_voice_embedding(voice_id=voice_id) + except Exception as e: + logger.error(f"Cartesia initialization error: {e}") async def run_tts(self, text: str) -> AsyncGenerator[Frame, None]: logger.debug(f"Transcribing text: [{text}]") try: - if self._client is None: - self._client = AsyncCartesiaTTS(api_key=self._api_key) - voices = self._client.get_voices() - self._voice_id = voices[self._voice_name]["id"] - self._voice = self._client.get_voice_embedding(voice_id=self._voice_id) - chunk_generator = await self._client.generate( transcript=text, voice=self._voice, stream=True, model_id="upbeat-moon", data_rtype='array', output_format='pcm_16000', @@ -49,8 +48,6 @@ class CartesiaTTSService(TTSService): ) async for chunk in chunk_generator: - # print(f"") - frame = AudioRawFrame(chunk['audio'], 16000, 1) - yield frame + yield AudioRawFrame(chunk['audio'], 16000, 1) except Exception as e: - logger.error(f"Exception {e}") + logger.error(f"Cartesia error: {e}")