diff options
Diffstat (limited to 'las.py')
-rwxr-xr-x[-rw-r--r--] | las.py | 110 |
1 files changed, 80 insertions, 30 deletions
@@ -4,7 +4,9 @@ import os import dbus import random import time -import csnd +import speechd +import commands +#import csnd from dict import Dict from dict import Word @@ -51,26 +53,39 @@ class Listenspell(): self.points = 0 self.words_played = 0 self.words_correct = 0 - self.init = False + self.speechd_init = False self.dict_obj = Dict(SQLiteDB) #Always intitiate first Dict object then Word object self.word_obj = Word() - def start_speechd(self): # Currently not in use have to manually start sugar-speechd - pid = os.fork() - if pid: - return - else: - # we are the child - os.popen("./sugar-speechd") - def play_sound(self,event): - if event == "begin": - os.popen("aplay --quiet begin.wav") - elif event == "correct": - os.popen("aplay --quiet correct.wav") - elif event == "incorrect": - os.popen("aplay --quiet incorrect.wav") + + #file= event + '.wav' + #from wave import open as waveOpen + #from ossaudiodev import open as ossOpen + #s = waveOpen(file,'rb') + #(nc,sw,fr,nf,comptype, compname) = s.getparams( ) + #dsp = ossOpen('/dev/dsp','w') + #try: + #from ossaudiodev import AFMT_S16_NE + #except ImportError: + #if byteorder == "little": + #AFMT_S16_NE = ossaudiodev.AFMT_S16_LE + #else: + #AFMT_S16_NE = ossaudiodev.AFMT_S16_BE + #dsp.setparameters(AFMT_S16_NE, nc, fr) + #data = s.readframes(nf) + #s.close() + #dsp.write(data) + #dsp.close() + + os.popen("aplay --quiet " + event + ".wav") + #if event == "begin": + #os.popen("aplay --quiet begin.wav") + #elif event == "correct": + #os.popen("aplay --quiet correct.wav") + #elif event == "incorrect": + #os.popen("aplay --quiet incorrect.wav") def set_skill_level(self,level): self.skill_level = level @@ -132,22 +147,56 @@ class Listenspell(): elif attribute == "word": return self.word_obj.get_word() elif attribute == "phnm": - return self.word_obj.get_word() # For the time being - - else: return "Invalid attribute" - - def say_text(self, text): - if self.init == False: - try: - bus = dbus.SessionBus() - self.espeak_object = bus.get_object('org.laptop.Speech','/org/laptop/Speech') - self.init = True - except dbus.exceptions.DBusException: - print "Speech Server not turned on." + phnm = self.word_obj.get_phoneme() + if phnm == None: + phnm = self.get_phoneme(self.word_obj.get_word()) + return phnm + else: + (phoneme, is_correct) = phnm + return phoneme + else: return False + + def get_phoneme(self, word = None): + if word == None: + return False + phnm = commands.getoutput("/usr/bin/espeak -q -x " + word) + self.word_obj.update_phoneme(phnm) + return phnm + + def start_speechd(self): + try: + self.client = speechd.SSIPClient('spd-test') + self.client.set_output_module('espeak') + self.client.set_language('en') + self.client.set_punctuation(speechd.PunctuationMode.SOME) + self.speech_state = None + except dbus.exceptions.DBusException: + print "Speech Dispatcher is not turned on." + return False + + def callback(self,callback_type): + self.speech_state = callback_type + + def say_text(self, text, wait= True, is_phoneme = False): + #wait: to wait for the text to be spoken or not + #os.popen("espeak " + text) + if self.speechd_init == False: + if self.start_speechd() == False: return False - + self.speechd_init = True + text = str(text) - self.espeak_object.SayText(text) + if is_phoneme: + text = "[" + text + "]" + + self.client.speak(text, callback=self.callback,event_types=(speechd.CallbackType.BEGIN, + speechd.CallbackType.CANCEL, + speechd.CallbackType.END)) + if wait == True: + while(self.speech_state != "end"): + time.sleep(1) + + def get_key(self): for longestinput in range(15): @@ -160,4 +209,5 @@ class Listenspell(): def exit_game(self): self.say_text("goodbye") + self.client.close() sys.exit() |