我认为 AVAudioSession API 自 iOS7 以来已经发展了很多,并且经常令人困惑。我的目标是设置一个 RemoteIO 单元,从麦克风录制音频并通过耳机同时播放样本。如果没有耳机,则不要播放。如果存在蓝牙麦克风,则将其作为首选麦克风,而不是耳机麦克风或 USB 麦克风。如果有单独的耳机,则通过它播放样本。如果同一个蓝牙麦克风也有耳机功能,那么避免它播放样本,因为它会环回造成混乱。
什么是正确的 API 来完成这项工作?目前我正在使用以下代码,但它并没有完成全部工作。
AVAudioSession *session = [AVAudioSession sharedInstance];
NSUInteger bluetoothOpt = AVAudioSessionCategoryOptionAllowBluetooth;
if (![session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:bluetoothOpt | AVAudioSessionCategoryOptionMixWithOthers error:nil]) {
NSLog(@"Could not set audio session category");
}
我应该改用 AVAudioSessionCategoryMultiRoute 吗?如何选择首选输入和输出?正如我所见,iOS 11 上的所有 API 的行为都不同。