WSL环境下Python sounddevice录音报错PortAudioError:找不到设备
问题
在WSL环境中使用sounddevice录制音频时,触发错误:sounddevice.PortAudioError: Error querying device -1。
已完成以下操作:
- 按照sounddevice安装指南安装了libportaudio2、CFFI和numpy
- 遵循PortAudio说明编译了PortAudio
- 通过usbipd将USB麦克风(Logi USB Headset H340)连接到WSL,PowerShell中
usbipd wsl list和WSL bash中sudo usbip port均显示设备已成功连接
但调用sd.rec时仍报错,运行python3 -m sounddevice或sd.query_devices()均无设备返回结果。
解决方法
- 检查WSL版本:运行
wsl --list --verbose确认使用的是WSL 2,WSL 1对USB设备支持有限,必须切换到WSL 2 - 验证底层音频工具是否识别设备:在WSL中运行
arecord -l或pacmd list-sources(需先安装PulseAudio),如果这两个命令也找不到设备,说明硬件识别存在问题,需优先排查USB设备在WSL中的挂载状态 - 重新编译PortAudio并启用ALSA支持:WSL 2依赖ALSA层实现音频,编译时需指定
--with-alsa参数,步骤如下:./configure --with-alsa make sudo make install sudo ldconfig - 确认sounddevice绑定的PortAudio库:运行
python3 -c "import sounddevice; print(sounddevice._libname)",确保路径指向你编译安装的PortAudio库,而非系统默认的libportaudio2(可能缺少USB支持) - 手动指定设备:如果底层工具能找到设备但sounddevice识别不到,可尝试用
arecord -l查到的设备ID(如hw:1,0),在代码中手动指定设备:import sounddevice as sd sd.default.device = 0 # 替换为实际设备索引或设备名称 - 重启WSL服务:在PowerShell中执行
wsl --shutdown,再重新启动WSL,确保USB设备挂载状态生效
内容的提问来源于stack exchange,提问作者amash
相关产品推荐
相关产品推荐

