ios 语音合成

苹果在iOS7中引入的文字转语音功能提供了一种强大的工具,可用于辅助功能和多种任务。通过AVSpeechSynthesizer和AVSpeechUtterance类,开发者能控制发音内容、时机、音调和语速。该功能支持多种语言,允许用户编程控制语音输出,适用于各种场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

苹果公司在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];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值