12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/usr/bin/env python2
- import gst
- import subprocess
- import os.path
- import time
- import gobject
-
- #define some global variables
- this_dir = os.path.dirname( os.path.abspath(__file__) )
- lang_dir = os.path.join(this_dir, "language")
- command_file = os.path.join(this_dir, "commands")
- strings_file = os.path.join(this_dir, "sentences.corpus")
-
- class TTS(gobject.GObject):
- __gsignals__ = {
- 'finished' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN,))
- }
- def __init__(self):
- gobject.GObject.__init__(self)
- self.commands = {}
- #build the pipeline
- cmd = 'autoaudiosrc ! audioconvert ! audioresample ! vader name=vad ! pocketsphinx name=asr ! appsink sync=false'
- self.pipeline=gst.parse_launch( cmd )
- #get the Auto Speech Recognition piece
- asr=self.pipeline.get_by_name('asr')
- asr.connect('result', self.result)
- asr.set_property('lm', os.path.join(lang_dir, 'lm'))
- asr.set_property('dict', os.path.join(lang_dir, 'dic'))
- asr.set_property('configured', True)
- #get the Voice Activity DEtectoR
- self.vad = self.pipeline.get_by_name('vad')
- self.vad.set_property('auto-threshold',True)
- self.read_commands()
- #init gobject threads
- gobject.threads_init()
-
- def listen(self):
- self.pipeline.set_state(gst.STATE_PLAYING)
-
- def pause(self):
- self.vad.set_property('silent', True)
- self.pipeline.set_state(gst.STATE_PAUSED)
-
- def result(self, asr, text, uttid):
- self.emit("finished", True)
- print text
- #is there a matching command?
- if self.commands.has_key( text ):
- cmd = self.commands[text]
- print cmd
- subprocess.call(cmd, shell=True)
- else:
- print "no matching command"
- #emit finished
-
-
- def read_commands(self):
- #read the.commands file
- file_lines = open(command_file)
- strings = open(strings_file, "w")
- for line in file_lines:
- #trim the white spaces
- line = line.strip()
- #if the line has length and the first char isn't a hash
- if len(line) and line[0]!="#":
- #this is a parsible line
- (key,value) = line.split(":",1)
- print key, value
- self.commands[key.strip()] = value.strip()
- strings.write( key.strip()+"\n")
- #close the strings file
- strings.close()
-
- if __name__ == "__main__":
- b = Blather()
- b.listen()
- main_loop = gobject.MainLoop()
- #start the main loop
- try:
- main_loop.run()
- except:
- main_loop.quit()
-
-
|