Go to the documentation of this file.00001
00002
00003
00004
00005 import rospy
00006 import unittest
00007 import rostest
00008
00009
00010 from rospeex_if import ROSpeexInterface
00011
00012
00013 import os
00014 import sys
00015 import codecs
00016
00017
00018 class TestRospeexSS(unittest.TestCase):
00019 """ Speech Synthesis Test class """
00020 def __init__(self, *args, **kwargs):
00021 super(TestRospeexSS, self).__init__(*args, **kwargs)
00022 self._ready = 1
00023 self._wait_flag = True
00024
00025 def _ss_response(self, message):
00026 """
00027 speech synthesis response callback
00028 @param message: message class
00029 @type message: str
00030 """
00031 self._ready = 1
00032 print 'received response'
00033
00034 def read_input_data(self, target_file):
00035 """
00036 read input data
00037 @param target_file: target test data
00038 @type target_file: str
00039 """
00040 data = ""
00041 try:
00042 print target_file
00043 f_log = codecs.open(target_file, 'r', 'utf_8')
00044 data = f_log.read()
00045 f_log.close()
00046 except:
00047 print 'no file'
00048 return data
00049
00050 def execute_case(self, message, target_lang, target_engine, target_voice=""):
00051 """
00052 execute test case
00053 @param message:
00054 @type message:
00055 @param target_lang:
00056 @type target_lang:
00057 @param target_engine:
00058 @type target_engine:
00059 @param target_voice:
00060 @type target_voice:
00061 """
00062 self._ready = 0
00063
00064 self._interface.say(message, target_lang, target_engine, target_voice)
00065 while not self._ready and self._wait_flag:
00066 rospy.sleep(0.1)
00067
00068 def test_run(self):
00069 """
00070 @param target_engine:
00071 @type target_engine:
00072 @param target_dir:
00073 @type target_dir:
00074 @param target_files_ja:
00075 @type target_files_ja:
00076 @param target_files_en:
00077 @type target_files_en:
00078 """
00079 self._ready = 1
00080 rospy.init_node('test_rospeex_ss')
00081 self._interface = ROSpeexInterface()
00082 self._interface.init(ss=True, sr=False, spi=False)
00083 self._interface.register_ss_response(self._ss_response)
00084 rospy.sleep(0.5)
00085
00086 target_dir = rospy.get_param('~target_dir', '../testdata')
00087 target_engine = rospy.get_param('~target_engine', 'nict')
00088 target_language = rospy.get_param('~target_language', 'ja')
00089 target_voicefonts = list(rospy.get_param('~target_voicefonts', ''))
00090 target_files = list(rospy.get_param('~target_files', ''))
00091 self._wait_flag = rospy.get_param('~wait_flag', True)
00092
00093 if not rospy.is_shutdown():
00094 for target_file in target_files:
00095 filename = os.path.join(target_dir, target_file)
00096 message = self.read_input_data(filename)
00097 for target_voicefont in target_voicefonts:
00098 self.execute_case(
00099 message,
00100 target_language,
00101 target_engine,
00102 target_voicefont
00103 )
00104
00105
00106 if __name__ == '__main__':
00107 rostest.rosrun('rospeex_if', 'rospeex_ss_test', TestRospeexSS, sys.argv)