如何使用Siri语音命令验证选择题中的用户答案

时间:2019-01-25 06:50:59

标签: ios swift siri sirikit sirishortcuts

我需要使用Siri构建测验类型的应用程序。 在这里,让我们考虑一下,我的应用程序只有一个问题以及多项选择作为答案。 现在,使用Siri语音命令,我需要将该问题以及选项加载到Label / textview中。 一旦将该问题加载到标签/文本视图中,Siri就应该说出该问题。 现在,用户可以使用语音命令选择答案a或b或c或d。 然后,Siri应该使用正确答案验证用户的输入。 如果正确,Siri应该说“正确答案”。否则应该说“答案错误。正确的答案是,依此类推。”

我已经实现了一半的要求,使用Siri快捷方式,我可以将问题加载到Label上,而Siri可以说出该问题。

供参考,请在下面找到我的代码。

ViewController.swift文件中,我已经实现了以下代码,

Public fund createShortcutForloadingQuestion(){

  let userAct = NSUserActivity(activityType: "com.organization.QuizSpeakingApp.loadQuestion")
        userAct.title = "get the text from document"
        userAct.userInfo =  ["question" : "what is the capital of India?  \n a. Kolkata \n b. Mumbai, \n c. Bengaluru,\n d.  New Delhi"]
        userAct.isEligibleForSearch = true
        userAct.isEligibleForPrediction =  true
        userAct.persistentIdentifier = NSUserActivityPersistentIdentifier("com.organization.QuizSpeakingApp.loadQuestion")
         textLbl.userActivity = userAct
        userAct.becomeCurrent()
         displayTextOnLabel()
}



public func displayTextOnLabel() {
     textLbl.text = “what is the capital of India?  \n a. Kolkata \n b. Mumbai, \n c. Bengaluru,\n d.  New Delhi.”
    }

要说出已加载的问题,我已经实现了如下代码,

 public func speakTheQuestion(){
    let speechUtterance = AVSpeechUtterance(string: textLbl.text ?? "Label Doesnt have any text")
    speechUtterance.rate = 0.5
    speechUtterance.pitchMultiplier = 1.0
    speechUtterance.volume = 1.0
    speechUtterance.postUtteranceDelay = 0.005
    speechSynthesizer.speak(speechUtterance)
    }

现在创建用于加载问题并说出已加载问题的快捷方式, 我在AppDelegate.swift中实现了以下方法。

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
 let viewController = window?.rootViewController as! ViewController
        viewController.displayTextOnLabel()
        viewController.speakTheQuestion()
        return true
    }

通过上述实现,我可以加载问题并由Siri发言。

现在,任何人都可以帮助我如何通过语音命令获取用户答案,如何以正确答案验证他们的答案以及如何使用Siri更新有关他的答案的信息?

感谢andvance。

1 个答案:

答案 0 :(得分:-1)

到目前为止,Sirikit仅处理特定的域和意图。

More about SiriKit

对于您的用例,建议您使用 SpeechKit 。 Speechkit将语音作为输入并将其转换为文本。它具有准确性,并且效果惊人。您可以向用户提问,然后使用SpeechKit进行语音识别并读取用户的答复。

recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in

        var isFinal = false

        if result != nil {
            let string = result?.bestTranscription.formattedString
            self.textView.text = string
            if((string?.elementsEqual("A"))! || (string?.elementsEqual("Option A"))!)
            {
                //user said option A is correct, perform your action
            }
            else if((string?.elementsEqual("B"))! || (string?.elementsEqual("Option B"))!)
            {
                 //user said option B is correct, perform your action
            }
            //......
            isFinal = (result?.isFinal)!

        }

        if error != nil || isFinal {
            self.audioEngine.stop()
            inputNode.removeTap(onBus: 0)

            self.recognitionRequest = nil
            self.recognitionTask = nil

            self.microPhoneButton.isEnabled = true
        }
    })

more about SpeechKit in iOS