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

WSL2通过usbipd挂载USB麦克风后PyAudio无法识别,求解决方案

WSL下PyAudio无法识别挂载的USB麦克风问题解决

问题根源分析

lsusb能检测到USB麦克风,但PyAudio识别不到、调用speech_recognition出现ALSA错误,通常是以下原因:

  • WSL音频子系统未正确配置,ALSA未映射到USB麦克风
  • USB麦克风设备权限不足
  • PyAudio依赖的ALSA库未正确链接(预编译包可能存在兼容性问题)
  • 默认音频设备未指向USB麦克风

分步解决步骤

1. 确认ALSA是否识别麦克风

先执行ALSA的录音设备列表命令,验证系统层面是否能检测到麦克风:

arecord -l

如果输出能看到你的Q9-1麦克风(类似card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]),说明系统已识别设备,跳过步骤2直接看步骤3;如果看不到,执行步骤2。

2. 修复ALSA设备识别问题

2.1 重新挂载USB设备

确保用usbipd挂载时指定正确的设备总线ID:

  1. 在Windows命令行执行usbipd list,找到Q9-1麦克风对应的BUSID(比如1-2)
  2. 在WSL中执行挂载命令:
usbipd wsl attach --busid <你的BUSID>

2.2 配置udev权限规则

创建udev规则赋予麦克风设备读写权限:

sudo nano /etc/udev/rules.d/99-usb-audio.rules

写入以下内容(对应你的设备ID 0d8c:0135):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0135", MODE="0666"

保存后重载udev规则:

sudo udevadm control --reload-rules && sudo udevadm trigger

2.3 添加用户到audio组

确保当前用户拥有音频设备访问权限:

sudo usermod -aG audio $USER

执行后退出WSL再重新登录生效。

3. 修复PyAudio识别问题

如果ALSA已识别设备但PyAudio检测不到,大概率是PyAudio安装方式导致的兼容性问题:

3.1 卸载现有PyAudio

pip uninstall -y pyaudio

3.2 安装编译依赖

sudo apt-get update && sudo apt-get install portaudio19-dev python3-dev -y

3.3 从源码编译安装PyAudio

强制源码编译,确保链接系统ALSA库:

pip install --no-binary :all: pyaudio

4. 配置默认音频设备(解决ALSA错误)

创建ALSA配置文件,将默认设备指向USB麦克风:

nano ~/.asoundrc

写入以下内容(注意替换card 1和device 0为你在arecord -l中查到的设备编号):

pcm.!default {
    type hw
    card 1
    device 0
}

ctl.!default {
    type hw
    card 1
    device 0
}

保存后退出,重新运行Python脚本测试。


验证测试

  1. 测试ALSA录音功能:
arecord -D plughw:1,0 -f S16_LE -r 16000 test.wav

录制后按Ctrl+C停止,能生成test.wav说明设备正常。
2. 重新运行PyAudio检测脚本:

import pyaudio
print(pyaudio.PyAudio().get_device_count())

此时应该能看到设备数量大于0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:57