【Unity】 HTFramework框架(二十八)Speech语音合成、语音识别
更新日期:2019年12月30日。Github源码:[点我获取源码]索引Speech语音合成、语音识别简介使用Speech语音合成设置TOKEN开始合成编辑器内语音合成语音识别设置TOKEN开始识别Speech语音合成、语音识别简介对接百度AI开放平台,封装的语音技术接口。使用Speech语音合成设置TOKEN语音合成需要鉴权认证的通行令牌TOKEN,登录百度AI开放平台控制台...
Speech语音合成、语音识别简介
对接百度AI开放平台,封装的语音技术接口。
使用Speech
语音合成
设置TOKEN
语音合成需要鉴权认证的通行令牌TOKEN,登录百度AI开放平台控制台,通过新建应用获取应用的APIKEY和SECRETKEY,在任意初始化位置设置这两个key:
Speecher.SetAPIKEY("你的应用APIKEY");
Speecher.SetSECRETKEY("你的应用SECRETKEY");
然后在调用语音合成接口前,必须先生成TOKEN(一个TOKEN的有效期是30天,失效后必须重新生成):
Speecher.GenerateTOKEN();
由于上文的生成TOKEN的接口无法跨域,所以在WebGL平台无效,所以我们只能在外部生成TOKEN再赋值给Speecher:
Speecher.SetTOKEN("外部生成的TOKEN");
自定义合成规则
语音合成可以自定义合成规则,在合成规则内,你可以强制定义任何字的发音,或是让多音字在不同的词语组合内有不同的发音,比如如下定义一个合成规则:
//自定义合成规则
SynthesisRule rule = new SynthesisRule();
//定义 大 字的发音为 xiao ,2 声
rule.AddCustomTone("大", "xiao", 2);
//定义 小 字的发音为 da ,4 声
rule.AddCustomTone("小", "da", 4);
//定义 的 字的发音为 di ,4 声(仅在词组为【目的地】时)
rule.AddCustomTone("目的地", "di", 4, 1);
//定义 单 字的发音为 shan ,4 声(仅在词组为【单春秋】时)
rule.AddCustomTone("单春秋", "shan", 4, 0);
开始合成
设置了TOKEN之后便可以直接合成语音了,调用如下接口:
private IEnumerator Start()
{
Speecher.SetAPIKEY("你的应用APIKEY");
Speecher.SetSECRETKEY("你的应用SECRETKEY");
//等待生成TOKEN完成
yield return Speecher.GenerateTOKEN();
//合成语音,如有自定义合成规则,可以传入合成规则
Speecher.Synthesis("您好,百度!", SynthesisSucceed, SynthesisFailed);
}
private void SynthesisSucceed(AudioClip clip)
{
//语音合成成功,播放合成结果
Main.m_Audio.PlayMultipleSound(clip);
}
private void SynthesisFailed()
{
GlobalTools.LogWarning("语音合成失败,请查看控制台日志!");
}
语音合成为异步操作,可以通过yield return语句等待合成完成,以达到同步效果,但必须在协程方法体内:
private IEnumerator Synthesis()
{
//合成语音
yield return Speecher.Synthesis("您好,百度!", SynthesisSucceed, SynthesisFailed);
GlobalTools.LogInfo("语音合成完毕!");
}
编辑器内语音合成
通过如下菜单打开编辑器语音合成测试面板:
在面板输入你的APIKEY和SECRETKEY,点击Generate按钮生成TOKEN,然后输入待合成的文本,以及选择一些合成参数,点击下方的Synthesis按钮便可以将文本合成为语音文件。
目前已支持官方更新的所有精品发音人:
语音识别
设置TOKEN
语音识别需要鉴权认证的通行令牌TOKEN,与语音合成共用一个TOKEN。
开始识别
设置了TOKEN之后便可以直接识别语音了,调用如下接口:
IEnumerator RecognitionTest()
{
AudioClip clip = null;
//加载音频文件
yield return Main.m_Resource.LoadAsset<AudioClip>(new AssetInfo("audio", "Assets/Audio/Test.wav", ""), null, (c) => { clip = c; });
//语音识别
yield return Speecher.Recognition(clip, RecognitionSucceed, RecognitionFailed);
}
private void RecognitionSucceed(string text)
{
//语音识别成功
GlobalTools.LogInfo("语音识别成功:" + text);
}
private void RecognitionFailed()
{
GlobalTools.LogWarning("语音识别失败,请查看控制台日志!");
}
更多推荐
所有评论(0)