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 Nov 10, 2018
1 parent 9b9c523 commit 6e145bb
Show file tree
Hide file tree
Showing 6 changed files with 166 additions and 2 deletions.
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()
5 changes: 4 additions & 1 deletion plyer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
__all__ = ('accelerometer', 'audio', 'barometer', 'battery', 'call', 'camera',
'compass', 'email', 'filechooser', 'flash', 'gps', 'gravity',
'gyroscope', 'irblaster', 'light', 'orientation', 'notification',
'proximity', 'sms', 'tts', 'uniqueid', 'vibrator', 'wifi',
'proximity', 'sms', 'stt', 'tts', 'uniqueid', 'vibrator', 'wifi',
'temperature', 'humidity', 'spatialorientation', 'brightness',
'storagepath', 'processors', 'bluetooth', 'screenshot')

Expand Down Expand Up @@ -76,6 +76,9 @@
#: Sms proxy to :class:`plyer.facades.Sms`
sms = Proxy('sms', facades.Sms)

#: STT proxy to :class:`plyer.facades.STT`
stt = Proxy('stt', facades.STT)

#: TTS proxy to :class:`plyer.facades.TTS`
tts = Proxy('tts', facades.TTS)

Expand Down
3 changes: 2 additions & 1 deletion plyer/facades/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
__all__ = ('Accelerometer', 'Audio', 'Barometer', 'Battery', 'Call', 'Camera',
'Compass', 'Email', 'FileChooser', 'GPS', 'Gravity', 'Gyroscope',
'IrBlaster', 'Light', 'Orientation', 'Notification', 'Proximity',
'Sms', 'TTS', 'UniqueID', 'Vibrator', 'Wifi', 'Flash',
'Sms', 'STT', 'TTS', 'UniqueID', 'Vibrator', 'Wifi', 'Flash',
'Temperature', 'Humidity', 'SpatialOrientation', 'Brightness',
'Processors', 'StoragePath', 'keystore', 'Bluetooth', 'Screenshot')

Expand All @@ -32,6 +32,7 @@
from plyer.facades.orientation import Orientation
from plyer.facades.notification import Notification
from plyer.facades.sms import Sms
from plyer.facades.stt import STT
from plyer.facades.tts import TTS
from plyer.facades.uniqueid import UniqueID
from plyer.facades.vibrator import Vibrator
Expand Down
47 changes: 47 additions & 0 deletions plyer/facades/stt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class STT(object):
'''SpeechToText facade.
'''

def start_listening(self):
'''
Tells the speech recognition engine to begin listening for commands.
'''
self._start_listening()

def stop_listening(self):
'''
Tells the speech recognition engine to suspend listening for commands.
'''
self._stop_listening()

def set_commands(self):
'''
'''
self._set_commands()

def display_commands_title(self):
'''
'''
self._display_commands_title()

def display_commnds(self):
'''
'''
self._display_commnds()

# private

def _start_listening(self, **kwargs):
raise NotImplementedError()

def _stop_listening(self, **kwargs):
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 6e145bb

Please sign in to comment.