1.简述
最近openAI官方发布了很多新功能,其中就包括了最新发布的TTS语音合成服务的api接口。说到这个语音合成接口,大家可能会比较陌生,但是说到chatgpt官方应用上的聊天机器人,那个台湾腔的海王暖男的声音,可能就有印象了吧。那么从官方文档中,可以发现,openAI提供的TTS服务中,就包含了这个声音可选。经过我的实测发现,openAI的语音合成效果相当的出色,在语气、断句等方面有非常好的表现,所以很值得将这个语音合成服务集成到我的AI二次元项目工具包里,为水友们提供更多的选择。
2.API接口说明
1)语音合成模型
根据官方文档的说明,open AI的语音合成服务提供了两种合成质量的模型
可选模型包括:tts-1以及tts-1-hd两种,其中tts-1-hd的模型,合成出来的声音质量更高,但是需要注意的是,hd模型的价格会更高,
2)声音选择
在可选声音方面,官方提供了六种可选的声音,在调用语音合成API时,在发送的报文中设置选择的声音即可。
3)API报文格式
根据官方提供的示例,可知道语音合成的api地址及为:
https://api.openai.com/v1/audio/speechhttps://api.openai.com/v1/audio/speech 报文结构中,需要发送带有model、input以及voice为关键字的json字符串。
curl https://api.openai.com/v1/audio/speech \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Today is a wonderful day to build something people love!",
"voice": "alloy"
}' \
--output speech.mp3
3.示例代码
unity端调用open AI的语音合成api的示例代码如下:
[SerializeField] private string api_key=string.Empty;//apikey
[SerializeField] private ModelType m_ModelType = ModelType.tts_1;//模型
[SerializeField] private VoiceType m_Voice = VoiceType.onyx;//声音
[SerializeField] private string m_PostURL = string.Empty;
private void Awake()
{
m_PostURL = "https://api.openai.com/v1/audio/speech";
}
private IEnumerator GetVoice(string _msg, Action<AudioClip, string> _callback)
{
using (UnityWebRequest request = UnityWebRequest.Post(m_PostURL, new WWWForm()))
{
PostData _postData = new PostData
{
model = m_ModelType.ToString().Replace('_','-'),
input = _msg,
voice= m_Voice.ToString()
};
string _jsonText = JsonUtility.ToJson(_postData).Trim();
byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonText);
request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
request.downloadHandler = new DownloadHandlerAudioClip(m_PostURL, AudioType.MPEG);
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", string.Format("Bearer {0}", api_key));
yield return request.SendWebRequest();
if (request.responseCode == 200)
{
AudioClip audioClip = ((DownloadHandlerAudioClip)request.downloadHandler).audioClip;
_callback(audioClip, _msg);
}
else
{
Debug.LogError("语音合成失败: " + request.error);
}
}
}
#region 数据定义
/// <summary>
/// 发送的报文
/// </summary>
[Serializable]
public class PostData
{
public string model = string.Empty;//模型名称
public string input = string.Empty;//文本内容
public string voice = string.Empty;//声音
}
/// <summary>
/// 模型类型
/// </summary>
public enum ModelType
{
tts_1,
tts_1_hd
}
/// <summary>
/// 声音类型
/// </summary>
public enum VoiceType
{
alloy,
echo,
fable,
onyx,
nova,
shimmer
}
#endregion
4. Unity端数字人配置
项目的源码已经发布到Github了,我们可以直接下载,并导入到unity中使用,要求unity版本在2020.3.44及以上。导入工具包之后,可以在Scene文件夹下,找到示例场景,在场景中找到TTS->openAI对象,该对象上就维护了openAI提供的语音合成服务的代码。
使用这个模块,首先我们需要注册一个openAI账号,并创建一个api key,将apikey填写到脚本对应的apikey属性上。然后将TTS脚本配置到chatAgent脚本上即可。
详细配置,可以到我的B站主页,查看本期视频的配置过程。
5.结束语
这次的文章简单介绍了如何使用open AI官方提供的语音合成服务api,实现高质量的语音合成功能,让我们的数字人具备情感丰富,语气逼真的语音效果。文章所涉及的项目配置过程,可以到B站查看详细配置过程。
[Unity+openAI TTS] chatgpt海王暖男,分分钟搞定,使用openAI官方语音合成服务,打造火热暖心数字人
项目地址传送门:
AI二次元老婆开源项目(unity-AI-Chat-Toolkit):
Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit
Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-toolkit