Skip to content

Commit

Permalink
add listening to speech
Browse files Browse the repository at this point in the history
  • Loading branch information
kiok46 authored and KeyWeeUsr committed Dec 2, 2018
1 parent 6768c2b commit 8d6016c
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
52 changes: 52 additions & 0 deletions examples/speech/main.py
Original file line number Diff line number Diff line change
@@ -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('''
<STTDemo>:
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()
2 changes: 1 addition & 1 deletion plyer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down
24 changes: 24 additions & 0 deletions plyer/facades/stt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()
60 changes: 60 additions & 0 deletions plyer/platforms/macosx/stt.py
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit 8d6016c

Please sign in to comment.