Linux下amixer指令用法
amixer简介
amixer是命令行形式的配置指令,可以对ALSA(Advanced Linux Sound Architecture)架构类型的声卡驱动提供的接口进行音频参数配置,例如音量调节以及声卡开关。并且该amixer功能指令可以对多种类型声卡驱动接口进行配置。
另外注意还有alsamixer,作用和amixer一样,用于配置ALSA架构声卡各个音频参数,但是以图形界面形式显示,操作方便,显示直观。
amxier可以调节系统对应声卡的音量和选择音频通道。
amixer命令格式
使用 amixer命令如下:
1 | amixer [-option] [cmd] |
amixer支持的功能
终端下输入#amixer -h查看amixer支持的功能和选项:
1 | root@forlinx:~# amixer -h |
上述指令对于amixer功能只是一个简单描述输出,具体解释可以输入#man 1 amixer查询。
自己理解的一些命令区别如下:
1 | “controls”表示输出全部声卡驱动接口列表 |
小结一下,若要想对于某个声卡进行音频参数配置 ,可以:
1.使用#amixer contents查看所有可配置的声卡驱动配置接口,从中选择要配置的接口,若知道接口属性则直接使用#amixer cget 参数或#amixer sget 参数查看指定声卡驱动配置接口;
2.使用#amixer cset 参数或#amixer sset 参数格式对声卡驱动配置接口调参。
例如喇叭音量Speaker Playback Volume进行调节,当已经知道了接口属性(不知道可通过#amixer contents对应查询),则首先可以使用#amixer cget 参数 查看当前值:#amixer cget numid=13,iface=MIXER,name='Speaker Playback Volume',输出如下:

可以看到喇叭音量Speaker Playback Volume当前值为127,现在通过#amixer cset ***修改喇叭音量的值,比如修改到100,则#amixer cset numid=13,iface=MIXER,name='PCM Playback Volume' 31:

可以看到当前值已经修改到了31。
另外可以使用#amixer sset 接口名 音量值格式也可以调节音量,例如调节喇叭音量Speaker Playback Volume为110:#amixer sset Playback 110

amixer contents命令输出结果与wm8960寄存器标签名称的对应关系
自己抽空的时候整理了一下amixer contents中的接口名称与wm8960寄存器的标签对应关系,整理如下:
1 | numid=12,iface=MIXER,name='Headphone Playback ZC Switch' 耳机过零点开关 LO1ZC/RO1ZC ZC:zero cross |
这里为了防止忘记,也简单的记录一下对应关系的查找方法吧
以
1 | numid=12,iface=MIXER,name='Headphone Playback ZC Switch' |
为例:
首先在内核的codec驱动里面sound/soc/codecs/wm8960.c搜索’Headphone Playback ZC Switch’,可以搜到以下结果:
1 | SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8960_LOUT1, WM8960_ROUT1, |
可以看到’Headphone Playback ZC Switch’所对应是WM8960_LOUT1和WM8960_ROUT1的寄存器的第7位,最大值为1,说明这是由一位来控制
其次,在内核的codec驱动的头文件中sound/soc/codecs/wm8960.h搜索WM8960_LOUT1和WM8960_ROUT1,可以得到以下结果:
1 | #define WM8960_LOUT1 0x2 |
然后我们在wm8960的datasheet手册里面搜索02h和03h,可以得到以下结果:

由上面我们可以得到,’Headphone Playback ZC Switch’所对应的寄存器的标签就是LO1ZC与RO1ZC
同样我们再以一个多寄存器标签的例子说明一下,以
1 | numid=54,iface=MIXER,name='Right Boost Mixer RINPUT1 Switch' |
为例:
首先在内核的codec驱动里面sound/soc/codecs/wm8960.c搜索’Right Boost Mixer RINPUT1 Switch’,结果搜不到内容,然后我们可以搜索前半段’Right Boost Mixer’,我们可以搜到以下相关的结果:
1 | static const struct snd_soc_dapm_route audio_paths[] = { |
可以看到’Right Boost Mixer RINPUT1 Switch‘包含了三个部分,分别是”Right Boost Mixer”, “RINPUT1 Switch”, “RINPUT1”,接下来我们分别搜索这三个关键字:
1 | SND_SOC_DAPM_MIXER("Right Boost Mixer", WM8960_POWER1, 4, 0, |
可以看到’Right Boost Mixer’所对应是WM8960_POWER1的寄存器的第4位,最大值为0,说明这是由一位来控制
‘RINPUT1 Switch’所对应是WM8960_RINPATH的寄存器的第8位,最大值为1,说明这是由一位来控制
“RINPUT1”没有寄存器来对应
其次,在内核的codec驱动的头文件中sound/soc/codecs/wm8960.h搜索WM8960_POWER1和WM8960_RINPATH,可以得到以下结果:
1 | #define WM8960_POWER1 0x19 |
然后我们在wm8960的datasheet手册里面搜索19h和21h,可以得到以下结果:


由上面我们可以得到,’Right Boost Mixer RINPUT1 Switch’所对应的寄存器的标签就是AINR与RMN1