Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)
@[TOC](Unity3d C#實現語音合成(TTS)試聽并選擇路徑保存下載功能(含源碼))
前言
計劃實現語音的合成功能,將文字轉語音,支持試聽和保存功能,經過一段時間的研究,發現搜狗可以使用,用100–200萬字的免費額度:
決定就對接搜狗接口完成這些功能。
效果:
準備工作
可以直接參考官方指南:https://ai.sogou.com/doc/?url=/docs/content/overview/guides/
注冊賬號
前往搜狗開發平臺(https://ai.sogou.com/)自行操作,操作完成登錄后,有個控制臺按鈕點擊進入:
下載LitJson
這個網上有很多,主要用于傳參和數據解析,自行下載吧。
##獲取appid和key
操作步驟:
新建應用 > 填寫名稱>填寫描述>勾選語音合成>勾選同意協議> 創建應用
這樣就獲得了appid和key,復制了備用。
實現功能
在上一步中我們獲得了“appid” 和“appkey”,在腳本初始化的時候,將它記錄下來:
/*----------------------------------------|||| |||| 此處填寫 appid appkey || || || ||----------------------------------------*/string appid = "";string appkey = "";這一步請自行申請填入。
認證與鑒權
這個過程就是獲取令牌的過程,代碼如下:
void GetToken() {string url = "https://api.zhiyin.sogou.com/apis/auth/v1/create_token";JsonData ReqParam = new JsonData();ReqParam["appid"] = appid;ReqParam["appkey"] = appkey;ReqParam["exp"] = "3600s";byte[] postBytes = System.Text.Encoding.Default.GetBytes(ReqParam.ToJson());StartCoroutine(DoPost(url, postBytes, GetTokenDone));}void GetTokenDone(string str){try{JsonData data = JsonMapper.ToObject(str);token = data["token"].ToString();endDate =DateTime.Parse(data["end_time"].ToString());TTS();Debug.Log("Get Token:" + token);}catch (Exception e){Debug.LogWarning("GetToken調用異常:" + e);;}}在獲取到令牌后,將其記錄,還有個是有效時間(endDate),在超過有效時間后,需要重新獲取令牌。
語音合成
根據選擇的聲音,調用語音合成接口,將輸入的文字和轉化的聲音以及其它參數傳入,即完成了語音合成的請求。
如下是根據官網給的音色列表以及每種音色所支持的語言預定義的參數,用于展示聲音選項和傳遞的參數:
List<string> titles = new List<string> { "康哥(中)", "晶晶(中)", "阿華(中)", "婉清(中)","夕月(中)" , "阿星(中)", "青峰(中)", "若曦(中)", "夢暄(中)", "思思(中)", "帥帥(中)", "寶哥(中)", "婉貞(中)", "小玉(中)", "文雅(中)", "翠萍(中)","強仔(中)", "宛如(中)", "小趙(中)", "燕燕(中)", "小智(中)", "婉婷(中)", "瑤瑤(中)","男聲(英)", "女聲(中英日韓)", "杰克(英)", "麗莉(英)"};List<string> Values = new List<string>{"kangge", "jingjing", "ahua", "wanqing","xiyue" , "axing", "qingfeng", "xf5","mengxuan", "sisi", "shuaishuai", "shanxi_male","sichuan_female", "henan_female", "hubei_female", "dongbei_female","guangpu_male", "taipu_female", "zhao", "yanyan","xiaozhi", "wanting", "yaoyao","male","female", "jack", "lily"};核心的請求代碼:
void TTS() {if (string.IsNullOrEmpty(Ipt.text)) {Debug.LogError("輸入內容不能為空!");return; }string url = "https://api.zhiyin.sogou.com/apis/tts/v1/synthesize";JsonData ReqParam = new JsonData();ReqParam["input"] = new JsonData();ReqParam["input"]["text"] = Ipt.text;ReqParam["config"] = new JsonData();ReqParam["config"]["audio_config"] = new JsonData();ReqParam["config"]["voice_config"] = new JsonData();ReqParam["config"]["audio_config"]["audio_encoding"] = "MP3";ReqParam["config"]["audio_config"]["pitch"] = 1;ReqParam["config"]["audio_config"]["volume"] = 1;ReqParam["config"]["audio_config"]["speaking_rate"] = 1;ReqParam["config"]["voice_config"]["language_code"] = "zh-cmn-Hans-CN";ReqParam["config"]["voice_config"]["speaker"] = Values[VoiceSel.value]+ "-pro";//"male";byte[] postBytes = System.Text.Encoding.Default.GetBytes(ReqParam.ToJson());StartCoroutine(DoTTSPost(url, postBytes, TTSDone));}void TTSDone(byte[] bytes) {try{//Debug.Log("返回音頻:" + str);VoiceBytes = bytes;//ac.clip = GetAudioClipByBytes(bytes);File.WriteAllBytes(VoiceUrl, bytes);StartCoroutine(DoVioceClip());OptBtns.SetActive(true);}catch (Exception e){Debug.LogWarning("GetToken調用異常:" + e); ;}}官方推薦是聲音參數增加"-pro",歡迎用戶使用新版音色代碼(增加-pro),新版音色大幅提升音效質量和自然度。同時,原音色代碼(未加-pro)仍可使用。
選擇路勁保存
大致思路就是根據選擇的路勁寫入字節數組:
File.WriteAllBytes(path, VoiceBytes);可以參照之前的文章:選擇路徑保存功能
試聽功能
這個在做研究的時候也寫過一個文章:
Unity3d C# 實現mp3的字節數組byte[] 轉AudioClip并播放(含源碼)
項目源碼
https://download.csdn.net/download/qq_33789001/18239880
總結
以上是生活随笔為你收集整理的Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android桌面小插件——Widget
- 下一篇: 移动端网页字体过多时,字体被自动放大问题