当我有多个麦克风(例如主板、USB 和 HDMI)时,如何确定我的麦克风是否静音?
1)我用这个找不到它:
$ cat /proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xfe720000 irq 48
1 [default ]: USB-Audio - AK5370
AKM AK5370 at usb-0000:00:1a.0-1.1, full s
2)也不与此
$ amixer -D 'hw:0' | grep Capture
Capture channels: Front Left - Front Right
Simple mixer control 'Capture',0
Capture channels: Front Left - Front Right
Limits: Capture 0 - 46
Front Left: Capture 22 [48%] [6.00dB] [on]
Front Right: Capture 22 [48%] [6.00dB] [on]
Simple mixer control 'Capture',1
Capture channels: Front Left - Front Right
Limits: Capture 0 - 46
Front Left: Capture 42 [91%] [26.00dB] [on]
Front Right: Capture 42 [91%] [26.00dB] [on]
Capture channels: Front Left - Front Right
$ amixer -D 'hw:1' | grep Capture
Capture channels: Mono
Limits: Capture 0 - 78
Mono: Capture 70 [90%] [12.00dB] [off]
3) 也不与:
$ pactl list | sed -n '/^Source/,/^$/p' | grep Mute
Mute: yes
Mute: no
Mute: no
$ amixer scontrols
Simple mixer control 'Master',0
Simple mixer control 'Capture',0
如何让我的bash
(或其他)脚本根据hw:value,value
格式查询读取值?
答案1
你可以尝试 alsamixer,它位于 alsa-utils 包中。它有一个很好的 ncurses 类型的 GUI。
答案2
您的amixer -D 'hw:1'
输出实际上在最后一行显示了麦克风状态。这是在脚本中提取该内容的一种方法bash
:
amixer -D "hw:1" sget Mic | awk -F "[\[\]]" '/\[on|off\]/{ print $6 }'
使用amixer
's-D
指定设备,并sget
指定simple control
要查询的设备。对我来说,简单的控制是Mic
,但对你来说可能会有所不同 - 使用amixer -D "hw:1"
来找出答案。
只要amixer
输出不发生太大变化,这种方法就有效。它的作用是:
amixer
通过管道传输to的输出awk
,[on]
过滤掉不包含or 的行[off]
。因此我们最终得到一行Mono: Capture 70 [90%] [12.00dB] [off]
- 提取并打印该行的第六个字段。字段分隔符设置为
[
或]
,这样我们就可以得到开关状态字符串(“on”或“off”)。
诚然,这不是最优雅的解决方案,但我还没有找到一种方法来强制amixer
以更结构化的方式产生其输出。