WatchKit 选项仅听写?
WatchKit Option to ONLY Dictate?
我使用:
NSArray* initialPhrases = @[@"Let's do lunch.", @"Can we meet tomorrow?", @"When are you free?"];
[self presentTextInputControllerWithSuggestions:initialPhrases
allowedInputMode:WKTextInputModePlain
completion:^(NSArray *results) {
if (results && results.count > 0) {
id aResult = [results objectAtIndex:0];
// Use the string or image.
}
else {
// Nothing was selected.
}
}];
这是Apple给出的文本输入示例。但是,在我的应用程序中,我希望用户只能选择听写文本。如果我将数组设置为 nil,则指令按钮不存在,但如果我不理会数组,则指令按钮会重新出现。有什么办法只能通过听写进行文本输入吗?
更新:
Apple 确实有文档说明如果您要让用户直接听写,不要提供任何回复并直接将他们发送到那里。当 initialPhrases 为 nil 时我没有看到任何东西的原因只是由于模拟器限制,我收集的信息是否正确?
你是对的。论坛中的开发布道者指出,由于缺乏支持,模拟器不会显示任何听写内容。
确保您使用的是 WKTextInputModePlain
并且 suggestions
数组是 nil
,这样就没问题了。
从 WatchOS 2.1 和 iOS 9 开始,我已经能够以两种不同的方式实现您的建议,如果有效,请给我打个绿勾并投票!!:
选项 1 - 录制 WAV 文件并上传到 ASR 服务器
我录制并保存了一个 WAV 文件到 Apple Watch。之后,我将文件上传到付费语音识别提供商,一切正常!这是要记录的代码,将 UI 更新代码行(和调试代码行)替换为您自己的代码:
//RECORD AUDIO SAMPLE
var saveUrl: NSURL? //this var is initialized in the awakeWithContext method//
func recordAudio(){
let duration = NSTimeInterval(5)
let recordOptions =
[WKAudioRecorderControllerOptionsMaximumDurationKey : duration]
// print("Recording to: "+(saveUrl?.description)!)
//CONSTRUCT AUDIO FILE URL
let fileManager = NSFileManager.defaultManager()
let container = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.artivoice.applewatch");
let fileName = "audio.wav"
saveUrl = container?.URLByAppendingPathComponent(fileName)
presentAudioRecorderControllerWithOutputURL(saveUrl!,
preset: .WideBandSpeech,
options: recordOptions,
completion: { saved, error in
if let err = error {
print(err.description)
self.sendMessageToPhone("Recording error: "+err.description)
}
if saved {
self.btnPlay.setEnabled(true)
self.sendMessageToPhone("Audio was saved successfully.")
print("Audio Saved")
self.uploadAudioSample()
}
})
}
选项 2 - 使用 iWATCH 的母语语音识别
在这种方法中,我采用了原始的本地语音菜单,但是......!我没有添加任何按钮选项,只是纯 ASR。我启动了空的语音菜单,然后恢复了 ASR 返回的字符串。这是代码,享受:
func launchIWatchVoiceRecognition(){
//you can see the empty array [], add options if it suits you well
self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{(results) -> Void in
let aResult = results?[0] as? String
if(!(aResult == nil)){
print(aResult) //print result
self.sendMessageToPhone("Native ASR says: "+aResult!)
dispatch_async(dispatch_get_main_queue()) {
self.txtWatch.setText(aResult) //show result on UI
}
}//end if
})//end show voice menu
}
选项 2 快如闪电,但如果您想执行一些高级语音侦察功能(自定义词汇、语法...),选项 1 会更方便。我会向大多数用户推荐选项 1。
瞧!如果您需要额外的提示,请告诉我!
我使用:
NSArray* initialPhrases = @[@"Let's do lunch.", @"Can we meet tomorrow?", @"When are you free?"];
[self presentTextInputControllerWithSuggestions:initialPhrases
allowedInputMode:WKTextInputModePlain
completion:^(NSArray *results) {
if (results && results.count > 0) {
id aResult = [results objectAtIndex:0];
// Use the string or image.
}
else {
// Nothing was selected.
}
}];
这是Apple给出的文本输入示例。但是,在我的应用程序中,我希望用户只能选择听写文本。如果我将数组设置为 nil,则指令按钮不存在,但如果我不理会数组,则指令按钮会重新出现。有什么办法只能通过听写进行文本输入吗?
更新: Apple 确实有文档说明如果您要让用户直接听写,不要提供任何回复并直接将他们发送到那里。当 initialPhrases 为 nil 时我没有看到任何东西的原因只是由于模拟器限制,我收集的信息是否正确?
你是对的。论坛中的开发布道者指出,由于缺乏支持,模拟器不会显示任何听写内容。
确保您使用的是 WKTextInputModePlain
并且 suggestions
数组是 nil
,这样就没问题了。
从 WatchOS 2.1 和 iOS 9 开始,我已经能够以两种不同的方式实现您的建议,如果有效,请给我打个绿勾并投票!!:
选项 1 - 录制 WAV 文件并上传到 ASR 服务器 我录制并保存了一个 WAV 文件到 Apple Watch。之后,我将文件上传到付费语音识别提供商,一切正常!这是要记录的代码,将 UI 更新代码行(和调试代码行)替换为您自己的代码:
//RECORD AUDIO SAMPLE
var saveUrl: NSURL? //this var is initialized in the awakeWithContext method//
func recordAudio(){
let duration = NSTimeInterval(5)
let recordOptions =
[WKAudioRecorderControllerOptionsMaximumDurationKey : duration]
// print("Recording to: "+(saveUrl?.description)!)
//CONSTRUCT AUDIO FILE URL
let fileManager = NSFileManager.defaultManager()
let container = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.artivoice.applewatch");
let fileName = "audio.wav"
saveUrl = container?.URLByAppendingPathComponent(fileName)
presentAudioRecorderControllerWithOutputURL(saveUrl!,
preset: .WideBandSpeech,
options: recordOptions,
completion: { saved, error in
if let err = error {
print(err.description)
self.sendMessageToPhone("Recording error: "+err.description)
}
if saved {
self.btnPlay.setEnabled(true)
self.sendMessageToPhone("Audio was saved successfully.")
print("Audio Saved")
self.uploadAudioSample()
}
})
}
选项 2 - 使用 iWATCH 的母语语音识别 在这种方法中,我采用了原始的本地语音菜单,但是......!我没有添加任何按钮选项,只是纯 ASR。我启动了空的语音菜单,然后恢复了 ASR 返回的字符串。这是代码,享受:
func launchIWatchVoiceRecognition(){
//you can see the empty array [], add options if it suits you well
self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{(results) -> Void in
let aResult = results?[0] as? String
if(!(aResult == nil)){
print(aResult) //print result
self.sendMessageToPhone("Native ASR says: "+aResult!)
dispatch_async(dispatch_get_main_queue()) {
self.txtWatch.setText(aResult) //show result on UI
}
}//end if
})//end show voice menu
}
选项 2 快如闪电,但如果您想执行一些高级语音侦察功能(自定义词汇、语法...),选项 1 会更方便。我会向大多数用户推荐选项 1。 瞧!如果您需要额外的提示,请告诉我!