如何在Raspbian Jessie上为Jasper配置声音?


19

我正在使用Raspbian Jessie(2015-11-21)在Raspberry Pi 2 Model B上运行Jasper(主分支)文档中安装说明似乎是针对Wheezy而非Jessie的。

在Wheezy上运行Jasper效果很好。但是,在杰西(Jessie)上,我在配置声音时遇到了问题。我的麦克风工作正常,但扬声器没有工作,反之亦然。

需要做的是,必须将默认声卡设置为USB,因为这是连接我的USB麦克风的位置,而Jasper需要这样做。关于通过来配置ALSA的答案很多~/.asoundrc/etc/asound.conf甚至/usr/share/alsa/alsa.conf没有一个对我有用。

当我通过打开混音器alsamixer并点击时F6,我总是将其bcm2835视为默认卡。那是Pi2的默认卡,但我想将USB设为默认卡。

我该怎么做呢?

Answers:


25

根据ALSA Wiki的标题,标题为“ 如何为多个已安装的卡选择特定的订单 ”,其内容如下:

哪张卡的卡号为0、1,因此默认情况下由模块加载顺序确定。这对于选择哪个卡成为默认卡特别有用。

因此,从理论上讲,可以通过确保首先加载其驱动程序模块来选择已安装的几张卡中的哪一张成为卡0(默认卡)。(注意:这假设每个声卡都需要不同的驱动程序。如果您有两个相同类型的声卡,请跳至下一节。)

有两种方法可以实现此目的,即卡驱动程序模块的“旧” index =选项和snd模块的替代(和新)插槽=选项。

它记录了执行此操作的两种方法:

  1. 较旧的“ index =”方法
  2. 较新的“ 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方法来实现此目的的原因。


高兴的是:)我将在Github帐户上(我个人资料中的链接)拥有一个bash设置脚本以及一个厨师食谱,可在几天之内完成所有这些工作。
霍斯尼

snd_usb_audio不幸的是,我有两个名为的设备。
kleinfreund'7

@Housni您是否制作了该脚本?
not2qubit

0

在尝试调试该项目的alsa问题并让usb mic和bcm2835扬声器均正常工作后,我认为存在一个基本问题,我收到的所有ALSA建议都无法解决。

/ usr / share / alsa / cards目录没有bcm2835.conf文件。/ usr / share / alsa目录文件alsa.conf留下了许多需要指定的存根。除非提供了用于bcm2835的卡,否则启动Jasper.py会显示很多可能不致命的错误消息。通过处理bcm2835.conf文件,您可以摆脱令人讨厌的消息。

在我看来,这是一个Jessie错误;确实应该有一个文件可以解决这些错误消息。对于处理ALSA的jessie程序员而言,我似乎懒得没有创建经过测试的程序员。

我没有遍历所有错误消息,但我怀疑其他消息也是由此引起的。

没有成熟版本的另一种情况是引导期间无法检查旧固件。我的jessie上的旧固件导致台式机无法响应键盘或鼠标,这是将jessie与旧固件一起使用的最佳选择,除非您知道ssh。这不是天真的用户情况。


1
WRT它“对于与ALSA打交道的杰西程序员来说似乎只是懒惰而未创建经过测试的脚本”,不要迷惑于相信Debian 8,也就是。构建Raspbian的jessie主要用于Raspberry Pi和BCM2835 SoC。后者将占Debian用户的<1%,因此几乎不能认为它们是优先事项。一群主要是志愿者的人不想每天25小时使用键盘来让每个人都
忙,

...这仅表示社区中没有足够的技术专门知识的人来从事这项工作。
goldilocks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.