溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

利用c#編寫(xiě)一個(gè)語(yǔ)音合成功能

發(fā)布時(shí)間:2020-12-14 13:54:38 來(lái)源:億速云 閱讀:442 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)利用c#編寫(xiě)一個(gè)語(yǔ)音合成功能,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

開(kāi)發(fā)流程如下:

1. 創(chuàng)建百度應(yīng)用:

  創(chuàng)建應(yīng)用之后就能看到創(chuàng)建完的應(yīng)用和 API KEY 以及 Secret KEY

2. 引用 Baidu.Aip (SDK)

  Baidu.Aip 封閉了文字識(shí)別Ocr API 的Http請(qǐng)求,簡(jiǎn)化代碼,提高開(kāi)發(fā)效率。如果不想引用該DLL,可以自己封裝Http請(qǐng)求方法。

  C# SDK 現(xiàn)已開(kāi)源,快速接入文檔參考:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gp

3. 調(diào)用API,

  這里僅展示通用及高精度識(shí)別示例,特殊場(chǎng)景識(shí)別,詳見(jiàn)官方文檔:https://ai.baidu.com/ai-doc/SPEECH/Jk4nlz6gp

/// <summary>
  /// 語(yǔ)音合成
  /// </summary>
  /// <param name="reqItem">請(qǐng)求相關(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ǔ)音合成初始化...");
    // 百度應(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; // 修改超時(shí)時(shí)間
    var option = new Dictionary<string, object>()
    {
     {"vol", reqItem.vol}, // 
     { "pit", reqItem.pit}, // 
     {"spd", reqItem.spd}, // 語(yǔ)速
     {"per", reqItem.per} // 發(fā)音人,4:情感度丫丫童聲
    };
    synthesisEvent("開(kāi)始語(yǔ)音合成...");
    var result = client.Synthesis(reqItem.tex, option);
    // 保存文件
    if (result.Success) // 或 result.Success
    {
     File.WriteAllBytes(destPath, result.Data);
     synthesisEvent("語(yǔ)音合成返回成功,文件:" + destPath);
     callResult = true;
    }
    else
    {
     synthesisEvent(string.Format("語(yǔ)音合成失敗, 錯(cuò)誤碼:[{0}], 原因:{1}", result.ErrorCode, result.ErrorMsg));
    }
    RiverAuth.Instant.EndCallEvent();
   }
   catch (Exception ex)
   {
    synthesisEvent("語(yǔ)音合成失敗,原因:" + ex.Message);
    LogHelper.LogError(ex, "語(yǔ)音合成");
   }
   return callResult;
  }
 }
 /// <summary>
 /// 語(yǔ)音合成請(qǐng)求
 /// </summary>
 [Serializable]
 public class ReqSynthesis
 {
  public string tex { get; set; }//合成的文本,使用UTF-8編碼,請(qǐng)注意文本長(zhǎng)度必須小于1024字節(jié) 必填項(xiàng)
  public string cuid { get; set; }// 用戶(hù)唯一標(biāo)識(shí),用來(lái)區(qū)分用戶(hù),填寫(xiě)機(jī)器 MAC 地址或 IMEI 碼,長(zhǎng)度為60以?xún)?nèi) 否
  public int spd { get; set; }//語(yǔ)速,取值0-9,默認(rèn)為5中語(yǔ)速 否
  public int pit { get; set; }//音調(diào),取值0-9,默認(rèn)為5中語(yǔ)調(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>
 /// 語(yǔ)音轉(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. 語(yǔ)音合成最后保存為 MP3 文件

利用c#編寫(xiě)一個(gè)語(yǔ)音合成功能

以上就是利用c#編寫(xiě)一個(gè)語(yǔ)音合成功能,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI