ios 语音合成

苹果公司在iOS7中添加了文字转语音的功能,这对于辅助功能和其余任务来讲都是很是有用的工具,能够帮助用户浏览内容或增长程序的趣味。能够用AVSpeechSynthesizer和AVSpeechUtterance类来讲出任意字符串。对于长篇文原本说,这项功能很是方便,它令开发者能够得到比使用VoiceOver时更为精细的控制权,从而可以以编程的方式控制语音,包括选定发音内容和时机,以及调整音调和语速等,此外,即使用户不使用辅助功能,语音合成依然有效。编程

avspeech支持的语言种类包括:工具

  • Arabic (ar-SA)spa

  • Chinese (zh-CN, zh-HK, zh-TW)code

  • Czech (cs-CZ)开发

  • Danish (da-DK)字符串

  • Dutch (nl-BE, nl-NL)it

  • English (en-AU, en-GB, en-IE, en-US, en-ZA)io

  • Finnish (fi-FI)table

  • French (fr-CA, fr-FR)class

  • 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];
}