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/),
|
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).
|
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
|
## [0.0.50] - 2024-12-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ ElevenLabsOutputFormat = Literal["pcm_16000", "pcm_22050", "pcm_24000", "pcm_441
|
|||||||
|
|
||||||
def language_to_elevenlabs_language(language: Language) -> str | None:
|
def language_to_elevenlabs_language(language: Language) -> str | None:
|
||||||
BASE_LANGUAGES = {
|
BASE_LANGUAGES = {
|
||||||
|
Language.AR: "ar",
|
||||||
Language.BG: "bg",
|
Language.BG: "bg",
|
||||||
Language.CS: "cs",
|
Language.CS: "cs",
|
||||||
Language.DA: "da",
|
Language.DA: "da",
|
||||||
@@ -52,8 +53,10 @@ def language_to_elevenlabs_language(language: Language) -> str | None:
|
|||||||
Language.EN: "en",
|
Language.EN: "en",
|
||||||
Language.ES: "es",
|
Language.ES: "es",
|
||||||
Language.FI: "fi",
|
Language.FI: "fi",
|
||||||
|
Language.FIL: "fil",
|
||||||
Language.FR: "fr",
|
Language.FR: "fr",
|
||||||
Language.HI: "hi",
|
Language.HI: "hi",
|
||||||
|
Language.HR: "hr",
|
||||||
Language.HU: "hu",
|
Language.HU: "hu",
|
||||||
Language.ID: "id",
|
Language.ID: "id",
|
||||||
Language.IT: "it",
|
Language.IT: "it",
|
||||||
@@ -68,6 +71,7 @@ def language_to_elevenlabs_language(language: Language) -> str | None:
|
|||||||
Language.RU: "ru",
|
Language.RU: "ru",
|
||||||
Language.SK: "sk",
|
Language.SK: "sk",
|
||||||
Language.SV: "sv",
|
Language.SV: "sv",
|
||||||
|
Language.TA: "ta",
|
||||||
Language.TR: "tr",
|
Language.TR: "tr",
|
||||||
Language.UK: "uk",
|
Language.UK: "uk",
|
||||||
Language.VI: "vi",
|
Language.VI: "vi",
|
||||||
|
|||||||
@@ -47,23 +47,24 @@ except ModuleNotFoundError as e:
|
|||||||
|
|
||||||
|
|
||||||
def language_to_playht_language(language: Language) -> str | None:
|
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.BG: "bulgarian",
|
||||||
Language.CA: "catalan",
|
Language.CA: "catalan",
|
||||||
Language.CS: "czech",
|
Language.CS: "czech",
|
||||||
Language.DA: "danish",
|
Language.DA: "danish",
|
||||||
Language.DE: "german",
|
Language.DE: "german",
|
||||||
|
Language.EL: "greek",
|
||||||
Language.EN: "english",
|
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.ES: "spanish",
|
||||||
Language.FR: "french",
|
Language.FR: "french",
|
||||||
Language.FR_CA: "french",
|
Language.GL: "galician",
|
||||||
Language.EL: "greek",
|
Language.HE: "hebrew",
|
||||||
Language.HI: "hindi",
|
Language.HI: "hindi",
|
||||||
|
Language.HR: "croatian",
|
||||||
Language.HU: "hungarian",
|
Language.HU: "hungarian",
|
||||||
Language.ID: "indonesian",
|
Language.ID: "indonesian",
|
||||||
Language.IT: "italian",
|
Language.IT: "italian",
|
||||||
@@ -73,14 +74,30 @@ def language_to_playht_language(language: Language) -> str | None:
|
|||||||
Language.NL: "dutch",
|
Language.NL: "dutch",
|
||||||
Language.PL: "polish",
|
Language.PL: "polish",
|
||||||
Language.PT: "portuguese",
|
Language.PT: "portuguese",
|
||||||
Language.PT_BR: "portuguese",
|
|
||||||
Language.RU: "russian",
|
Language.RU: "russian",
|
||||||
|
Language.SQ: "albanian",
|
||||||
|
Language.SR: "serbian",
|
||||||
Language.SV: "swedish",
|
Language.SV: "swedish",
|
||||||
Language.TH: "thai",
|
Language.TH: "thai",
|
||||||
|
Language.TL: "tagalog",
|
||||||
Language.TR: "turkish",
|
Language.TR: "turkish",
|
||||||
Language.UK: "ukrainian",
|
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):
|
class PlayHTTTSService(TTSService):
|
||||||
|
|||||||
Reference in New Issue
Block a user