赞
踩
最近openAI官方发布了很多新功能,其中就包括了最新发布的TTS语音合成服务的api接口。说到这个语音合成接口,大家可能会比较陌生,但是说到chatgpt官方应用上的聊天机器人,那个台湾腔的海王暖男的声音,可能就有印象了吧。那么从官方文档中,可以发现,openAI提供的TTS服务中,就包含了这个声音可选。经过我的实测发现,openAI的语音合成效果相当的出色,在语气、断句等方面有非常好的表现,所以很值得将这个语音合成服务集成到我的AI二次元项目工具包里,为水友们提供更多的选择。
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
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
项目的源码已经发布到Github了,我们可以直接下载,并导入到unity中使用,要求unity版本在2020.3.44及以上。导入工具包之后,可以在Scene文件夹下,找到示例场景,在场景中找到TTS->openAI对象,该对象上就维护了openAI提供的语音合成服务的代码。
使用这个模块,首先我们需要注册一个openAI账号,并创建一个api key,将apikey填写到脚本对应的apikey属性上。然后将TTS脚本配置到chatAgent脚本上即可。
详细配置,可以到我的B站主页,查看本期视频的配置过程。
这次的文章简单介绍了如何使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。