我想以编程方式将我的UITextField输入置于听写模式,而无需用户调出并从键盘中选择听写.搜索了API文档但没有找到解决方案.有任何想法吗?
我用来(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)
对每个输入的字符进行实时正则表达式验证UITextView
.
这很好用,甚至可以处理可能包含无效字符的粘贴文本.
但是,Siri似乎并不关心这些事情并将其直接转发(void)textViewDidChange:(UITextView *)theTextView
,绕过shouldChangeTextInRange
代表并避免验证检查.
这对我来说似乎是一个安全漏洞,并打破了每个其他输入通道所遵循的API流程.
有关如何让Siri Dictation遵守呼叫的任何想法shouldChangeTextInRange
?
在OSX Mavericks中,现在包含语音听写,并且非常有用.我正在尝试使用听写功能来创建我自己的数字生活助手,但我找不到如何使用识别功能来在应用程序而不是文本框中获取语音.
我已经研究过NSSpeechRecognizer,但这似乎是为了使用预定义的语法而不是听写来编写可说出的命令.我使用的编程语言并不重要,但Python或Java会很好......
谢谢你的帮助!
回应听写的已知方法:
dictationRecordingDidEnd - 响应完成对口述短语的识别.
dictationRecognitionFailed - 响应失败的听写识别.
参考: UITextInput协议参考
从iOS 5.1开始,当用户在支持的设备上选择听写输入时,系统会自动将识别的短语插入当前文本视图中.UITextInput协议中的方法允许您的应用程序响应完成听写,如"使用听写"中所述.您可以使用UIDictationPhrase类的对象来获取表示用户已指定的短语的字符串.在不明确的听写结果的情况下,听写短语对象提供包含替代字符串的数组.
由于受伤,我在MacOS上使用命令:
从屏幕截图可以看出,我可以使用键盘快捷键对其进行切换。
我希望从代码中切换它(最好是ObjC)。
我可以手动注入事件:
// Assumes CTRL OPT CMD Space toggles dictation
void toggle_dictation()
{
// NOTE: To return created event in tap-callback:
// cgEvent = [my_nsEvent CGEvent];
// CFRetain(cgEvent);
//unsigned short keyCode_SPACE = 49;
NSEvent* down_event = [NSEvent keyEventWithType: NSEventTypeKeyDown
location: NSZeroPoint
modifierFlags: NSEventModifierFlagControl | NSEventModifierFlagOption | NSEventModifierFlagCommand
timestamp: 0.0
windowNumber: 0
context: nil
characters: @" "
charactersIgnoringModifiers: @" "
isARepeat: false
keyCode: 0 /* keyCode_SPACE */ ];
NSEvent* up_event = [NSEvent keyEventWithType: NSEventTypeKeyUp
location: NSZeroPoint
modifierFlags: 0
timestamp: …
Run Code Online (Sandbox Code Playgroud) 我似乎无法在iOS中找到有关文本输入的语音到文本选项的任何文档.我知道你可以用一些AV手动手动完成它,但是当启用Siri时你得到的开箱即用的听写有一些怪癖.
试试这个.使用搜索栏打开您拥有的任何iOS应用.这将是我们的UITextField实验.更好的是,打开Mail.app.你不能卸载它,所以我知道你拥有它.
说"123榆树圣逗号法戈逗号ND"我得到的:123榆树圣逗号法戈逗号印第安"
非常接近我所说的.没什么大不了的.那是一个文本字段/搜索栏.让我们在UITextView中尝试这个.
打开一封新电子邮件,然后转到电子邮件正文.让我们说同样的话.
说"123 Elm St.逗号Fargo逗号ND"我得到的:123 Elm St.,Fargo,ND"
看起来更好!所以我想知道的是,为什么UITextView能够更好地识别标点符号和其他命令而不是文本字段.这不仅限于逗号,它贯穿整个范围.
有没有办法指定我想要的文字类型?有没有办法改变它,所以我在文本字段中得到这个标点符号?或者有人能指出我的一些文件说这就是为什么他们不同而且我完全搞砸了.无论哪种方式,一些答案都会有所帮助.提前致谢.
更新 我已经将UITextField子类化,并检查了可能随着听写回来的替代短语,但没有.只是原始转换是我得到的.
有没有人对如何使用 Mac 的内置听写工具创建 Python 使用的字符串有任何想法?
要启动听写,您必须在任何文本编辑器中双击 Fn 键。如果是这种情况,有没有办法将击键命令与输入命令结合起来?就像是:
步骤 1:模拟击键双击 Fn 键,启动听写工具,然后步骤 2. 使用语音转文本内容作为输入函数的一部分创建变量,即 text_string = input(“Start听写:“)
在这个线程中(我可以在没有 GUI 的情况下使用 OS X 10.8 的语音识别/听写吗?)一个用户建议他用 CGEventCreateKeyboardEvent(src, 0x3F, true) 来解决这个问题,但是没有代码。
有任何想法吗?代码示例将不胜感激。
更新:感谢以下建议,我已经导入了 AppScript。我正在尝试使代码按照这些方式工作,但没有成功:
from appscript import app, its
se = app('System Events')
proc = app.processes[its.frontmost == True]
mi = proc.menu_bars[1].menu_bar_items['Edit'].menus[1].menu_items['Start Dictation']
user_voice_text = input(mi.click())
print(user_voice_text)
Run Code Online (Sandbox Code Playgroud)
关于如何打开听写工具输入字符串的任何想法?
更新 2:
这是我正在尝试创建的程序的一个简单示例:
Ideally i want to launch the program, and then have it ask me: "what is 1 + 1?"
Then …
Run Code Online (Sandbox Code Playgroud) OSX现在已经为多个版本内置了连续语音识别功能.
现在非常好.
OSX 10.10是否有这种连续语音识别引擎的API?
谷歌搜索告诉我,大约在2009年只有NSSpeechRecogniser(OSX上的MS SAPI sdk等价物)
谁能确认是否仍然如此?
我问的是因为我正在构建自己的集成UI,这将是Leap控制器和语音输入的混合.
如果我只能使用OSX的引擎,那就太棒了.否则我认为我没有任何其他好/可行的选择.
我一直在使用 Python 的谷歌语音识别。这是我的代码:
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
print("Say something!")
audio = r.listen(source)
print(r.recognize_google(audio))
Run Code Online (Sandbox Code Playgroud)
虽然识别非常准确,但大约需要4-5秒才能吐出识别出的文字。由于我正在创建一个语音助手,因此我想修改上面的代码以使语音识别速度更快。
有什么办法可以将这个数字降低到大约 1-2 秒吗?如果可能的话,我会尝试像 Siri 和 Ok Google 等服务一样快速地进行识别。
我对 python 很陌生,所以如果我的问题有一个简单的答案,我很抱歉。
有一个设置OSX Yosemite,你可以改变你的dication语音和速度.有谁知道如何在macs最新macOS Sierra上找到这些设置?
我已经在键盘下面看了有听写设置,但这似乎是你在说你的电脑并输入它.
还查看了辅助功能和语音设置,但不是我想要的.
默认的声音是Alex,你可以改变说话速度.
谢谢你的帮助.
dictation ×10
macos ×4
ios ×3
python ×2
siri ×2
uitextfield ×2
uitextinput ×2
uitextview ×2
ios6 ×1
macos-sierra ×1
objective-c ×1
osx-yosemite ×1
speech ×1
voiceover ×1