在 macOS Mojave 上,在可可应用程序中,如何使用 AVSpeechSynthesizer?

Alf*_*uro 5 macos cocoa text-to-speech swift

AVSpeechSynthesizer 被标记为可在 macOS Mojave beta 上使用。

此前,它仅适用于 iOS、tvOS 和 watchOS。但是,如果我在 Xcode 10 中准备一个小型 macOS 测试项目,则会出现错误“使用未解析的标识符‘AVSpeechSynthesizer’”。在顶部,我有:

import Cocoa
import NaturalLanguage
import AVFoundation
Run Code Online (Sandbox Code Playgroud)

我的代码是:

let string = "Mickey mouse went to town"

let recognizer = NLLanguageRecognizer()
recognizer.processString(string)
let language = recognizer.dominantLanguage!.rawValue

let speechSynthesizer = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: string)
utterance.voice = AVSpeechSynthesisVoice(language: language)
speechSynthesizer.speak(utterance)
Run Code Online (Sandbox Code Playgroud)

它与 iOS 上的代码完全相同,但在 iOS 上它可以工作,在 macOS 上它会给出错误。任何帮助深表感谢。谢谢

pfa*_*ade 4

目前 Mojave 上的 AVFAudio.h 有这个:

#if TARGET_OS_IPHONE
#import <AVFAudio/AVAudioSession.h>
#import <AVFAudio/AVSpeechSynthesis.h>
#endif
Run Code Online (Sandbox Code Playgroud)

AVSpeechSynthesizer朋友在 AVSpeechSynthesis.h 中声明。这就是您看到该错误的技术原因,这些标头仅在针对 iOS 进行编译时才包含在内。

但我尝试过手动导入该标头,但我认为AVSpeechSynthesizer即使 #if 不存在,它也无法在 Mojave 上正常工作。尝试在莫哈韦沙漠上创建AVSpeechUtterance总是返回零。

因此,这要么是 Mojave 上未完成的工作,要么标题注释不正确,并且无法通过 Mojave 上的 AVFoundation 进行语音合成。请注意,它NSSpeechSynthesizer仍然存在并且尚未标记为已弃用。