Unity接入百度语音识别与语音合成,实现语音交互
来源:互联网 发布:龙岗网络推广 编辑:程序博客网 时间:2024/05/16 09:21
BaiduVoiceTest
Unity3d使用百度的Rest Api实现语音交互,可以将语音转化为文本,也可以将文本转化为语音。
这个项目原本是为一个HoloLens眼镜的虚拟角色语音交互做准备。该平台上由于编译环境的问题接入SDK会出现种种问题,所以只能使用百度语音的RestApi来实现。 使用RestApi就可以不受平台的限制了。
语音解析
百度语音的RestApi接口实现语音转化为文本,只需要通过http请求发送本地录音所生成的音频文件,只不过请求需要的是pcm格式,采样率为1600的文件,录音完毕以后需要进行相应转码。
语音合成
在使用语音合成接口实现将文本转化为合成语音时,由于百度语音合成接口返回的音频文件是mp3格式的,出现了比较棘手的问题就是Unity3D不支持网络获取到的mp3格式的音频文件,这里还需要使用到一个NAudio插件,来实现将mp3音频转换成为unity3d可以直接播放的AudioClip。
整个项目文件结构如下:
把代码重构了一下,将整个工具类做成了单例,==在使用时需要将需要将BaiduApiToolkit脚本绑定到有AudioSource组件的物体上才能播放语音==。然后Wav脚本与Plugins中的NAudio都是音频转换过程中需要的。
下面是调用UIManger中调用Baidu接口的代码:
private void Update() { if (Input.GetKeyDown(KeyCode.S)) { BaiduApiToolkit.Instance.StartRecord(); titleText.text = "正在聆听……"; } if (Input.GetKeyUp(KeyCode.S)) { titleText.text = "请摁住”S“键开始说话"; resultText.text = "正在识别……"; BaiduApiToolkit.Instance.StopRecord(delegate(string result)//通过回调获取协程中通过网络传回的语音文本 { if (result==null)//如果返回null代表解析失败 { this.resultText.text = "抱歉,不能识别语音,请重复一遍!"; } else { this.resultText.text = result; } string answer = BaiduApiToolkit.Instance.AnswerQuestion(result); answerText.text = "回答:" + answer; BaiduApiToolkit.Instance.ReadText(answer); }); } if (Input.GetKeyDown(KeyCode.A)) { BaiduApiToolkit.Instance.ReadText("你好呀"); } }
之前本想在嵌入一个只能回复的接口,不过目前还没有实现,只是在BaiduApiToolkit脚本中写死了一个简单的回答。
关于接口的调用
在使用时只需要通过StratRecord()开始录音,然后再通过StopRecord()结束录音,不过StopRecord()方法会有一个异步回调函数,用于将解析完成后的文本返回到回调函数中。
此外就是ReadText(string text)方法,这里的text参数就是要合成语音文本,传入文本之后,接口会自动播放语音。
还有点小问题
在语音解析过程中,由于录音最大时长是写死的,并且无论说了多长时间,哪怕说了一秒钟,最后也按照最大时长生成音频并传输,所以解析效率有点低,原本想把音频文件压缩一下再发送,不过有点犯懒就不想写了 = =。不过百度语音的语音合成速度还是相当迅速的!还是相当令人满意的。
- Unity接入百度语音识别与语音合成,实现语音交互
- Unity语音识别和语音合成 Android
- Unity语音识别和语音合成 IOS
- Unity接入语音SDk 语音识别
- 百度语音识别和合成
- BaiduSpeed百度语音唤醒语音识别语音合成
- android应用百度语音识别、语音合成和语音唤醒
- Android语音合成与语音识别
- cmu语音识别与语音合成
- 语音合成与语音识别小例子
- unity 使用百度语音进行语音识别
- 语音听写与合成--(讯飞语音识别与合成&&百度语音识别)
- c#语音识别与合成
- 语音识别和语音合成
- python实现百度语音之语音识别
- html5录音+百度语音实现语音识别
- 百度语音识别、语音合成,NAudio录音(C#)
- 百度 语音合成 语音识别 获取 Access Token
- Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)
- 我是如何学习安卓开发的
- comparator接口与Comparable接口的区别
- 改善C++程序的150个建议
- DOM文档对象模型利用节点访问HTML元素
- Unity接入百度语音识别与语音合成,实现语音交互
- 短信验证码获取JS
- 正则表达式
- 171207之UUID用法
- Jmeter提供的分布式功能来启动多台电脑来分压测试
- node 监听md文件变化并转换成html
- consul的shi yon
- Java汉字转拼音工具类
- 排序算法整理(第十五周实践项目)