amixer 是 ALSA (Advanced Linux Sound Architecture) 的工具,用于控制音频设备的混音器设置。
基本用法
1. 查看设备信息
bash
# 查看所有声卡
amixer devices
# 查看当前声卡信息
amixer info
# 查看所有控制器
amixer controls
# 查看具体控制器的值
amixer contents
2. 获取和设置音量
bash
# 查看所有通道音量
amixer sget Master
# 设置主音量
amixer sset Master 50%
amixer sset Master 50%+ # 增加50%
amixer sset Master 50%- # 减少50%
amixer sset Master 10dB+ # 增加10分贝
# 静音/取消静音
amixer sset Master mute
amixer sset Master unmute
amixer sset Master toggle # 切换静音状态
3. 多通道控制
bash
# 分别控制左右声道
amixer sset Master 80%,90%
amixer sset Master 10%+,20%+
# 查看具体通道
amixer sget PCM
amixer sget Headphone
amixer sget Mic
工作原理
1. 系统架构
应用程序 → ALSA库 → 内核驱动 → 硬件
↓
amixer
2. 核心概念
声卡 (Sound Card)
bash
# 查看所有声卡
cat /proc/asound/cards
混音器 (Mixer)
- 控制音频流的混合和路由
- 每个声卡可以有多个混音器
控制器 (Control)
- 音量控制
- 开关控制
- 路由控制
3. 底层原理
ALSA 控制接口
c
// 通过 /dev/snd/controlCX 设备文件操作
int fd = open("/dev/snd/controlC0", O_RDWR);
控制元素结构
c
struct snd_ctl_elem_info {
unsigned int type; // 控制类型
unsigned int count; // 通道数
long min, max; // 值范围
// ...
};
struct snd_ctl_elem_value {
unsigned int id; // 控制ID
union {
integer_t value[128];
boolean_t boolean[128];
// ...
};
};
高级用法
1. 脚本中使用
bash
#!/bin/bash
# 设置音量并检查状态
amixer sset Master 80% > /dev/null
if amixer get Master | grep -q "\[off\]"; then
amixer sset Master unmute
fi
2. 事件监听
bash
# 监听音量变化(需要支持)
amixer subscribe
3. 配置文件
在 ~/.asoundrc 或 /etc/asound.conf 中配置默认设备:
defaults.ctl.card 0
defaults.pcm.card 0
实际示例
音频录制设置
bash
# 提高麦克风音量
amixer sset Capture 90%
amixer sset Capture cap # 设置为捕获模式
# 打开麦克风
amixer sset Mic unmute
amixer sset Mic 80%
耳机/扬声器切换
bash
# 切换到耳机输出
amixer cset iface=MIXER,name='Headphone Playback Switch' on
amixer cset iface=MIXER,name='Speaker Playback Switch' off
相关工具
- alsamixer: 基于 ncurses 的图形界面混音器
- aplay/arecord: 播放和录制音频
- speaker-test: 扬声器测试工具
调试技巧
bash
# 查看详细的ALSA信息
cat /proc/asound/version
cat /proc/asound/cards
cat /proc/asound/pcm
# 调试模式
amixer -v3 sget Master
amixer 的原理就是通过 ALSA 的用户空间库与内核中的声卡驱动进行通信,读取和修改混音器的各种控制参数,从而实现对音频硬件的软件控制。