在iOS中通过蓝牙播放时从内置麦克风录制

时间:2015-06-03 07:58:51

标签: ios iphone audio bluetooth avaudiosession

是否可以从iPhone的内置麦克风接收音频输入,同时通过蓝牙耳机播放音频?

我的目标是始终使用内置麦克风作为输入设备,即使输出设备是耳机,因为内置麦克风在我的使用案例中更方便。

我知道如何在输出设备是有线耳机时实现我的目标,就像与iPhone捆绑的耳机一样。我只需插入有线耳机,然后调用以下方法:

- (void)selectBuiltInMicrophone
{
    AVAudioSession *session = [AVAudioSession sharedInstance];
    for (AVAudioSessionPortDescription *port in session.availableInputs)
        if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
            NSError *error;
            [session setPreferredInput:port error:&error];
            break;
        }
}

通过调用上述方法,输入设备将从有线耳机的麦克风切换到iPhone的内置麦克风,而输出设备不受影响,因此iPhone将从内置麦克风录制-in麦克风并通过有线耳机播放。这就是我的期望。

问题是,当耳机是蓝牙耳机时,此方法不起作用。如果我将蓝牙耳机连接到iPhone,然后调用上面的方法,内置麦克风将成为输入设备,这很棒,但输出设备也将改为iPhone的接收器,这是不好的

似乎蓝牙耳机的输入和输出被锁定在一起:您要么同时使用它们,要么不使用它们。我的目标真的不可能吗?还是有办法克服明显的限制?

2 个答案:

答案 0 :(得分:3)

无法从iPhone的内置麦克风接收音频输入,同时通过蓝牙耳机播放音频

  1. 您可以使用对讲机进行预防。
  2. 你必须创建两个会话。意味着在录制音频时你必须启用带有记录和播放的音频会话。
  3. 在播放时你必须将选项设置为音频(允许蓝牙)。
  4. 录制时您必须设置记录和播放。

答案 1 :(得分:0)

您可以在通过蓝牙音频设备播放音频时选择特定的麦克风。

  // set audio session category to .playAndRecord. use do-catch if you need error-handling
  try? AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetoothA2DP, .allowBluetooth])

  // check if currentRoute is set to a bluetooth audio device
  let btOutputTypes: [AVAudioSession.Port] = [.bluetoothHFP, .bluetoothA2DP, .bluetoothLE]
  let btOutputs = AVAudioSession.sharedInstance().currentRoute.outputs.filter { btOutputTypes.contains($0.portType) }

  // if so, set preferred audio input to built-in mic
  if !btOutputs.isEmpty {
     let builtInMicInput = AVAudioSession.sharedInstance().availableInputs?.filter { $0.portType == .builtInMic }.first
     try? AVAudioSession.sharedInstance().setPreferredInput(builtInMicInput)
  } else {
     // set default input
     try? AVAudioSession.sharedInstance().setPreferredInput(nil)
  }

  try? AVAudioSession.sharedInstance().setActive(true)

或者您可以从此处按照详细说明进行操作 https://developer.apple.com/library/archive/qa/qa1799/_index.html