![如何使用持久性 ALSA 设备?](https://linux22.com/image/196239/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%8C%81%E4%B9%85%E6%80%A7%20ALSA%20%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我跟着本指南像这样设置默认设备:
使用以下内容创建 /etc/asound.conf:
defaults.pcm.card 1 defaults.ctl.card 1
但我有一个问题,即 ALSA 卡号在重新启动后并不确定。
所以我跟着本指南将我的 USB 声卡的名称更改为可预测的名称。本质上它说:
在 /lib/udev/rules.d/ 中创建一个文件,名称类似于 85-my-usb-audio.rules,内容如下:
DEVPATH=="/devices/pci0000:00/0000:00:12.2/usb1/1-4/1-4.3/1-4.3:1.0/sound/card?", ATTR{id}="MyDev_A"
使用设备 在原本要使用卡号的地方使用 ID 字符串,例如
aplay -D default:MyDev_A something.wav
然后我把我的改成了/etc/asound.conf
:
defaults.pcm.card MyDev_A
defaults.ctl.card MyDev_A
我也尝试过
defaults.pcm.card "MyDev_A"
defaults.ctl.card "MyDev_A"
但是当运行例如时aplay
,我收到错误:
ALSA lib conf.c:1207:(parse_value) card is not a string ALSA lib conf.c:1887:(_snd_config_load_with_include) _toplevel_:2:0:Invalid argument ALSA lib conf.c:3650:(config_file_open) /etc/asound.conf may be old or corrupted: consider to remove or fix it ALSA lib conf.c:3572:(snd_config_hooks_call) function snd_config_hook_load returned error: Invalid argument ALSA lib conf.c:4026:(snd_config_update_r) hooks failed, removing configuration aplay: device_list:281: control open (0): Invalid argument
答案1
这不是问题的直接解决方案,但这是我前进的方式。我没有分配文本 ID,而是为声卡设置了固定的索引顺序:
我创建了一个文件/etc/modprobe.d/alsa.conf
并放入其中:
blacklist snd_bcm2835
blacklist snd_soc_hdmi_codec
options snd-usb-audio index=0,1 vid=0x1415,0x0d8c pid=0x2000,0x000c
该options
行设置模块处理的所有声卡的索引snd_usb_audio
。
这些索引必须从 0 开始连续,我无法弄清楚esoptions snd slots
和index
es 如何一起工作,所以我只是用这些线禁用了所有其他两个音频模块,blacklist
这样它们就不会占用任何索引。