根据ALSA Wiki的标题,标题为“ 如何为多个已安装的卡选择特定的订单 ”,其内容如下:
哪张卡的卡号为0、1,因此默认情况下由模块加载顺序确定。这对于选择哪个卡成为默认卡特别有用。
因此,从理论上讲,可以通过确保首先加载其驱动程序模块来选择已安装的几张卡中的哪一张成为卡0(默认卡)。(注意:这假设每个声卡都需要不同的驱动程序。如果您有两个相同类型的声卡,请跳至下一节。)
有两种方法可以实现此目的,即卡驱动程序模块的“旧” index =选项和snd模块的替代(和新)插槽=选项。
它记录了执行此操作的两种方法:
- 较旧的“ index =”方法
- 较新的“ slots =“方法
前者是Jasper安装说明的建议。这也是大多数解决方案都在谈论的内容。但是,这是较旧的方法,可能无法在更多当前的Raspbian Jessie图像上使用。
两种方法的结合对我来说很有效。
首先,请检查您的卡的装载顺序:
$ cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
计数卡从开始计数,0
因此bcm2835
首先加载默认值,然后加载具有麦克风的USB卡。
要重新排序卡,我首先创建一个名为的文件/etc/modprobe.d/alsa-base.conf
。可以将其命名为任意名称,只要它以结尾即可.conf
。然后,我添加了以下内容:
# This sets the index value of the cards but doesn't reorder.
options snd_usb_audio index=0
options snd_bcm2835 index=1
# Does the reordering.
options snd slots=snd_usb_audio,snd_bcm2835
注释应解释每一行的功能。完成此操作后,似乎必须重新引导计算机才能正常工作。
重新启动后,您应该可以使用默认的卡(现在应该是您的麦克风)录制一些音频:
$ arecord temp.wav
然后播放它,将卡指定为1,将设备指定为0,这是您的扬声器输出应位于的位置:
aplay -D plughw:1,0 temp.wav
我最初只slots
在其中添加了一行。这使我的USB卡成为默认卡,但索引错误。例如,一旦我这样做了,这就是我的/proc/asound/modules
样子:
$ cat /proc/asound/modules
1 snd_usb_audio
2 snd_bcm2835
理想情况下,它应如下所示:
0 snd_usb_audio
1 snd_bcm2835
这就是为什么我也使用该index
方法来实现此目的的原因。