You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何在偏好语言下通过名称指定原生Siri语音?

获取原生Siri语音用于AVSpeechSynthesis

嘿,这个需求我之前做项目的时候刚好碰到过!要调用系统原生的Siri语音(不需要额外下载的那种),确实不能直接靠语音名称来定位——因为名称会随系统语言本地化变化,但我们可以通过**语音标识符(identifier)**和语言筛选来精准获取。

核心思路

原生Siri语音的AVSpeechSynthesisVoice对象,其identifier字段里会包含"Siri"关键词(比如英文原生语音的标识是com.apple.ttsbundle.Siri_en-US_compact),而额外下载的高质量Siri语音标识也带"Siri",但原生版本是系统默认自带的,不需要用户额外下载。我们可以结合目标语言(比如用户系统偏好的语言)来筛选出对应的原生Siri语音。

实现代码

首先写一个工具函数来获取指定语言的原生Siri语音:

func getNativeSiriVoice(for languageCode: String) -> AVSpeechSynthesisVoice? {
    // 遍历所有可用语音,筛选匹配语言且标识含"Siri"的语音
    return AVSpeechSynthesisVoice.speechVoices().first { voice in
        voice.language == languageCode && voice.identifier.contains("Siri")
    }
}

然后在你的语音合成逻辑里调用这个函数:

// 创建语音 utterance
let utterance = AVSpeechUtterance(string: "Hello, I'm Siri!")
// 获取用户系统偏好语言对应的Siri语音, fallback到英文
let targetLanguage = Locale.current.languageCode ?? "en-US"
if let siriVoice = getNativeSiriVoice(for: targetLanguage) {
    utterance.voice = siriVoice
} else {
    // 如果找不到对应语言的Siri语音,使用该语言的默认语音
    utterance.voice = AVSpeechSynthesisVoice(language: targetLanguage)
}
// 执行语音合成
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)

注意事项

  • 不同系统版本的Siri语音标识符可能略有差异,但contains("Siri")这个判断是通用的,能精准定位所有Siri系列语音。
  • 部分小语种可能没有原生Siri语音,所以一定要加fallback逻辑,避免语音合成失败。
  • 如果你想强制使用某个特定地区的Siri语音(比如美式英语),直接传入对应的语言代码(如"en-US")即可。

内容的提问来源于stack exchange,提问作者Frostie3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:28:36