c# 實(shí)現(xiàn)語音合成
本文主要討論C#開發(fā)使用百度語音合成API在線將文本內(nèi)容合成語音,保存為 MP3 文件,本文最后會提供本安全源代碼以及運(yùn)行軟件包,如有需要可自行下載
開發(fā)流程如下:
1. 創(chuàng)建百度應(yīng)用:
創(chuàng)建應(yīng)用之后就能看到創(chuàng)建完的應(yīng)用和 API KEY 以及 Secret KEY了,在調(diào)用API時需傳入這些配置值
詳見:https://console.bce.baidu.com/ai/#/ai/ocr/overview/index
2. 引用 Baidu.Aip (SDK)
Baidu.Aip 封閉了文字識別Ocr API 的Http請求,簡化代碼,提高開發(fā)效率。如果不想引用該DLL,可以自己封裝Http請求方法。
C# SDK 現(xiàn)已開源,快速接入文檔參考:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gp
3. 調(diào)用API,
這里僅展示通用及高精度識別示例,特殊場景識別,詳見官方文檔:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gp
/// <summary>
/// 語音合成
/// </summary>
/// <param name="reqItem">請求相關(guān)參數(shù)</param>
/// <param name="destPath">mp3文件保存路徑</param>
/// <param name="synthesisEvent">狀態(tài)事件</param>
/// <returns></returns>
public static bool Synthesis(ReqSynthesis reqItem, string destPath, SynthesisEvent synthesisEvent)
{
bool callResult = false;
try
{
synthesisEvent("語音合成初始化...");
// 百度應(yīng)用配置
var apiKey = ConfigUtil.GetConfigStr(EnumConfigKey.SpeechAPI_Key);
var secretKey = ConfigUtil.GetConfigStr(EnumConfigKey.SpeechSECRET_KEY);
if (!RiverAuth.Instant.CheckSynthesis(apiKey, secretKey))
{
return false;
}
var client = new Baidu.Aip.Speech.Tts(apiKey, secretKey);
client.Timeout = 60000; // 修改超時時間
var option = new Dictionary<string, object>()
{
{"vol", reqItem.vol}, //
{ "pit", reqItem.pit}, //
{"spd", reqItem.spd}, // 語速
{"per", reqItem.per} // 發(fā)音人,4:情感度丫丫童聲
};
synthesisEvent("開始語音合成...");
var result = client.Synthesis(reqItem.tex, option);
// 保存文件
if (result.Success) // 或 result.Success
{
File.WriteAllBytes(destPath, result.Data);
synthesisEvent("語音合成返回成功,文件:" + destPath);
callResult = true;
}
else
{
synthesisEvent(string.Format("語音合成失敗, 錯誤碼:[{0}], 原因:{1}", result.ErrorCode, result.ErrorMsg));
}
RiverAuth.Instant.EndCallEvent();
}
catch (Exception ex)
{
synthesisEvent("語音合成失敗,原因:" + ex.Message);
LogHelper.LogError(ex, "語音合成");
}
return callResult;
}
}
/// <summary>
/// 語音合成請求
/// </summary>
[Serializable]
public class ReqSynthesis
{
public string tex { get; set; }//合成的文本,使用UTF-8編碼,請注意文本長度必須小于1024字節(jié) 必填項
public string cuid { get; set; }// 用戶唯一標(biāo)識,用來區(qū)分用戶,填寫機(jī)器 MAC 地址或 IMEI 碼,長度為60以內(nèi) 否
public int spd { get; set; }//語速,取值0-9,默認(rèn)為5中語速 否
public int pit { get; set; }//音調(diào),取值0-9,默認(rèn)為5中語調(diào) 否
public int vol { get; set; }//音量,取值0-15,默認(rèn)為5中音量 否
public int per { get; set; }//發(fā)音人選擇, 0為女聲,1為男聲,3為情感合成-度逍遙,4為情感合成-度丫丫,默認(rèn)為普通女
}
/// <summary>
/// 語音轉(zhuǎn)文字返回結(jié)果
/// </summary>
public class RetSpeech
{
public string corpus_no { get; set; }
public string err_msg { get; set; }
public int err_no { get; set; }
public string[] result { get; set; }
public string sn { get; set; }
}
4. 語音合成最后保存為 MP3 文件

5. 源代碼及軟件包下載
軟件開源代碼地址(項目集成文字識別、語音合成、語音識別):https://gitee.com/bidev_admin/river-int-ai.git
運(yùn)行軟件包下載地址(.Net Framework 4.5): https://pan.baidu.com/s/1z-WFDGHhEP8tqLqwp9I0Mw 提取碼: r3sk
作者:沐汐 Vicky
出處:http://www.cnblogs.com/EasyInvoice
以上就是c# 實(shí)現(xiàn)語音合成的詳細(xì)內(nèi)容,更多關(guān)于c# 語音合成的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
c#和avascript加解密之間的互轉(zhuǎn)代碼分享
這篇文章主要介紹了c#和Javascript間互轉(zhuǎn)的Xxtea加解密代碼,需要的朋友可以參考下2014-02-02
WPF實(shí)現(xiàn)手風(fēng)琴式輪播圖切換效果
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)手風(fēng)琴式輪播圖切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-09-09
C#實(shí)現(xiàn)通過winmm.dll控制聲音播放的方法
這篇文章主要介紹了C#實(shí)現(xiàn)通過winmm.dll控制聲音播放的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08

