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)