Spaces:
Sleeping
Sleeping
from logging import ERROR, Logger | |
import os | |
from phonemizer.backend import EspeakBackend | |
# IPA Phonemizer: https://github.com/bootphon/phonemizer | |
from phonemizer.backend.espeak.wrapper import EspeakWrapper | |
# Create a Logger instance | |
logger = Logger("my_logger") | |
# Set the level to ERROR | |
logger.setLevel(ERROR) | |
from dp.preprocessing.text import SequenceTokenizer | |
from models.config import get_lang_map | |
from models.config.symbols import phones | |
# INFO: Fix for windows, used for local env | |
if os.name == "nt": | |
ESPEAK_LIBRARY = os.getenv( | |
"ESPEAK_LIBRARY", | |
"C:\\Program Files\\eSpeak NG\\libespeak-ng.dll", | |
) | |
EspeakWrapper.set_library(ESPEAK_LIBRARY) | |
class TokenizerIpaEspeak: | |
def __init__(self, lang: str = "en"): | |
lang_map = get_lang_map(lang) | |
self.lang = lang_map.phonemizer_espeak | |
self.lang_seq = lang_map.phonemizer | |
# NOTE: for backward compatibility with previous IPA tokenizer see the TokenizerIPA class | |
self.tokenizer = SequenceTokenizer( | |
phones, | |
languages=["de", "en_us"], | |
lowercase=True, | |
char_repeats=1, | |
append_start_end=True, | |
) | |
self.phonemizer = EspeakBackend( | |
language=self.lang, | |
preserve_punctuation=True, | |
with_stress=True, | |
words_mismatch="ignore", | |
logger=logger, | |
).phonemize | |
def __call__(self, text: str): | |
r"""Converts the input text to phonemes and tokenizes them. | |
Args: | |
text (str): The input text to be tokenized. | |
Returns: | |
Tuple[Union[str, List[str]], List[int]]: IPA phonemes and tokens. | |
""" | |
phones_ipa = "".join(self.phonemizer([text])) | |
tokens = self.tokenizer(phones_ipa, language=self.lang_seq) | |
return phones_ipa, tokens | |