Merge pull request #840 from pipecat-ai/aleix/11labs-playht-more-languages

tts: support more languages in playht and elevenlabs
This commit is contained in:
Aleix Conchillo Flaqué
2024-12-11 14:58:03 -08:00
committed by GitHub
3 changed files with 39 additions and 10 deletions

View File

@@ -5,6 +5,14 @@ All notable changes to **Pipecat** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Add support for more languages to ElevenLabs (Arabic, Croatian, Filipino,
Tamil) and PlayHT (Afrikans, Albanian, Amharic, Arabic, Bengali, Croatian,
Galician, Hebrew, Mandarin, Serbian, Tagalog, Urdu, Xhosa).
## [0.0.50] - 2024-12-11
### Added

View File

@@ -44,6 +44,7 @@ ElevenLabsOutputFormat = Literal["pcm_16000", "pcm_22050", "pcm_24000", "pcm_441
def language_to_elevenlabs_language(language: Language) -> str | None:
BASE_LANGUAGES = {
Language.AR: "ar",
Language.BG: "bg",
Language.CS: "cs",
Language.DA: "da",
@@ -52,8 +53,10 @@ def language_to_elevenlabs_language(language: Language) -> str | None:
Language.EN: "en",
Language.ES: "es",
Language.FI: "fi",
Language.FIL: "fil",
Language.FR: "fr",
Language.HI: "hi",
Language.HR: "hr",
Language.HU: "hu",
Language.ID: "id",
Language.IT: "it",
@@ -68,6 +71,7 @@ def language_to_elevenlabs_language(language: Language) -> str | None:
Language.RU: "ru",
Language.SK: "sk",
Language.SV: "sv",
Language.TA: "ta",
Language.TR: "tr",
Language.UK: "uk",
Language.VI: "vi",

View File

@@ -47,23 +47,24 @@ except ModuleNotFoundError as e:
def language_to_playht_language(language: Language) -> str | None:
language_map = {
BASE_LANGUAGES = {
Language.AF: "afrikans",
Language.AM: "amharic",
Language.AR: "arabic",
Language.BN: "bengali",
Language.BG: "bulgarian",
Language.CA: "catalan",
Language.CS: "czech",
Language.DA: "danish",
Language.DE: "german",
Language.EL: "greek",
Language.EN: "english",
Language.EN_US: "english",
Language.EN_GB: "english",
Language.EN_AU: "english",
Language.EN_NZ: "english",
Language.EN_IN: "english",
Language.ES: "spanish",
Language.FR: "french",
Language.FR_CA: "french",
Language.EL: "greek",
Language.GL: "galician",
Language.HE: "hebrew",
Language.HI: "hindi",
Language.HR: "croatian",
Language.HU: "hungarian",
Language.ID: "indonesian",
Language.IT: "italian",
@@ -73,14 +74,30 @@ def language_to_playht_language(language: Language) -> str | None:
Language.NL: "dutch",
Language.PL: "polish",
Language.PT: "portuguese",
Language.PT_BR: "portuguese",
Language.RU: "russian",
Language.SQ: "albanian",
Language.SR: "serbian",
Language.SV: "swedish",
Language.TH: "thai",
Language.TL: "tagalog",
Language.TR: "turkish",
Language.UK: "ukrainian",
Language.UR: "urdu",
Language.XH: "xhosa",
Language.ZH: "mandarin",
}
return language_map.get(language)
result = BASE_LANGUAGES.get(language)
# If not found in base languages, try to find the base language from a variant
if not result:
# Convert enum value to string and get the base language part (e.g. es-ES -> es)
lang_str = str(language.value)
base_code = lang_str.split("-")[0].lower()
# Look up the base code in our supported languages
result = base_code if base_code in BASE_LANGUAGES.values() else None
return result
class PlayHTTTSService(TTSService):