Hacker News 中文摘要

RSS订阅

为什么一运行游戏我的耳机就有杂音? -- Why are my headphones buzzing whenever I run my game?

文章摘要

文章解释了作者在运行自制游戏时耳机出现嗡嗡声的问题。通过排查发现,游戏渲染时GPU负载不均衡导致电流波动,通过USB供电的DAC将电噪声传导至耳机。大型游戏因优化良好不会出现此问题,而自制游戏因渲染效率不足引发了电流干扰。

文章总结

标题:为什么运行游戏时耳机会出现电流杂音?

背景
我正在开发一款受《矮人要塞》《边缘世界》等启发的等距视角游戏,使用自研的简易引擎(基于Rust和wgpu-rs)。每当启动游戏时,USB接口的MODI 2数字音频转换器连接的耳机就会产生电流杂音,而运行《堡垒之夜》《守望先锋》等大型游戏时却无此现象。

硬件配置包括RTX 3090显卡、32GB内存和通过电脑USB端口供电的DAC设备。更换USB接口无效后,我首先怀疑电源问题,但无法解释为何小型游戏比大型游戏更耗电。测试发现,禁用渲染时杂音消失,说明问题与GPU相关。

渲染流程分析
游戏采用WebGPU技术(具体为wgpu-rs),通过计算着色器筛选可见实体后执行间接绘制。渲染管线最终输出两个内容:屏幕显示缓冲区和用于点击检测的"拾取纹理"。后者将物体ID写入纹理,点击时通过读取鼠标位置对应的ID实现交互。

问题根源
通过逐步禁用渲染管线模块,最终锁定问题源:每帧将整个拾取纹理从GPU内存回传至RAM的操作。当改为每250ms传输一次时,杂音显著减弱;传输频率越高,杂音越强。经同行讨论,推测是GPU满负荷工作后突然暂停等待数据传输,这种间歇性峰值负载导致USB供电波动。

解决方案
优化为仅传输鼠标悬停区域的纹理数据后,不仅彻底消除杂音,GPU负载曲线也趋于平稳(对比图示可见优化前后差异)。事后反思,这种按需传输的方案本应是最佳实践——既降低数据传输量,又避免了电源干扰。

(注:保留了三张关键配图说明:游戏画面截图、渲染管线示意图、优化前后GPU负载对比图)

评论总结

以下是评论内容的总结:

  1. 关于电气噪声问题的普遍性

    • 多位用户反映电气噪声是常见问题,尤其在GPU高负载时更明显
    • 引用:"These effects used to be much worse in the nineties"(vardump)
    • 引用:"Moving my cursor makes an audible sound over my (builtin) audio card"(thenthenthen)
  2. 解决方案讨论

    • 主流方案建议使用外置DAC和光纤连接
    • 引用:"The only way...is using external DA/AD converters and connecting them using optical wires"(Garvi)
    • 引用:"optical connections for audio...exactly for this reason"(klamann)
  3. 对Schiit DAC的争议

    • 部分用户认为该品牌DAC存在设计缺陷
    • 引用:"Schiit Modi 2 is notorious to struggle with cleaning up USB power"(mistyvales)
    • 也有用户表示使用同品牌产品无问题
    • 引用:"I've never had a problem like this...should contact Schiit"(ericbarrett)
  4. 其他解决方案分享

    • 包括使用独立电源、不同USB端口、电源滤波等
    • 引用:"Just get a power strip...on a different outlet"(Night_Thastus)
    • 引用:"$10 Apple USB-C adapter...buzzing completely stopped"(LUmBULtERA)
  5. 游戏开发相关讨论

    • 部分用户对文中游戏开发技术细节提出疑问
    • 引用:"why overengineering a solved problem this way?"(diath)
    • 也有开发者表示方案具有参考价值
    • 引用:"directly applicable to my own projects"(kg)

注:所有评论均无评分数据(评分均为None),总结时保持了正反方观点的平衡,并选取了最具代表性的引用。