今天我說說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平台目前語音離線合成還是比較麻煩的,如果是在線合成的話,使用科大訊飛的產品是個不錯的選擇。