苹果公司在iOS7中添加了文字转语音的功能,这对于辅助功能和其他任务来说都是非常有用的工具,可以帮助用户浏览内容或增加程序的趣味。可以用AVSpeechSynthesizer和AVSpeechUtterance类来说出任意字符串。对于长篇文本来说,这项功能非常方便,它令开发者可以获得比使用VoiceOver时更为精细的控制权,从而能够以编程的方式控制语音,包括选定发音内容和时机,以及调整音调和语速等,此外,即便用户不使用辅助功能,语音合成依然有效。
avspeech支持的语言种类包括:
-
Arabic (ar-SA)
-
Chinese (zh-CN, zh-HK, zh-TW)
-
Czech (cs-CZ)
-
Danish (da-DK)
-
Dutch (nl-BE, nl-NL)
-
English (en-AU, en-GB, en-IE, en-US, en-ZA)
-
Finnish (fi-FI)
-
French (fr-CA, fr-FR)
-
German (de-DE)
-
Greek (el-GR)
-
Hebrew (he-IL)
-
Hindi (hi-IN)
-
Hungarian (hu-HU)
-
Indonesian (id-ID)
-
Italian (it-IT)
-
Japanese (ja-JP)
-
Korean (ko-KR)
-
Norwegian (no-NO)
-
Polish (pl-PL)
-
Portuguese (pt-BR, pt-PT)
-
Romanian (ro-RO)
-
Russian (ru-RU)
-
Slovak (sk-SK)
-
Spanish (es-ES, es-MX)
-
Swedish (sv-SE)
-
Thai (th-TH)
-
Turkish (tr-TR)
中文(简体中文)
阿拉伯语(沙特阿拉伯)
中文(普通话)
中文(香港)
中文(台湾)
捷克
丹麦
荷兰语(比利时)
荷兰语
英语(澳大利亚)
英语(英国)
英语(爱尔兰)
英语(美国)
英语(南非)
芬兰语
法语(加拿大)
法语(标准)
德语(标准)
希腊语
北印度语
匈牙利语
印尼语
意大利语(标准)
日语
韩语
挪威语
波兰语
葡萄牙语(巴西)
葡萄牙语(葡萄牙)
罗马尼亚语
俄语
斯洛伐克语
西班牙语
西班牙语(墨西哥)
瑞典语
泰语
土耳其语
对于下面的代码只要稍微修改一下代码,就可以换用其他语言和地域口音来发声了。使用AVSpeechSynthesisVoice可以选定某一种语言,也可以遍历可使用的各种语言。
- (void)action
{
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"hello there you beautiful world"];
utterance.rate = AVSpeechUtteranceMinimumSpeechRate + (AVSpeechUtteranceMaximumSpeechRate - AVSpeechUtteranceMinimumSpeechRate) * 0.2;
utterance.voice = [self anotherVoiceForLanguage:@"en"];
AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
[synthesizer speakUtterance:utterance];
}
- (AVSpeechSynthesisVoice *)anotherVoiceForLanguage:(NSString *)lang
{
//srand(time(NULL));
NSArray *voices = [AVSpeechSynthesisVoice speechVoices];
NSMutableArray *voicesForLanguage = [NSMutableArray array];
for (AVSpeechSynthesisVoice *voice in voices) {
if ([voice.language hasPrefix:lang]) {
[voicesForLanguage addObject:voice];
}
}
NSUInteger voiceIndex = rand() % voicesForLanguage.count;
return voicesForLanguage[voiceIndex];
}