当前位置:   article > 正文

[Unity+OpenAI TTS] 集成openAI官方提供的语音合成服务,构建海王暖男数字人_unity tts

unity tts

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/speechicon-default.png?t=N7T8https://api.openai.com/v1/audio/speech        报文结构中,需要发送带有model、input以及voice为关键字的json字符串。

  1. curl https://api.openai.com/v1/audio/speech \
  2. -H "Authorization: Bearer $OPENAI_API_KEY" \
  3. -H "Content-Type: application/json" \
  4. -d '{
  5. "model": "tts-1",
  6. "input": "Today is a wonderful day to build something people love!",
  7. "voice": "alloy"
  8. }' \
  9. --output speech.mp3

3.示例代码

        unity端调用open AI的语音合成api的示例代码如下:

  1. [SerializeField] private string api_key=string.Empty;//apikey
  2. [SerializeField] private ModelType m_ModelType = ModelType.tts_1;//模型
  3. [SerializeField] private VoiceType m_Voice = VoiceType.onyx;//声音
  4. [SerializeField] private string m_PostURL = string.Empty;
  5. private void Awake()
  6. {
  7. m_PostURL = "https://api.openai.com/v1/audio/speech";
  8. }
  9. private IEnumerator GetVoice(string _msg, Action<AudioClip, string> _callback)
  10. {
  11. using (UnityWebRequest request = UnityWebRequest.Post(m_PostURL, new WWWForm()))
  12. {
  13. PostData _postData = new PostData
  14. {
  15. model = m_ModelType.ToString().Replace('_','-'),
  16. input = _msg,
  17. voice= m_Voice.ToString()
  18. };
  19. string _jsonText = JsonUtility.ToJson(_postData).Trim();
  20. byte[] data = System.Text.Encoding.UTF8.GetBytes(_jsonText);
  21. request.uploadHandler = (UploadHandler)new UploadHandlerRaw(data);
  22. request.downloadHandler = new DownloadHandlerAudioClip(m_PostURL, AudioType.MPEG);
  23. request.SetRequestHeader("Content-Type", "application/json");
  24. request.SetRequestHeader("Authorization", string.Format("Bearer {0}", api_key));
  25. yield return request.SendWebRequest();
  26. if (request.responseCode == 200)
  27. {
  28. AudioClip audioClip = ((DownloadHandlerAudioClip)request.downloadHandler).audioClip;
  29. _callback(audioClip, _msg);
  30. }
  31. else
  32. {
  33. Debug.LogError("语音合成失败: " + request.error);
  34. }
  35. }
  36. }
  37. #region 数据定义
  38. /// <summary>
  39. /// 发送的报文
  40. /// </summary>
  41. [Serializable]
  42. public class PostData
  43. {
  44. public string model = string.Empty;//模型名称
  45. public string input = string.Empty;//文本内容
  46. public string voice = string.Empty;//声音
  47. }
  48. /// <summary>
  49. /// 模型类型
  50. /// </summary>
  51. public enum ModelType
  52. {
  53. tts_1,
  54. tts_1_hd
  55. }
  56. /// <summary>
  57. /// 声音类型
  58. /// </summary>
  59. public enum VoiceType
  60. {
  61. alloy,
  62. echo,
  63. fable,
  64. onyx,
  65. nova,
  66. shimmer
  67. }
  68. #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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/873895
推荐阅读
相关标签
  

闽ICP备14008679号