You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下CoreAudio AUGraph用MixerUnit无声音问题排查

这种情况我碰到好多次了——控制台显示播放但没声音,大概率是这几个环节出了问题,咱们一步步排查:

1. 先查最基础的音频路由和音量
  • 先确认Mac系统音量没静音,而且OutputUnit是不是选对了输出设备?有时候系统默认会切到外接显示器的音频、蓝牙音箱这类可能没开声音的设备。你可以用AudioUnitGetProperty获取OutputUnit当前绑定的设备ID,或者在代码里强制指定默认输出设备:
    AudioDeviceID defaultOutputDevice;
    UInt32 size = sizeof(AudioDeviceID);
    AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &defaultOutputDevice);
    AudioUnitSetProperty(outputUnit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &defaultOutputDevice, size);
    
  • 另外检查OutputUnit本身的增益有没有被设为0:用AudioUnitGetProperty读取kAudioUnitProperty_Gain属性,确保数值大于0。
2. 核对MixerUnit和OutputUnit的音频格式匹配

混音最容易踩的坑就是格式不兼容:

  • MixerUnit的每个输入Bus、输出Bus,以及OutputUnit的输入Bus,采样率、位深、通道数必须完全一致。比如你两个音频文件是44.1kHz立体声16位PCM,那所有环节都要统一成这个格式。
  • 初始化时一定要给每个Unit的对应Bus设置kAudioUnitProperty_StreamFormat,调试时可以把每个格式的参数打印出来核对,比如:
    AudioStreamBasicDescription format;
    UInt32 formatSize = sizeof(format);
    AudioUnitGetProperty(mixerUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &format, &formatSize);
    NSLog(@"Mixer Input 0 format: %f Hz, %d channels", format.mSampleRate, format.mChannelsPerFrame);
    
3. 检查回调函数的音频数据处理

虽然回调触发了,但可能数据根本没正确填充:

  • 确认你在回调里把读取到的音频文件数据,正确拷贝到了ioData的缓冲区中,而不是只打印日志就返回了。比如如果是16位PCM,要注意字节序和缓冲区的指针偏移。
  • 可以在回调里打印几个采样值,看看是不是全0——如果是,那说明数据没读进来或者被清零了。
4. 确认AUGraph的启动流程完整

别漏了关键步骤:

  • 必须依次执行:NewAUGraph → AUGraphAddNode(添加Mixer和Output节点) → AUGraphOpen → AUGraphConnectNodeInput(把Mixer输出连到Input输入) → AUGraphInitialize → AUGraphStart。
  • 每一步都要检查返回的OSStatus是不是noErr,比如启动时:
    OSStatus status = AUGraphStart(graph);
    if (status != noErr) {
        NSLog(@"AUGraph启动失败:%d", (int)status);
    }
    
5. 单独测试单音频播放

先去掉混音逻辑,单独播放其中一个音频文件,看有没有声音:

  • 如果单文件也没声音,那问题出在音频文件读取或者OutputUnit的配置上;如果单文件有声音,那就是MixerUnit的输入连接、格式设置出了问题。
6. 检查系统音频权限(针对App)

如果是沙盒化的App(比如Mac App Store应用),要确保Info.plist里添加了NSAudioUsageDescription权限描述,并且系统设置里已经允许App访问音频输出。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:33:07