转载: https://www.cnblogs.com/lihaiping/p/alsaconfig.html
警告:错误的EDID会造成HDMI发声异常
#title:box:HDMI Audio
#author:wangsijie
#:0,1
------------------------------------------------------------------------------
硬件环境
Nvidia(290)
------------------------------------------------------------------------------
软件环境
alsa-1.0.24.1-3.1
------------------------------------------------------------------------------
配置文件
/etc/asound.conf(简易配置) :
{{{
pcm.!default{
type hw
card 1
devive 7
}
ctl.!default{
type hw
card 1
device 7
}
}}}
其中card代表声卡号, device代表设备号, asound.conf的配置极其强大和复杂,详情可查阅AlsaProject
---------------------------------------------------------------------------
card, device的确定方法
card, device必须对应hdmi的声卡号和设备号,可以使用aplay -l查看对应的hdmi设备,可能会有出现多个hdmi设备,确定当前可以使用的hdmi设备的方法如下:
#. cat /proc/asound/cards 查看nvidia设备对应的ID号(假设=1)
#. alsamixer -c 1 打开声音设置,其中<S/PDIF>即为HDMI输出,“MM”代表静音,alsa在每次重启声音设备时都会默认为静音,所以必须首先打开音量再进行后续的操作。
#. alsactl store 保存上述配置
#. aplay -D hw:1,7 /usr/share/sounds/alsa/test.wav "hw后的1代表声卡号,7代表设备号,需要根据aplay -l的输出来确定这两个数字"找到对应的hdmi输出口。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
参考网站:
ALSA的配置文件对于ALSA非常重要。常见的有三个:alsa.conf, asoundrc, asound.conf。
1. 核心配置文件
ALSA核心配置文件位于/usr/share/alsa/目录下,主要配置文件为/usr/share/alsa/alsa.conf 。其它文件是否需要,位置在哪,都是由alsa.conf来决定的。通常会有/usr/share/alsa/card 和/usr/share/alsa/pcm两个子目录,用于设置Card相关的参数,别名以及一些PCM默认设置。
此外,在alsa.conf中,通常还会引用 /etc/asound.conf 和 ~/.asoundrc这两个配置文件,这两个文件通常是放置个人需要特殊设置的相关参数。按照Alsa官方文档的说法,1.0.9版本以后,这两个文件就不再是必要的,甚至是不应该需要的。至少是不推荐使用。不过,在嵌入式系统中使用,为了简单和方便测试,恰恰是需要修改这两个文件。
2. alsa.conf
alsa.conf中主要的一些内容包括:
1) 用hook读取了/etc/asound.conf 和 ~/.asoundrc这两个配置文件:
@hooks [
{
func load
files [
"/etc/asound.conf"
"~/.asoundrc"
]
errors false
}
]
2) 设置了default pcm的一些默认参数,如,默认使用Card 0 ,Device 0作为音频设备等等
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.nonblock 1
defaults.pcm.ipc_key 5678293
。。。
3) 设置了Alsa 内置的一些plugin的接口参数,例如file:
pcm.file {
@args [ FILE FORMAT ]
@args.FILE {
type string
}
@args.FORMAT {
type string
default raw
}
type file
slave.pcm null
file $FILE
format $FORMAT
}
File plugin的作用是将PCM数据流存储到文件中。
3. asoundrc和asound.conf
按照ALSA官方说法,asoundrc是针对个人用户的配置文件,asound.conf是全局的配置文件。其中,asoundrc位于主目录下,是个隐藏文件:“.asoundrc”。asound.conf位于/etc目录下。对于最新版本的ALSA库来说,这两个文件已不再需要。但是对于一些特定应用来说,他们的使用恰到好处。典型的asoundrc文件如下:
# Overwrite existing devices
pcm.!default
{
type plug
slave.pcm "softvol"
channels 2
}
# Add new sofvol PCM device
pcm.softvol
{
type softvol
slave
{
pcm "hw:0,0"
}
control
{
name "Softmaster"
card 0
}
}
4. ALSA配置状态保存,恢复和自动加载
实际使用过程中,常常需要动态修改声卡的配置信息,如更新asoundrc中的Mixer信息。如果不对当前声卡的配置状态进行保存,下次启动系统时,将还原到原始状态。为此,我们有必要对声卡的配置状态进行保存。声卡配置状态保存工具为:alsactl,具体保存命令为:
alsactl store -f /var/lib/alsa/asound.state
这样就在/var/lib/alsa/目录下生成了asound.state文件,该文件保存了声卡的状态配置信息,包括常用的mixer配置信息。相应的声卡状态恢复命令为:
alsactl restore -f /var/lib/alsa/asound.state
注:在每次修改完声卡配置文件之后,必须要保证配置文件被系统加载,否则在保存声卡配置状态信息时,alsactl读取的是上次声卡的状态。常用的加载配置文件的方法是播放一个音频文件,例如:
speaker-test -twav
这样就可以将刚刚修改的配置文件加载到系统中,然后执行相应的保存命令,即可将相应的声卡状态信息保存到文件中。
得到了声卡的配置状态信息仍不能保证系统启动时自动加载并应用状态信息。需要修改启动配置文件,加入ALSA Daemon。启动配置文件为:/etc/rc.conf,在包含DAEMONS的一行内加入alsa项目。这样,系统启动时会自动执行/etc/rc.d/alsa脚本,该脚本会自动执行前面所说的声卡状态恢复命令,恢复Mixer配置信息。