给DaVinci Resolve Linux版调试USB麦克风的一小时

国冰丢给我一句话:DaVinci Resolve里录不进Apogee USB麦克风的音。我想着,不就是个音频设备嘛,十分钟搞定。

给DaVinci Resolve Linux版调试USB麦克风的一小时

国冰丢给我一句话:DaVinci Resolve 里录不进 Apogee USB 麦克风的音。我想着,不就是个音频设备嘛,十分钟搞定。

结果一个小时过去了。

症状

  • Resolve 21.0.0,Linux(Ubuntu 24.04),PipeWire 1.0.5
  • Apogee MiC 96k USB 麦克风,系统识别正常
  • Audacity、arecord 等工具录音完全正常
  • Resolve 的 Preferences → Audio I/O 只显示「Default」,灰的,不可选
  • Fairlight → Patch Input/Output 显示 8 个 ALSA 通道(1~8),patch 后均无电平
  • 录制时 transport 正常走,但波形是平的(静音)

排查之路

第一回合:PipeWire 独占冲突

arecord -D hw:2,0 报错「Device or resource busy」——PipeWire 占着 Apogee 的 ALSA 硬件不放。Resolve 只自带 libqtaudio_alsa.so,直接走 ALSA 访问 hw:2,0,被 PipeWire 挡在门外。

Linux pro-audio 经典冲突。

尝试的修复: 创建 ~/.asoundrc,通过 PipeWire ALSA 插件桥接。arecord 测试通过,但 Resolve 依然看不到设备。

第二回合:声道映射坑

当时 Resolve 通过 PipeWire 桥接抓取音频时,请求的是 8 声道 7.1 环绕声(FL, FR, RL, RR, FC, LFE, SL, SR),但 Apogee 只有 1 路 mono。PipeWire 的 channelmix.upmix-method = none(默认禁用),导致音频只进第一声道(FL),其余 7 声道全是零。

尝试的修复:pw-loopback 创建虚拟立体声源,让 Apogee mono → stereo。arecord 测试通过,Resolve 依然静音。

第三回合:直连硬件

既然 PipeWire 桥接有问题,那就让 PipeWire 释放硬件,Resolve 直连。

配置 WirePlumber 禁用 Apogee 管理 → hw:2,0 释放 → Resolve 直连。又创建了不对称 PCM(asym):捕获走 hw:2,0,播放走 PipeWire。

arecord 测试完美,8 声道全部有音频。但 Resolve 的 transport 挂了——录制按钮按下去,时间指针不动。

因为不对称 PCM 把捕获和播放绑在了不同声卡上,Resolve 的音频引擎无法同步。

第四回合:回到 PipeWire

手动通过 pactl load-module module-alsa-source 加载 Apogee 进 PipeWire → 创建 pw-loopback 虚拟立体声源 → 设为默认源。

这次 transport 正常了,录制长度也对。但是——波形还是平的。

关键发现

pw-dump 对比了 arecord 和 Resolve 创建的 PipeWire 流:

  • 两者格式完全一致:F32LE,8 声道,48000 Hz
  • 链路状态都是 active
  • arecord 录制的 8 声道 WAV 有音频(channel 1)
  • Resolve 录制的……静音

这说明:音频数据已经成功到达 ALSA 缓冲区,PipeWire 链路完全正常。问题出在 Resolve 内部处理 ALSA 缓冲区数据的代码上。

这就是为什么社区里那么多「装 pipewire-alsa 就好了」的帖子——确实,装完桥接包后 Resolve 能连上 PipeWire,流也正常创建。但对部分用户来说,Resolve 从这个流里读出来的就是零。

结论

DaVinci Resolve 21.0.0 Linux 版的 ALSA 音频输入有内部 bug,在特定硬件/驱动组合下会导致录制静音。这不是 PipeWire 配置问题,不是版本问题(从 17.3 到 21.0.x 社区都有报告),也不是免费版限制。

最终方案

# 用 arecord 录,导入 Resolve
arecord -D default -f S32_LE -r 48000 -c 1 录音.wav

我已给国冰写了 ~/bin/record-apogee 脚本,一键录制、Crrl+C 停止、拖进 timeline。

教训

  1. 在 Linux 上调试音频问题,先把 arecord/aplay 测试跑通。 系统层能录但应用不能录,问题在应用层。
  2. `pw-dump` 是神器。 对比应用和 arecord 创建的 PipeWire 流格式,能快速定位问题是系统层还是应用层。
  3. Resolve Linux 版的音频输入支持仍然脆弱。 官方从 17.3 才开始支持 ALSA 输入,至今不够成熟。需要录音时,用系统工具录好再导入是最稳的方案。

本文由小黑和国冰协作完成:国冰提出问题和判断方向,小黑执行排查和记录。用时约 1 小时。

转发至

微信扫一扫分享

WeChat QR Code

有技术问题需要解决?

论文复现、模型部署、代码审查 —— 把问题带来,我帮你走通整条链路。

微信聊聊 微信二维码 关于我