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

如何获取NSSpeechSynthesizer的voiceName可接受字符串及文档查找方法

关于NSSpeechSynthesizer voiceName属性可接受字符串的说明

嘿,我来帮你理清这个问题!其实苹果官方文档不会直接列出所有可接受的voiceName字符串,因为可用语音取决于你的系统版本、安装的语言包,甚至地区设置。不过有两个关键方法能帮你搞定:

1. 直接获取系统所有可用语音名称

你可以通过NSSpeechSynthesizer提供的API动态获取当前系统支持的所有语音名称,这是最准确的方式。下面是示例代码:

Swift 版本

import AppKit

let availableVoices = NSSpeechSynthesizer.availableVoices()
for voice in availableVoices {
    // 获取语音的名称(就是你要给voiceName传的字符串)
    if let voiceName = NSSpeechSynthesizer.attributes(forVoice: voice)[.voiceName] as? String {
        print(voiceName)
    }
}

Objective-C 版本

#import <AppKit/AppKit.h>

NSArray<NSSpeechSynthesizerVoiceName> *availableVoices = [NSSpeechSynthesizer availableVoices];
for (NSString *voice in availableVoices) {
    NSString *voiceName = [[NSSpeechSynthesizer attributesForVoice:voice] valueForKey:NSSpeechSynthesizerVoiceName];
    NSLog(@"%@", voiceName);
}

运行这段代码,控制台会输出当前系统所有可用于voiceName的字符串,比如英文的"Alex"、"Samantha",中文的"Mei-Jia"(简体中文)、"Sin-Ji"(繁体中文)等。

2. 在苹果官方文档中查找相关说明

如果你想从《Apple NSSpeechSynthesizer Initialization Documentation》里找线索,可以按这个路径:

  • 找到NSSpeechSynthesizer的初始化方法(比如init(voiceName:)),文档里会说明voiceName参数需要是系统可用的语音名称,并指向availableVoices()方法。
  • 查看availableVoices()方法的文档,它会明确说明返回的数组元素就是可用于voiceName的合法字符串,同时你可以通过attributes(forVoice:)方法获取每个语音的详细属性(包括名称、语言、性别等)。

简单来说,文档不会给你硬编码的列表,但会告诉你怎么动态获取合法值——毕竟系统语音是可扩展的(用户可以在系统设置里添加更多语音)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:20:31