From 1753cc99f452c4afa7fcfd83769c0581664a1379 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Tue, 25 Feb 2025 16:38:19 -0500 Subject: [PATCH] PlayHTHttpTTSService now takes a separate protocol input --- CHANGELOG.md | 4 ++++ src/pipecat/services/playht.py | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afba77a64..341f78a3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ⚠️ `PipelineTask` now requires keyword arguments (except for the first one for the pipeline). +- Updated `PlayHTHttpTTSService` to take a `voice_engine` and `protocol` input + in the constructor. The previous method of providing a `voice_engine` input + that contains the engine and protocol is deprecated by PlayHT. + - The base `TTSService` class now strips leading newlines before sending text to the TTS provider. This change is to solve issues where some TTS providers, like Azure, would not output text due to newlines. diff --git a/src/pipecat/services/playht.py b/src/pipecat/services/playht.py index 56179e34c..f0fd3491e 100644 --- a/src/pipecat/services/playht.py +++ b/src/pipecat/services/playht.py @@ -323,7 +323,8 @@ class PlayHTHttpTTSService(TTSService): api_key: str, user_id: str, voice_url: str, - voice_engine: str = "Play3.0-mini-http", # Options: Play3.0-mini-http, Play3.0-mini-ws + voice_engine: str = "Play3.0-mini", + protocol: str = "http", # Options: http, ws sample_rate: Optional[int] = None, params: InputParams = InputParams(), **kwargs, @@ -337,12 +338,24 @@ class PlayHTHttpTTSService(TTSService): user_id=self._user_id, api_key=self._api_key, ) + + # Check if voice_engine contains protocol information (backward compatibility) + if "-http" in voice_engine: + # Extract the base engine name + voice_engine = voice_engine.replace("-http", "") + protocol = "http" + elif "-ws" in voice_engine: + # Extract the base engine name + voice_engine = voice_engine.replace("-ws", "") + protocol = "ws" + self._settings = { "language": self.language_to_service_language(params.language) if params.language else "english", "format": Format.FORMAT_WAV, "voice_engine": voice_engine, + "protocol": protocol, "speed": params.speed, "seed": params.seed, } @@ -389,7 +402,10 @@ class PlayHTHttpTTSService(TTSService): await self.start_ttfb_metrics() playht_gen = self._client.tts( - text, voice_engine=self._settings["voice_engine"], options=options + text, + voice_engine=self._settings["voice_engine"], + protocol=self._settings["protocol"], + options=options, ) await self.start_tts_usage_metrics(text)