如何在macOS中使用CoreAudio获取输入音频设备列表?
问题根源与解决方案
核心问题:麦克风权限未配置
macOS 10.14(Mojave)及以后版本,访问音频输入设备(如麦克风)需要明确的权限申请。如果你的App没有配置麦克风权限,CoreAudio会直接隐藏输入设备的相关信息,导致你只能看到输出设备。
具体修复步骤
1. 添加权限描述到Info.plist
在项目的Info.plist文件中添加麦克风权限说明:
- 可视化编辑器操作:添加键
Privacy - Microphone Usage Description,值填写权限用途(例如“需要访问麦克风以获取音频输入设备信息”) - 源码编辑方式:插入以下XML片段
<key>NSMicrophoneUsageDescription</key> <string>需要访问麦克风以获取音频输入设备信息</string>
2. 主动请求麦克风权限
CoreAudio本身不会触发系统权限弹窗,需通过AVFoundation主动申请权限。在调用设备列表获取方法前执行以下代码:
import AVFoundation func requestMicrophonePermission() { AVCaptureDevice.requestAccess(for: .audio) { granted in if granted { let devices = AudioDevicesManager.getAudioDevices() // 处理获取到的设备列表 } else { print("麦克风权限被拒绝,无法获取输入设备") } } }
3. 补充错误日志排查(可选)
在获取输入通道的代码块中增加错误日志,方便定位权限问题:
// Get input channels propertyAddress.mSelector = kAudioDevicePropertyStreamConfiguration propertyAddress.mScope = kAudioDevicePropertyScopeInput status = AudioObjectGetPropertyDataSize(deviceID, &propertyAddress, 0, nil, &propertySize) if status != noErr { print("获取输入通道失败,错误码:\(status)") // 错误码kAudioHardwarePermissionsError直接指向权限不足 } else { // 原有的输入通道获取逻辑 }
验证
配置并通过权限申请后,MacBook麦克风会出现在设备列表中,对应的inputChannels值会大于0。
内容的提问来源于stack exchange,提问作者user159925
相关产品推荐
相关产品推荐

