初始化AVAudioSession时保持蓝牙声音

时间:2014-05-27 17:49:38

标签: ios iphone objective-c bluetooth avaudiosession

我快要疯了。

我有一个录音应用程序。我遇到了一个问题,当我打开我的应用程序时,如果我在蓝牙设备上听音乐,它会自动路由回到手机内置扬声器。

无论如何,我希望一切都保持不变。即使我开始录制,如果用户正在收听蓝牙音箱上的某些内容,请继续这样做。用户有耳机吗?保持音乐在那里。请保持原样。

这就是我目前正在初始化会话的方式:

[[AVAudioSession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    withOptions:AVAudioSessionCategoryOptionMixWithOthers | AudioSessionCategoryOptionAllowBluetooth
    error: nil];

我允许它播放,录制,与其他人混音并允许蓝牙,那么为什么要将音频输出路由回内置扬声器?

由于

5月30日编辑

我设法得到了更好的东西,但仍然遗漏了一些东西。

如果我添加这一行:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];

音乐留在蓝牙设备中但听起来很可怕。

根据这个答案:https://stackoverflow.com/a/18541874/517688这是因为

  

EnableBluetoothInput会根据此影响输入和输出。还要记住,由于蓝牙输入设备的限制,音频将以8000 Hz的频率播放

因此,在使用蓝牙设备时,如果不扭曲声音,就无法保持一致吗?

2 个答案:

答案 0 :(得分:6)

在iOS 10中,Apple添加了选项AVAudioSessionCategoryOptionAllowBluetoothA2DP。他们还将AudioSessionCategoryOptionAllowBluetooth的含义更改为仅允许使用HFP蓝牙配置文件进行输出,这是您获得低质量音频输出的地方。

如果您使用此新选项代替代码段中的AudioSessionCategoryOptionAllowBluetooth选项,它将允许高质量输出但不允许低质量音频输出。

这里是选项的在线文档,但不幸的是,没有关于新的iOS 10选项的在线描述。您可以在AVAudioSession.h的代码内文档中查看更多详细信息。 https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions?language=objc

答案 1 :(得分:0)

不幸的是,我直接从Apple技术支持

得到了这个答案
  

根据当前发货的系统配置,没有支持的方法来实现所需的功能。如果您希望Apple将来考虑添加对此类功能的支持,请通过http://bugreport.apple.com上的Bug Reporter工具提交增强请求。

就是这样......