iOS/Swift - AVFoundation(-)文本轉語音

在iOS中我們想把文本轉換成語音使用的AVFoundation框架中的AVSpeechSynthesizer。
比如我們要把“你好”讀出來代碼如下:

AVSpeechSynthesizer * synthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance * utterance = [[AVSpeechUtterance alloc] initWithString:@"你好"];
[synthesizer speakUtterance:utterance];

運行程序會自動讀出“你好”。
這里的AVSpeechSynthesizer這個是合成器

AVSpeechSynthesizer

AVSpeechSynthesizer有以下的屬性:
speaking:是否在說話,只讀屬性
paused:是否已經停止說話,只讀屬性;
- (BOOL)stopSpeakingAtBoundary:(AVSpeechBoundary)boundary;:停止說話并且清除隊列;
- (BOOL)pauseSpeakingAtBoundary:(AVSpeechBoundary)boundary;:暫停說話;
- (BOOL)continueSpeaking;:繼續說話;
NSArray<AVAudioSessionChannelDescription *> *outputChannels:輸出頻道,iOS10加入,默認是沒有的也就是不設置就在系統的聲道;
delegate - AVSpeechSynthesizerDelegate:重要的屬性:
其中包括以下代理:

//  開始
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance;
// 完成
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance;
// 暫停
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance *)utterance;
// 繼續
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance *)utterance;
// 取消
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance *)utterance;
// 將要讀到的位置
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance;

AVSpeechUtterance

AVSpeechUtterance這里相當于一個人的聲帶。
我們看下AVSpeechUtterance里面的屬性。
voice:表示語言的種類,我們可以用AVSpeechSynthesisVoice的speechVoices來回去“目前”支持的的語言列表。
rate:播放語音的速率,相當于講話的速度哈。其中有

AVF_EXPORT const float AVSpeechUtteranceMinimumSpeechRate NS_AVAILABLE_IOS(7_0);  // 最小的說話速率(0.0)
AVF_EXPORT const float AVSpeechUtteranceMaximumSpeechRate NS_AVAILABLE_IOS(7_0);  // 最大的說話速率(1.0)
AVF_EXPORT const float AVSpeechUtteranceDefaultSpeechRate NS_AVAILABLE_IOS(7_0);  // 默認的說話速率(0.5)

pitchMultiplier:這個屬性是表示聲音的音調,他一般在[0.5 - 2],默認值是1
volume:是聲音的大小,也就是音量默認是1
postUtteranceDelaypreUtteranceDelay:這個屬性表示播放多個語音是,之間的間歇。post表示播放下一句的間歇時間,pre播放當前語句前的間歇時間。

下面是我打印的支持的聲音列表:

for (AVSpeechSynthesisVoice *voice in [AVSpeechSynthesisVoice speechVoices]) {
        NSLog(@"%@", voice.language);
    }
2017-01-15 16:28:59.969489 NSSpeechSythesizer[1204:766847] ar-SA  // 沙特阿拉伯 ????
2017-01-15 16:28:59.969527 NSSpeechSythesizer[1204:766847] cs-CZ  // 捷克共和國 ????
2017-01-15 16:28:59.969558 NSSpeechSythesizer[1204:766847] da-DK  // 丹麥 ????
2017-01-15 16:28:59.969586 NSSpeechSythesizer[1204:766847] de-DE  // 德國 ????
2017-01-15 16:28:59.969613 NSSpeechSythesizer[1204:766847] el-GR  // 希臘 ????
2017-01-15 16:28:59.969786 NSSpeechSythesizer[1204:766847] en-AU  // 澳大利亞 ????
2017-01-15 16:28:59.969971 NSSpeechSythesizer[1204:766847] en-GB  // 聯合王國  
2017-01-15 16:28:59.970051 NSSpeechSythesizer[1204:766847] en-IE  // 愛爾蘭 ????
2017-01-15 16:28:59.970077 NSSpeechSythesizer[1204:766847] en-US  // 美國 ????
2017-01-15 16:28:59.970351 NSSpeechSythesizer[1204:766847] en-ZA  // 南非 ????
2017-01-15 16:28:59.970446 NSSpeechSythesizer[1204:766847] es-ES  // 西班牙 ????
2017-01-15 16:28:59.970517 NSSpeechSythesizer[1204:766847] es-MX  // 墨西哥 ????
2017-01-15 16:28:59.970547 NSSpeechSythesizer[1204:766847] fi-FI  // 芬蘭 ????
2017-01-15 16:28:59.970575 NSSpeechSythesizer[1204:766847] fr-CA  // 加拿大 ????
2017-01-15 16:28:59.970630 NSSpeechSythesizer[1204:766847] fr-FR  // 法國 ????
2017-01-15 16:28:59.970660 NSSpeechSythesizer[1204:766847] he-IL  // 以色列 ????
2017-01-15 16:28:59.970687 NSSpeechSythesizer[1204:766847] hi-IN  // 印度 ????
2017-01-15 16:28:59.970714 NSSpeechSythesizer[1204:766847] hu-HU  // 匈牙利 ????
2017-01-15 16:28:59.970741 NSSpeechSythesizer[1204:766847] id-ID  // 印尼 ????
2017-01-15 16:28:59.970767 NSSpeechSythesizer[1204:766847] it-IT  // 意大利????
2017-01-15 16:28:59.970793 NSSpeechSythesizer[1204:766847] ja-JP  // 日本 ????
2017-01-15 16:28:59.970819 NSSpeechSythesizer[1204:766847] ko-KR  // 韓國 ????
2017-01-15 16:28:59.970945 NSSpeechSythesizer[1204:766847] nl-BE  // 比利時 ????
2017-01-15 16:28:59.971428 NSSpeechSythesizer[1204:766847] nl-NL  // 荷蘭 ???? 
2017-01-15 16:28:59.971531 NSSpeechSythesizer[1204:766847] no-NO  // 挪威 ????
2017-01-15 16:28:59.971559 NSSpeechSythesizer[1204:766847] pl-PL  // 波蘭 ????
2017-01-15 16:28:59.971613 NSSpeechSythesizer[1204:766847] pt-BR  // 巴西 ????
2017-01-15 16:28:59.971643 NSSpeechSythesizer[1204:766847] pt-PT  // 葡萄牙 ????
2017-01-15 16:28:59.971669 NSSpeechSythesizer[1204:766847] ro-RO  // 羅馬尼亞 ????
2017-01-15 16:28:59.971696 NSSpeechSythesizer[1204:766847] ru-RU  // 俄羅斯聯邦 ????
2017-01-15 16:28:59.971722 NSSpeechSythesizer[1204:766847] sk-SK  // 斯洛伐克 ????
2017-01-15 16:28:59.971749 NSSpeechSythesizer[1204:766847] sv-SE  // 瑞典 ????
2017-01-15 16:28:59.971795 NSSpeechSythesizer[1204:766847] th-TH  // 泰國 ????
2017-01-15 16:28:59.971891 NSSpeechSythesizer[1204:766847] tr-TR  // 土耳其 ????
2017-01-15 16:28:59.971959 NSSpeechSythesizer[1204:766847] zh-CN  // 中國 ????
2017-01-15 16:28:59.972096 NSSpeechSythesizer[1204:766847] zh-HK  // 中國香港 ????????
2017-01-15 16:28:59.973301 NSSpeechSythesizer[1204:766847] zh-TW  // 中國臺灣 ????

iOS 8添加了希伯來語-以色列,在iOS 9或10中沒有添加新語言。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,179評論 4 61
  • 最近項目剛剛交付,偶然間用到了語音播報和語音搜索的功能。語音搜索我用的是訊飛的demo,感覺效果還不錯,感興趣的話...
    奔跑的小螞蟻_8b28閱讀 8,504評論 13 6
  • 有道是:天下合久必分,分久必合。三國后期,司馬氏亂曹,謀逆主上。三分歸之一晉,為司馬昭所篡。下傳至第三代司馬勛之上...
    天地明珠閱讀 225評論 0 0
  • “有幸”生活圈里面遇見幾個愛折騰的人。 對于我們這種被21世紀“快餐文化”、“碎片化”影響的一代人,讓我看到超過三...
    小弟桑pc閱讀 3,068評論 0 0
  • 和柚溪的正式交集是在一個夕陽斜照的一個傍晚,和往常一樣,我坐在她身后看著夕陽,看著她的背影,突然,她好像在沙灘上發...
    冰瞳_7444閱讀 284評論 0 0