300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Unity接入语音SDk 语音识别

Unity接入语音SDk 语音识别

时间:2018-10-25 14:29:13

相关推荐

Unity接入语音SDk 语音识别

关于语音识别的来说,我个人觉得云娃语音对Unity开发者更加有好一点,因为在支持上云娃语音的SDK有直接的Unity包

PS:习惯性按Ctrl+S 好难受

首先大家先去云娃语音的官网去下载Unity的支持包-----------云娃语音SDK

然后打开Demo场景,我们进行后面的操作和深度开发也是修改Demo.cs文件

下面我就来剖析一下这个Demo.cs脚本文件

下面就是Demo.cs脚本的所有代码----------》》》

using UnityEngine;using System.Collections;using System;using YunvaIM;public class Demo : MonoBehaviour{private string sUserId = "123";private string labelText = "ssss";string filePath = "";private string recordPath = string.Empty;//返回录音地址private string recordUrlPath = string.Empty;//返回录音url地址public GUISkin guiSkin;void Start(){EventListenerManager.AddListener(ProtocolEnum.IM_RECORD_VOLUME_NOTIFY, ImRecordVolume);//录音音量大小回调监听int init = YunVaImSDK.instance.YunVa_Init(0, 100041, Application.persistentDataPath, false, false);if (init == 0){Debug.Log("初始化成功...");labelText = "初始化成功...";}else{Debug.Log("初始化失败...");labelText = "初始化失败...";}}void OnGUI(){if (guiSkin != null){GUI.skin = guiSkin;}GUI.Box(new Rect(10f, 10f, 340, 900f), "菜单");sUserId = GUI.TextField(new Rect(20f, 50f, 150f, 100f), sUserId);if (GUI.Button(new Rect(20f, 150f, 150f, 100f), "登录")){string ttFormat = "{{\"nickname\":\"{0}\",\"uid\":\"{1}\"}}";string tt = string.Format(ttFormat, sUserId, sUserId);string[] wildcard = new string[2];wildcard[0] = "0x001";wildcard[1] = "0x002";YunVaImSDK.instance.YunVaOnLogin(tt, "100", wildcard, 0, (data) =>{if (data.result == 0){labelText = string.Format("登录成功,昵称:{0},用户ID:{1}", data.nickName, data.userId);//YunVaImSDK.instance.RecordSetInfoReq(true);//开启录音的音量大小回调}else{labelText = string.Format("登录失败,错误消息:{0}", data.msg);}});}if (GUI.Button(new Rect(20f, 250f, 150f, 100f), "开始录音")){labelText = "正在录音中。。。。。。";filePath = string.Format("{0}/{1}.amr", Application.persistentDataPath, DateTime.Now.ToFileTime());Debug.Log("FilePath:" + filePath);YunVaImSDK.instance.RecordStartRequest(filePath, 1);}if (GUI.Button(new Rect(20f, 350f, 150f, 100f), "停止录音")){labelText = "停止录音.........";YunVaImSDK.instance.RecordStopRequest((data1) =>{recordPath = data1.strfilepath;labelText = "停止录音返回:" + recordPath;Debug.Log("停止录音返回:" + recordPath);},(data2) =>{recordUrlPath = data2.fileurl;labelText = "上传返回:" + data2.fileurl;Debug.Log("上传返回:" + data2.fileurl);},(data3) =>{labelText = "识别返回:" + data3.text;Debug.Log("识别返回:" + data3.text);});}if (GUI.Button(new Rect(20f, 450f, 150f, 100f), "播放语音")){labelText = "播放语音.........";string ext = DateTime.Now.ToFileTime().ToString();YunVaImSDK.instance.RecordStartPlayRequest(recordPath, "", ext, (data2) =>{if (data2.result == 0){Debug.Log("播放成功");labelText = "播放成功";}else{Debug.Log("播放失败");labelText = "播放失败";}});}if (GUI.Button(new Rect(190f, 50f, 150f, 100f), "停止播放")){labelText = "停止播放.........";Debug.Log("停止播放");YunVaImSDK.instance.RecordStopPlayRequest();}if (GUI.Button(new Rect(190f, 150f, 150f, 100f), "语音识别")){labelText = "语音识别.........";Debug.Log("语音识别");string ext = DateTime.Now.ToFileTime().ToString();YunVaImSDK.instance.SpeechStartRequest(recordPath, ext, (data3) =>{if (data3.result == 0){labelText = "识别成功,识别内容:" + data3.text;//recordUrlPath = data3.url;}else{labelText = "识别失败,原因:" + data3.msg;}});}if (GUI.Button(new Rect(190f, 250f, 150f, 100f), "上传语音")){Debug.Log("准备上传:" + recordPath);labelText = "准备上传:" + recordPath;string fileId = DateTime.Now.ToFileTime().ToString();YunVaImSDK.instance.UploadFileRequest(recordPath, fileId, (data1) =>{if (data1.result == 0){recordUrlPath = data1.fileurl;Debug.Log("上传成功:" + recordUrlPath);labelText = "上传成功:" + recordUrlPath;}else{labelText = "上传失败:" + data1.msg;Debug.Log("上传失败:" + data1.msg);}});}if (GUI.Button(new Rect(190f, 350f, 150f, 100f), "下载语音")){labelText = "下载语音......";string DownLoadfilePath = string.Format("{0}/{1}.amr", Application.persistentDataPath, DateTime.Now.ToFileTime());Debug.Log("下载语音:" + DownLoadfilePath);string fileid = DateTime.Now.ToFileTime().ToString();YunVaImSDK.instance.DownLoadFileRequest(recordUrlPath, DownLoadfilePath, fileid, (data4) =>{if (data4.result == 0){Debug.Log("下载成功:" + data4.filename);labelText = "下载成功:" + data4.filename;}else{Debug.Log("下载失败:" + data4.msg);labelText = "下载失败:" + data4.msg;}});}if (GUI.Button(new Rect(190f, 450f, 150f, 100f), "登出")){YunVaImSDK.instance.YunVaLogOut();}GUI.Label(new Rect(400f, 10f, 500f, 30f), "返回提示");GUI.Label(new Rect(400f, 30f, 500f, 50f), labelText);}public void ImRecordVolume(object data){ImRecordVolumeNotify RecordVolumeNotify = data as ImRecordVolumeNotify;Debug.Log("ImRecordVolumeNotify:v_volume=" + RecordVolumeNotify.v_volume);}}

看到上面的都很混乱,那么我们就提取一下

大家呢就在Start方法里面 处理初始化 和 登入 操作

void Start(){EventListenerManager.AddListener(ProtocolEnum.IM_RECORD_VOLUME_NOTIFY, ImRecordVolume);//录音音量大小回调监听int init = YunVaImSDK.instance.YunVa_Init(0, 100041, Application.persistentDataPath, false, false);if (init == 0){Debug.Log("初始化成功...");//labelText = "初始化成功...";}else{Debug.Log("初始化失败...");//slabelText = "初始化失败...";}string ttFormat = "{{\"nickname\":\"{0}\",\"uid\":\"{1}\"}}";string tt = string.Format(ttFormat, sUserId, sUserId);string[] wildcard = new string[2];wildcard[0] = "0x001";wildcard[1] = "0x002";YunVaImSDK.instance.YunVaOnLogin(tt, "100", wildcard, 0, (data) =>{if (data.result == 0){Debug.Log("登录成功!");}else{Debug.Log("登录失败!");}});}

然后下面大家就可以把语音的录入和录音的返回放到按钮内部

比如--一个麦克风按钮 当按下并持续的时候开始录音 抬起的时候就上传录音 并处理返回的文字

PS:在上传的时候会有延迟 这个延迟嘛 那就加个动画啊 什么的 让用户感到高科技的

下面就是按钮的操作

public void Down(){//开始录音filePath = string.Format("{0}/{1}.amr", Application.persistentDataPath, DateTime.Now.ToFileTime());Debug.Log("FilePath:" + filePath);YunVaImSDK.instance.RecordStartRequest(filePath, 1);}public void Up(){//语音返回//labelText = "停止录音.........";YunVaImSDK.instance.RecordStopRequest((data1) =>{recordPath = data1.strfilepath;Debug.Log("停止录音返回:" + recordPath);},(data2) =>{recordUrlPath = data2.fileurl;Debug.Log("上传返回:" + data2.fileurl);},(data3) =>{text.text += data3.text + "\n\t";Debug.Log("识别返回:" + data3.text);});}

PS:Ctrl+S好难受

大家对照这个就可以把里面提供的所有功能全部拿出来了

只有“《识别返回:》”后面的才是识别你说的话的文字 记得显示出来

欢迎大家在下面留言。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。