一、ALSA+Pulseaudio在嵌入式Linux中的聲音解決方案
Linux音頻系統比較複雜,各層間有很多交叉,可能是最無序的子系統,并且它有兩套音頻驅動架構: OSS (Open Sound System)和ALSA (Advanced Linux Sound Architechture),是以底層驅動有OSS和ALSA兩套API。
ALSA經過多年的發展,基本統一了Linux聲霸卡硬體驅動層的借口,OSS日漸退出,但是在ALSA之上的各個應用層,方案和軟體繁多複雜,ESD,PulseAudio, JACK,GStreamer, 這些系統元件各個為戰,實作了不同的功能。ALSA與Pulseaudio的組合,是嵌入式Linux聲音解決方案的常見組合。
PulseAudio是一個聲音伺服器,簡單說,軟體要發聲就先發消息給聲音伺服器,然後聲音伺服器經過處理(主要是多條音頻流的混音),然後發給驅動控制聲音裝置發出聲音。Pulseaudio具有良好的可移植性,可以在多個作業系統中運作,包括其他的POSIX平台和微軟的Windows。
二、TTS引擎簡介
TTS(Text To Speech,文本轉語音)是語音合成應用的一種,它将儲存于電腦中的檔案,如幫助檔案或者網頁,轉換成自然語音輸出。TTS可以幫助有視覺障礙的人閱讀計算機上的資訊,或者隻是簡單的用來增加文本文檔的可讀性。TTS經常與聲音識别程式一起使用。
常用TTS引擎介紹
1.Ekho
ekho是國産軟體,現在到7.7.1版本,一個免費、開源的中文語音合成軟體。它目前支援粵語、國語(國語)、诏安客語、藏語、雅言(中國古代通用語)和韓語(試驗中),英文則通過 eSpeak或者Festival間接實作。Ekho支援Linux、Windows和Android平台。
2. eSpeak
是一個小型的、開放源碼的語音合成系統,支援多種語言。eSpeak可以将文本轉換成音素代碼,是以它也可以用于另一個語音合成引擎的前端。
3. Festival
Festival提供了一個通用的架構,基于c++編寫的,可用于建構語音合成系統,該系統包含了各種子產品示例。它提供了完整的文本轉語音的API,原生支援Mac OS,支援的語言包括英語和西班牙語。
4. SpeakRight
SpeakRight 是一個 Java 架構,用于編寫語音識别應用,基于 VoiceXML 技術。使用 StringTemplate 模闆引擎自動生成 VoiceXML 文檔。
5. FreeTTS
FreeTTS 是完全采用 Java 開發的語音合成系統,它是卡内基梅隆大學基于 Flite 這個小型的語音合成引擎開發的。
6.Festvox
Festvox項目建構了一個更加系統化、全新的語音合成功能。Festvox是大部分語音合成庫的基礎。
7.Mary
MARY是一個采用Java開發的、多語種的文本轉語音平台,它支援:德語、英語、美式英語、泰盧固語、土耳其語和俄語。
8. Flite
Flite是一個小型、快速的TTS系統,是著名的語音合成系統festival的C版本,可用于嵌入式系統。
三、pulseaudio在嵌入式系統上
1.在Linux下的典型方案,使用者提供配置ALSA來使用PulseAudio提供的虛拟裝置。盡管應用使用ALSA會将輸出的聲音輸出到PulseAudio,然後PulseAudio會使用ALSA它自己來通路真正的聲霸卡. PulseAudio同樣提供它自己的接口給應用程式,用來直接支援PulseAudio,就像那些遺留的基于ESD的軟體,這樣使得PulseAudio适合作為ESD的替代品。
2.Pulseaudio與ekho的關系
ekho通過pulseaudio提供的接口發聲,如果系統沒有pulseaudio支援,ekho隻能将文字轉換為音頻檔案。
3.Pulseaudio在嵌入式系統上的缺點
a.Pulseaudio本身不能在root模式下運作
b.Pulseaudio如果想在root模式下運作,需要使用system模式
c.在system模式下運作時,出于安全考慮會禁止加載子產品并且禁用共享記憶體資料傳輸,這意味着:系統模式下更高的記憶體使用率和CPU負載
四、pulseaudio工作原理圖