diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b4660d89..415fb1f74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added `speed` as an `InputParam` for both `ElevenLabsTTSService` and + `ElevenLabsHttpTTSService`. + - Added new `LLMFullResponseAggregator` to aggregate full LLM completions. At every completion the `on_completion` event handler is triggered. diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py index 4e6c84307..336be5382 100644 --- a/src/pipecat/services/elevenlabs.py +++ b/src/pipecat/services/elevenlabs.py @@ -145,6 +145,7 @@ class ElevenLabsTTSService(InterruptibleWordTTSService): similarity_boost: Optional[float] = None style: Optional[float] = None use_speaker_boost: Optional[bool] = None + speed: Optional[float] = None auto_mode: Optional[bool] = True @model_validator(mode="after") @@ -202,6 +203,7 @@ class ElevenLabsTTSService(InterruptibleWordTTSService): "similarity_boost": params.similarity_boost, "style": params.style, "use_speaker_boost": params.use_speaker_boost, + "speed": params.speed, "auto_mode": str(params.auto_mode).lower(), } self.set_model_name(model) @@ -235,6 +237,8 @@ class ElevenLabsTTSService(InterruptibleWordTTSService): voice_settings["style"] = self._settings["style"] if self._settings["use_speaker_boost"] is not None: voice_settings["use_speaker_boost"] = self._settings["use_speaker_boost"] + if self._settings["speed"] is not None: + voice_settings["speed"] = self._settings["speed"] else: if self._settings["style"] is not None: logger.warning( @@ -244,6 +248,10 @@ class ElevenLabsTTSService(InterruptibleWordTTSService): logger.warning( "'use_speaker_boost' is set but will not be applied because 'stability' and 'similarity_boost' are not both set." ) + if self._settings["speed"] is not None: + logger.warning( + "'speed' is set but will not be applied because 'stability' and 'similarity_boost' are not both set." + ) return voice_settings or None @@ -441,6 +449,7 @@ class ElevenLabsHttpTTSService(TTSService): similarity_boost: Optional[float] = None style: Optional[float] = None use_speaker_boost: Optional[bool] = None + speed: Optional[float] = None def __init__( self, @@ -470,6 +479,7 @@ class ElevenLabsHttpTTSService(TTSService): "similarity_boost": params.similarity_boost, "style": params.style, "use_speaker_boost": params.use_speaker_boost, + "speed": params.speed, } self.set_model_name(model) self.set_voice(voice_id) @@ -490,12 +500,14 @@ class ElevenLabsHttpTTSService(TTSService): self._settings["stability"] is not None and self._settings["similarity_boost"] is not None ): - voice_settings["stability"] = float(self._settings["stability"]) - voice_settings["similarity_boost"] = float(self._settings["similarity_boost"]) + voice_settings["stability"] = self._settings["stability"] + voice_settings["similarity_boost"] = self._settings["similarity_boost"] if self._settings["style"] is not None: - voice_settings["style"] = float(self._settings["style"]) + voice_settings["style"] = self._settings["style"] if self._settings["use_speaker_boost"] is not None: - voice_settings["use_speaker_boost"] = bool(self._settings["use_speaker_boost"]) + voice_settings["use_speaker_boost"] = self._settings["use_speaker_boost"] + if self._settings["speed"] is not None: + voice_settings["speed"] = self._settings["speed"] else: if self._settings["style"] is not None: logger.warning( @@ -505,6 +517,10 @@ class ElevenLabsHttpTTSService(TTSService): logger.warning( "'use_speaker_boost' is set but will not be applied because 'stability' and 'similarity_boost' are not both set." ) + if self._settings["speed"] is not None: + logger.warning( + "'speed' is set but will not be applied because 'stability' and 'similarity_boost' are not both set." + ) return voice_settings or None