gpt4 book ai didi

iOS 应用程序蓝牙音频在 "Phone Mode."中推出

转载 作者:行者123 更新时间:2023-12-04 17:15:56 25 4
gpt4 key购买 nike

我有一个生成文本到语音 (TTS) 音频的 iOS 应用程序 (AVSpeechSynthesizer)。一位用户说他的汽车蓝牙扬声器的音频以“电话模式”(大概是调用或接听电话时的音频)输出,而不是“音乐模式”,就像 Youtube 和音乐以及 map 应用程序那样是。这也会导致处理来电无法与车载蓝牙扬声器正常工作。

不幸的是,我无法理解为什么,甚至无法理解“电话”和“音乐”模式之间的区别。使用手机的扬声器时,处理来电没有这样的问题。问题仅与蓝牙有关。

AVAudioSession初始化代码如下。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.

do {
let session = AVAudioSession.sharedInstance()
try session.setCategory(AVAudioSession.Category.playAndRecord, options: [.defaultToSpeaker, .allowBluetooth, .allowBluetoothA2DP])
try session.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
try session.setActive(true, options: .notifyOthersOnDeactivation)

} catch let error {
print("audioSession properties weren't set. Error: \(error.localizedDescription)")
}

return true
}

另外,AVSpeechSynthesizer代码如下

let synthesizer = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: newText)
synthesizer.speak(utterance)

这段代码还有什么应该做的,或者可能做错了吗?

提前致谢。

最佳答案

您所说的“电话模式”是 HFP(免提模式)。您包含了 .allowBluetooth,这意味着“更喜欢使用 HFP”。 (这是一个非常令人困惑的枚举名称。)

您所说的“音乐模式”是 A2DP,您通过 .allowBluetoothA2DP 允许它。

但是,A2DP 不是双向的,您使用 .playAndRecord 请求。所以 session 使用 HFP。

HFP 的音频质量明显比 A2DP 差。

对于 TTS,应该不需要麦克风,因此您可以将 .playAndRecord 替换为 .play(我可能会删除 .allowBluetooth).如果您出于其他目的需要麦克风,您应该放弃 .allowBluetoothA2DP,并且没有(标准)方法可以避免使用 HFP 通过蓝牙进行通信。

如果您是汽车和应用程序的制造商,则有非标准的方法可以解决此问题。您可以为手机打开第二个 A2DP channel ,或者您可以通过 BLE 或 iAP2 实现专有麦克风协议(protocol)。但是,在与 iPhone 通话时,无法使用标准设备执行此操作。 (如果这两种设备都支持 aptX,还有其他一些选择,但 iPhone 不支持,我也没有听到任何暗示会支持。)

请注意,您可以随时更改类别和选项,以及激活或停用 session 。因此,如果您有时需要麦克风,您可以仅在需要时切换到 .playAndRecord,并在用户不需要麦克风时将对用户的影响降至最低。

关于iOS 应用程序蓝牙音频在 "Phone Mode."中推出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68730069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com