IOS研究之IOS下TTS語音合成的幾種方案
今天我說說iOS平台的TTS[Text To Speech]即語音合成技術方案。如果是在Android平台TTS根本不算個事情,因為Android系統本身就內建了TTS功能,中英文的使用效果上也還是不錯的。而iOS平台由於本身不支援TTS,所以開發人員如果想使自己的App具有TTS功能,首先要找到好用的TTS庫。上一篇我們學習了iOS Quartz2D字型描邊加粗等有興趣的朋友可以看下。
根據我的瞭解,在iOS平台有以下幾個選擇:
1,OpenEars和FliteTTS
Google下很容易就會檢索到這兩個庫:OpenEars和FliteTTS。OpenEars是開源的iOS庫,支援離線的語音辨識和TTS,但它主要是針對英語。而FliteTTS比較小巧,也不支援中文。如果做中文語音合成,這兩個庫根本用不上(網路上的廣泛說法,我沒有驗證)。
2,Google的線上語音合成服務
還有一個選擇就是Google的線上語音合成服務,請求格式為:
http://translate.google.com/translate_tts?tl=en&q=tekuba
如上樣本會返回“tekuba”的英文讀音檔案的mp3。如果需要的是中文發音,可以修改tl參數為zh,如下樣本:
http://translate.google.com/translate_tts?tl=zh&q=成功智慧網
如果App中需要的是固定的語音播報,使用google的這個線上服務是個不錯的選擇,只需要一次請求,將返回的mp3儲存在本地,以後直接讀取本地mp3即可。但是大部分情境都是需要轉換為語音的文本不固定,我們就只能選擇別的辦法了。
3,科大訊飛語音以及百度語音
目前,做中文語音合成的比較好的算是科大訊飛了,在語速,停頓上效果都不錯。但是它提供的iOS版本的SDK只是支援線上的語音合成(和上面google的線上合成服務類似),目前不支援本地離線合成。我諮詢了科大訊飛的技術人員,他們說支援離線語音合成的iOS版本SDK大概會在年中發布(我寫本文時是2014年)。
另外百度也在2013年10月份開發了語音技術平台,不過現在使用還需要申請,我沒有嘗試,不知道它是否支援iOS的離線語音合成,如果哪位同學使用過,也可以分享下。
4,iOS7提供的AVSpeechSynthesizer等新特徵
如果你的App僅支援iOS7系統的話,那麼這個iOS7中為AVFoundation.Framework引入的新特徵一定很適合你。
使用時匯入#import ,樣本如下:
AVSpeechSynthesizer *av = [[AVSpeechSynthesizer alloc]init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:@”成功智慧網”]; //需要轉換的文本
[av speakUtterance:utterance];
不過,據我測試,iOS7提供的這個介面合成的語音比較生硬且沒有停頓。
總結下來,在iOS平台目前語音離線合成還是比較麻煩的,如果是線上合成的話,使用科大訊飛的產品是個不錯的選擇。