ios - 插入蓝牙耳机时 AVAudioEngine 使用错误的格式

标签 ios macos audio bluetooth avaudioengine

我有一副带麦克风输入的蓝牙耳机。未使用麦克风,但在使用时,输入和输出都强制为 8000kHz。

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

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

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

最佳答案

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

以下函数将以仅输出模式连接到默认音频设备,而不是默认行为的 inout/output 模式。记得在引擎启动前调用它!

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
    }
}

关于ios - 插入蓝牙耳机时 AVAudioEngine 使用错误的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44651389/

相关文章:

ios - NSPredicate 和 BeginsWith

ios - 访问 NSArray/UITableView 中的第一个对象

c# - Xamarin.Forms ios 编辑日历事件

windows - 如何在 Mac 工作站和 Windows 虚拟机之间共享本地 Subversion 存储库?

matlab - 用两个麦克风同时播放和录音Matlab

ios - AVPlayer 会停止用户的音乐吗?

objective-c - 我可以有条件地禁用仅在第一响应者响应选择器时启用的 NSMenuItem 吗?

swift - 是否可以播放存储在 Apple Watch 上的音乐?

audio - 通过命令提示符从Vob文件中剥离音频

macos - 如何在编辑后自动将 "source"~/.bashrc?