【问题标题】:On macOS Mojave, in a cocoa application, how to use AVSpeechSynthesizer?在 macOS Mojave 上,在可可应用程序中,如何使用 AVSpeechSynthesizer?
【发布时间】:2019-01-14 21:15:20
【问题描述】:

AVSpeechSynthesizer is marked as available on macOS Mojave beta.

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

import Cocoa
import NaturalLanguage
import AVFoundation

我的代码是:

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)

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

【问题讨论】:

    标签: swift macos cocoa text-to-speech


    【解决方案1】:

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

    #if TARGET_OS_IPHONE
    #import <AVFAudio/AVAudioSession.h>
    #import <AVFAudio/AVSpeechSynthesis.h>
    #endif
    

    并且AVSpeechSynthesizer 和朋友在 AVSpeechSynthesis.h 中声明。这是您看到该错误的技术原因,这些标头仅在为 iOS 编译时包含。

    但我已经尝试手动导入该标头,但我认为 AVSpeechSynthesizer 在 Mojave 上无法正常工作,即使该 #if 不存在。尝试在 Mojave 上创建 AVSpeechUtterance 总是返回 nil。

    因此,这要么是 Mojave 上未完成的工作,要么是标头注释错误,并且无法通过 AVFoundation on Mojave 进行语音合成。请注意,NSSpeechSynthesizer 仍然存在并且未被标记为已弃用。

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      相关资源
      最近更新 更多