日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Unity3d C#实现语音合成(TTS)试听并选择路径保存下载功能(含源码)

發布時間:2023/12/18 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)试听并选择路径保存下载功能(含源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。