录到一半挂掉的会话,比根本开不起来的会话更让人崩溃。我的就总是同一种死法:Roland Rubix 24 声卡,Ableton Live 12 走 ASIO,用着用着——有时十分钟,有时三分钟——Live 弹出"设备出错",声卡从音频设置里消失,正在录的那条轨直接报废。
如果你在 Windows 11 上也是这个模式——刚开始一切正常,用几分钟或闲置一会儿就掉——那大概率什么都没坏:是 Windows 在为了省电主动关掉你的声卡,而 DAW 把这当成了硬件故障。
下面是我确认问题和修复的完整过程,脚本可以直接拿去跑。
第一步:排除驱动问题
最显眼的嫌疑人是驱动,先查它。以 Rubix 系列为例,Roland 官方明确说过 Windows 自带的 USB Audio Class 2.0 通用驱动工作不正常,必须装厂商专用驱动。先确认装没装:
pnputil /enum-drivers | Select-String -Pattern 'roland|rubix' -Context 4,4
我的机器上官方驱动(1.0.7,WHQL 签名)早就装好了,设备状态也正常——所以不是驱动的事。如果你的没装,先去官网装上再观察;但别指望它一定解决问题,因为真正的元凶通常在更底下一层。
真正的元凶:三层 USB 节能机制
Windows 11 有三套彼此独立的机制都能给 USB 音频设备断电,任何一套都足以杀掉你的录音会话:
- USB 选择性暂停——电源计划里的设置,允许系统挂起它认为闲置的 USB 设备。没在播声音的声卡就算"闲置"。
- 集线器级电源管理——设备管理器里每个 USB Root Hub / 集线器都有一个"允许计算机关闭此设备以节省电源"的勾。声卡挂在哪个 Hub 上,Hub 被断电它就跟着一起没。
- 设备自身的增强电源管理——注册表里针对具体设备的
EnhancedPowerManagementEnabled标志,允许系统把这台设备单独降到低功耗状态。这是 USB 音频设备"随机断连"的经典修复点,也是大多数人根本找不到的那一个。
我的机器上:选择性暂停在交流和电池供电下都是开启的,所有集线器都开着节能,Rubix 也没有任何覆盖设置——三把上了膛的枪一起指着录音会话。
还有个背景值得知道:Windows 11 的 24H2 和 25H2 都带着有据可查的 USB 音频回归 bug 上线(设备闲置超时掉线、2025 年 1 月的补丁直接搞坏一批外置 DAC),新 MIDI 栈对老式厂商驱动也不友好。但电源管理是你今天就能自己修好的那部分。
一个脚本修完
用管理员PowerShell 运行(右键 → 以管理员身份运行)。把 $vidPid 换成你自己声卡的——用 Get-PnpDevice | Where-Object FriendlyName -match '你的声卡名' 能查到。
#Requires -RunAsAdministrator
$ErrorActionPreference = 'Stop'
# 1. 关闭当前电源计划的 USB 选择性暂停(交流 + 电池)
powercfg /setacvalueindex SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /setdcvalueindex SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
powercfg /setactive SCHEME_CURRENT
# 2. 关闭所有 USB 集线器(以及声卡本体)的"允许计算机关闭此设备"
$vidPid = 'VID_0582&PID_01E0' # Roland Rubix 24,换成你的
$targetIds = @(
Get-PnpDevice -Class USB -PresentOnly |
Where-Object { $_.FriendlyName -match 'Hub|集线器' -or $_.InstanceId -match $vidPid } |
Select-Object -ExpandProperty InstanceId
)
$powerMgmt = Get-CimInstance -Namespace root\wmi -ClassName MSPower_DeviceEnable
foreach ($id in $targetIds) {
$powerMgmt |
Where-Object { $_.InstanceName.StartsWith($id, [System.StringComparison]::OrdinalIgnoreCase) -and $_.Enable } |
ForEach-Object { $_ | Set-CimInstance -Property @{ Enable = $false } }
}
# 3. 对声卡的每个已知实例关闭增强电源管理
$root = "HKLM:\SYSTEM\CurrentControlSet\Enum\USB\$vidPid"
foreach ($key in Get-ChildItem $root) {
$dp = Join-Path $key.PSPath 'Device Parameters'
if (Test-Path $dp) {
Set-ItemProperty -Path $dp -Name 'EnhancedPowerManagementEnabled' -Value 0 -Type DWord
}
}
跑完把声卡的 USB 线拔掉,等五秒再插回——注册表那个标志要设备重新枚举才生效。重启一次是更稳妥的做法。
所有改动都可逆:两条 powercfg 的索引改回 1,设备管理器里把勾重新打上,注册表值改回 1 即可。
验证改动确实落地
别信一个只会打印"完成"的脚本——查实际状态:
# 两个索引现在都应该是 0x00000000
powercfg /query SCHEME_CURRENT 2a737441-1930-4402-8d77-b2bebba308a3
# 每个实例都应该显示 EPM=0
Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Enum\USB\VID_0582&PID_01E0" | ForEach-Object {
$dp = Join-Path $_.PSPath 'Device Parameters'
if (Test-Path $dp) {
'{0}: EPM={1}' -f $_.PSChildName,
(Get-ItemProperty $dp -Name EnhancedPowerManagementEnabled -ErrorAction SilentlyContinue).EnhancedPowerManagementEnabled
}
}
路上踩的两个坑
脚本静默失败。 我第一版脚本里写了中文注释,保存成了无 BOM 的 UTF-8。Windows PowerShell 5.1 会把没有 BOM 的文件按 ANSI 解码,多字节字符直接把语法搞坏,提权窗口一闪而过——没有报错,没有日志,什么都没改。如果你的 .ps1 里有任何非 ASCII 字符,一定存成带 BOM 的 UTF-8(或者用 PowerShell 7 跑,它默认按 UTF-8 读)。
残留的设备实例。 如果声卡插过不同的 USB 口,Windows 会给每个口留一条注册表记录(所以上面的循环要对每个实例设置标志)。选定一个口以后就别换了。
如果还是掉
那嫌疑就转向另一层:操作系统本身。跑一下 winver——如果是 24H2 或 25H2,把累积更新打到最新,微软一直在陆续修 USB 音频的回归 bug。换主板后置的 USB 口直插,换一根线。另外如果你声卡的厂商驱动从 2017 年就没更新过(说的就是你,Rubix),可以掂量一下还要缠斗多久:驱动维护跟得上的牌子,比报废的录音素材便宜。
音频硬件稳不稳,对我们来说有个很实际的利害关系:Joint 在浏览器里录音走的是和 DAW 同一套 USB 栈,声卡幽灵式断连毁掉的那条轨,上层软件再好也救不回来。把电源管理修好一次,这台机器上所有录音工具都跟着变可靠。
