# Created by Leo from: C:\Python23\Tom\leo\SpeachServer.leo # @language python # @path c:\python23\tom2 # << Speech_Server declarations >> import sys, time, math, string, win32event, pythoncom, os from wxPython.wx import * from win32com.client import constants import win32con import win32api import win32com.client import socket from wxPython.lib.evtmgr import eventManager import pickle phraselist = [] # -- end -- << Speech_Server declarations >> # << Speech_Server methods >> (1 of 5) class MyFrame(wxFrame): # << class MyFrame methods >> (1 of 8) def __init__(self, parent, id, title): wxFrame.__init__(self, parent, id, title, wxDefaultPosition, wxDefaultSize) global phraselist openfile = file('c:\\python23\\tom\\save.p') self.word_list = pickle.load(openfile) eventManager.Register(self.OnCloseWindow, EVT_CLOSE, self) #EVT_CLOSE(self, self.OnCloseWindow) self.serving = myserver() self.mainmenu = wxMenuBar() menu=wxMenu() exitID=wxNewId() menu.Append(exitID, '&Load', 'Load Data') eventManager.Register(self, EVT_MENU, win=self, id=exitID) #EVT_MENU(self, exitID, self.OnLoadData) exitID=wxNewId() menu.Append(exitID, '&Save', 'Save Data') eventManager.Register(self, EVT_MENU, win=self, id=exitID) #EVT_MENU(self, exitID, self.OnSaveData) exitID=wxNewId() menu.Append(exitID, 'Save &As', 'Save Data As') eventManager.Register(self, EVT_MENU, win=self, id=exitID) #EVT_MENU(self, exitID, self.OnSaveAsData) exitID=wxNewId() menu.Append(exitID, '&Clear', 'Clear Data') eventManager.Register(self, EVT_MENU, win=self, id=exitID) #EVT_MENU(self, exitID, self.OnClearData) self.mainmenu.Append (menu, '&Data') self.SetMenuBar (self.mainmenu) StartButtonID = wxNewId() self.StartButton = wxButton(self, StartButtonID, "Go", wxPoint(20, 20)) eventManager.Register(self.OnGoClick, EVT_BUTTON, self.StartButton) #EVT_BUTTON(self, StartButtonID, self.OnGoClick) self.StartButton.SetBackgroundColour(wxBLUE) self.StartButton.SetForegroundColour(wxWHITE) self.StartButton.SetDefault() self.speechbuddy = SpeechRecognition() display1ID = wxNewId() self.display1 = wxTextCtrl(self, display1ID, '', size=(200, 100), style=wxTE_MULTILINE) self.main_sizer = wxBoxSizer(wxVERTICAL) self.button_sizer = wxBoxSizer(wxHORIZONTAL) self.text_sizer = wxBoxSizer(wxHORIZONTAL) self.button_sizer.Add(self.StartButton, 1, wxEXPAND) self.text_sizer.Add(self.display1, 1, wxEXPAND) self.main_sizer.Add(self.button_sizer, 1, wxEXPAND) self.main_sizer.Add(self.text_sizer, 1, wxEXPAND) self.SetSizer(self.main_sizer) self.SetAutoLayout(1) self.main_sizer.Fit(self) # << class MyFrame methods >> (2 of 8) def OnGoClick(self, event): #self.display1.Clear() self.display1.WriteText('Server On ' + str(socket.gethostname())) self.serving.runme() #self.display1.Clear() #self.display1.WriteText('Message Recieved ') #if self.serving.mesage_sent: # self.OnGotOK() # self.serving.mesage_sent = 0 # self.display1.WriteText(self.serving.msg) #self.OnGoClick(None) # << class MyFrame methods >> (3 of 8) def OnGotOK(self): #self.display1.Clear() #global phraselist #llistt = [ 'computer',"One", "Two", "Three", "Four",'quit', 'this','is', 'a','test','testing' ]#self.word_list.keys() self.display1.WriteText('Testing recognition \u') #speechbuddy = SpeechRecognition() #self.speechbuddy.activate(llistt ,'c:\\python23\\tom2\\test.wav') #wxSafeYield() #self.display1.Clear() #self.display1.WriteText(str(phraselist)) #phraselist = [] # << class MyFrame methods >> (4 of 8) def OnSaveAsData(self, event): self.tom.close() dlg = wxFileDialog(self, "Data file name", ".", "", "*.txt", wxSAVE) if dlg.ShowModal() == wxID_OK: #path = dlg.GetPath() #self.tom = open(path,'w+') pass dlg.Destroy() # << class MyFrame methods >> (5 of 8) def OnClearData(self, event): pass # << class MyFrame methods >> (6 of 8) def OnLoadData(self, event): PlotWindow_data = [] dlg = wxFileDialog(self, "Data file name", ".", "", "*.txt", wxOPEN) if dlg.ShowModal() == wxID_OK: #self.tom = open(dlg.GetPath(),'r+') pass dlg.Destroy() self.tom.close() # << class MyFrame methods >> (7 of 8) def OnSaveData(self, event): PlotWindow_data = [] dlg = wxFileDialog(self, "Data file name", ".", "", "*.txt", wxSAVE) if dlg.ShowModal() == wxID_OK: #self.tom = open(dlg.GetPath(),'r+') pass #self.tom.close() dlg.Destroy() # << class MyFrame methods >> (8 of 8) def OnCloseWindow(self, event): self.Destroy() # -- end -- << class MyFrame methods >> # << Speech_Server methods >> (2 of 5) class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")): # << class ContextEvents methods >> def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result): global phraselist speaker = win32com.client.Dispatch("SAPI.SpVoice") newResult = win32com.client.Dispatch(Result) print "You said: ",newResult.PhraseInfo.GetText() phraselist.append(newResult.PhraseInfo.GetText()) if newResult.PhraseInfo.GetText() == 'computer': speaker.Speak('working') # -- end -- << class ContextEvents methods >> # << Speech_Server methods >> (3 of 5) class SpeechRecognition: # << class SpeechRecognition methods >> (1 of 3) def __init__(self): # For text-to-speech self.speaker = win32com.client.Dispatch("SAPI.SpVoice") # For speech recognition - first create a listener self.listener = win32com.client.Dispatch("SAPI.SpInprocRecognizer") # Then a recognition context self.context = self.listener.CreateRecoContext() # which has an associated grammar self.grammar = self.context.CreateGrammar() # Do not allow free word recognition - only command and control# recognizing the words in the grammar only self.grammar.DictationSetState(0) # Create a new rule for the grammar, that is top level (so it begins# a recognition) and dynamic (ie we can change it at runtime) self.wordsRule = self.grammar.Rules.Add("wordsRule",constants.SRATopLevel + constants.SRADynamic, 0) # << class SpeechRecognition methods >> (2 of 3) def activate(self, wordsToAdd,filename): # Clear the rule (not necessary first time, but if we're changing it# dynamically then it's useful) self.wordsRule.Clear() # And go through the list of words, adding each to the rule [ self.wordsRule.InitialState.AddWordTransition(None, word) for word in wordsToAdd ] # Set the wordsRule to be active self.grammar.Rules.Commit() self.grammar.CmdSetRuleState("wordsRule", 1) # Commit the changes to the grammar self.grammar.Rules.Commit() # And add an event handler that's called back when recognition occurs self.filename = filename self.filename = filename self.hr = win32com.client.Dispatch("SAPI.SpFileStream") self.wf = self.hr.Format.GetWaveFormatEx() self.wf.AvgBytesPerSec = 11025 self.wf.BitsPerSample = 16 self.wf.Channels = 1 self.hr.Format.SetWaveFormatEx(self.wf) self.hr.Open(self.filename) self.listener.AudioInputStream = self.hr self.eventHandler = ContextEvents(self.context) # Announce we've started #self.say(phrase) """Speak a word or phrase""" # << class SpeechRecognition methods >> (3 of 3) def say(self, phrase): self.speaker.Speak(phrase) # -- end -- << class SpeechRecognition methods >> # << Speech_Server methods >> (4 of 5) class myserver: # << class myserver methods >> (1 of 4) def __init__(self): self.msg = '' self.mesage_sent = 0 #create an INET, STREAMing socket self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #bind the socket to a public host, # and a well-known port self.ss.bind((socket.gethostname(), 1923)) #become a server socket self.ss.listen(5) # << class myserver methods >> (2 of 4) def runme(self,msg = '0123456789'): totalsent = 0 self.msg = msg while not self.mesage_sent: #accept connections from outside (self.clientsocket, self.address) = self.ss.accept() while totalsent < 10: sent = self.clientsocket.send(self.msg[totalsent:]) if sent == 0: self.mesage_sent = 0 totalsent = 11 break totalsent = totalsent + sent if sent != 0: #self.clientsocket.shutdown(2) #self.clientsocket.close() print 'connection made' self.Getfilesize() self.mesage_sent = 1 break else: #self.clientsocket.shutdown(2) #self.clientsocket.close() break self.mesage_sent = 0 # << class myserver methods >> (3 of 4) def Getfilesize(self): self.mesage_sent = 0 while not self.mesage_sent: #accept connections from outside #(self.clientsocket2, self.address2) = self.ss.accept() msg = '' while len(msg) < 10: chunk = self.clientsocket.recv(10-len(msg)) if chunk == '': self.mesage_sent = 0 break msg = msg + chunk print msg if chunk != '': #self.clientsocket.close() self.mesage_sent = 1 print 'file size receved' self.Getfile(int(msg)) break else: #self.clientsocket2.close() #self.mesage_sent = 0 break self.mesage_sent = 0 # << class myserver methods >> (4 of 4) def Getfile(self, thesize): self.mesage_sent = 0 while not self.mesage_sent: #accept connections from outside #(self.clientsocket3, self.address3) = self.ss.accept() msg = '' while len(msg) < thesize: chunk = self.clientsocket.recv(thesize-len(msg)) if chunk == '': self.mesage_sent = 0 break msg = msg + chunk if msg != '': self.mesage_sent = 1 print 'got file' self.clientsocket.shutdown(2) self.clientsocket.close() self.msg = msg print len(msg) else: self.clientsocket.shutdown(2) self.clientsocket.close() break self.mesage_sent = 0 # -- end -- << class myserver methods >> # << Speech_Server methods >> (5 of 5) class MyApp(wxApp): # << class MyApp methods >> def OnInit(self): frame = MyFrame(None, -1, "Speech_Server") frame.Show(true) self.SetTopWindow(frame) return true # -- end -- << class MyApp methods >> # -- end -- << Speech_Server methods >> app = MyApp(0) app.MainLoop()