Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kiok46: MacOS Speech to Text #472

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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()
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()