我正在开发一个需要麦克风输入的音乐应用,因此我的AVAudioSessionCategory
设置为AVAudioSessionCategoryPlayAndRecord
。
我正在尝试使蓝牙耳机能够与该应用配合使用,但是我注意到将BT与不同的AVAudioSession
类别配对时存在一些特殊之处:
如果我使用AVAudioSessionCategoryAmbient
,则在应用程序运行时或应用程序启动之前,BT耳机可以配对/取消配对。配对或取消配对耳机时,我也能收到AVAudioSessionRouteChangeNotification
个消息。
但是,如果我使用AVAudioSessionCategoryPlayAndRecord
,可以在应用启动之前将其与BT配对并接收音频,但是如果我尝试在应用运行时进行配对,则无法正常工作。我的BT耳机将指示它们已“连接”,但BT图标不会出现在iOS状态栏上。开启或关闭耳机时,我也没有收到任何AVAudioSessionRouteChangeNotification
或其他音频中断通知。
如果将应用程序移到后台然后重新输入,我可以使BT工作,但是当应用程序处于前台时,我永远无法配对。
我将libpd用于音频引擎,这是初始化PdAudioController
对象的方法:
[self.pdAudio configurePlaybackWithSampleRate:samplingRate numberChannels:2 inputEnabled:YES mixingEnabled:NO];
//enable bluetooth
[PdAudioController setSessionOptions:AVAudioSessionCategoryOptionAllowBluetoothA2DP];
使用AVAudioSessionCategoryPlayAndRecord
时,是否可以更改其他设置以在应用程序运行时配对耳机?
答案 0 :(得分:0)
许多蓝牙耳机似乎仅限于特定的采样率集,有时输入(麦克风)和输出(扬声器)的采样率不相同。因此,他们无法连接到采样率不兼容的现场音频会话。
当应用程序停止其音频会话进入后台,然后又重新进入前景时,此间隙使音频会话和音频单元代码可以重新协商采样率(例如,建议并处理失败/错误(-50)等代码),然后才能(重新)启用会话并(重新)启动音频单元。
如果您收到路线更改通知,则可以尝试让该应用停止音频,中断其会话,等待几分钟的滴答声,然后根据需要重新启动所有音频。