程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 百度語音合成,

C# 百度語音合成,

編輯:C#入門知識

C# 百度語音合成,


語音合成及TTS,我們嘗試使用百度的語音合成技術 不過我發現

有一種缺點在於沒有離線包讓我有些很不舒服,可能是在線版的

原因微軟語音識別技術在Windows 2000是默認集成在系統組件中

或許我們不必去尋找新的語音合成替代方案,不過在線版一旦離線

只有Game Over,Hah不過有一點好處在於使用方便適合廣發開發

者,第二百度語音合成後的音頻流,妹子的聲音聽著較舒服 如果可

以在“卡哇伊”的萌妹妹,一定會更好,不過應該在解決一下聲音堅

硬的感覺或許會更好,雖然語音合成技術發展這麼多年 至少目前我

還沒有見到有什麼服務可以提供與人說話的自然感,始終會有些機

械干不過要談到“百度語音識別”與“光學識別 / OCR”的話,我不好意

思討論 但是支持國產的心是不變的,不過百度的文檔只有那麼簡潔

我可以斷定一定是百度的開發人員做的,Hah 我們又不是日本人與

印度人寫不好什麼注釋與文檔,人家那是寫作文 我們能造嗎?

首先你需要具備一個百度賬號,然後到新版百度語音的官方的首頁

http://yuyin.baidu.com/fc.html

屆時你會看到上面的兩種不同的技術,我們選擇語音合成技術

你可以試試快速體驗實際上它就是利用REST API實現的,不要糾結

我們點擊立即使用,如果是第一次使用百度的技術服務 那麼你需要

注冊開發者信息一次 爛填最好 免得百度把你的信息哪去賣錢,Hah. 

如果是你已經登記信息,沒有創建應用你也無法使用百度的服務

你必須創建一個項目,在下圖如所示右上角“創建新應用”

那麼你會看見如下頁面,隨意填寫一個有效名稱確認即可 應用類別

也是隨意選擇,搞那麼清楚給百度干什麼 只是用服務 又不是賣信息

當應用創建完畢後你會看到如下的頁面,那麼你需要點擊開通服務

如果你沒有看到開通服務的標簽按鈕,可以回到百度語音支持首頁

選擇“百度語音合成”然後直接點擊“立即使用”

它會提示你選擇你的應用隨便選擇一個充數就可以,然後點擊下一步

如果提示如下頁面表示成功,你也可以直接點擊上圖右邊的“創建應用”

超鏈接快速開通服務

好吧,如果有需要百度幫助文檔的可以去“應用管理”頁面點擊你需

要的技術按鈕,會彈出如下的快捷菜單 選擇“下載SDK”即可,或者

從百度語音支持首頁選擇“百度語音合成”

點擊工具欄中的“相關下載”後我們選擇“REST API”選項卡,請參照下圖

點擊下載文檔,不過百度的文檔你或許看了可能會認為沒有看過 Hah。

現在我們需要去“獲取 Access Token”又是百度搞出來的新玩意

我們需要進入“應用管理”頁面中點擊包含“百度語音識別”技術的

應用,點擊“查看Key”圖形按鈕,會出現如下圖所示

我們現在需要提取兩個重要的參數及API Key、Secret Key話

說為什麼叫做“秘密Key”我估摸著是與密碼差不多的一個玩意

我們根據文檔拼接一個連接用於查詢自己的“Access Token”

https://openapi.baidu.com/oauth/2.0/token?

grant_type=client_credentials&

client_id=hINQTsu6G8C6XqwFvfbWT7Tm&

client_secret=8d5dbdb1b92bf945dca42f75c9eb1a69

解釋:

grant_type // 授權類型

client_id // API Key

client_secret // Secret Key

在浏覽中訪問了上面的連接會看到如上圖的文本Json代碼

我們什麼只需要“access_token / 訪問令牌”中的東西其他直

接刪刪刪 沒什麼太大的作用

下面開始用C#編寫使用百度語音合成服務的代碼,首先我們

需要知道,百度語音合成後輸出的音頻流是mp3不是wav所

以我們需要播放該音頻流則需要求助支持mp3音頻格式的媒體

庫,不過我們只是簡單的播放它的音頻而不是需要制作音樂播

放器,那麼使用mci是最方便與節省內存的一個辦法

 

[csharp] view plaincopy
  1. private const string lan = "zh";  
  2. private const string per = "0";  
  3. private const string ctp = "1";   
  4. private const string spd = "3";  
  5. private const string pit = "6";  
  6. private const string vol = "9";       
  7. private const string cuid = "00-12-7B-16-74-8D";  
  8. private const string tex = "遠去的山河 沉寂,戀過的風景 如昔" +  
  9.                            "蒼何斬落了 情迷,生死輕付了 別離" +  
  10.                            "搗一脈相思 成泥,沐四海悲風 無跡" +  
  11.                            "往生海煙波 又起,妙華鏡風雪 共歷";  
  12. private const string tok = "24.fffd842a3fe829c873fe1c4cd0cb9c4e.2592000.1439044224.282335-6396988";  
  13. private const string rest = "tex={0}&lan={1}&per={2}&ctp={3}&cuid={4}&tok={5}&spd={6}&pit={7}&vol={8}";  
  14.   
  15. private const int NULL = 0, ERROR_SUCCESS = NULL;  
  16. [DllImport("WinMm.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]  
  17. private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);  

從上面的代碼你或許會很疑惑為什麼或有那麼多常量那麼你看下圖

 

你便知道了,有些觀看文檔的朋友則不用

現在是不是發現與上述常量相同呢?它是“百度語音合成”所需要

的一些“必要或可選”的參數,我們在這裡使用POST的方式主要

在於使用GET方式顯得我有些太屌了,雖然文檔內是GET方式

 

[csharp] view plaincopy
  1. protected override void OnLoad(EventArgs e)  
  2. {  
  3.     string strUpdateData = string.Format(rest, tex, lan, per, ctp, cuid, tok, spd, pit, vol);  
  4.     HttpWebRequest req = WebRequest.Create("http://tsn.baidu.com/text2audio") as HttpWebRequest;  
  5.     req.Method = "POST";  
  6.     req.ContentType = "application/x-www-form-urlencoded";  
  7.     req.ContentLength = Encoding.UTF8.GetByteCount(strUpdateData);  
  8.     using (StreamWriter sw = new StreamWriter(req.GetRequestStream()))  
  9.         sw.Write(strUpdateData);  
  10.     HttpWebResponse res = req.GetResponse() as HttpWebResponse;  
  11.     using (Stream stream = res.GetResponseStream())  
  12.     {  
  13.         string strFullFileName = Application.StartupPath + "/app.mp3";  
  14.         using (FileStream fs = new FileStream(strFullFileName, FileMode.Truncate | FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))  
  15.             stream.CopyTo(fs);  
  16.         if (mciSendString(string.Format("open \"{0}\" alias app", strFullFileName), null, NULL, NULL) == ERROR_SUCCESS)  
  17.             mciSendString("play app", null, NULL, NULL);  
  18.     }  
  19. }  

.NET POST的方式無外乎那幾種,一般最常用的還是

 

.NET上層提供HttpWebRequest,不過百度語音識別

要求使用UTF-8的字符串POST,一定注意這裡的細節

否則你無法使用百度提供的服務,而對你返回錯誤代碼

想必這些細節作為一個開發人員應該是不會犯的

我們把POST後返回的HTTP流寫到文件,不過在上面

我說過百度是返回的mp3流,那麼你就需要以mp3的方

式寫到文件,如果使用BASS則不必它可以播放內存中

的媒體流,不過mci方式則不可以,如果你沒有看懂代碼

又急需要使用可以拷貝我的代碼 不過建議你能讀懂最好

依賴的命名空間:

 

[csharp] view plaincopy
  1. using System.Net;  
  2. using System.IO;  
  3. using System.Text;  
  4. using System.Runtime.InteropServices;  

到這裡基本結束了,百度語音合成 在C#中的使用並不是

 

你想象中的那麼困難,你沒有必要去糾結它的使用方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved