NSSpeechSynthesizer 在 macOS 上获取 Siri 的声音
NSSpeechSynthesizer get Siri voices on macOS
有没有办法获得 NSSpeechSynthesizer
的 Siri 声音? NSSpeechSynthesizer.availableVoices()
没有列出它们,但也许有未记录的技巧或其他东西?
我也尝试过使用 AVSpeechSynthesizer
,即使它应该在 macOS 10.14+ 上可用,我也无法大声朗读……
我使用了 Playground 来测试这个,代码来自 NSHipster:
import Cocoa
import AVFoundation
let string = "Hello, World!"
let utterance = AVSpeechUtterance(string: string)
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
Siri 语音
我不知道有什么技巧可以让 Siri 语音可用,恐怕无法通过 public API.
让它工作
NSSpeechSynthesizer
和 AVSpeechSynthesizer
都利用了 SpeechSynthesis.framework
(包含在 ApplicationServices.framework
中)。
- 快速检查它,函数
BuildDefaultVoiceList(bool)
检查包标识符(通过 PermitAllVoices
将其与 com.apple.VoiceOverUtility
、com.apple.VoiceOver
、com.apple.VoiceOverUtilityCacheBuilder
进行比较)。
- 可能还有其他检查。
所有语音都存储在/System/Library/Speech/Voices
文件夹中。试图复制语音,更改 Info.plist
值使其看起来像另一个语音,但仍然不是 available/working。
你想走多远?您想禁用 SIP、修改框架、预加载您的东西……值得吗?
AVSpeechSynthesizer
macOS
它可以工作,但它有问题,您必须不时终止该服务。
可用语音列表
AVSpeechSynthesisVoice.speechVoices().forEach { voice in
print("Name: \(voice.name) Language: \(voice.language) Identifier: \(voice.identifier)")
}
说
let utterance = AVSpeechUtterance(string: "Ahoj, jak se máš?")
utterance.voice = AVSpeechSynthesisVoice(identifier: "com.apple.speech.synthesis.voice.zuzana.premium")
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
不说话?
当您调用 speak(utterance)
时会调用以下所有方法(委托),并且它会正常工作:
speechSynthesizer(_:didStart:)
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
speechSynthesizer(_:didFinish:)
如果你只得到 speechSynthesizer(_:didCancel:)
方法调用,你必须终止 speechsynthesisd
进程,那就有问题了:
kill `pgrep speechsynthesisd`
然后再试一次,它为我解决了问题。
额外的语音安装
- 系统偏好设置 - 辅助功能 - 语音
- 系统语音 - 单击并向下滚动 & select 自定义...
- Select 要安装的附加语音
有没有办法获得 NSSpeechSynthesizer
的 Siri 声音? NSSpeechSynthesizer.availableVoices()
没有列出它们,但也许有未记录的技巧或其他东西?
我也尝试过使用 AVSpeechSynthesizer
,即使它应该在 macOS 10.14+ 上可用,我也无法大声朗读……
我使用了 Playground 来测试这个,代码来自 NSHipster:
import Cocoa
import AVFoundation
let string = "Hello, World!"
let utterance = AVSpeechUtterance(string: string)
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
Siri 语音
我不知道有什么技巧可以让 Siri 语音可用,恐怕无法通过 public API.
让它工作NSSpeechSynthesizer
和AVSpeechSynthesizer
都利用了SpeechSynthesis.framework
(包含在ApplicationServices.framework
中)。- 快速检查它,函数
BuildDefaultVoiceList(bool)
检查包标识符(通过PermitAllVoices
将其与com.apple.VoiceOverUtility
、com.apple.VoiceOver
、com.apple.VoiceOverUtilityCacheBuilder
进行比较)。 - 可能还有其他检查。
所有语音都存储在/System/Library/Speech/Voices
文件夹中。试图复制语音,更改 Info.plist
值使其看起来像另一个语音,但仍然不是 available/working。
你想走多远?您想禁用 SIP、修改框架、预加载您的东西……值得吗?
AVSpeechSynthesizer
macOS
它可以工作,但它有问题,您必须不时终止该服务。
可用语音列表
AVSpeechSynthesisVoice.speechVoices().forEach { voice in
print("Name: \(voice.name) Language: \(voice.language) Identifier: \(voice.identifier)")
}
说
let utterance = AVSpeechUtterance(string: "Ahoj, jak se máš?")
utterance.voice = AVSpeechSynthesisVoice(identifier: "com.apple.speech.synthesis.voice.zuzana.premium")
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
不说话?
当您调用 speak(utterance)
时会调用以下所有方法(委托),并且它会正常工作:
speechSynthesizer(_:didStart:)
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
speechSynthesizer(_:didFinish:)
如果你只得到 speechSynthesizer(_:didCancel:)
方法调用,你必须终止 speechsynthesisd
进程,那就有问题了:
kill `pgrep speechsynthesisd`
然后再试一次,它为我解决了问题。
额外的语音安装
- 系统偏好设置 - 辅助功能 - 语音
- 系统语音 - 单击并向下滚动 & select 自定义...
- Select 要安装的附加语音