我试图通过PyObjC在python中使用osx内置的语音识别引擎。在
class Recognizer(NSSpeechRecognizer):
def __init__(self):
cmds = ['computer', 'keyboard']
self.setCommands_(cmds)
self.setDelegate_(self)
self.blocksOtherRecognizers = True
self.listensInForegroundOnly = False
return self
recognizer = Recognizer.alloc().init()
问题1:我是否需要将委托分配给另一个类?在
问题2:我是否需要在类init方法中初始化实例识别器?在
^{pr2}$问题3:我是否应该在类识别器中定义它?在
recognizer.startListening()
问题4:当我运行脚本时,没有迹象表明识别器正在监听,脚本立即完成。在
speechRecognizer_didRecognizeCommand_(sender, command)
**问题5:*我不知道在第二个参数命令中放入什么,因为我觉得这是它从识别器接收的消息,而不是我应该放入的内容。在
就这样。如你所见,我现在真的很困惑。非常感谢您的回答,谢谢。在
另外,如果你有任何其他的解决方案,除了这个可可课程,请告诉我。在
链接:
你的例子有很多问题:
不要使用
__init__
作为初始化器,而是使用init
。这是必要的,因为PyObjC遵循Cocoa的约定,而不是普通的Python约定。我不会子类
NSSpeechRecognizer
,但会使用一个单独的委托类,这更符合普通的Cocoa样式。不能像您尝试的那样使用赋值来设置属性,请改用对setter的显式调用。即}。在
self.setBlocksOtherRecognizers(True)
,而不是{原因是在Objective-C中,方法和属性存在于两个不同的名称空间中,而在Python中它们位于同一个名称空间中,并且不能让一个方法具有相同名称的属性(
self.blocksOtherRecognizers
是属性的getter方法)。最后,您需要启动一个runloop来实际使用识别器:
loop = NSRunLoop.currentRunLoop() loop.run()
一个完整的例子:
请注意,这个例子不会停止,您将不得不强制终止它。在
相关问题 更多 >
编程相关推荐