如何使用持久性 ALSA 设备?

如何使用持久性 ALSA 设备?

我跟着本指南像这样设置默认设备:

使用以下内容创建 /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 slotsindexes 如何一起工作,所以我只是用这些线禁用了所有其他两个音频模块,blacklist这样它们就不会占用任何索引。

相关内容