AVSpeechSynthesizer 使用 Apple Watch 的扬声器而不是耳机作为输出通道

AVSpeechSynthesizer uses Apple Watch's speaker and not headset as output channel

我在 WatchKit 应用程序扩展中使用 AVSpeechSynthesizer

逻辑很简单,可以概括为:

let utterance = AVSpeechUtterance(string: "Hello, World")
synth.speak(utterance)

这很好用,但语音总是通过 Apple Watch 的板载扬声器转播。
我需要通过连接到 iPhone.

的 airpods 进行演讲

之前我通过 WatchConnectivity 将任务委派给 iPhone,效果很好,但由于 WatchConnectivity 通信延迟,我将控制逻辑直接移到了 Apple Watch 上。
我以为 watchOS 会在内部将音频移交给 BLE 设备,但它并没有按计划进行。

也许我遗漏了什么?
我需要指定音频通道吗synth.outputChannels?
我是否需要显示要求用户 select 音频输出源的 AirPlay 弹出窗口?
如果是这样,我该怎么做?

我无法在网上找到很多关于此事的信息,因此非常感谢您的帮助。

我只是想找到一种通过 AirPods 接收语音的方法。

您可以使用以下代码显示音频设备选择器并将音频定向到所选设备:

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSession.Category.playback,
                                mode: .default,
                                policy: .longFormAudio,
                                options: [])
    session.activate(options: []) { (success, error) in
            // Check for an error and play audio.
        if let err = error) {
            print(err)
        }
    }
} catch {
    print(error)
}