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:
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user