1. 程式人生 > 程式設計 >c# 實現語音合成

c# 實現語音合成

本文主要討論C#開發使用百度語音合成API線上將文字內容合成語音,儲存為 MP3檔案,本文最後會提供本安全原始碼以及執行軟體包,如有需要可自行下載

開發流程如下:

1.建立百度應用:

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

  詳見:https://console.bce.baidu.com/ai/#/ai/ocr/overview/index

2.引用Baidu.Aip (SDK)

  Baidu.Aip封閉了文字識別OcrAPI的Http請求,簡化程式碼,提高開發效率。如果不想引用該DLL,可以自己封裝Http請求方法。

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

3.呼叫API,

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

/// <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("語音合成初始化...");
    // 百度應用配置
    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} // 發音人,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位元組 必填項
  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檔案

c# 實現語音合成

5.原始碼及軟體包下載

軟體開原始碼地址(專案整合文字識別、語音合成、語音識別):https://gitee.com/bidev_admin/river-int-ai.git

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

作者:沐汐 Vicky
出處:http://www.cnblogs.com/EasyInvoice

以上就是c# 實現語音合成的詳細內容,更多關於c# 語音合成的資料請關注我們其它相關文章!