2021-06-09 15:52:10 +00:00
""" Tests for text to phoneme converstion """
import unittest
2021-06-15 19:57:08 +00:00
from TTS . tts . utils . text import phoneme_to_sequence , sequence_to_phoneme , text2phone
2021-06-09 15:52:10 +00:00
# -----------------------------------------------------------------------------
2021-06-15 19:57:08 +00:00
LANG = " en-us "
2021-06-09 15:52:10 +00:00
EXAMPLE_TEXT = " Recent research at Harvard has shown meditating for as little as 8 weeks can actually increase, the grey matter in the parts of the brain responsible for emotional regulation and learning! "
2021-06-15 19:57:08 +00:00
EXPECTED_PHONEMES = " ɹ|iː |s|ə|n|t| ɹ|ᵻ|s|ɜː|tʃ| æ|t| h|ɑːɹ|v|ɚ|d| h|æ|z| ʃ|oʊ|n| m|ɛ|d|ᵻ|t|eɪ |ɾ|ɪ |ŋ| f|ɔːɹ| æ|z| l|ɪ |ɾ|əl| æ|z| eɪ |t| w|iː |k|s| k|æ|n| æ|k|tʃ|uː |əl|i| ɪ |ŋ|k|ɹ|iː |s| ,| ð|ə| ɡ |ɹ|eɪ | m|æ|ɾ|ɚ| ɪ |n| ð|ə| p|ɑːɹ|t|s| ʌ|v| ð|ə| b|ɹ|eɪ |n| ɹ|ᵻ|s|p|ɑ ː |n|s|ᵻ|b|əl| f|ɔːɹ| ɪ |m|oʊ|ʃ|ə|n|əl| ɹ|ɛ|ɡ |j|ʊ|l|eɪ |ʃ|ə|n| æ|n|d| l|ɜː|n|ɪ |ŋ| ! "
2021-06-09 15:52:10 +00:00
# -----------------------------------------------------------------------------
class TextProcessingTextCase ( unittest . TestCase ) :
""" Tests for text to phoneme conversion """
def test_phoneme_to_sequence ( self ) :
2021-06-15 19:57:08 +00:00
""" Verify en-us sentence phonemes without blank token """
self . _test_phoneme_to_sequence ( add_blank = False )
2021-06-09 15:52:10 +00:00
def test_phoneme_to_sequence_with_blank_token ( self ) :
2021-06-15 19:57:08 +00:00
""" Verify en-us sentence phonemes with blank token """
self . _test_phoneme_to_sequence ( add_blank = True )
2021-06-09 15:52:10 +00:00
2021-06-15 19:57:08 +00:00
def _test_phoneme_to_sequence ( self , add_blank ) :
2021-06-16 19:26:36 +00:00
""" Verify en-us sentence phonemes """
2021-06-09 15:52:10 +00:00
text_cleaner = [ " phoneme_cleaners " ]
2021-06-15 19:57:08 +00:00
sequence = phoneme_to_sequence ( EXAMPLE_TEXT , text_cleaner , LANG , add_blank = add_blank , use_espeak_phonemes = True )
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = EXPECTED_PHONEMES . replace ( " | " , " " )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
# multiple punctuations
text = " Be a voice, not an! echo? "
sequence = phoneme_to_sequence ( text , text_cleaner , LANG , add_blank = add_blank , use_espeak_phonemes = True )
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = " biː ɐ vɔɪ s , nɑ ː t ɐn ! ɛkoʊ ? "
print ( text_hat )
print ( len ( sequence ) )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
# not ending with punctuation
text = " Be a voice, not an! echo "
sequence = phoneme_to_sequence ( text , text_cleaner , LANG , add_blank = add_blank , use_espeak_phonemes = True )
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = " biː ɐ vɔɪ s , nɑ ː t ɐn ! ɛkoʊ "
print ( text_hat )
print ( len ( sequence ) )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
# original
text = " Be a voice, not an echo! "
sequence = phoneme_to_sequence ( text , text_cleaner , LANG , add_blank = add_blank , use_espeak_phonemes = True )
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = " biː ɐ vɔɪ s , nɑ ː t ɐn ɛkoʊ ! "
print ( text_hat )
print ( len ( sequence ) )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
# extra space after the sentence
text = " Be a voice, not an! echo. "
sequence = phoneme_to_sequence ( text , text_cleaner , LANG , add_blank = add_blank , use_espeak_phonemes = True )
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = " biː ɐ vɔɪ s , nɑ ː t ɐn ! ɛkoʊ . "
print ( text_hat )
print ( len ( sequence ) )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
# extra space after the sentence
text = " Be a voice, not an! echo. "
sequence = phoneme_to_sequence (
text , text_cleaner , LANG , enable_eos_bos = True , add_blank = add_blank , use_espeak_phonemes = True
)
text_hat = sequence_to_phoneme ( sequence )
text_hat_with_params = sequence_to_phoneme ( sequence )
gt = " ^biː ɐ vɔɪ s , nɑ ː t ɐn ! ɛkoʊ .~ "
print ( text_hat )
print ( len ( sequence ) )
self . assertEqual ( text_hat , text_hat_with_params )
self . assertEqual ( text_hat , gt )
def test_text2phone ( self ) :
2021-06-16 19:26:36 +00:00
""" Verify phones directly (with |) """
2021-06-16 22:10:51 +00:00
ph = text2phone ( EXAMPLE_TEXT , LANG , use_espeak_phonemes = True )
2021-06-15 19:57:08 +00:00
self . assertEqual ( ph , EXPECTED_PHONEMES )
2021-06-09 15:52:10 +00:00
# -----------------------------------------------------------------------------
if __name__ == " __main__ " :
unittest . main ( )