diff --git a/CHANGELOG.md b/CHANGELOG.md index c2d64485a..2fc5abde4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `WebsocketTransport` to connect with Pipecat `FastAPIWebsocketTransport` or `WebsocketServerTransport`. +- Added language support to `RimeHttpTTSService`. Extended languages to include + German and French for both `RimeTTSService` and `RimeHttpTTSService`. + ### Changed - Upgraded `daily-python` to 0.19.2. diff --git a/src/pipecat/services/rime/tts.py b/src/pipecat/services/rime/tts.py index 669f72a99..821eafb23 100644 --- a/src/pipecat/services/rime/tts.py +++ b/src/pipecat/services/rime/tts.py @@ -26,6 +26,7 @@ from pipecat.frames.frames import ( ) from pipecat.processors.frame_processor import FrameDirection from pipecat.services.tts_service import AudioContextWordTTSService, TTSService +from pipecat.transcriptions import language from pipecat.transcriptions.language import Language from pipecat.utils.text.base_text_aggregator import BaseTextAggregator from pipecat.utils.text.skip_tags_aggregator import SkipTagsAggregator @@ -49,6 +50,8 @@ def language_to_rime_language(language: Language) -> str: str: Three-letter language code used by Rime (e.g., 'eng' for English). """ LANGUAGE_MAP = { + Language.DE: "ger", + Language.FR: "fra", Language.EN: "eng", Language.ES: "spa", } @@ -352,6 +355,7 @@ class RimeTTSService(AudioContextWordTTSService): class RimeHttpTTSService(TTSService): class InputParams(BaseModel): + language: Optional[Language] = Language.EN pause_between_brackets: Optional[bool] = False phonemize_between_brackets: Optional[bool] = False inline_speed_alpha: Optional[str] = None @@ -377,6 +381,9 @@ class RimeHttpTTSService(TTSService): self._session = aiohttp_session self._base_url = "https://users.rime.ai/v1/rime-tts" self._settings = { + "lang": self.language_to_service_language(params.language) + if params.language + else "eng", "speedAlpha": params.speed_alpha, "reduceLatency": params.reduce_latency, "pauseBetweenBrackets": params.pause_between_brackets, @@ -391,6 +398,10 @@ class RimeHttpTTSService(TTSService): def can_generate_metrics(self) -> bool: return True + def language_to_service_language(self, language: Language) -> str | None: + """Convert pipecat language to Rime language code.""" + return language_to_rime_language(language) + @traced_tts async def run_tts(self, text: str) -> AsyncGenerator[Frame, None]: logger.debug(f"{self}: Generating TTS [{text}]")