diff --git a/README.rst b/README.rst index 827eef587..ce2923b31 100755 --- a/README.rst +++ b/README.rst @@ -58,6 +58,7 @@ Proximity X Screenshot X X X Sms (send messages) X X Spatial Orientation X X +Speech to Text X Storage Path X X X X X Temperature X Text to speech X X X X X diff --git a/examples/speech/main.py b/examples/speech/main.py new file mode 100644 index 000000000..ad282db6f --- /dev/null +++ b/examples/speech/main.py @@ -0,0 +1,52 @@ +from kivy.app import App +from kivy.uix.boxlayout import BoxLayout +from plyer import stt +from kivy.lang import Builder +Builder.load_string(''' +: + Button: + text: "Start listening" + on_release: root.start() + Button: + text: "Stop listening" + on_release: root.stop() + + Button: + text: "Set Commands" + on_release: root.set_command() + + Button: + text: "commands title" + on_release: root.commands_title() + + Button: + text: "commands" + on_release: root.commands() + +''') + + +class STTDemo(BoxLayout): + + def start(self): + stt.start_listening() + + def stop(self): + stt.stop_listening() + + def set_command(self): + stt.set_commands() + + def commands_title(self): + print stt.display_commands_title() + + def commands(self): + print stt.display_commnds() + + +class SpeechToTextApp(App): + def build(self): + return STTDemo() + +if __name__ == '__main__': + SpeechToTextApp().run() diff --git a/plyer/__init__.py b/plyer/__init__.py index 6cabb2b4a..e90b068cb 100644 --- a/plyer/__init__.py +++ b/plyer/__init__.py @@ -77,7 +77,7 @@ #: Sms proxy to :class:`plyer.facades.Sms` sms = Proxy('sms', facades.Sms) -#: Speech proxy to :class:`plyer.facades.STT` +#: STT proxy to :class:`plyer.facades.STT` stt = Proxy('stt', facades.STT) #: TTS proxy to :class:`plyer.facades.TTS` diff --git a/plyer/facades/stt.py b/plyer/facades/stt.py index 58a40c823..9d29bc3d9 100644 --- a/plyer/facades/stt.py +++ b/plyer/facades/stt.py @@ -177,6 +177,21 @@ def exist(self): return self._exist() + def set_commands(self): + ''' + ''' + self._set_commands() + + def display_commands_title(self): + ''' + ''' + self._display_commands_title() + + def display_commands(self): + ''' + ''' + self._display_commands() + # private methods def _start(self): raise NotImplementedError @@ -186,3 +201,12 @@ def _stop(self): def _exist(self): raise NotImplementedError + + def _set_commands(self, **kwargs): + raise NotImplementedError() + + def _display_commands_title(self, **kwargs): + raise NotImplementedError() + + def _display_commands(self, **kwargs): + raise NotImplementedError() diff --git a/plyer/platforms/macosx/stt.py b/plyer/platforms/macosx/stt.py new file mode 100644 index 000000000..e695cdb1e --- /dev/null +++ b/plyer/platforms/macosx/stt.py @@ -0,0 +1,60 @@ +from plyer.facades import STT +from pyobjus import autoclass, objc_arr, objc_str, protocol, selector +from pyobjus.dylib_manager import load_framework, INCLUDE + +load_framework(INCLUDE.AppKit) + +NSSpeechRecognizer = autoclass('NSSpeechRecognizer') +NSString = autoclass('NSString') + + +class SpeechToText(STT): + + def _ns(self, x): + NSString.alloc().initWithUTF8String_(x) + + def _start_listening(self, **kwargs): + self.obj = NSSpeechRecognizer.alloc() + self.obj.init() + # self.obj_delegate = NSSpeechRecognizerDelegate + self.obj.commands = ["a", "b", "c"] + self.obj.setDelegate_(self) + self.obj.startListening() + + # foo(NSSpeechRecognizerDelegate, "") + + @protocol('NSSpeechRecognizerDelegate') + def speechRecognizer_didRecognizeCommand_(self, sender, command): + print command + try: + cnt = command.allObjects().count() + for i in range(cnt): + print command.allObjects().objectAtIndex_(i).UTF8String() + except: + pass + + def _set_commands(self): + self.obj.commands = ["a", "b", "c"] + self.obj.setCommands_ = ["a", "b", "c"] + + def _display_commands_title(self): + return self.obj.delegate + # return self.obj.displayedCommandsTitle + + def _display_commnds(self): + return self.obj.commands + + def _stop_listening(self, **kwargs): + self.obj.stopListening() + print "Not Listening" + + +def foo(name, string): + matching = [] + matching = [s for s in dir(name) if "{}".format(string) in s] + for m in matching: + print m + + +def instance(): + return SpeechToText()