使用百度的SDK來(lái)進(jìn)行語(yǔ)音識(shí)別,鏈接:
(非利益相關(guān))
導(dǎo)入進(jìn)Unity3d中岖圈,下面我們分析如何通過(guò)結(jié)果分支控制交互反饋食呻。
這個(gè)包封裝了百度的語(yǔ)音識(shí)別和語(yǔ)音合成近范,在此不作結(jié)構(gòu)分析,打開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);
? ? ? ? }));
? ? }
我們?cè)趨f(xié)程中添加一個(gè)方法logic(s);這個(gè)方法如下圖:
實(shí)際上伏社,s.result[0]在協(xié)程中記錄了從云端拿到的識(shí)別結(jié)果,我們只要對(duì)這個(gè)結(jié)果做邏輯判斷即可分情況調(diào)用不同方法塔淤。
提示:這里的判斷條件可以引入ExcelReader摘昌,用一個(gè)Similarity變量記錄字符串比對(duì)方法的相似度,當(dāng)識(shí)別到的結(jié)果與預(yù)設(shè)結(jié)果相似程度超過(guò)閾值高蜂,就判定為該指令第焰,做出對(duì)應(yīng)反饋,這種方式能夠應(yīng)對(duì)使用者不受控制的語(yǔ)音指令妨马,比如預(yù)設(shè)是“你好挺举∩庇”,而使用者說(shuō)的是“你好啊湘纵≈蓿”的情況,這個(gè)思路和方法引用自CSDN梧喷。
下圖是Start部分:
在此砌左,考慮到腳本中的交互觸發(fā)都是以Button為基礎(chǔ)的,因此為了減少修改量铺敌,我們應(yīng)該在場(chǎng)景中使用UGUI來(lái)交互汇歹,這里是另一個(gè)大坑,主要在下一篇文章中闡述偿凭。