unity+语音识别+uwp/pc
原创
NewSpeechRecognization.cs添加关键词脚本(加载场景后改脚本不需要再一次使用,整个程序中只运行一次就可以)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Windows.Speech;
using System.Linq;
public class NewSpeechRecognization : MonoBehaviour
{
public static NewSpeechRecognization SpeechRecoTestInstance;
//public Material yellow;
//public Material red;
//public Material blue;
//public Material green;
public string RecognizationWord;
/// <summary>
/// 关键词识别对象
/// </summary>
private KeywordRecognizer keywordRecognizer;
/// <summary>
/// 存放关键词的字典
/// </summary>
private Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
private void Awake()
{
SpeechRecoTestInstance = this;
}
public void StartSpeech(string RecognizationWord)
{
keywords.Add(RecognizationWord, () =>
{
//Debug.Log("RecognizationWord"+ RecognizationWord);
//transform.GetComponent<MeshRenderer>().material = yellow;
});
}
public void OnSpeechRecognizationClear()
{
RecognizationWord = "";
}
public void StartRecognazation()
{
StartSpeech("识别工牌");
StartSpeech("拍照");
StartSpeech("开始");
StartSpeech("正常");
StartSpeech("异常");
StartSpeech("确认");
StartSpeech("退出");
StartSpeech("结束");
StartSpeech("关好");
StartSpeech("是");
StartSpeech("否");
StartSpeech("运行");
StartSpeech("停运");
//StartSpeech("暂停");
StartSpeech("回退");
//StartSpeech("跳过设备");
StartSpeech("跳过扫描");
//StartSpeech("保存进度");
//StartSpeech("跳转");
StartSpeech("取消");
}
// Use this for initialization
void Start()
{
StartRecognazation();
//// 向字典中添加关键词,key为关键词, vallue为一个匿名action
//keywords.Add("yellow", () =>
//{
// Debug.Log("听到了 yellow");
// transform.GetComponent<MeshRenderer>().material = yellow;
//});
//keywords.Add("red", () =>
//{
// Debug.Log("听到了 red");
// transform.GetComponent<MeshRenderer>().material = red;
//});
//keywords.Add("green", () =>
//{
// Debug.Log("听到了 green");
// transform.GetComponent<MeshRenderer>().material = green;
//});
//keywords.Add("蓝色", () =>
//{
// Debug.LogError("听到了 blue");
// transform.GetComponent<MeshRenderer>().material = blue;
//});
// 初始化关键词识别对象
keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
// 添加关键词代理事件
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
// 注意: 这方法一定要写,开始执行监听
keywordRecognizer.Start();
}
private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
System.Action keywordAction;
// if the keyword recognized is in our dictionary, call that Action.
// 如果关键字在我们的字典中被识别,调用该action。
if (keywords.TryGetValue(args.text, out keywordAction))
{
//Debug.Log("听到了,进入了事件方法 关键词语 : " + args.text.ToString());
RecognizationWord = args.text.ToString();
Debug.Log("RecognizationWord@@" + RecognizationWord);
// 执行该action
keywordAction.Invoke();
}
}
// Update is called once per frame
void Update()
{
}
}
语音识别关键词的使用WelcomPanelUI.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UIlogic;
using UnityEngine.UI;
public class WelcomPanelUI : MainUI
{
public Button StartButton;
public Button QuiteButton;
public Image Mic_EN;
public Image Mic_DI;
// Use this for initialization
void Start ()
{
OnBindEvent();
OnInit();
TaskAudioManager.TaskAudioManagerInstance.PlayTaskAudioByID((int)TaskType.WelcomID);
StartButton.interactable = false;
}
//void OnSetMicState(bool isPlayMicAni)
//{
// if (isPlayMicAni)
// {
// Mic_DI.gameObject.SetActive(false);
// Mic_EN.gameObject.SetActive(true);
// }
// else
// {
// Mic_DI.gameObject.SetActive(true);
// Mic_EN.gameObject.SetActive(false);
// }
//}
public override void OnBindEvent()
{
EventTriggerListener.Get(StartButton.gameObject).onClick = OnStartGameButtonClick;
EventTriggerListener.Get(QuiteButton.gameObject).onClick = OnQuiteGameButtonClick;
}
public void OnStartGameButtonClick(GameObject go)
{
if (go == StartButton.gameObject)
{
if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == false)
{
StartGame();
}
}
}
void StartGame()
{
OnCreateNextWindow("ScannerWorkCardPanel", GlobalVariable.GlobalVariableInstance.InitePanelParentTransformRef);
OnDeleteGameobject(gameObject);
//OnSetNextWindowActive(UIDesignForScanerStaff.UIDesignForScanerStaffSingle.ScannerWorkCardPanelRef, true);
//OnSetNextWindowActive(gameObject, false);
}
//初始化
public override void OnInit()
{
OnSetMicState(false,Mic_DI,Mic_EN);
// GameTemplateMethodSingleton.singleton.Init();
}
public void OnQuiteGameButtonClick(GameObject go)
{
if (go == QuiteButton.gameObject)
{
QuiteGame();
}
}
public override void OnSpeecherRecognition()
{
if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == false)
{
if (NewSpeechRecognization.SpeechRecoTestInstance.RecognizationWord == "开始")
{
NewSpeechRecognization.SpeechRecoTestInstance.OnSpeechRecognizationClear();
StartGame();
}
if (NewSpeechRecognization.SpeechRecoTestInstance.RecognizationWord == "退出")
{
NewSpeechRecognization.SpeechRecoTestInstance.OnSpeechRecognizationClear();
QuiteGame();
}
//if (SpeecherRecognitionSingle.singleton.OnSpeechText("开始"))
//{
// SpeecherRecognitionSingle.singleton.OnClearSpeechText();
// StartGame();
//}
//if (SpeecherRecognitionSingle.singleton.OnSpeechText("退出"))
//{
// SpeecherRecognitionSingle.singleton.OnClearSpeechText();
// QuiteGame();
//}
}
}
// Update is called once per frame
void Update ()
{
if (TaskAudioManager.TaskAudioManagerInstance.playTaskAudio.isPlaying == true)
{
OnSetMicState(false, Mic_DI, Mic_EN);
}
else
{
StartButton.interactable = true;
OnSetMicState(true, Mic_DI, Mic_EN);
OnSpeecherRecognition();
}
}
}
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Windows.Speech;using System.Linq;
public class NewSpeechRecognization : MonoBehaviour{ public static NewSpeechRecognization SpeechRecoTestInstance; //public Material yellow; //public Material red; //public Material blue; //public Material green; public string RecognizationWord; /// <summary> /// 关键词识别对象 /// </summary> private KeywordRecognizer keywordRecognizer;
/// <summary> /// 存放关键词的字典 /// </summary> private Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>(); private void Awake() { SpeechRecoTestInstance = this; } public void StartSpeech(string RecognizationWord) {
keywords.Add(RecognizationWord, () => { //Debug.Log("RecognizationWord"+ RecognizationWord); //transform.GetComponent<MeshRenderer>().material = yellow;
}); } public void OnSpeechRecognizationClear() { RecognizationWord = ""; } public void StartRecognazation() { StartSpeech("识别工牌");
StartSpeech("拍照"); StartSpeech("开始"); StartSpeech("正常"); StartSpeech("异常"); StartSpeech("确认"); StartSpeech("退出"); StartSpeech("结束"); StartSpeech("关好"); StartSpeech("是"); StartSpeech("否"); StartSpeech("运行"); StartSpeech("停运"); //StartSpeech("暂停"); StartSpeech("回退"); //StartSpeech("跳过设备"); StartSpeech("跳过扫描"); //StartSpeech("保存进度"); //StartSpeech("跳转");
StartSpeech("取消"); } // Use this for initialization void Start() { StartRecognazation(); //// 向字典中添加关键词,key为关键词, vallue为一个匿名action //keywords.Add("yellow", () => //{ // Debug.Log("听到了 yellow"); // transform.GetComponent<MeshRenderer>().material = yellow; //});
//keywords.Add("red", () => //{ // Debug.Log("听到了 red"); // transform.GetComponent<MeshRenderer>().material = red; //});
//keywords.Add("green", () => //{ // Debug.Log("听到了 green"); // transform.GetComponent<MeshRenderer>().material = green; //});
//keywords.Add("蓝色", () => //{ // Debug.LogError("听到了 blue"); // transform.GetComponent<MeshRenderer>().material = blue; //}); // 初始化关键词识别对象 keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
// 添加关键词代理事件 keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
// 注意: 这方法一定要写,开始执行监听 keywordRecognizer.Start(); }
private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args) {
System.Action keywordAction; // if the keyword recognized is in our dictionary, call that Action. // 如果关键字在我们的字典中被识别,调用该action。 if (keywords.TryGetValue(args.text, out keywordAction)) { //Debug.Log("听到了,进入了事件方法 关键词语 : " + args.text.ToString()); RecognizationWord = args.text.ToString(); Debug.Log("RecognizationWord@@" + RecognizationWord); // 执行该action keywordAction.Invoke(); } }
// Update is called once per frame void Update() {
}}

浙公网安备 33010602011771号