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