使用百度的SDK来进行语音识别,链接:
(非利益相关)
导入进Unity3d中,下面我们分析如何通过结果分支控制交互反馈。
这个包封装了百度的语音识别和语音合成,在此不作结构分析,打开AsrDemo.cs脚本,找到OnClickStopButton()并修改成如下所示:
public void OnClickStopButton()
{
StartButton.gameObject.SetActive(false);
StopButton.gameObject.SetActive(false);
DescriptionText.text = "处理中";
Microphone.End(null);
Debug.Log(Message);
var data = Asr.ConvertAudioClipToPCM16(_clipRecord);
StartCoroutine(_asr.Recognize(data, s =>
{
logic(s);
StartButton.gameObject.SetActive(true);
}));
}
我们在协程中添加一个方法logic(s);这个方法如下图:
名称随意实际上,s.result[0]在协程中记录了从云端拿到的识别结果,我们只要对这个结果做逻辑判断即可分情况调用不同方法。
提示:这里的判断条件可以引入ExcelReader,用一个Similarity变量记录字符串比对方法的相似度,当识别到的结果与预设结果相似程度超过阈值,就判定为该指令,做出对应反馈,这种方式能够应对使用者不受控制的语音指令,比如预设是“你好。”,而使用者说的是“你好啊。”的情况,这个思路和方法引用自CSDN。
下图是Start部分:
在此,考虑到脚本中的交互触发都是以Button为基础的,因此为了减少修改量,我们应该在场景中使用UGUI来交互,这里是另一个大坑,主要在下一篇文章中阐述。
网友评论