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 时我什么都看不到的原因仅仅是由于模拟器限制?

4

2 回答 2

4

你是对的。论坛中的开发布道者指出,由于缺乏支持,模拟器不会显示任何听写内容。

确保你正在使用WKTextInputModePlain并且suggestions阵列是nil,你会没事的。

于 2015-03-20T04:50:38.087 回答
0

从 WatchOS 2.1 和 iOS 9 开始,我已经能够以 2 种不同的方式满足您的建议,如果可行,请给我一个绿色勾号并点赞!!:

选项 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。瞧!!如果您需要额外的提示,请告诉我!

于 2016-02-08T11:40:50.037 回答