如何获取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
相关产品推荐
相关产品推荐

