如何使用内置麦克风输入和蓝牙输出

Posted

技术标签:

【中文标题】如何使用内置麦克风输入和蓝牙输出【英文标题】:How to use internal mic for input and bluetooth for output 【发布时间】:2021-01-05 00:59:48 【问题描述】:

我目前正在尝试让我的设备通过设备麦克风为捕获会话录制音频,同时在蓝牙设备 (AirPods) 上输出音频。

我这样做的原因是因为使用蓝牙耳机,尤其是 AirPods,当蓝牙麦克风处于活动状态时,播放质量很差。

我尝试使用 setPreferredInput,但它改变了输入和输出,这是我目前所拥有的。

   do 
        let session = AVAudiosession.sharedInstance()
        try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetooth, .mixWithOthers])
        print(session.currentRoute.outputs)
        try session.setAllowHapticsAndSystemSoundsDuringRecording(true)
        try session.setActive(true, options: .notifyOthersOnDeactivation)
        if let mic = session.availableInputs?.first(where: $0.portType == AVAudioSession.Port.builtInMic) 
            try session.setPreferredInput(mic)
        
     catch let err 
        print("Audio session err", err.localizedDescription)
    

我还看到了一个旧的 api,它可能会有所帮助,但现在它似乎早已贬值了 (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput) 用于 AudioSession。

App Store 上还有其他应用似乎已经实现了拆分录制,所以这似乎是可能的。

【问题讨论】:

【参考方案1】:

摆脱allowBluetooth 并使用allowBluetoothA2DP。你也不想在这里defaultToSpeaker

“允许蓝牙”实际上意味着“更喜欢 HFP”,这就是音频如此糟糕的原因。 HFP 是一种低带宽双向协议,通常用于电话呼叫。枚举名称非常令人困惑 IMO。人们总是对此感到困惑。

A2DP 是一种高带宽单向协议(它不支持麦克风)。当您请求时,耳机的麦克风将被禁用,默认情况下您将获得 iPhone 的麦克风(前提是没有其他可用的有线麦克风,但这不太可能)。

【讨论】:

谢谢,效果很好,你帮我省了很多挫折。

以上是关于如何使用内置麦克风输入和蓝牙输出的主要内容,如果未能解决你的问题,请参考以下文章

iOS输入麦克风输出蓝牙设备

使用 WASAPI 捕获蓝牙音频数据

abt naudio 输入和输出设备

AudioKit iOS 设置输入输出设备

iOS:如何选择使用哪个麦克风(内置/外置)?

如何将 iPhone 音频路由到蓝牙扬声器