最近一個web項目中,需要進行語音播報,將動態的文字轉換為語音(TTS)存為WAV文件后通過web播放給用戶。選擇了微軟所提供的SAPI (The Microsoft Speech API),只需要幾行代碼即可實現。主要的問題是選擇一個好的中文語音庫,讓播放的聲音更貼近真人。各個中文版操作系統自帶的中文語音包如下(通過控制面板的語音屬性進行查看):
Windows 2000/XP/Vista:無
Windows 7中文版、Windows 2008中文版:Microsoft lili
Windows 8中文版、Windows 2012中文版:Microsoft Huihui Desktop
另外,還有很多廠商推出了自己的語音包,也有不少中文的,通過對比,發現Win8中文版開始提供的"Microsoft Huihui Desktop”(以下簡稱桌面版Huihui)效果最好。如果發布的web服務器是win8中文版或者server2012中文版,則可以直接通過代碼使用這個語音包,但是對於其他操作系統或者是非中文的操作系統,想要使用這個語音包,就有不少問題了。主要有三個問題:
1.沒有現成的語音包
實際上,微軟並沒有提供獨立語音庫下載安裝,也就是說,並沒有桌面版Huihui的語音包供安裝。
解決方法:微軟在另一套語音引擎中(Microsoft Speech Platform),也提供了很多語音包,其中一個"Microsoft Server Speech Text to Speech Voice (zh-CN, HuiHui)”(以下簡稱服務器版Huihui),這其實和桌面版Huihui在發音方面,完全一致(下載Microsoft Speech Platform - Runtime Languages (Version 11)其中的MSSpeech_TTS_zh-CN_HuiHui.msi安裝即可)。可以使用這個語音包,來實現桌面版Huihui的播放效果。
注意:這個安裝包執行一下就消失了,沒有需要用戶交互的操作界面,不用擔心,已經安裝好了。
2.語音引擎不一致
語音播放需要語音引擎的支持。實際上微軟的語音引擎系統已經發展了好幾代,從SAPI4、SAPI5(最后一版是5.4)發展到目前的Microsoft Speech Platform 11。對於SAPI,Windows XP內置了 TTS 語音引擎SAPI5.1,Vista、Server 2008內置SAPI5.3,Win7內置SAPI5.4,無需安裝。而Microsoft Speech Platform 11目前沒有內置於操作系統,需要下載Microsoft Speech Platform - Runtime (Version 11)安裝來支持語音包,注意里面有x86和x64版,應該根據服務器的操作系統版本來確定安裝。
3.修改注冊表
實際上通過上述兩個步驟安裝語音引擎和語音包,有兩個問題:一是無法在控制面板中看到安裝好的語音包(32位系統C:\Windows\System32\Speech\SpeechUX\sapi.cpl,64位系統通過C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl才能看到),二是使用SAPI的GetVoices()方法,也獲取不到這個語音包,也就無法繼續執行轉換語音的功能。
這里的主要問題是這個語音包是供Microsoft Speech Platform 11使用的,其語音包的注冊信息,和SAPI支持的語音包注冊信息不在一個位置(主要是注冊表信息),導致了控制面板和SAPI的代碼無法獲取到它支持的語音。查閱了很多國外的資料,發現可以通過修改注冊表或修改服務器版Huihui語音包的安裝程序來解決這個問題。
修改注冊表法:
如果已經安裝了原版服務器版Huihui,進入注冊表,將
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server
- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Speech Server
導出。然后用記事本打開這兩個注冊表文件,
- 將全部“Speech Server\v11.0”替換為“Speech”
- 將全部“Speech Server\\v11.0”替換為“Speech”
保存后,導入到注冊表,如果提示錯誤,也沒關系。
注意:32位系統只有第一個注冊表位置。64位系統全都需要導出。
修改安裝包法:
(1)安裝orca軟件
這是一個修改安裝程序(msi)的軟件。下載安裝好后打開軟件即可。
(2)修改語音包
orca-file-open,打開原版語音包,定位到Tables的Registry,如下圖,將所有Speech Server\v11.0修改為Speech,然后File-Save即可。保存后的就是需改的語音包。
我修改好了一個,提供了下載。
總結:
安裝語音引擎Microsoft Speech Platform 11。
安裝修改好的語音包MSSpeech_TTS_zh-CN_HuiHui.msi/或安裝原版語音包然后修改注冊表。
本文只介紹如果用SAPI引擎(命名空間System.Speech)來利用最新語音庫,實際上,Microsoft Speech Platform 11這個語音引擎(命名空間Microsoft.Speech)具有更加強大的功能,比如支持VoiceXML,詳細可參考。
參考:

