|
from typing import Dict |
|
|
|
from TTS.tts.utils.text.japanese.phonemizer import japanese_text_to_phonemes |
|
from TTS.tts.utils.text.phonemizers.base import BasePhonemizer |
|
|
|
_DEF_JA_PUNCS = "、.,[]()?!〽~『』「」【】" |
|
|
|
_TRANS_TABLE = {"、": ","} |
|
|
|
|
|
def trans(text): |
|
for i, j in _TRANS_TABLE.items(): |
|
text = text.replace(i, j) |
|
return text |
|
|
|
|
|
class JA_JP_Phonemizer(BasePhonemizer): |
|
"""🐸TTS Ja-Jp phonemizer using functions in `TTS.tts.utils.text.japanese.phonemizer` |
|
|
|
TODO: someone with JA knowledge should check this implementation |
|
|
|
Example: |
|
|
|
>>> from TTS.tts.utils.text.phonemizers import JA_JP_Phonemizer |
|
>>> phonemizer = JA_JP_Phonemizer() |
|
>>> phonemizer.phonemize("どちらに行きますか?", separator="|") |
|
'd|o|c|h|i|r|a|n|i|i|k|i|m|a|s|u|k|a|?' |
|
|
|
""" |
|
|
|
language = "ja-jp" |
|
|
|
def __init__(self, punctuations=_DEF_JA_PUNCS, keep_puncs=True, **kwargs): |
|
super().__init__(self.language, punctuations=punctuations, keep_puncs=keep_puncs) |
|
|
|
@staticmethod |
|
def name(): |
|
return "ja_jp_phonemizer" |
|
|
|
def _phonemize(self, text: str, separator: str = "|") -> str: |
|
ph = japanese_text_to_phonemes(text) |
|
if separator is not None or separator != "": |
|
return separator.join(ph) |
|
return ph |
|
|
|
def phonemize(self, text: str, separator="|", language=None) -> str: |
|
"""Custom phonemize for JP_JA |
|
|
|
Skip pre-post processing steps used by the other phonemizers. |
|
""" |
|
return self._phonemize(text, separator) |
|
|
|
@staticmethod |
|
def supported_languages() -> Dict: |
|
return {"ja-jp": "Japanese (Japan)"} |
|
|
|
def version(self) -> str: |
|
return "0.0.1" |
|
|
|
def is_available(self) -> bool: |
|
return True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|