0

我认为 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 的行为都不同。

4

1 回答 1

0

这些要求对于使用 AVAudioSession 完成来说太复杂了。使用渲染回调在 remoteIO 中进行手动控制。在 AVAudioSession.sharedInstance().currentRoute,你可以得到输出和输入。

于 2017-11-21T16:39:58.310 回答