Revision e21d7f2c
| tts_bridge/mary/mary_tts_bridge/MaryTTSBridge.py | ||
|---|---|---|
| 34 | 34 | 
    import actionlib  | 
| 35 | 35 | 
    from io import BytesIO  | 
| 36 | 36 | 
    import wave  | 
| 37 | 
    import os  | 
|
| 38 | 
    import pkgutil  | 
|
| 37 | 39 | 
    from MaryTTSClient import *  | 
| 38 | 40 | 
    from cStringIO import StringIO  | 
| 39 | 41 | 
     | 
| ... | ... | |
| 116 | 118 | 
    for line in sio:  | 
| 117 | 119 | 
    if (line[0] != '#'):  | 
| 118 | 120 | 
    		phoneme_list = line.split(" ")
   | 
| 119 | 
    symbol = phoneme_list[2]  | 
|
| 120 | 
    symbol = symbol.rstrip()  | 
|
| 121 | 
     | 
|
| 122 | 
    now = float(phoneme_list[0])  | 
|
| 123 | 
    duration = (now - last)*1000  | 
|
| 124 | 
    last = now  | 
|
| 125 | 
    plist.append(phoneme(symbol, int(duration)))  | 
|
| 121 | 
    if (line == '\n'):  | 
|
| 122 | 
    #ignore empty lines  | 
|
| 123 | 
    continue  | 
|
| 124 | 
    elif (len(phoneme_list) != 3):  | 
|
| 125 | 
                        print("> could not split line '%s' during phoneme seperation\n" % (line))
   | 
|
| 126 | 
    else:  | 
|
| 127 | 
    symbol = phoneme_list[2]  | 
|
| 128 | 
    symbol = symbol.rstrip()  | 
|
| 129 | 
     | 
|
| 130 | 
    now = float(phoneme_list[0])  | 
|
| 131 | 
    duration = (now - last)*1000  | 
|
| 132 | 
    last = now  | 
|
| 133 | 
    plist.append(phoneme(symbol, int(duration)))  | 
|
| 126 | 134 | 
     | 
| 127 | 135 | 
    	self.logger.info("created phonemelist with " + str(len(plist)) + " elements")
   | 
| 128 | 136 | 
     | 
| ... | ... | |
| 137 | 145 | 
    	self.logger.info("created utterance for 'phonemelist with '" + u.text + "'")
   | 
| 138 | 146 | 
    return u  | 
| 139 | 147 | 
     | 
| 148 | 
    def get_error_message(self):  | 
|
| 149 | 
            data_wav = pkgutil.get_data('mary_tts_bridge', 'data/connection_failed.wav')
   | 
|
| 150 | 
            data_phonemes = pkgutil.get_data('mary_tts_bridge', 'data/connection_failed.phonemes')
   | 
|
| 151 | 
    return (data_wav, data_phonemes)  | 
|
| 152 | 
     | 
|
| 140 | 153 | 
    def execute_cb(self, goal):  | 
| 141 | 154 | 
    	self.logger.info("incoming utterance '" + goal.text + "'")
   | 
| 142 | 155 | 
     | 
| ... | ... | |
| 150 | 163 | 
     | 
| 151 | 164 | 
    except:  | 
| 152 | 165 | 
    	    self.logger.error("failed to create utterance error = '" + str(sys.exc_info()[1]) + "'")
   | 
| 153 | 
    success = False  | 
|
| 166 | 
    #try to open error message from file:  | 
|
| 167 | 
    success = True  | 
|
| 168 | 
    (audio, phonelist) = self.get_error_message()  | 
|
| 154 | 169 | 
     | 
| 155 | 170 | 
    if success:  | 
| 156 | 171 | 
    #build soundchunk  | 
| tts_bridge/mary/mary_tts_bridge/MaryTTSClient.py | ||
|---|---|---|
| 59 | 59 | 
    self.tts_port = tts_port  | 
| 60 | 60 | 
    self.locale = locale  | 
| 61 | 61 | 
    self.voice = voice  | 
| 62 | 
     | 
|
| 62 | 
     | 
|
| 63 | 63 | 
    def __del__(self):  | 
| 64 | 64 | 
    """destructor  | 
| 65 | 65 | 
    """  | 
| ... | ... | |
| 105 | 105 | 
    params = urllib.urlencode(raw_params)  | 
| 106 | 106 | 
    	headers = {}
   | 
| 107 | 107 | 
     | 
| 108 | 
    #open connection to mary server  | 
|
| 109 | 
    conn = httplib.HTTPConnection(self.tts_host, self.tts_port)  | 
|
| 110 | 
     | 
|
| 111 | 108 | 
    #conn.set_debuglevel(5)  | 
| 109 | 
    #open connection to mary server  | 
|
| 110 | 
    conn = httplib.HTTPConnection(self.tts_host, self.tts_port)  | 
|
| 112 | 111 | 
     | 
| 113 | 112 | 
    	conn.request("POST", "/process", params, headers)
   | 
| 114 | 113 | 
    response = conn.getresponse()  | 
| 114 | 
     | 
|
| 115 | 115 | 
    if response.status != 200:  | 
| 116 | 116 | 
    print response.getheaders()  | 
| 117 | 
    conn.close()  | 
|
| 117 | 118 | 
    	    raise RuntimeError("{0}: {1}".format(response.status,response.reason))
   | 
| 118 | 119 | 
    return response.read()  | 
| 119 | 120 | 
     | 
| tts_bridge/mary/setup.py | ||
|---|---|---|
| 38 | 38 | 
    # Choose your license  | 
| 39 | 39 | 
    license='GPLv3',  | 
| 40 | 40 | 
     | 
| 41 | 
    #include package data?  | 
|
| 42 | 
    include_package_data = True,  | 
|
| 43 | 
     | 
|
| 41 | 44 | 
    # See https://pypi.python.org/pypi?%3Aaction=list_classifiers  | 
| 42 | 45 | 
    classifiers=[  | 
| 43 | 46 | 
    # How mature is this project? Common values are  | 
| ... | ... | |
| 90 | 93 | 
    # installed, specify them here. If using Python 2.6 or less, then these  | 
| 91 | 94 | 
    # have to be included in MANIFEST.in as well.  | 
| 92 | 95 | 
        package_data={
   | 
| 96 | 
    '': ['data/connection_failed.*'],  | 
|
| 93 | 97 | 
    #'sample': ['package_data.dat'],  | 
| 94 | 98 | 
    },  | 
| 95 | 99 | 
     | 
Also available in: Unified diff