diff --git a/src/pipecat/services/openai.py b/src/pipecat/services/openai.py index 7a090eb0b..519ec800d 100644 --- a/src/pipecat/services/openai.py +++ b/src/pipecat/services/openai.py @@ -28,6 +28,7 @@ from pipecat.frames.frames import ( LLMTextFrame, LLMUpdateSettingsFrame, OpenAILLMContextAssistantTimestampFrame, + StartFrame, StartInterruptionFrame, TTSAudioRawFrame, TTSStartedFrame, @@ -412,6 +413,8 @@ class OpenAITTSService(TTSService): The service returns PCM-encoded audio at the specified sample rate. """ + OPENAI_SAMPLE_RATE = 24000 # OpenAI TTS always outputs at 24kHz + def __init__( self, *, @@ -421,6 +424,11 @@ class OpenAITTSService(TTSService): sample_rate: Optional[int] = None, **kwargs, ): + if sample_rate and sample_rate != self.OPENAI_SAMPLE_RATE: + logger.warning( + f"OpenAI TTS only supports {self.OPENAI_SAMPLE_RATE}Hz sample rate. " + f"Current rate of {self.sample_rate}Hz may cause issues." + ) super().__init__(sample_rate=sample_rate, **kwargs) self.set_model_name(model) @@ -435,6 +443,14 @@ class OpenAITTSService(TTSService): logger.info(f"Switching TTS model to: [{model}]") self.set_model_name(model) + async def start(self, frame: StartFrame): + await super().start(frame) + if self.sample_rate != self.OPENAI_SAMPLE_RATE: + logger.warning( + f"OpenAI TTS requires {self.OPENAI_SAMPLE_RATE}Hz sample rate. " + f"Current rate of {self.sample_rate}Hz may cause issues." + ) + async def run_tts(self, text: str) -> AsyncGenerator[Frame, None]: logger.debug(f"Generating TTS: [{text}]") try: