diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-06-28 15:16:57 -0700 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-06-28 15:16:57 -0700 |
| commit | 3419eee951be8660f13b5d750a33b8e8ed64b425 (patch) | |
| tree | 210f4ec0bd14be447566195d0dffaf10182af9d2 /client/speaker.py | |
| parent | 02f3505cd6d585a24d79cca033f30ce88e972563 (diff) | |
| download | jasper-client-3419eee951be8660f13b5d750a33b8e8ed64b425.tar.gz jasper-client-3419eee951be8660f13b5d750a33b8e8ed64b425.zip | |
Changes suggested in CR.
Diffstat (limited to 'client/speaker.py')
| -rw-r--r-- | client/speaker.py | 35 |
1 files changed, 27 insertions, 8 deletions
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") |
