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

如何让macOS的say工具与NSSpeechSynthesizer支持Siri语音?

在macOS中让say或NSSpeechSynthesizer使用Siri语音的问题

先聊聊这个让人头疼的兼容性问题——不同macOS版本里,Siri语音和say命令、NSSpeechSynthesizer的适配情况差异还挺大的:

macOS 11 (Big Sur) 的限制

在Big Sur里,你会发现say命令完全不识别Siri语音:

  • 执行 say -v '?' 根本不会列出任何Siri语音;
  • 哪怕显式指定Siri语音的名字(比如 say -v NoraSiri hi!),系统会直接提示找不到对应语音;
  • 就算用Siri语音的bundle ID(比如 com.apple.speech.synthesis.voice.custom.siri.nora.premium),虽然不会提示未知语音,但会抛出错误:Open speech channel failed: -86——而且只要是com.apple.speech.synthesis.voice.custom前缀的bundle ID,都会触发这个错误。

同样,NSSpeechSynthesizer也没法列出Siri语音,更没法选中它来输出语音。

有意思的是,Big Sur本身是支持把Siri语音用于TTS的:你可以在「系统偏好设置>辅助功能>语音」里把Siri语音设为系统语音,配合“按下快捷键朗读选中文字”功能正常使用。但奇怪的是,如果你选了Siri语音当系统语音,右键文本选「语音>开始朗读」时,这个语音却不会生效——这个差异也是MacRumors论坛里讨论过的话题。

遗憾的是,苹果并没有把Siri语音的使用权限通过say工具或者NSSpeechSynthesizer API暴露出来,目前在Big Sur里还没有办法让这两者直接调用Siri语音。

macOS Ventura 及之后的改进

从macOS Ventura开始,情况有了一点好转:如果把Siri语音设为系统默认语音,say命令可以隐式使用它——不需要加-v参数就能直接用Siri语音朗读内容。另外,Ventura里还支持交互式修改系统默认语音,方便快速切换到Siri语音。

不过要注意,就算在Ventura里,你还是没法通过-v参数显式指定Siri语音的名字或bundle ID来调用它,只能依赖系统默认设置。

获取Siri语音的Bundle ID

如果你需要查看Siri语音的bundle ID,可以用下面的命令:

查看已安装的Siri语音Bundle ID

ls /System/Library/Speech/Voices/*.SpeechVoice/Contents/Info.plist | grep -i siri | xargs -n 1 /usr/libexec/PlistBuddy -c 'print CFBundleIdentifier'

注:这个命令在从旧版本升级到Big Sur、且已经安装至少一个Siri语音的环境中有效。有用户反馈,全新安装的Big Sur机器里,/System/Library/Speech/Voices目录是空的。

查看所有可下载的Siri语音Bundle ID

/usr/libexec/PlistBuddy -c 'print DownloadableCustomVoices' /System/Library/PrivateFrameworks/SpeechObjects.framework/Resources/SpeechDataDefaults.plist | grep 'VoiceIdentifier' | sed -E 's/.+ = //'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:12:47