问:如何设置ALSA以默认使用它?
#1 楼
背景令人惊讶的是,为解决Raspberry Pi的各种声音相关问题付出了很多努力。显然,对于新用户而言,它必须是Raspbian下最容易开发和使用ALSA的弱点。花费了大量的时间和精力来尝试使我自己的RPi3声音在不同的OS版本以及其他Linux
发行版中正常工作,我决定编写最终的解决方案
页面。至少要在最新的
Raspbian Stretch中使用外部声卡这一主题。
ALSA声音系统
ALSA旨在支持任何类型的基于* nix的设备,而不论其
硬件配置如何,以及硬件有多旧。毫无疑问,尝试了解
20年发展的细节毫无意义。我们只是将本质应用于当前情况。
但是,在历史上,人类从来没有创造出如此大量的无用的和功能失调的图表来解释ALSA。仅有的
能提供大量信息的是这两个:是要弄清楚什么声音(如果有的话)和您已经拥有的硬件
。有各种各样的方法可以找到交易细节,但是对于
普通人来说,大多数细节都是没有意义的。我们展示了最重要的
。
我们想知道什么关于我们的(声音)系统?
我们想知道:
内置声音硬件名称和版本
外部声音硬件名称和版本
它使用的内核驱动程序(模块)
其他与声音相关的内核驱动程序/模块被加载的
声卡是什么
操作系统和程序以什么顺序使用和选择声卡
如果存在任何冲突的硬件或声音系统程序
您要在哪里播放和录制系统上的声音?
您播放声音的选项可以是:
来自内部3.5毫米音频耳机插孔(模拟音频)
来自HDMI连接的屏幕/监视器
来自外部USB声卡
来自GPIO端口
用于录制声音的选项可以是:
a。通过外部USB声卡(具有至少一种输入类型) b。来自文件或流
c。通过GPIO
在本文中,我们将告诉您如何使用外部USB声卡进行播放和录制。
未来的成功计划?
随着RPi的更新,不断有新的变化和改进,
经常破坏旧的解决方案。这里的想法是对系统进行尽可能少的更改,或者在需要时将其显而易见。这意味着,
我们希望使用按用户配置,而不是系统范围的配置。即尝试
在主目录中使用配置文件,而不要在根
拥有的系统文件中使用配置文件。 />
重新启动并插入外部USB声卡,因此我们从同一页开始...
A。收集一些信息
# Check ALSA modules
cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
# Check sound hardware
cat /proc/asound/cards
0 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
1 [Set ]: USB-Audio - C-Media USB Headphone Set
C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed
# Check info on card-1
amixer -c 1
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 151
Mono:
Front Left: Playback 104 [69%] [-8.88dB] [on]
Front Right: Playback 104 [69%] [-8.88dB] [on]
Simple mixer control 'Mic',0
Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
Playback channels: Mono
Capture channels: Mono
Limits: Playback 0 - 32 Capture 0 - 16
Mono: Playback 23 [72%] [34.36dB] [off] Capture 0 [0%] [0.00dB] [on]
Simple mixer control 'Auto Gain Control',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
这里我们看到系统默认值(
card 0
)正在使用bcm2835 ALSA模块。尽管我们通常可以指定要使用的卡,但是omxplayer
之类的某些软件没有此选项,并且将无法以各种方式产生任何声音。
此时,您已经可以尝试配置ALSA配置文件。
有些成功,而许多其他却没有,因为不清楚
如何以及在何处进行做完了。我们最终想要的是告诉系统使用外部USB声卡。
B.删除音频膨胀
除非您有充分的理由保留PulseAudio(PA)或
附加的JACK服务器软件,否则应将其卸载(如果有的话)。它们趋向于干扰ALSA,因为它们控制了许多ALSA功能,而这些功能所必需的所有其他配置
,使事情变得令人难以置信!!
sudo apt-get remove pulseaudio
# You can keep `jack*`, but make sure it is not running.
# If it is running you need to stop it, disble it or remove it.
service --status-all
# Disable the running service with:
sudo systemctl disable xxxxx
C。禁用内部(Broadcom)声卡
内部声卡由内核模块驱动,该内核模块位于:
/lib/modules/4.9.59-v7+/kernel/sound/arm/snd-bcm2835.ko
,除非您计划使用音频插孔(在1中)或HDMI(2个),
您应该禁用此内核模块。有两种方法可以执行此操作。
通过启动配置标志禁用它
防止它被
modprobe.d
守护程序装入内核为了保持我们的简约方法,我们选择(1)。
# Edit boot config with:
sudo nano /boot/config.txt
# so that:
cat /boot/config.txt
...
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on
dtparam=audio=off
...
# You need to reboot!
sudo reboot now
由于某种原因,您更喜欢使用方法(2),那么您需要
将内核模块列入黑名单。为此,您只需在
blacklist
下的任何*.conf
文件中输入
单词
/etc/modprobe.d/
,然后输入模块名称即可。但是,已经有一个空的,保留的文件,为此目的,它称为
raspi-blacklist.conf
。但是,6个月后,您会忘记它及其包含的内容,因此最好在将其列入黑名单后再命名。
cd /etc/modprobe.d/
# Manually edit a new file: blacklist-snd_bcm2835.conf
#sudo nano blacklist-snd_bcm2835.conf
# And add the line: blacklist snd_bcm2835
## OR directly with:
sudo tee /etc/modprobe.d/blacklist-snd_bcm2835.conf <<EOF
blacklist snd_bcm2835
EOF
# You need to reboot!
sudo reboot now
有什么区别?无,AFAICT。
重新启动后,重新检查声音模块。
$ cat /proc/asound/modules
1 snd_usb_audio
$ cat /proc/asound/cards
1 [Set ]: USB-Audio - C-Media USB Headphone Set
C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed
宝!您烦人的bcm2835(
card 0
)不见了,但USB卡的索引却相同! 这真的很好。
配置您的ALSA
正如我已经提到的,我们希望ALSA将自己的USB声卡用作
默认值。这也意味着我们希望它在内核声音模块列表中具有第一个可用的
索引。由于模块已在上方删除,并且索引相同(卡1),所以很好。但是在
情况下,我们不需要再次加载bcm2835,因为该模块将作为第一个模块重新出现(
card 0
)。 我们只需要告诉ALSA我们默认的PCM卡索引应该是什么
,在内核中应该以什么顺序对其进行优先排序。
您可以在3个地方配置ALSA。
用户配置位于:
~/.asoundrc
系统配置位于:
/usr/share/alsa/alsa.conf
系统模块配置在:
/lib/modprobe.d/aliases.conf
前2个更改默认设备,而最后2个
确保外观顺序。
我们首先修复特定于用户的配置,以使用
card 1
。如果显示的卡多于一张,则选择要默认的卡的
索引。 />
#cat ~/.asoundrc
cat << EOF | tee ~/.asoundrc
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
EOF
接下来,我们使用与上述相同的卡索引号修复系统配置。
我们需要这样做,因为某些系统程序包永远看不到您的用户
配置文件。
sudo nano /usr/share/alsa/alsa.conf
# then replace:
#defaults.ctl.card 0
#defaults.pcm.card 0
# with:
defaults.ctl.card 1
defaults.pcm.card 1
现在重新启动以使更改生效。
您现在应该拥有一个正常工作的音频系统。
让我们测试一下
要执行正确的测试,您需要适当的文件进行测试。因此,在进行任何操作之前,请确保您的所有声音和视频文件都可以正常工作。
(我花了很多时间试图获取一些h264 / mp4测试视频来播放音频,直到以后才发现它从来没有编码过任何音频!Du!)
警告如果您要测试使用
MPEG-2
或VC-1
购买(!)编解码器密钥
由RPi组织提供,可以使用内置的
硬件解码器对其进行完全解码。否则,您需要先转换文件。
您可以检查编解码器是否已启用:
# Check with:
vcgencmd codec_enabled MPG2
vcgencmd codec_enabled WVC1
您将需要一些经过验证的文件进行测试。如果没有,可以下载并使用它们。
# get some demo sound and video files
cd ~/Music
wget -Lk http://rpf.io/lamp3 -O example_11k.mp3
wget -Lk http://www.kozco.com/tech/piano2-CoolEdit.mp3 -O pianoTest_48k.mp3
wget -Lk http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4 -O bbb_720p_2mb.mp4
wget -Lk https://raw.githubusercontent.com/mediaelement/mediaelement-files/master/big_buck_bunny.mp4 -O bbb_360_22k.mp4
接下来,让我们玩吧!
# Double-check!
aplay -l && arecord -l
**** List of PLAYBACK Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
**** List of CAPTURE Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
# Play white noise on 2-channels (L/R) on Card-1
speaker-test -c2 -D hw:1,0
# Play a WAV sound file
speaker-test -c2 -D hw:1,0 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav
# Once the correct default card+device is set, and after reboot,
# then full left/right voice test (above) is performed, just by:
speaker-test -c2 -twav
# Record some sounds (with a VU bar):
arecord --device=hw:1,0 --format S16_LE --rate 44100 -c1 -V mono test.wav
# Play recorded sounds
aplay -D plughw:1,0 test.wav
# Play recorded sounds (sample rate have to be equal)
speaker-test -c2 -D plughw:1,0 -r 44100 --test=wav -W $HOME -w test.wav
# Install an MP3 player
sudo apt-get install mpg123
# Play some MP3 file
mpg123 -v -r 44100 some.mp3
# Play an MP3 sound stream
mpg123 http://ice1.somafm.com/u80s-128-mp3
# This plays video, but no sound!
omxplayer -o alsa /opt/vc/src/hello_pi/hello_video/test.h264
# This plays video and sound!
omxplayer -o alsa bbb_720p_2mb.mp4
# The following plays sometimes (!?) and at the wrong speed!
omxplayer -o alsa some.mp3
你一切都好!
/>
[可选]附加音频硬件的顺序
注意如果您使用此部分,则需要更改上述部分中的所有卡索引值!
如果您附加了其他音频硬件,但未按要求显示,则可以强制在
/lib/modprobe.d/aliases.conf
文件中重新排列模块的显示顺序。某些解决方案建议对此文件进行更改。不幸的是,他们不知道RPi默认USB声音模块拼写错误!因此,这些更改永远不会生效。我们关注的声音内核模块称为
snd_usb_audio
而不是snd-usb-audio
。文件名是snd-usb-audio.ko
,位于:/lib/modules/4.9.59-v7+/kernel/sound/usb/
中。有趣的是,文件中的文本指出它不需要修改! -bsh prettyprint-override“>
sudo nano /lib/modprobe.d/aliases.conf
#--------------------------------------
# For original (out-of-box) use
#--------------------------------------
# replace this:
options snd-usb-audio index=-2
# with this:
options snd_usb_audio index=-2
#--------------------------------------
# To change the index & order
#--------------------------------------
# Set the index value of the cards:
options snd_usb_audio index=0
options snd_bcm2835 index=1
# Set the order:
options snd slots=snd_usb_audio,snd_bcm2835
参考文献:
1 https://alsa.opensrc .org / Asoundrc
2 https://www.alsa-project.org/main/index.php/Asoundrc
[3]我如何在Raspbian Jessie上为Jasper配置我的声音?
[4] https://www.kernel.org/doc/html/latest/sound/index.html
[ 5] https://superuser.com/questions/989385/how-to-make-raspberry-pi-use-an-external-usb-sound-card-as-a-default
[ 6]学习和测试音频的好地方
评论
在Raspian上使用raspi 3B +,aplay在完成所有这些工作后始终没有执行任何操作,直到我使用-D plughw:0,0而不是-D hw:0,0(基于shttps://raspberrypi.stackexchange.com/a / 89162)。不幸的是,虽然现在几乎所有内容都可以通过USB播放音频,但是我最需要工作的实用程序(vban_receptor)仍然无法正常工作,但是在这一点上,几乎可以肯定,这不再是设置的问题
– Mike'Pomax'Kamermans
19年4月11日在19:20
是的,这是一场流血的噩梦。请在这里查看不同PCM插件的列表。然后在此处阅读名为“ ALSA设备和插件”的第一部分。也许这将有助于您了解为什么需要使用plughw而不是hw。顺便说一句。由于硬件直接用于硬件,而插件进行一些处理,因此您可能需要检查您实际尝试播放的内容。
–not2qubit
19年4月11日在22:51
我使用/ usr / share / sounds / alsa(特别是Front_Center.wav)中的沼泽标准测试音频文件之一对其进行了测试。
– Mike'Pomax'Kamermans
19年4月11日在23:03
你是绝对的明星。我没想到从树莓派中得到声音会是一个为期数天的项目,并且没有明确的操作指导。您的所有+1。
–基兰
19年4月16日在6:44
如此少的投票是犯罪的。
–BradChesney79
19年4月29日在21:58