IOS7新特性-AVSpeechSynthesisVoice

介紹
從IOS5開始,IOS系統已經在siri上集成了語音合成的功能,可是是私有API。可是在IOS7,新增了一個簡單的API----AVSpeechSynthesizer來作這件事情。

嗓音
IOS7包含了一組能夠用來合成的聲音的嗓音,你能夠自定義多種嗓音來合成。 AVSpeechSynthesisVoice:speechVoices返回當前可用的嗓音數組:

2013-07-12 10:49:26.929 GreetingSpeaker[31267:70b] (
"[AVSpeechSynthesisVoice 0x978a0b0] Language: th-TH", 
"[AVSpeechSynthesisVoice 0x977a450] Language: pt-BR", 
"[AVSpeechSynthesisVoice 0x977a480] Language: sk-SK",
"[AVSpeechSynthesisVoice 0x978ad50] Language: fr-CA", 
"[AVSpeechSynthesisVoice 0x978ada0] Language: ro-RO", 
"[AVSpeechSynthesisVoice 0x97823f0] Language: no-NO",
"[AVSpeechSynthesisVoice 0x978e7b0] Language: fi-FI", 
"[AVSpeechSynthesisVoice 0x978af50] Language: pl-PL", 
"[AVSpeechSynthesisVoice 0x978afa0] Language: de-DE", 
"[AVSpeechSynthesisVoice 0x978e390] Language: nl-NL", 
"[AVSpeechSynthesisVoice 0x978b030] Language: id-ID", 
"[AVSpeechSynthesisVoice 0x978b080] Language: tr-TR", 
"[AVSpeechSynthesisVoice 0x978b0d0] Language: it-IT", 
"[AVSpeechSynthesisVoice 0x978b120] Language: pt-PT",
"[AVSpeechSynthesisVoice 0x978b170] Language: fr-FR",
"[AVSpeechSynthesisVoice 0x978b1c0] Language: ru-RU", 
"[AVSpeechSynthesisVoice 0x978b210]Language: es-MX", 
"[AVSpeechSynthesisVoice 0x978b2d0] Language: zh-HK",
"[AVSpeechSynthesisVoice 0x978b320] Language: sv-SE", 
"[AVSpeechSynthesisVoice 0x978b010] Language: hu-HU",
"[AVSpeechSynthesisVoice 0x978b440] Language: zh-TW",
"[AVSpeechSynthesisVoice 0x978b490] Language: es-ES",
"[AVSpeechSynthesisVoice 0x978b4e0] Language: zh-CN", 
"[AVSpeechSynthesisVoice 0x978b530] Language: nl-BE", 
"[AVSpeechSynthesisVoice 0x978b580] Language: en-GB",
"[AVSpeechSynthesisVoice 0x978b5d0] Language: ar-SA", 
"[AVSpeechSynthesisVoice 0x978b620] Language: ko-KR",
"[AVSpeechSynthesisVoice 0x978b670] Language: cs-CZ",
"[AVSpeechSynthesisVoice 0x978b6c0] Language: en-ZA", 
"[AVSpeechSynthesisVoice 0x978aed0] Language: en-AU",
"[AVSpeechSynthesisVoice 0x978af20] Language: da-DK",
"[AVSpeechSynthesisVoice 0x978b810] Language: en-US",
"[AVSpeechSynthesisVoice 0x978b860] Language: en-IE",
"[AVSpeechSynthesisVoice 0x978b8b0] Language: hi-IN", 
"[AVSpeechSynthesisVoice 0x978b900] Language: el-GR",
"[AVSpeechSynthesisVoice 0x978b950] Language: ja-JP" )

用下面的方法來建立一個特殊的嗓音:
AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];

若是嗓音不能被識別,返回值爲nil。

話語
話語表明一段講話,能夠傳遞到語音合成器來生成一段語音流。話語能夠用待發音的字符串來建立:
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"Hello world!"];

咱們能夠設置它的嗓音屬性voice:
utterence.voice = voice;

還有其餘各類屬性,包括:rate,volume和pitchMultiplier。例如,稍微放慢語速:
utterance.rate *= 0.7;

當話語建立完成,能夠把它放到語音合成器中。語音合成器會生成音頻:
AVSpeechSynthesizer *speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
[speechSynthesizer speakUtterance:utterance];

話語會被合成器放到隊列中,因此不用等待上一個結束,能夠連續傳送。可是,若是你嘗試傳送一個已經在隊列中的話語,系統會拋出異常。

實現
本文的例子是一個關於多語言問候語的應用。這充分體現了語音合成的通用性。
注意:定義話語的字符串都是羅馬字符,例如中文的'Ni hao'。示例項目定義了一個類,能夠生成一組嗓音對應的話語。
項目有一個選擇器供用戶選擇語言,而後按按鈕能夠聽到對應的生成的語音。

總結
在IOS7,語音合成器很是簡單,並且包含不少語言。合理的使用,能夠提升應用的訪問性,而不用時刻用你的手和眼來操做應用。數組

相關文章
相關標籤/搜索