示例#1
0
def text2phone(text, language, use_espeak_phonemes=False, keep_stress=False):
    """Convert graphemes to phonemes.
    Parameters:
            text (str): text to phonemize
            language (str): language of the text
    Returns:
            ph (str): phonemes as a string seperated by "|"
                    ph = "ɪ|g|ˈ|z|æ|m|p|ə|l"
    """

    # TO REVIEW : How to have a good implementation for this?
    if language == "zh-CN":
        ph = chinese_text_to_phonemes(text)
        return ph

    if language == "ja-jp":
        ph = japanese_text_to_phonemes(text)
        return ph

    if not gruut.is_language_supported(language):
        raise ValueError(
            f" [!] Language {language} is not supported for phonemization.")

    # Use gruut for phonemization
    ph_list = []
    for sentence in gruut.sentences(text,
                                    lang=language,
                                    espeak=use_espeak_phonemes):
        for word in sentence:
            if word.is_break:
                # Use actual character for break phoneme (e.g., comma)
                if ph_list:
                    # Join with previous word
                    ph_list[-1].append(word.text)
                else:
                    # First word is punctuation
                    ph_list.append([word.text])
            elif word.phonemes:
                # Add phonemes for word
                word_phonemes = []

                for word_phoneme in word.phonemes:
                    if not keep_stress:
                        # Remove primary/secondary stress
                        word_phoneme = IPA.without_stress(word_phoneme)

                    word_phoneme = word_phoneme.translate(GRUUT_TRANS_TABLE)

                    if word_phoneme:
                        # Flatten phonemes
                        word_phonemes.extend(word_phoneme)

                if word_phonemes:
                    ph_list.append(word_phonemes)

    # Join and re-split to break apart dipthongs, suprasegmentals, etc.
    ph_words = ["|".join(word_phonemes) for word_phonemes in ph_list]
    ph = "| ".join(ph_words)

    return ph
示例#2
0
def text2phone(text, language, use_espeak_phonemes=False):
    """Convert graphemes to phonemes.
    Parameters:
            text (str): text to phonemize
            language (str): language of the text
    Returns:
            ph (str): phonemes as a string seperated by "|"
                    ph = "ɪ|g|ˈ|z|æ|m|p|ə|l"
    """

    # TO REVIEW : How to have a good implementation for this?
    if language == "zh-CN":
        from TTS.tts.utils.text.chinese_mandarin.phonemizer import (
            chinese_text_to_phonemes, )

        ph = chinese_text_to_phonemes(text)
        return ph

    if language == "ja-jp":
        from TTS.tts.utils.text.japanese.phonemizer import japanese_text_to_phonemes

        ph = japanese_text_to_phonemes(text)
        return ph

    if gruut.is_language_supported(language):
        # Use gruut for phonemization
        ph_list = []
        for sentence in gruut.sentences(text,
                                        lang=language,
                                        espeak=use_espeak_phonemes):
            for word in sentence:
                if word.is_break:
                    # Use actual character for break phoneme (e.g., comma)
                    if ph_list:
                        ph_list[-1].append(word.text)
                    else:
                        ph_list.append([word.text])
                elif word.phonemes:
                    # Remove stress from word phonemes
                    word_phonemes = []

                    for word_phoneme in word.phonemes:
                        word_phonemes.append(
                            IPA.without_stress(word_phoneme).translate(
                                GRUUT_TRANS_TABLE))

                    if word_phonemes:
                        ph_list.append(word_phonemes)

        # Join and re-split to break apart dipthongs, suprasegmentals, etc.
        ph_words = ["|".join(word_phonemes) for word_phonemes in ph_list]
        ph = "| ".join(ph_words)

        return ph

    raise ValueError(
        f" [!] Language {language} is not supported for phonemization.")
示例#3
0
def text2phone(text, language, use_espeak_phonemes=False):
    """Convert graphemes to phonemes.
    Parameters:
            text (str): text to phonemize
            language (str): language of the text
    Returns:
            ph (str): phonemes as a string seperated by "|"
                    ph = "ɪ|g|ˈ|z|æ|m|p|ə|l"
    """

    # TO REVIEW : How to have a good implementation for this?
    if language == "zh-CN":
        ph = chinese_text_to_phonemes(text)
        return ph

    if language == "ja-jp":
        ph = japanese_text_to_phonemes(text)
        return ph

    if gruut.is_language_supported(language):
        # Use gruut for phonemization
        phonemizer_args = {
            "remove_stress": True,
            "ipa_minor_breaks": False,  # don't replace commas/semi-colons with IPA |
            "ipa_major_breaks": False,  # don't replace periods with IPA ‖
        }

        if use_espeak_phonemes:
            # Use a lexicon/g2p model train on eSpeak IPA instead of gruut IPA.
            # This is intended for backwards compatibility with TTS<=v0.0.13
            # pre-trained models.
            phonemizer_args["model_prefix"] = "espeak"

        ph_list = gruut.text_to_phonemes(
            text,
            lang=language,
            return_format="word_phonemes",
            phonemizer_args=phonemizer_args,
        )

        # Join and re-split to break apart dipthongs, suprasegmentals, etc.
        ph_words = ["|".join(word_phonemes) for word_phonemes in ph_list]
        ph = "| ".join(ph_words)

        # Fix a few phonemes
        ph = ph.translate(GRUUT_TRANS_TABLE)
        return ph

    raise ValueError(f" [!] Language {language} is not supported for phonemization.")
示例#4
0
文件: __init__.py 项目: AyushExel/TTS
def text2phone(text, language):
    """Convert graphemes to phonemes.
    Parameters:
            text (str): text to phonemize
            language (str): language of the text
    Returns:
            ph (str): phonemes as a string seperated by "|"
                    ph = "ɪ|g|ˈ|z|æ|m|p|ə|l"
    """

    # TO REVIEW : How to have a good implementation for this?
    if language == "zh-CN":
        ph = chinese_text_to_phonemes(text)
        return ph

    if language == "ja-jp":
        ph = japanese_text_to_phonemes(text)
        return ph

    raise ValueError(f" [!] Language {language} is not supported for phonemization.")
示例#5
0
 def test_japanese_text_to_phonemes(self):
     for line in _TEST_CASES.strip().split("\n"):
         text, phone = line.split("/")
         self.assertEqual(japanese_text_to_phonemes(text), phone)