插入蓝牙耳机时,AVAudioEngine使用了错误的格式

时间:2017-06-20 11:08:20

标签: ios macos audio bluetooth avaudioengine

我有一对带麦克风输入的蓝牙耳机。没有使用麦克风,但是当它被使用时,输入和输出都被强制为8000kHz。

我的AVAudioEngine实例以8000kHz模式连接到耳机,除非我输入系统设置并指定我不想使用耳机进行输入(必须在每次连接耳机时进行此操作)。

我注意到其他应用程序可以在预期的44100kHz下播放而没有问题。我的AVAudioEngine图中没有输入节点。

如何让AVAudioEngine更喜欢以合理的采样率连接?

1 个答案:

答案 0 :(得分:3)

在我失败的赏金之后,我写信给Apple DTS,得到了很好的回复(包括我从Objective-C翻译的代码示例)。

以下功能将以仅输出模式连接到默认音频设备,而不是作为默认行为的输入/输出模式。记得在发动机启动前调用它!

func setOutputDeviceFor(_ engine: AVAudioEngine) -> Bool {
    var addr = AudioObjectPropertyAddress(
        mSelector: kAudioHardwarePropertyDefaultOutputDevice,
        mScope: kAudioObjectPropertyScopeGlobal,
        mElement: kAudioObjectPropertyElementMaster)

    var deviceID: AudioObjectID = 0
    var size = UInt32(MemoryLayout.size(ofValue: deviceID))
    let err = AudioObjectGetPropertyData(
        AudioObjectID(kAudioObjectSystemObject),
        &addr,
        0,
        nil,
        &size,
        &deviceID)

    if (noErr == err && kAudioDeviceUnknown != deviceID) {
        do {
            try engine.outputNode.auAudioUnit.setDeviceID(deviceID)
        } catch {
            print(error)
            return false
        }
        return true
    } else {
        print("ERROR: couldn't get default output device, ID = \(deviceID), err = \(err)")
        return false
    }
}