summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2014-06-28 15:16:57 -0700
committerschneefux <schneefux+commit@schneefux.xyz>2014-06-28 15:16:57 -0700
commit3419eee951be8660f13b5d750a33b8e8ed64b425 (patch)
tree210f4ec0bd14be447566195d0dffaf10182af9d2
parent02f3505cd6d585a24d79cca033f30ce88e972563 (diff)
downloadjasper-client-3419eee951be8660f13b5d750a33b8e8ed64b425.tar.gz
jasper-client-3419eee951be8660f13b5d750a33b8e8ed64b425.zip
Changes suggested in CR.
-rw-r--r--.gitignore1
-rw-r--r--boot/test.py4
-rw-r--r--client/mic.py4
-rw-r--r--client/notifier.py2
-rw-r--r--client/speaker.py35
5 files changed, 33 insertions, 13 deletions
diff --git a/.gitignore b/.gitignore
index 08cf7c5..a5affb2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
env/
client/env
client/venv
+client/modules/*
*.pyc
client/active.wav
client/passive.wav
diff --git a/boot/test.py b/boot/test.py
index b390d5e..af5f982 100644
--- a/boot/test.py
+++ b/boot/test.py
@@ -16,7 +16,7 @@ sys.path.append(mod_path)
import g2p
-class ListWhereOrderDoesNotMatter(list):
+class UnorderedList(list):
def __eq__(self, other):
return sorted(self) == sorted(other)
@@ -41,7 +41,7 @@ class TestVocabCompiler(unittest.TestCase):
# 'words' is appended with ['MUSIC', 'SPOTIFY']
# so must be > 2 to have received WORDS from modules
- translateWords.assert_called_once_with(ListWhereOrderDoesNotMatter(words))
+ translateWords.assert_called_once_with(UnorderedList(words))
self.assertTrue(text2lm.called)
os.remove(sentences)
os.remove(dictionary)
diff --git a/client/mic.py b/client/mic.py
index f14ebc6..f4b70df 100644
--- a/client/mic.py
+++ b/client/mic.py
@@ -238,7 +238,7 @@ class Mic:
if THRESHOLD == None:
THRESHOLD = self.fetchThreshold()
- self.speaker.playSound("../static/audio/beep_hi.wav")
+ self.speaker.play("../static/audio/beep_hi.wav")
# prepare recording stream
audio = pyaudio.PyAudio()
@@ -268,7 +268,7 @@ class Mic:
if average < THRESHOLD * 0.8:
break
- self.speaker.playSound("../static/audio/beep_lo.wav")
+ self.speaker.play("../static/audio/beep_lo.wav")
# save the audio data
stream.stop_stream()
diff --git a/client/notifier.py b/client/notifier.py
index 341ae04..7e6b0a2 100644
--- a/client/notifier.py
+++ b/client/notifier.py
@@ -1,5 +1,5 @@
import Queue
-from modules import Gmail
+#from modules import Gmail
from apscheduler.scheduler import Scheduler
import logging
logging.basicConfig()
diff --git a/client/speaker.py b/client/speaker.py
index e7dc075..1b1255a 100644
--- a/client/speaker.py
+++ b/client/speaker.py
@@ -1,22 +1,33 @@
"""
A Speaker handles audio output from Jasper to the user
-"""
-import os, json
-class PiSpeaker:
+Speaker methods:
+ say - output 'phrase' as speech
+ play - play the audio in 'filename'
+ isAvailable - returns True if the platform supports this implementation
+"""
+import os
+import json
+class eSpeakSpeaker:
+ """
+ Uses the eSpeak speech synthesizer included in the Jasper disk image
+ """
@classmethod
def isAvailable(cls):
return os.system("which espeak") == 0
def say(self, phrase, OPTIONS=" -vdefault+m3 -p 40 -s 160 --stdout > say.wav"):
os.system("espeak " + json.dumps(phrase) + OPTIONS)
- self.playSound("say.wav")
+ self.play("say.wav")
- def playSound(self, filename):
+ def play(self, filename):
os.system("aplay -D hw:1,0 " + filename)
-class MacSpeaker:
+class saySpeaker:
+ """
+ Uses the OS X built-in 'say' command
+ """
@classmethod
def isAvailable(cls):
@@ -28,11 +39,19 @@ class MacSpeaker:
def say(self, phrase):
os.system("say " + self.shellquote(phrase))
- def playSound(self, filename):
+ def play(self, filename):
os.system("afplay " + filename)
def newSpeaker():
- for cls in [PiSpeaker, MacSpeaker]:
+ """
+ Returns:
+ A speaker implementation available on the current platform
+
+ Raises:
+ ValueError if no speaker implementation is supported on this platform
+ """
+
+ for cls in [eSpeakSpeaker, saySpeaker]:
if cls.isAvailable():
return cls()
raise ValueError("Platform is not supported")