BluetoothLE是否会破坏计时器计时?

时间:2019-07-12 10:04:50

标签: swift xcode bluetooth-lowenergy avfoundation

我的应用利用计时器来同时播放多个音频文件。

要赋予音频最大的优先级,AVAudioSession使用.playAndRecord类别并允许播放和蓝牙。

这样设置计时器,并使其优先级高于应用程序内的用户界面(滚动时表视图会变得口吃,否则滚动时音频播放会停止),应用程序外的所有用户交互均不受影响:

let timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: false, block: { _ in
  RunLoop.main.add(timer, forMode: RunLoop.Mode.common) 
}

这可以确保即使设备被锁定,计时器也可以正常工作。

请不要告诉我计时器不够精确,就音频播放而言,它们似乎可以正常工作到几毫秒。

这在airplay(通常具有较小的延迟)和常见的蓝牙扬声器(它们似乎使用bluetoothA2DP)上正常工作。

但是,我发现,在我的大众汽车中使用蓝牙(使用低能耗的蓝牙LE)时,确实弄乱了计时器的计时。它们都以正确的顺序射击,但它们不再精确。

bluetoothLE是否会影响计时器,是否有办法避免这种情况?

顺便说一句,它似乎也在逐位压缩音频质量。

1 个答案:

答案 0 :(得分:1)

结果是,将AVAudioSession类别设置为.playback可以完全解决问题。 先前的.playAndRecord设置似乎允许处于锁定状态的更多可用资源,但对BluetoothLE连接却产生相反的作用。

现在,当音频路由更改时,我将仅在AVAudioSession个类别之间切换。