更新日期:2019年12月30日。
Github源码:​​​[点我获取源码]​​​ Gitee源码:​​[点我获取源码]​

索引

  • ​​Speech语音合成、语音识别简介​​
  • ​​使用Speech​​
  • ​​语音合成​​
  • ​​设置TOKEN​​
  • ​​自定义合成规则​​
  • ​​开始合成​​
  • ​​编辑器内语音合成​​
  • ​​语音识别​​
  • ​​设置TOKEN​​
  • ​​开始识别​​

Speech语音合成、语音识别简介

对接​​百度AI开放平台​​,封装的语音技术接口。

使用Speech

语音合成

设置TOKEN

语音合成需要鉴权认证的通行令牌TOKEN,登录​​百度AI开放平台控制台​​,通过新建应用获取应用的APIKEYSECRETKEY,在任意初始化位置设置这两个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("语音合成完毕!");
}

编辑器内语音合成

通过如下菜单打开编辑器语音合成测试面板:

【Unity】 HTFramework框架(二十八)Speech语音合成、语音识别_语音识别


【Unity】 HTFramework框架(二十八)Speech语音合成、语音识别_语音合成_02


在面板输入你的APIKEY和SECRETKEY,点击Generate按钮生成TOKEN,然后输入待合成的文本,以及选择一些合成参数,点击下方的Synthesis按钮便可以将文本合成为语音文件。目前已支持官方更新的所有精品发音人:

【Unity】 HTFramework框架(二十八)Speech语音合成、语音识别_Unity_03

语音识别

设置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("语音识别失败,请查看控制台日志!");
}