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

在iOS中通过蓝牙播放时从内置麦克风录制,ios,iphone,audio,bluetooth,avaudiosession,Ios,Iphone,Audio,Bluetooth,Avaudiosession,是否可以从iPhone的内置麦克风接收音频输入,同时通过蓝牙耳机播放音频 我的目标是始终使用内置麦克风作为输入设备,即使输出设备是耳机,因为内置麦克风在我的使用情况下更方便 当输出设备是有线耳机时,我知道如何实现我的目标,就像iPhone附带的耳机一样。我只需插入有线耳机,然后调用以下方法: - (void)selectBuiltInMicrophone { AVAudioSession *session = [AVAudioSession sharedInstance]; fo

是否可以从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将从内置麦克风录制并通过有线耳机播放。这就是我所期望的

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


蓝牙耳机的输入和输出似乎被锁定在一起:要么两个都用,要么一个也不用。我的目标真的不可能吗?或者有一种方法可以克服明显的限制?

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

  • 有一种预防措施可以像对讲机一样使用
  • 您必须创建两个会话。意味着在录制音频时,您必须使用recordandplay启用音频会话
  • 播放时,您必须将选项设置为audiosession(允许蓝牙)
  • 录制时,您必须设置recordandplay

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

    //将音频会话类别设置为.play和Record。如果需要错误处理,请使用do catch
    尝试AVAudioSession.sharedInstance().setCategory(.playanRecord,模式:。默认,选项:[.defaultToSpeaker、.allowBluetoothA2DP、.allowBluetooth])
    //检查currentRoute是否设置为蓝牙音频设备
    let btOutputTypes:[AVAudioSession.Port]=[.bluetoothHFP、.bluetoothA2DP、.bluetoothLE]
    让btOutputs=AVAudioSession.sharedInstance().currentRoute.outputs.filter{btOutputTypes.contains($0.portType)}
    //如果是,请将首选音频输入设置为内置麦克风
    如果!我是空的{
    让builtInMicInput=AVAudioSession.sharedInstance().availableInputs?.filter{$0.portType==.builtInMic}。首先
    请尝试?AVAudioSession.sharedInstance().setPreferredInput(内置输入)
    }否则{
    //设置默认输入
    尝试?AVAudioSession.sharedInstance().setPreferredInput(无)
    }
    尝试AVAudioSession.sharedInstance().setActive(真)
    
    或者,您也可以按照这里的详细说明进行操作

    谢谢您的回答!我理解你的第一点和第三点,但不太理解其他两点。你能详细说明一下吗?这是完全错误的。确实可以从iPhone内置麦克风录制音频,然后在蓝牙耳机上播放。这对我来说不起作用。每当我将PreferredInput设置为麦克风时,iPhone扬声器的音频输出也会发生变化。我也一直在想办法。我不确定这是否可行。@gbones您是否设置了蓝牙音频类别选项,如
    .allowBluetooth A2DP
    allowBluetooth
    ?如果设置了适当的类别,则上述代码不会更改音频输出路径。调试currentRoute是否具有蓝牙设备输出端口。您是否能够解决此问题?您是否尝试过使用
    overrideOutputAudioPort
    函数或其他任何功能?