------------------- 這部分是廢話,不想看就跳過吧 -------------------
最近一直在研究TTS語音包,老阿姨近視越來越嚴重,看字兒太廢眼,還是聽書比較適合老年人。小居老師的榜樣閱讀著實把我蘇到了,就萌生了個想法,把居老師的聲音做成TTS語音包。最開始當然是奔著科大訊飛去的,畢竟手機里聽書軟體的TTS包都是下的他家的,結果發現自己想多了,科大家走的高端路線,得請明星們去棚里專門錄音,不是俺們這種小老百姓可以肖想的 T_T
一番尋覓後,發現微軟家最近剛上線了個好玩的東東——Custom Voice。
按照描述,提供2小時以上的音源,可以做個POC,聲音會比較生硬和機械化;3小時以上能實現標準化的聲音;如果提供8小時以上的音源,就可以接近真人發音了。感覺很酷啊,這不就是我要的么?雖然不能弄成離線的TTS包,不過能在線合成也不錯啦,於是擼袖子開干。
準備音源真是個大工程!居老師演的片子雖多,但是用原聲的沒有幾部,而且他不同片子里的聲線居然會變,會變,變……不知道聲線不統一對最後的合成效果影響大不大。更更更要命的是,背景音樂和噪音混在裡面,想分離出低噪音無背景音樂的句子真心困難,好怨念的 T_T
挑挑揀揀,最後選了馮豆子和採訪居,摳摳索索了個把月才勉勉強強湊出二十幾分鐘音源,禿頭中……
只提供20秒音源合成的效果比較恐怖,基本上聽不出聲音的起伏變化,發音也不清晰。
當提供的音頻素材達到20多分鐘後,發音效果有了明顯的提高,已經可以聽出聲調的起伏變化,字詞也相對清晰可辨,不過還是和居老師奶萌又磁性的聲音差了好遠,而且整個深度學習的時間也從幾分鐘拉長到了幾個小時。官方給出的說明是提供2-3小時以上的音頻素材才能實現比較理想的效果,8小時以上音頻素材可以接近真人發音,感覺這個工程之浩大,已經超出了本阿姨目前的承受範圍了,只能慢慢弄了。
----------------------------- 我是乾貨分隔線 -------------------------
下面進入正題,一步步演示如何創建個性化的TTS語音。
微軟的TTS語音服務需要部署在他家的雲平台 Azure上(孤陋寡聞了,第一次聽說微軟家還有這個),因此需要創建一個帳號,另外要準備一張能支付美元的信用卡,新註冊的用戶會贈送 $200 (別做夢了,不是真的錢啦,只能在Azure上買服務,並且有效期只有30天,所以音頻沒有準備好之前不要輕易開賬戶,我開了賬戶後過了一個多月才開始使用,當初送的200刀就木有了T_T)。
註冊地址是: 註冊主界面
點擊 「Start free」後會打開一個新窗口讓登錄或者是註冊:
點擊 "Create One!"
輸入郵箱作為用戶名
輸入密碼
輸入發送到註冊郵箱里的驗證碼
輸入防機器人碼
註冊好了,提示登錄
填一下註冊信息
簡訊驗證一下
輸入信用卡信息
勾選同意
這裡提示要訂購一個服務
自己用,當然選第四個免費的
終於註冊好啦,點「Sign up」後進入Microsoft Azure 控制台
進入控制台後,就可以開啟TTS語音服務了
點擊左上角的「Create a resource」
在搜索框中輸入 「speech」
點擊 speech 選項
點擊創建按鈕
輸入TTS語音服務所需要的信息:
點「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的航班」)
夾帶私貨推薦兩個工具:
安裝後配置環境變數,可以通過命令行直接提取視頻中的音頻文件,速度飛快,8個G的視頻十幾分鐘搞定
C:> ffmpeg -i 00001.flv -acodec copy -vn 00001.aac
2. 音頻加工工具:Audacity
開源,插件多,網上教程多,基本滿足需求
準備好語音材料及文本文件並上傳後,就可以讓微軟開始學習啦。
填寫音頻和文本文件的基本信息:名字,描述,語言選擇(zh-CN為簡體中文),性別,文本文件路徑,音頻文件壓縮包路徑
需要一點耐心,要傳一陣子。在上傳的過程中系統會自動檢驗文本文件和音頻文件的格式,為了防止花很長時間上傳大文件結果檢驗失敗的情況發生,可以先傳幾個小文件試試,允許多次上傳。
status那一項顯示的是當前文件的處理狀態:
Utterance那一項顯示的是文本內容和音頻文件成功匹配的數量,比如音頻壓縮包中包含10個音頻文件,結果只有7個文件和文本文件的內容能對應上,此數值就會顯示為7。匹配數量越多越好
Report那一項顯示的是上傳文件的質量評估報告,可以下載下來,其具體含義如下:
上傳完成後,可以開始創建個性化的語音了:創建語音
點擊 「Create New」按鈕
選擇已上傳的文件(可多選),輸入相應的信息,然後點擊「Create」按鈕,系統會自動跳轉到我的語音頁面。
此頁面上的status項顯示了當前個性化語音的創建狀態:
NotStarted表示創建語音的請求正在隊列中等待
NotStarted
Running 表示語音正在被創建
Running
Succeeded表示語音創建成功
Succeeded
在出現Succeeded之前請耐心等待,創建(傳說中的神經網路深度學習)過程會根據上傳的文件數量和體積有所不同,幾百個utterances大概耗時幾個小時;20000以上utterances的訓練時間將達到40小時以上(干別的事去吧,不用一直在線盯著它看)。
當出現Succeeded後,可以點擊"Test"按鈕已檢驗效果(可多次檢驗)。
點擊「New Testing」按鈕。
如果選擇的是 Plain text,則在文本框中輸入普通文本;如果選擇SSML,則需要輸入xml格式的文本。點擊「Confirm「,文本的長度限制為1024個字元。
在出現頁面中,status項會顯示當前測試的狀態:
當處理成功後,可以點擊「Audio output」項中的「Download」鏈接下載剛剛生成的語音文件
點擊左上角的左箭頭回到之前的頁面,如果對當前生成的語音滿意,可以點擊「Deploy」按鈕部署該語音到Azure雲平台上。
----------------------- 我是選修課分割線 ---------------------
如果想實時調用自己創建的個性化語音,比如智能語音設備的交互功能,或者是手機APP的交互功能,就需要將它部署到Azure雲平台,並為其創建Endpoint。具體操作方法如下:
回到我的聲音主界面,點擊「Deploy」按鈕,然後輸入語音服務的名字和描述。點擊「Create」按鈕後頁面會自動跳轉到「Endpoint」頁。
當Status項出現Succeeded,表示部署成功。此時需要記下剛剛生成的endpoint URL。下面開始測試這個endpoint,點擊「Test」按鈕。
輸入要測試的文本(100字元以內),點擊播放按鈕,即可以聽到剛才創建的個性化語音了。
如果想把比較大的純文本文件轉換成語音文件,並保存下來,或者是在智能設備上在線使用,就需要調用剛剛創建好的個性化語音服務的API了。如果你是苦逼碼農就不多解釋了,自己去微軟家的github上趴拉源代碼吧: TTS調用源代碼
如果是 IT 小白,也沒興趣研究代碼,可以去下我修改打包好的程序 (JAVA 菜雞後端,表示不會前端和UI,只能弄個 jar 出來,前端高手們可以自己寫個酷炫的UI界面)。
下載鏈接: 百度盤地址 提取碼:j8S1
如果要運行這個jar,需要先安裝配置 jdk,安裝配置 jdk 的過程很簡單,網上隨便搜一下就能找到大把教程,這裡給個參考: JDK的安裝配置方法
簡單介紹一下步驟:
選擇「系統變數」區域的「新建」功能, 在」變數名「處填寫: JAVA_HOME,在」變數值「處填寫剛才複製的路徑。
打開「系統變數」區域的Path,將這條語句;%JAVA_HOME%in追加到Path變數值的最後面
Path
;%JAVA_HOME%in
驗證一下安裝配置是否成功,可以點擊」開始「,然後敲 cmd 打開命令行窗口,輸入 java 回車,如果出現用法介紹的頁面,就說明安裝成功了
jdk 安裝配置完成後,就可以開始運行 jar 文件來轉換文本文件了:
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 官方文檔
最後,居老師美圖鎮樓 ^_^