Swift NSSpeech合成器在macOS上获得Siri语音

Swift NSSpeech合成器在macOS上获得Siri语音,swift,macos,avfoundation,avspeechsynthesizer,nsspeechsynthesizer,Swift,Macos,Avfoundation,Avspeechsynthesizer,Nsspeechsynthesizer,有没有办法获取语音合成器的Siri语音NSSpeechSynthesizer.availableVoices()没有列出它们,但可能有未记录的技巧或其他什么 我也尝试过使用AVSpeech​合成器,即使它很难在macOS 10.14+上使用,我也无法让它大声读出 我使用了一个游乐场来测试这一点,代码如下: Siri语音 我不知道有什么诀窍可以让Siri语音可用,我恐怕不可能通过公共API让它工作 NSSpeechSynthesizer和AVSpeechSynthesizer都使用speechs

有没有办法获取语音合成器的Siri语音
NSSpeechSynthesizer.availableVoices()
没有列出它们,但可能有未记录的技巧或其他什么


我也尝试过使用
AVSpeech​合成器
,即使它很难在macOS 10.14+上使用,我也无法让它大声读出

我使用了一个游乐场来测试这一点,代码如下:

Siri语音 我不知道有什么诀窍可以让Siri语音可用,我恐怕不可能通过公共API让它工作

  • NSSpeechSynthesizer
    AVSpeechSynthesizer
    都使用
    speechsynthesizer.framework
    (包含在
    ApplicationServices.framework
    中)
  • 快速检查它,函数
    BuildDefaultVoiceList(bool)
    检查包标识符(通过
    PermitAllVoices
    将其与
    com.apple.VoiceOverUtility
    com.apple.VoiceOverUtilityCacheBuilder
    )进行比较)
  • 可能还有其他支票
所有语音都存储在
/System/Library/Speech/voices
文件夹中。试图复制语音,更改
Info.plist
值使其看起来像另一个语音,但仍然不可用/无法工作

你想走多远?你想禁用SIP,修改框架,预加载你的东西。。。值得吗

AVSpeech​macOS上的合成器
它是有效的,但它是有缺陷的,你必须时不时地终止服务

可用语音列表
AVSpeechSynthesisVoice.speechVoices().forEach{voice in
打印(“名称:\(voice.Name)语言:\(voice.Language)标识符:\(voice.Identifier)”)
}
通话
let outrance=avspeechoutrance(字符串:“Ahoj,jak se máš?”)
eartance.voice=AVSpeechSynthesisVoice(标识符:“com.apple.speech.synthesis.voice.zuzana.premium”)
let synthesizer=AVSpeechSynthesizer()
合成器。说话(说话)
他不说话吗? 当您调用
speak(outreace)
时,将调用以下所有方法(委托)并按其应做的方式工作:

如果只得到方法调用,并且必须终止
speechsynthesisd
进程,则会出现问题:

kill`pgrep speechsd`
然后再试一次,它为我解决了问题

附加语音安装
  • 系统首选项-可访问性-语音
  • 系统语音-单击并向下滚动,然后选择自定义
  • 选择要安装的附加语音

“我读不出来”,你能具体说明你试过什么吗?@vrwim我基本上使用了zrzka在回答中建议的代码(我也更新了我的代码)。虽然我仍然无法让我的Mac电脑真正读出字符串。然而,我的主要目标是获得(更好的)Siri语音。对于公共API来说,这似乎是不可能的……非常感谢@zrzka提供了这个深入的答案!我的主要目标是得到Siri的声音,但正如你确认的那样,这似乎是不可能的。我希望用较新的
AVSpeech访问它们​合成器
API。不过,如果它指向与
NSSpeechSynthesizer
相同的框架,我现在将坚持使用它。
import Cocoa
import AVFoundation

let string = "Hello, World!"
let utterance = AVSpeechUtterance(string: string)

let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)