------------------- 這部分是廢話,不想看就跳過吧 -------------------

最近一直在研究TTS語音包,老阿姨近視越來越嚴重,看字兒太廢眼,還是聽書比較適合老年人。小居老師的榜樣閱讀著實把我蘇到了,就萌生了個想法,把居老師的聲音做成TTS語音包。最開始當然是奔著科大訊飛去的,畢竟手機里聽書軟體的TTS包都是下的他家的,結果發現自己想多了,科大家走的高端路線,得請明星們去棚里專門錄音,不是俺們這種小老百姓可以肖想的 T_T

科大訊飛個性音庫定製解決方案

一番尋覓後,發現微軟家最近剛上線了個好玩的東東——Custom Voice。

微軟個性音庫定製解決方案

按照描述,提供2小時以上的音源,可以做個POC,聲音會比較生硬和機械化;3小時以上能實現標準化的聲音;如果提供8小時以上的音源,就可以接近真人發音了。感覺很酷啊,這不就是我要的么?雖然不能弄成離線的TTS包,不過能在線合成也不錯啦,於是擼袖子開干。

微軟個性化語音簡介

準備音源真是個大工程!居老師演的片子雖多,但是用原聲的沒有幾部,而且他不同片子里的聲線居然會變,會變,變……不知道聲線不統一對最後的合成效果影響大不大。更更更要命的是,背景音樂和噪音混在裡面,想分離出低噪音無背景音樂的句子真心困難,好怨念的 T_T

挑挑揀揀,最後選了馮豆子和採訪居,摳摳索索了個把月才勉勉強強湊出二十幾分鐘音源,禿頭中……

視頻封面

00:19提供20秒音源的合成效果

只提供20秒音源合成的效果比較恐怖,基本上聽不出聲音的起伏變化,發音也不清晰。

視頻封面

00:20提供23分鐘音源的合成效果

當提供的音頻素材達到20多分鐘後,發音效果有了明顯的提高,已經可以聽出聲調的起伏變化,字詞也相對清晰可辨,不過還是和居老師奶萌又磁性的聲音差了好遠,而且整個深度學習的時間也從幾分鐘拉長到了幾個小時。官方給出的說明是提供2-3小時以上的音頻素材才能實現比較理想的效果,8小時以上音頻素材可以接近真人發音,感覺這個工程之浩大,已經超出了本阿姨目前的承受範圍了,只能慢慢弄了。

----------------------------- 我是乾貨分隔線 -------------------------

下面進入正題,一步步演示如何創建個性化的TTS語音。

一. 創建一個微軟的 Azure account

微軟的TTS語音服務需要部署在他家的雲平台 Azure上(孤陋寡聞了,第一次聽說微軟家還有這個),因此需要創建一個帳號,另外要準備一張能支付美元的信用卡,新註冊的用戶會贈送 $200 (別做夢了,不是真的錢啦,只能在Azure上買服務,並且有效期只有30天,所以音頻沒有準備好之前不要輕易開賬戶,我開了賬戶後過了一個多月才開始使用,當初送的200刀就木有了T_T)。

註冊地址是: 註冊主界面

點擊 「Start free」後會打開一個新窗口讓登錄或者是註冊:

點擊 "Create One!"

輸入郵箱作為用戶名

輸入密碼

輸入發送到註冊郵箱里的驗證碼

輸入防機器人碼

註冊好了,提示登錄

填一下註冊信息

簡訊驗證一下

輸入信用卡信息

勾選同意

這裡提示要訂購一個服務

自己用,當然選第四個免費的

終於註冊好啦,點「Sign up」後進入Microsoft Azure 控制台

二. 開啟TTS語音服務

進入控制台後,就可以開啟TTS語音服務了

點擊左上角的「Create a resource」

在搜索框中輸入 「speech」

點擊 speech 選項

點擊創建按鈕

輸入TTS語音服務所需要的信息:

  1. 服務的名字
  2. 服務的類型(Pay-As-You-Go: 用多少付多少)
  3. 服務的區域 (因為是中文,選東亞 East Asia)
  4. 服務的級別 (免費的選 F0,付費的選S0)
  5. 給資源起個名字

點「OK「,然後點屏幕下方的 」Create「按鈕,等幾秒鐘初始化

初始化好了之後,右上角的會提示部署完成,點擊 "Pin to Dashboard"創建一個控制台快捷方式,點擊 」Go to resource「,可以進入資源頁面

獲取 key,將生成的 key複製保存到記事本中

將key導入到個性化TTS定製服務中,首先進入導入頁面: 導入頁面

點擊 」Connect existing subscription「, 然後將剛才複製的key粘貼到窗口中

點擊 」Add「,然後進入項目管理頁面: 項目管理頁面

點擊」data「,就可以上傳供微軟進行神經網路深度學習(寫在這裡裝B,菜雞表示不明覺厲,聽起來好高大上的趕腳啊)的語音材料了

點擊 」Import Data「

輸入語音材料的基本信息,點擊」Import「

三. 語音及文本材料的注意事項

上傳的語音文件要打成一個壓縮包,語音材料的標準如下:

文件內容單句或短語,必須是同一種語言,不支持多語言混雜

文件格式wav

採樣頻率至少16000 Hz,低於此採樣率,系統拒絕接受 (推薦 44100 Hz)

採樣格式PCM, 16 bit

文件名數字加上wav後綴,如 00000000001.wav,文件名需唯一

壓縮包格式.zip

壓縮包大小:單個壓縮包不超過 200 MB,可上傳多個壓縮包,屌絲免費用戶最多傳10個,氪金大佬可以傳50個

文本文件需採用UTF-8的編碼(注意一定要轉成此編碼,文本編輯器多半默認的編碼是ASCII碼,可以用記事本打開編輯好的文本文件,然後點擊另存為,轉換成UTF-8)。

文本文件的內容為文件名編碼和語音內容的組合,一行一句,二者需一一對應,文件名編碼和內容之間用 tab 鍵分隔(注意,不是空格!不是空格!不是空格!我開始打的空格,七百多個文件好不容易傳完,結果檢驗失敗,哭死),其樣式如下:

00000000001 大家好

00000000002 很高興見到你

00000000003 八十(不建議用80)

00000000004 下午三點(不建議用「下午3點」)

00000000005 你吃飯了嗎 (不建議帶標點符號?)

00000000006 下午五點的航班 (不建議用 「下午 5:00的航班」)

夾帶私貨推薦兩個工具:

  1. 視頻轉換及音頻提取工具 : ffmpeg

安裝後配置環境變數,可以通過命令行直接提取視頻中的音頻文件,速度飛快,8個G的視頻十幾分鐘搞定

C:> ffmpeg -i 00001.flv -acodec copy -vn 00001.aac

2. 音頻加工工具:Audacity

開源,插件多,網上教程多,基本滿足需求

四. 上傳音頻並開始學習

準備好語音材料及文本文件並上傳後,就可以讓微軟開始學習啦。

填寫音頻和文本文件的基本信息:名字,描述,語言選擇(zh-CN為簡體中文),性別,文本文件路徑,音頻文件壓縮包路徑

需要一點耐心,要傳一陣子。在上傳的過程中系統會自動檢驗文本文件和音頻文件的格式,為了防止花很長時間上傳大文件結果檢驗失敗的情況發生,可以先傳幾個小文件試試,允許多次上傳。

status那一項顯示的是當前文件的處理狀態:

  • NotStarted: 表示文件已上傳,目前正在隊列中等待處理
  • Running: 表示文件已經被驗證了,正在處理
  • Succeeded: 表示處理成功

Utterance那一項顯示的是文本內容和音頻文件成功匹配的數量,比如音頻壓縮包中包含10個音頻文件,結果只有7個文件和文本文件的內容能對應上,此數值就會顯示為7。匹配數量越多越好

Report那一項顯示的是上傳文件的質量評估報告,可以下載下來,其具體含義如下:

  • WaveID: 音頻文件名編碼
  • ProunciationScore: 發音準確度,100分為滿分,低於70分說明有發音錯誤或不標準的地方,此項也會受音頻質量以及噪音程度的影響
  • SnrScore: 音頻噪音程度,分數越高說明噪音越低,專業錄音棚可以達到50+,低於20分最終結果中也會聽到明顯的噪音。
  • ImportStatus:文件導入結果
  • Note: 備註

上傳完成後,可以開始創建個性化的語音了:創建語音

點擊 「Create New」按鈕

選擇已上傳的文件(可多選),輸入相應的信息,然後點擊「Create」按鈕,系統會自動跳轉到我的語音頁面。

此頁面上的status項顯示了當前個性化語音的創建狀態:

NotStarted表示創建語音的請求正在隊列中等待

Running 表示語音正在被創建

Succeeded表示語音創建成功

在出現Succeeded之前請耐心等待,創建(傳說中的神經網路深度學習)過程會根據上傳的文件數量和體積有所不同,幾百個utterances大概耗時幾個小時;20000以上utterances的訓練時間將達到40小時以上(干別的事去吧,不用一直在線盯著它看)。

當出現Succeeded後,可以點擊"Test"按鈕已檢驗效果(可多次檢驗)。

點擊「New Testing」按鈕。

如果選擇的是 Plain text,則在文本框中輸入普通文本;如果選擇SSML,則需要輸入xml格式的文本。點擊「Confirm「,文本的長度限制為1024個字元。

在出現頁面中,status項會顯示當前測試的狀態:

  • NotStarted 表示待處理
  • Running 表示正在處理
  • Succeeded 表示處理成功

當處理成功後,可以點擊「Audio output」項中的「Download」鏈接下載剛剛生成的語音文件

點擊左上角的左箭頭回到之前的頁面,如果對當前生成的語音滿意,可以點擊「Deploy」按鈕部署該語音到Azure雲平台上。

----------------------- 我是選修課分割線 ---------------------

五. 創建個性化語音的API (Endpoint)

如果想實時調用自己創建的個性化語音,比如智能語音設備的交互功能,或者是手機APP的交互功能,就需要將它部署到Azure雲平台,並為其創建Endpoint。具體操作方法如下:

回到我的聲音主界面,點擊「Deploy」按鈕,然後輸入語音服務的名字和描述。點擊「Create」按鈕後頁面會自動跳轉到「Endpoint」頁。

Status項出現Succeeded,表示部署成功。此時需要記下剛剛生成的endpoint URL。下面開始測試這個endpoint,點擊「Test」按鈕。

輸入要測試的文本(100字元以內),點擊播放按鈕,即可以聽到剛才創建的個性化語音了。

六. 調用個性化語音服務的API (Endpoint)

如果想把比較大的純文本文件轉換成語音文件,並保存下來,或者是在智能設備上在線使用,就需要調用剛剛創建好的個性化語音服務的API了。如果你是苦逼碼農就不多解釋了,自己去微軟家的github上趴拉源代碼吧: TTS調用源代碼

如果是 IT 小白,也沒興趣研究代碼,可以去下我修改打包好的程序 (JAVA 菜雞後端,表示不會前端和UI,只能弄個 jar 出來,前端高手們可以自己寫個酷炫的UI界面)。

下載鏈接: 百度盤地址 提取碼:j8S1

如果要運行這個jar,需要先安裝配置 jdk,安裝配置 jdk 的過程很簡單,網上隨便搜一下就能找到大把教程,這裡給個參考: JDK的安裝配置方法

簡單介紹一下步驟:

  1. 雙擊運行 jdk 的安裝文件
  2. 安裝完成後找到jdk所在的路徑,複製這個路徑
  3. 控制面板 --> 系統 --> 高級系統設置 --> 環境變數

選擇「系統變數」區域的「新建」功能, 在」變數名「處填寫: JAVA_HOME,在」變數值「處填寫剛才複製的路徑。

打開「系統變數」區域的Path,將這條語句;%JAVA_HOME%in追加到Path變數值的最後面

驗證一下安裝配置是否成功,可以點擊」開始「,然後敲 cmd 打開命令行窗口,輸入 java 回車,如果出現用法介紹的頁面,就說明安裝成功了

jdk 安裝配置完成後,就可以開始運行 jar 文件來轉換文本文件了:

  1. 找到下載的 jar 所在的文件夾,將要轉換的文本文件也放在同一個文件夾中,注意,文本文件需保存為UTF-8編碼。

2.在此文件夾空白處按住 Shift 鍵的同時點擊滑鼠右鍵,點擊 」在此處打開命令窗口」

3. 在彈出的命令行窗口中輸入命令: java -jar convertTTS.jar <文件名> <個性化語音的性別> <個性化語音的名稱><目標路徑> <Key> <Endpoint>

這裡需要傳入六個參數:

1) <文本文件路徑>: 就是需要轉換的文本文件路徑及文件名

2) <個性化語音的性別>: 創建的個性化語音服務採用的性別,M為男性,F為女性

3) <個性化語音的名稱>:創建的個性化語音服務的名稱

4) <目標路徑>: 就是轉換好之後要保存的路徑

5) <Key>: 就是前文中創建語音服務時讓記住的那個 Key

6) <Endpoint>:前面創建的Endpoint URL

舉例如下:

java -jar ttsConvert.jar C:/test/test.txt M zyl041688 C:/test/output.mp3 <Your Key> <Your Endpoint>

回車,至此大功告成!

----------------------- 附微軟的語音服務資費標準 --------------------

如果創建的是免費服務,每月可以免費轉化 ≤ 五百萬字元;如果創建的是標準化付費服務,每轉化 一百萬字元,收費 $6。

也可以在Azure 控制台上監控應用的花費狀態。

參考資料:

微軟個性化語音服務

Creating custom voice fonts 官方文檔

Transcription guidelines for using the Speech Service 官方文檔

Speech Service REST APIs 官方文檔

最後,居老師美圖鎮樓 ^_^

能把咱們程序員專用工作服穿出這個效果,這個世界果然是看臉的 —_—!!

推薦閱讀:
相关文章