2021-11-19 09:29:24 +00:00
import unittest
from TTS . tts . utils . text . characters import BaseCharacters , Graphemes , IPAPhonemes , create_graphemes , create_phonemes
from TTS . tts . utils . text . phonemizers import ESpeak , Gruut , JA_JP_Phonemizer , ZH_CN_Phonemizer
from TTS . tts . utils . text . tokenizer import TTSTokenizer
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! "
class TestEspeakPhonemizer ( unittest . TestCase ) :
def setUp ( self ) :
self . phonemizer = ESpeak ( language = " en-us " )
self . 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| ˈ ɪ |n|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|uː |l|ˈ eɪ |ʃ|ə|n|| æ|n|d l|ˈɜː|n|ɪ |ŋ! "
def test_phonemize ( self ) :
output = self . phonemizer . phonemize ( EXAMPLE_TEXT , separator = " | " )
self . assertEqual ( output , self . EXPECTED_PHONEMES )
# multiple punctuations
text = " Be a voice, not an! echo? "
gt = " biː ɐ vˈ ɔɪ s, nˈ ɑ ː t ɐn! ˈ ɛkoʊ? "
output = self . phonemizer . phonemize ( text , separator = " | " )
output = output . replace ( " | " , " " )
self . assertEqual ( output , gt )
# not ending with punctuation
text = " Be a voice, not an! echo "
gt = " biː ɐ vˈ ɔɪ s, nˈ ɑ ː t ɐn! ˈ ɛkoʊ "
output = self . phonemizer . phonemize ( text , separator = " " )
self . assertEqual ( output , gt )
# extra space after the sentence
text = " Be a voice, not an! echo. "
gt = " biː ɐ vˈ ɔɪ s, nˈ ɑ ː t ɐn! ˈ ɛkoʊ. "
output = self . phonemizer . phonemize ( text , separator = " " )
self . assertEqual ( output , gt )
def test_name ( self ) :
self . assertEqual ( self . phonemizer . name ( ) , " espeak " )
def test_get_supported_languages ( self ) :
self . assertIsInstance ( self . phonemizer . supported_languages ( ) , dict )
def test_get_version ( self ) :
self . assertIsInstance ( self . phonemizer . version ( ) , str )
def test_is_available ( self ) :
self . assertTrue ( self . phonemizer . is_available ( ) )
class TestGruutPhonemizer ( unittest . TestCase ) :
def setUp ( self ) :
self . phonemizer = Gruut ( language = " en-us " , use_espeak_phonemes = True , keep_stress = False )
self . EXPECTED_PHONEMES = " ɹ|i|ː |s|ə|n|t| ɹ|ᵻ|s|ɜ|ː |t|ʃ| æ|ɾ| h|ɑ |ː |ɹ|v|ɚ|d| h|ɐ|z| ʃ|o|ʊ|n| m|ɛ|d|ᵻ|t|e|ɪ |ɾ|ɪ |ŋ| f|ɔ|ː |ɹ| æ|z| l|ɪ |ɾ|ə|l| æ|z| e|ɪ |t| w|i|ː |k|s| k|æ|ŋ| æ|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|ɪ |ŋ! "
def test_phonemize ( self ) :
output = self . phonemizer . phonemize ( EXAMPLE_TEXT , separator = " | " )
self . assertEqual ( output , self . EXPECTED_PHONEMES )
# multiple punctuations
text = " Be a voice, not an! echo? "
gt = " biː ɐ vɔɪ s, nɑ ː t ɐn! ɛkoʊ? "
output = self . phonemizer . phonemize ( text , separator = " | " )
output = output . replace ( " | " , " " )
self . assertEqual ( output , gt )
# not ending with punctuation
text = " Be a voice, not an! echo "
gt = " biː ɐ vɔɪ s, nɑ ː t ɐn! ɛkoʊ "
output = self . phonemizer . phonemize ( text , separator = " " )
self . assertEqual ( output , gt )
# extra space after the sentence
text = " Be a voice, not an! echo. "
gt = " biː ɐ vɔɪ s, nɑ ː t ɐn! ɛkoʊ. "
output = self . phonemizer . phonemize ( text , separator = " " )
self . assertEqual ( output , gt )
def test_name ( self ) :
self . assertEqual ( self . phonemizer . name ( ) , " gruut " )
def test_get_supported_languages ( self ) :
self . assertIsInstance ( self . phonemizer . supported_languages ( ) , list )
def test_get_version ( self ) :
self . assertIsInstance ( self . phonemizer . version ( ) , str )
def test_is_available ( self ) :
self . assertTrue ( self . phonemizer . is_available ( ) )
class TestJA_JPPhonemizer ( unittest . TestCase ) :
def setUp ( self ) :
self . phonemizer = JA_JP_Phonemizer ( )
self . _TEST_CASES = """
どちらに行きますか ? / dochiraniikimasuka ?
今日は温泉に 、 行きます 。 / kyo : waoNseNni , ikimasu .
「 A 」 から 「 Z 」 までです 。 / e : karazeqtomadedesu .
そうですね ! / so : desune !
クジラは哺乳類です 。 / kujirawahonyu : ruidesu .
ヴィディオを見ます 。 / bidioomimasu .
今日は8 月22日です / kyo : wahachigatsuniju : ninichidesu
xyzとα βγ / eqkusuwaizeqtotoarufabe : tagaNma
値段は $ 12.34 です / nedaNwaju : niteNsaNyoNdorudesu
"""
def test_phonemize ( self ) :
for line in self . _TEST_CASES . strip ( ) . split ( " \n " ) :
text , phone = line . split ( " / " )
self . assertEqual ( self . phonemizer . phonemize ( text , separator = " " ) , phone )
def test_name ( self ) :
self . assertEqual ( self . phonemizer . name ( ) , " ja_jp_phonemizer " )
def test_get_supported_languages ( self ) :
self . assertIsInstance ( self . phonemizer . supported_languages ( ) , dict )
def test_get_version ( self ) :
self . assertIsInstance ( self . phonemizer . version ( ) , str )
def test_is_available ( self ) :
self . assertTrue ( self . phonemizer . is_available ( ) )
class TestZH_CN_Phonemizer ( unittest . TestCase ) :
def setUp ( self ) :
self . phonemizer = ZH_CN_Phonemizer ( )
self . _TEST_CASES = " "
def test_phonemize ( self ) :
# TODO: implement ZH phonemizer tests
pass
def test_name ( self ) :
self . assertEqual ( self . phonemizer . name ( ) , " zh_cn_phonemizer " )
def test_get_supported_languages ( self ) :
self . assertIsInstance ( self . phonemizer . supported_languages ( ) , dict )
def test_get_version ( self ) :
self . assertIsInstance ( self . phonemizer . version ( ) , str )
def test_is_available ( self ) :
2021-11-24 17:46:48 +00:00
self . assertTrue ( self . phonemizer . is_available ( ) )