Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/las.py
diff options
context:
space:
mode:
Diffstat (limited to 'las.py')
-rwxr-xr-x[-rw-r--r--]las.py110
1 files changed, 80 insertions, 30 deletions
diff --git a/las.py b/las.py
index 9f31b57..96fd52e 100644..100755
--- a/las.py
+++ b/las.py
@@ -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()