Yuhang Zheng

Linux下amixer指令用法

N 人看过

amixer简介

amixer是命令行形式的配置指令,可以对ALSA(Advanced Linux Sound Architecture)架构类型的声卡驱动提供的接口进行音频参数配置,例如音量调节以及声卡开关。并且该amixer功能指令可以对多种类型声卡驱动接口进行配置。

另外注意还有alsamixer,作用和amixer一样,用于配置ALSA架构声卡各个音频参数,但是以图形界面形式显示,操作方便,显示直观。

amxier可以调节系统对应声卡的音量和选择音频通道。

amixer命令格式

使用 amixer命令如下:

amixer [-option] [cmd] 

amixer支持的功能

终端下输入#amixer -h查看amixer支持的功能和选项:

root@forlinx:~# amixer -h
Usage: amixer <options> [command]

Available options:
  -h,--help       this help
  -c,--card N     select the card
  -D,--device N   select the device, default 'default'
  -d,--debug      debug mode
  -n,--nocheck    do not perform range checking
  -v,--version    print version of this program
  -q,--quiet      be quiet
  -i,--inactive   show also inactive controls
  -a,--abstract L select abstraction level (none or basic)
  -s,--stdin      Read and execute commands from stdin sequentially
  -R,--raw-volume Use the raw value (default)
  -M,--mapped-volume Use the mapped volume

Available commands:
  scontrols       show all mixer simple controls
  scontents       show contents of all mixer simple controls (default command)
  sset sID P      set contents for one mixer simple control
  sget sID        get contents for one mixer simple control
  controls        show all controls for given card
  contents        show contents of all controls for given card
  cset cID P      set control contents for one control
  cget cID        get control contents for one control

上述指令对于amixer功能只是一个简单描述输出,具体解释可以输入#man 1 amixer查询。

自己理解的一些命令区别如下:

“controls”表示输出全部声卡驱动接口列表
“contents”表示输出全部声卡驱动接口列表以及对每个接口属性内容描述,接口的类型,值的大小
“scontrols”表示一些简单的接口的列表
“scontents”表示一些简单的接口的列表以及对每个接口属性内容描述,接口的类型,值的大小

小结一下,若要想对于某个声卡进行音频参数配置 ,可以:

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',输出如下:

image-20220719111642754

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

image-20220719111803588

可以看到当前值已经修改到了31。

另外可以使用#amixer sset 接口名 音量值格式也可以调节音量,例如调节喇叭音量Speaker Playback Volume为110:#amixer sset Playback 110

image-20220719112050116

amixer contents命令输出结果与wm8960寄存器标签名称的对应关系

自己抽空的时候整理了一下amixer contents中的接口名称与wm8960寄存器的标签对应关系,整理如下:

numid=12,iface=MIXER,name='Headphone Playback ZC Switch'    耳机过零点开关            LO1ZC/RO1ZC            ZC:zero cross
numid=11,iface=MIXER,name='Headphone Playback Volume'        耳机播放音量            LOUT1VOL[6:0]/ROUT1VOL[6:0]
numid=17,iface=MIXER,name='PCM Playback -6dB Switch'        DAC 6dB 衰减启用            DACDIV2
numid=42,iface=MIXER,name='Mono Output Mixer Left Switch'    Mono输出混合器左声道开关        LOMIX
numid=43,iface=MIXER,name='Mono Output Mixer Right Switch'    Mono输出混合器右声道开关        ROMIX
numid=41,iface=MIXER,name='ADC Data Output Select'        ADC数据输出选择            DATSEL[1:0]            ADC:Analogue to Digital Converter,可选择左右声道数据来源于左右声道还是单独某个声道
numid=19,iface=MIXER,name='ADC High Pass Filter Switch'        ADC高通录波器开关            ADCHPD
numid=36,iface=MIXER,name='ADC PCM Capture Volume'        ADC PCM 捕获音量            LADCVOL/RADCVOL            DIGITAL ADC VOLUME CONTROL
numid=18,iface=MIXER,name='ADC Polarity'            ADC 极性反转            ADCPOL[1:0]
numid=2,iface=MIXER,name='Capture Volume ZC Switch'        捕获音量过零点开关            LIZC/RIZC
numid=3,iface=MIXER,name='Capture Switch'            输入PGA音量更新             IPVU
numid=1,iface=MIXER,name='Capture Volume'            左右输入PGA音量控制        LINVOL[5:0]/RINVOL[5:0]
numid=10,iface=MIXER,name='Playback Volume'            左右DAC 数字音量控制        LDACVOL[7:0]/RDACVOL[7:0]
numid=23,iface=MIXER,name='3D Filter Lower Cut-Off'        3D增强滤波器下限频率        3DLC
numid=22,iface=MIXER,name='3D Filter Upper Cut-Off'        3D增强滤波器上限频率        3DUC
numid=25,iface=MIXER,name='3D Switch'            3D开关                3DEN
numid=24,iface=MIXER,name='3D Volume'            3D音量                3DDEPTH[3:0]
numid=33,iface=MIXER,name='ALC Attack'            ALC攻击(增益下降)时间        ATK[3:0]
numid=32,iface=MIXER,name='ALC Decay'            ALC衰减(增益上升)时间        DCY[3:0]
numid=26,iface=MIXER,name='ALC Function'            ALC功能选择            ALCSEL[1:0]
numid=30,iface=MIXER,name='ALC Hold Time'            增益增加之前的ALC保持时间        HLD[3:0]                
numid=27,iface=MIXER,name='ALC Max Gain'            设置PGA的最大增益(在ALC操作期间)    MAXGAIN[2:0]
numid=29,iface=MIXER,name='ALC Min Gain'            设置PGA的最小增益(在ALC操作期间)    MINGAIN[2:0]
numid=31,iface=MIXER,name='ALC Mode'            确定ALC操作模式            ALCMODE
numid=28,iface=MIXER,name='ALC Target'            ALC目标(设置ADC输入的信号电平)    ALCL[3:0]
numid=21,iface=MIXER,name='DAC Deemphasis Switch'        De-emphasis控制            DEEMPH[1:0]
numid=20,iface=MIXER,name='DAC Polarity'            DAC极性控制            DACPOL[1:0]
numid=57,iface=MIXER,name='Left Boost Mixer LINPUT1 Switch'                    AINL+LMN1
numid=55,iface=MIXER,name='Left Boost Mixer LINPUT2 Switch'                    AINL+LMP2
numid=56,iface=MIXER,name='Left Boost Mixer LINPUT3 Switch'                    AINL+LMP3
numid=9,iface=MIXER,name='Left Input Boost Mixer LINPUT1 Volume'    左声道输入 PGA 升压增益        LMICBOOST[1:0]
numid=7,iface=MIXER,name='Left Input Boost Mixer LINPUT2 Volume'    LINPUT2 提高混频器增益        LIN2BOOST[2:0]
numid=6,iface=MIXER,name='Left Input Boost Mixer LINPUT3 Volume'    LINPUT3 提高混频器增益        LIN3BOOST[2:0]
numid=51,iface=MIXER,name='Left Input Mixer Boost Switch'        将左输入 PGA 连接到左输入升压混频器    LMIC2B
numid=49,iface=MIXER,name='Left Output Mixer Boost Bypass Switch'                    LOMIX+LB2LO+AINL
numid=37,iface=MIXER,name='Left Output Mixer Boost Bypass Volume'    左输入升压混音器到左输出混音器音量    LB2LOVOL[2:0]
numid=48,iface=MIXER,name='Left Output Mixer LINPUT3 Switch'                    LOMIX+LMP3
numid=38,iface=MIXER,name='Left Output Mixer LINPUT3 Volume'                    LI2LOVOL[2:0]
numid=47,iface=MIXER,name='Left Output Mixer PCM Playback Switch'                    LOMIX+LI2LOVOL[2:0]
numid=35,iface=MIXER,name='Noise Gate Switch'                            NGAT
numid=34,iface=MIXER,name='Noise Gate Threshold'                        NGTH[4:0]
numid=54,iface=MIXER,name='Right Boost Mixer RINPUT1 Switch'                    AINR+RMN1
numid=52,iface=MIXER,name='Right Boost Mixer RINPUT2 Switch'                    AINR+RMP2
numid=53,iface=MIXER,name='Right Boost Mixer RINPUT3 Switch'                    AINR+RMP3
numid=8,iface=MIXER,name='Right Input Boost Mixer RINPUT1 Volume'                    RMICBOOST[1:0]
numid=5,iface=MIXER,name='Right Input Boost Mixer RINPUT2 Volume'                    RIN2BOOST[2:0]
numid=4,iface=MIXER,name='Right Input Boost Mixer RINPUT3 Volume'                    RIN3BOOST[2:0]
numid=50,iface=MIXER,name='Right Input Mixer Boost Switch'                    RMIC2B
numid=46,iface=MIXER,name='Right Output Mixer Boost Bypass Switch'                    ROMIX+RB2RO+AINR
numid=39,iface=MIXER,name='Right Output Mixer Boost Bypass Volume'                RB2ROVOL[2:0]
numid=44,iface=MIXER,name='Right Output Mixer PCM Playback Switch'                ROMIX+RI2ROVOL[2:0]
numid=45,iface=MIXER,name='Right Output Mixer RINPUT3 Switch'                    ROMIX+RMP3
numid=40,iface=MIXER,name='Right Output Mixer RINPUT3 Volume'                    RI2ROVOL[2:0]
numid=16,iface=MIXER,name='Speaker AC Volume'            喇叭模拟通道音量        ACGAIN[2:0]
numid=15,iface=MIXER,name='Speaker DC Volume'            喇叭数字通道音量        DCGAIN[2:0]
numid=13,iface=MIXER,name='Speaker Playback Volume'            喇叭播放音量        SPKLVOL[6:0]/SPKRVOL[6:0]
numid=14,iface=MIXER,name='Speaker Playback ZC Switch'            喇叭过零点开关        SPKLZC/SPKRZC

这里为了防止忘记,也简单的记录一下对应关系的查找方法吧

numid=12,iface=MIXER,name='Headphone Playback ZC Switch'

为例:

首先在内核的codec驱动里面sound/soc/codecs/wm8960.c搜索’Headphone Playback ZC Switch’,可以搜到以下结果:

SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8960_LOUT1, WM8960_ROUT1,
        7, 1, 0),

可以看到’Headphone Playback ZC Switch’所对应是WM8960_LOUT1和WM8960_ROUT1的寄存器的第7位,最大值为1,说明这是由一位来控制

其次,在内核的codec驱动的头文件中sound/soc/codecs/wm8960.h搜索WM8960_LOUT1和WM8960_ROUT1,可以得到以下结果:

#define WM8960_LOUT1            0x2
#define WM8960_ROUT1            0x3

然后我们在wm8960的datasheet手册里面搜索02h和03h,可以得到以下结果:

image-20220719171529632

由上面我们可以得到,’Headphone Playback ZC Switch’所对应的寄存器的标签就是LO1ZC与RO1ZC


同样我们再以一个多寄存器标签的例子说明一下,以

numid=54,iface=MIXER,name='Right Boost Mixer RINPUT1 Switch'

为例:

首先在内核的codec驱动里面sound/soc/codecs/wm8960.c搜索’Right Boost Mixer RINPUT1 Switch’,结果搜不到内容,然后我们可以搜索前半段’Right Boost Mixer’,我们可以搜到以下相关的结果:

static const struct snd_soc_dapm_route audio_paths[] = {
    { "Right Boost Mixer", "RINPUT1 Switch", "RINPUT1" },

可以看到’Right Boost Mixer RINPUT1 Switch‘包含了三个部分,分别是”Right Boost Mixer”, “RINPUT1 Switch”, “RINPUT1”,接下来我们分别搜索这三个关键字:

SND_SOC_DAPM_MIXER("Right Boost Mixer", WM8960_POWER1, 4, 0,
                   wm8960_rin_boost, ARRAY_SIZE(wm8960_rin_boost)),

SOC_DAPM_SINGLE("RINPUT1 Switch", WM8960_RINPATH, 8, 1, 0),

SND_SOC_DAPM_INPUT("RINPUT1"),

可以看到’Right Boost Mixer’所对应是WM8960_POWER1的寄存器的第4位,最大值为0,说明这是由一位来控制

‘RINPUT1 Switch’所对应是WM8960_RINPATH的寄存器的第8位,最大值为1,说明这是由一位来控制

“RINPUT1”没有寄存器来对应

其次,在内核的codec驱动的头文件中sound/soc/codecs/wm8960.h搜索WM8960_POWER1和WM8960_RINPATH,可以得到以下结果:

#define WM8960_POWER1           0x19
#define WM8960_RINPATH          0x21

然后我们在wm8960的datasheet手册里面搜索19h和21h,可以得到以下结果:

image-20220719172851565

image-20220719172943196

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