Ios 如何使用Siri语音命令验证用户在多项选择题中的答案
我需要使用Siri构建一个测验类型的应用程序。 在这里,让我们考虑一下,我的应用程序只有一个问题以及答案的多重选择。 现在使用Siri语音命令,我需要将该问题和选项加载到Label/textview。 一旦这个问题被加载到Lable/textview上,这个问题应该由Siri来回答。 现在,用户可以使用语音命令选择他/她的答案a或b或c或d。 然后Siri应该用正确的答案验证用户的输入。 如果正确,Siri应该说“正确答案”。否则,它应该说“错误答案。正确答案是等等…” 我已经实现了我一半的需求,使用Siri快捷方式,我可以将问题加载到标签上,Siri可以说出这个问题 请在下面找到我的代码以供参考 在ViewController.swift文件中,我实现了以下代码Ios 如何使用Siri语音命令验证用户在多项选择题中的答案,ios,swift,siri,sirikit,sirishortcuts,Ios,Swift,Siri,Sirikit,Sirishortcuts,我需要使用Siri构建一个测验类型的应用程序。 在这里,让我们考虑一下,我的应用程序只有一个问题以及答案的多重选择。 现在使用Siri语音命令,我需要将该问题和选项加载到Label/textview。 一旦这个问题被加载到Lable/textview上,这个问题应该由Siri来回答。 现在,用户可以使用语音命令选择他/她的答案a或b或c或d。 然后Siri应该用正确的答案验证用户的输入。 如果正确,Siri应该说“正确答案”。否则,它应该说“错误答案。正确答案是等等…” 我已经实现了我一半的需求
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中实现了以下方法
通过上面的实现,我可以加载问题并通过Siri说出它
现在,任何人都可以帮助我如何使用语音命令获取用户答案,如何使用正确答案验证他们的答案,以及如何使用Siri更新他的答案
感谢andvance。现在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
}
})
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
}
})