【问题标题】:AVSpeechSynthesizer uses Apple Watch's speaker and not headset as output channelAVSpeechSynthesizer 使用 Apple Watch 的扬声器而不是耳机作为输出通道
【发布时间】:2020-03-24 15:28:51
【问题描述】:

我在 WatchKit 应用扩展中使用 AVSpeechSynthesizer

逻辑很简单,总结如下:

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

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

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

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

我无法在网上找到有关此问题的大量信息,因此我们将不胜感激。

我只是想找到一种通过我的 AirPods 进行演讲的方法。

【问题讨论】:

  • 我认为您需要将 AirPods 与手表配对并选择它们作为音频输出
  • @Paulw11 这是一种解决方案,但watchOS 不会询问使用哪个音频设备。例如,在音乐播放器场景中,它会显示对话请求和配对蓝牙设备的选项。在我开始演讲之前,我可以通过播放无声曲目并让 watchOS 弹出它的对话框来解决这个问题。但充其量是hackish。您可以建议一种更清洁的方法吗?
  • 从表盘向上滑动时不直接使用音频设备选择按钮吗?我相信用户必须将所有音频路由到耳机。 AVRoutePickerView 在 watchOS 上不可用
  • @Paulw11 理想情况下我会,但我的客户希望这种帮助/提示来自应用程序。

标签: ios avfoundation watchkit avspeechsynthesizer


【解决方案1】:

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

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)
}

【讨论】:

  • 有趣。我已经有了以下AVAudioSession.sharedInstance().setCategory(.playback, options: .mixWithOthers)AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)。也许使用policy: .longFormAudio 和空的session.activate 可能对我有用。绝对比我播放空音频剪辑的想法更好。谢谢,会试一试,让你知道:)
  • 是的,在我的测试中,只有.longFormAudio 显示了输出选择器。
  • 那是一个很好的测试,因为根据activate(options:completionHandler:) 上的文档,它声明了Playback of long-form audio on watchOS requires a Bluetooth audio route. If necessary, the system presents an audio route picker to the user, letting them choose the Bluetooth route.。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 2023-04-08
  • 2022-09-26
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多