ale*_*ner 10 macos avfoundation avspeechsynthesizer swift nsspeechsynthesizer
有没有办法获得 Siri 的声音NSSpeechSynthesizer
?NSSpeechSynthesizer.availableVoices()
没有列出它们,但也许有一个未记录的技巧或什么?
我也尝试过使用AVSpeech?Synthesizer
,即使它应该可以在 macOS 10.14+ 上使用,但我无法大声朗读……
我已经使用 Playground 使用来自NSHipster的以下代码对此进行了测试:
import Cocoa
import AVFoundation
let string = "Hello, World!"
let utterance = AVSpeechUtterance(string: string)
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
Run Code Online (Sandbox Code Playgroud)
我不知道有什么技巧可以使 Siri 语音可用,恐怕不可能通过公共 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
值以使其看起来像另一个声音,但仍然不可用/工作。
你想走多远?你想禁用SIP,修改框架,预加载你的东西,......值得吗?
AVSpeech?Synthesizer
在 macOS 上它有效,但它有问题,您必须不时终止该服务。
AVSpeechSynthesisVoice.speechVoices().forEach { voice in
print("Name: \(voice.name) Language: \(voice.language) Identifier: \(voice.identifier)")
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
调用时会调用以下所有方法(委托),speak(utterance)
并且它按应有的方式工作:
speechSynthesizer(_:didStart:)
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
speechSynthesizer(_:didFinish:)
如果您只获得speechSynthesizer(_:didCancel:)
方法调用并且必须终止该speechsynthesisd
进程,则会出现问题:
kill `pgrep speechsynthesisd`
Run Code Online (Sandbox Code Playgroud)
然后再试一次,它为我解决了问题。
归档时间: |
|
查看次数: |
576 次 |
最近记录: |