当我有多个麦克风时,如何知道我的麦克风是静音还是取消静音?

当我有多个麦克风时,如何知道我的麦克风是静音还是取消静音?

当我有多个麦克风(例如主板、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输出不发生太大变化,这种方法就有效。它的作用是:

  1. amixer通过管道传输to的输出awk
  2. [on]过滤掉不包含or 的行[off]。因此我们最终得到一行Mono: Capture 70 [90%] [12.00dB] [off]
  3. 提取并打印该行的第六个字段。字段分隔符设置为[],这样我们就可以得到开关状态字符串(“on”或“off”)。

诚然,这不是最优雅的解决方案,但我还没有找到一种方法来强制amixer以更结构化的方式产生其输出。

相关内容