Implement multi-phonemizer

This commit is contained in:
Eren Gölge 2021-11-16 13:24:26 +01:00
parent 5e4f78add3
commit 80867c8e8c
1 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,55 @@
from typing import Dict, List
from TTS.tts.utils.text.phonemizers import DEF_LANG_TO_PHONEMIZER, get_phonemizer_by_name
class MultiPhonemizer:
"""🐸TTS multi-phonemizer that operates phonemizers for multiple langugages
Args:
custom_lang_to_phonemizer (Dict):
Custom phonemizer mapping if you want to change the defaults. In the format of
`{"lang_code", "phonemizer_name"}`. When it is None, `DEF_LANG_TO_PHONEMIZER` is used. Defaults to `{}`.
TODO: find a way to pass custom kwargs to the phonemizers
"""
lang_to_phonemizer_name = DEF_LANG_TO_PHONEMIZER
language = "multi-lingual"
def __init__(self, custom_lang_to_phonemizer: Dict = {}) -> None:
self.lang_to_phonemizer_name.update(custom_lang_to_phonemizer)
self.lang_to_phonemizer = self.init_phonemizers(self.lang_to_phonemizer_name)
@staticmethod
def init_phonemizers(lang_to_phonemizer_name: Dict) -> Dict:
lang_to_phonemizer = {}
for k, v in lang_to_phonemizer_name.items():
phonemizer = get_phonemizer_by_name(v, language=k)
lang_to_phonemizer[k] = phonemizer
return lang_to_phonemizer
@staticmethod
def name():
return "multi-phonemizer"
def phonemize(self, text, language, separator="|"):
return self.lang_to_phonemizer[language].phonemize(text, separator)
def supported_languages(self) -> List:
return list(self.lang_to_phonemizer_name.keys())
if __name__ == "__main__":
texts = {
"tr": "Merhaba, bu Türkçe bit örnek!",
"en-us": "Hello, this is English example!",
"de": "Hallo, das ist ein Deutches Beipiel!",
"zh-cn": "这是中国的例子",
}
phonemes = {}
ph = MultiPhonemizer()
for lang, text in texts.items():
phoneme = ph.phonemize(text, lang)
phonemes[lang] = phoneme
print(phonemes)