更新 2021-07-08:我现在使用 Pop!_OS 21.04 和这个问题出现已解决。我刚刚测试过脉冲音频 14.2和管道线 0.3.24我能够在一分钟内断开并重新连接耳机(通过 USB/立体声插孔适配器连接)大约 10 次。我在下面描述的问题没有再次出现。我认为这也适用于 Ubuntu 21.04。
我使用的是 Pop!_OS 20.10,但当我“过于频繁”或“多次”断开并重新连接 USB 麦克风时,我遇到了一个间歇性问题,该问题似乎会可靠地发生。我想至少了解一种比重新启动机器更温和的解决方法。
它是这样的:我断开 USB 麦克风,然后重新连接。如果我在 30 秒内执行此操作 2 或 3 次,最终pulseaudio 会告诉我:
D: [pulseaudio] module-udev-detect.c: /dev/snd/controlC1 is accessible: yes
D: [pulseaudio] module-udev-detect.c: /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/sound/card1 is busy: no
D: [pulseaudio] module-udev-detect.c: Loading module-alsa-card with arguments 'device_id="1" name="usb-Blue_Microphones_Yeti_Stereo_Microphone-00" card_name="alsa_card.usb-Blue_Microphones_Yeti_Stereo_Microphone-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1"'
D: [pulseaudio] reserve-wrap.c: Device 'Audio1' already locked.
E: [pulseaudio] module.c: Failed to load module "module-alsa-card" (argument: "device_id="1" name="usb-Blue_Microphones_Yeti_Stereo_Microphone-00" card_name="alsa_card.usb-Blue_Microphones_Yeti_Stereo_Microphone-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1""): initialization failed.
I: [pulseaudio] module-udev-detect.c: Card /devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7:1.0/sound/card1 (alsa_card.usb-Blue_Microphones_Yeti_Stereo_Microphone-00) failed to load module.
I: [pulseaudio] client.c: Created 3 "Native client (UNIX socket client)"
我在各种pulseaudio工具中看不到我的麦克风,尽管aplay在中列出了该设备aplay -l
card 1: Microphone [Yeti Stereo Microphone], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
如果我重新启动,那么我可以再次连接我的 USB 麦克风,但我正在寻找一种比这更温和的解决方法,当我“过于频繁地”断开并重新连接 USB 音频设备时,它可以重置任何混乱的状态。
答案1
我在这里关注了一些评论:
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/809
杀死pipewire然后重新启动pulseaudio解决了这个问题:
systemctl --user stop pipewire.service
systemctl --user restart pulseaudio.service
这似乎是管道线和脉冲音频之间的一场竞赛。我对pipewire一无所知,但有时它似乎在pulseaudio可以访问USB音频设备之前锁定了它。
要永久禁用管道线:
sudo systemctl --global stop pipewire.service
sudo systemctl --global disable pipewire.service
我不知道 pipelinewire 提供了哪些我可能会错过的服务,但到目前为止还没有:)