C#開發-語音合成

本文主要討論C#開發使用百度語音合成API在線將文本內容合成語音,保存爲 MP3 文件,本文最後會提供本安全源代碼以及運行軟件包,若有須要可自行下載git

開發流程以下:api

1. 建立百度應用:安全

  建立應用以後就能看到建立完的應用和 API KEY 以及 Secret KEY了,在調用API時需傳入這些配置值app

  詳見:https://console.bce.baidu.com/ai/#/ai/speech/overview/indexide

2. 引用 Baidu.Aip (SDK)ui

  Baidu.Aip 封閉了文字識別Ocr API 的Http請求,簡化代碼,提升開發效率。若是不想引用該DLL,能夠本身封裝Http請求方法。編碼

  C# SDK 現已開源,快速接入文檔參考:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gpspa

3. 調用API,code

  這裏僅展現通用及高精度識別示例,特殊場景識別,詳見官方文檔:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gp
orm

 

        /// <summary>
        /// 語音合成
        /// </summary>
        /// <param name="reqItem">請求相關參數</param>
        /// <param name="destPath">mp3文件保存路徑</param>
        /// <param name="synthesisEvent">狀態事件</param>
        /// <returns></returns>
        public static bool Synthesis(ReqSynthesis reqItem, string destPath, SynthesisEvent synthesisEvent)
        {
            bool callResult = false;

            try
            {
                synthesisEvent("語音合成初始化...");
                string appId, apiKey, secretKey;
                if (!RiverAuth.Instant.GetSpeechApiConfig(true, out appId, out apiKey, out secretKey))// 讀取應用配置
                {
                    synthesisEvent("當天使用次數已達上限或配置無效。");
                    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}  // 發音人,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));
                }
            }
            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字節 必填項
        public string cuid { get; set; }// 用戶惟一標識,用來區分用戶,填寫機器 MAC 地址或 IMEI 碼,長度爲60之內 否
        public int spd { get; set; }//語速,取值0-9,默認爲5中語速 否
        public int pit { get; set; }//音調,取值0-9,默認爲5中語調 否
        public int vol { get; set; }//音量,取值0-15,默認爲5中音量 否
        public int per { get; set; }//發音人選擇, 0爲女聲,1爲男聲,3爲情感合成-度逍遙,4爲情感合成-度丫丫,默認爲普通女
    }
    /// <summary>
    /// 語音轉文字返回結果
    /// </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

運行軟件包下載地址(.Net Framework 4.5): https://pan.baidu.com/s/1z-WFDGHhEP8tqLqwp9I0Mw  提取碼:  r3sk 

相關文章
相關標籤/搜索