通过 CLI 在 Linux 中使音频静音的脚本有效,但需要帮助

Script to mute audio in Linux from CLI works, but help needed

我经常在工作时播放新闻,并且想在广告期间静音,所以四处寻找并发现这个

Whosebug thread

它产生了一些好东西并导致了以下脚本非常有效:

#!/bin/bash
#Mute, wait, unmute: attempt 1
for x in `amixer controls  | grep layback` ; do 
    amixer cset "${x}" on ; done
echo Mute for how many seconds?
read v1
sleep $v1
for x in `amixer controls  | grep layback` ; do
    amixer cset "${x}" 700% ; done

这行得通,但会导致终端屏幕上出现可怕的混乱:(试一试)

<p>161 [~]$ MM<br>
numid=16,iface=MIXER,name='Master Playback Switch'<br>
  ; type=BOOLEAN,access=rw------,values=1<br>
  : values=on<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Switch'<br>
numid=15,iface=MIXER,name='Master Playback Volume'<br>
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=127,step=0<br>
  : values=0<br>
  | dBscale-min=-95.25dB,step=0.75dB,mute=1<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Volume'<br>...etc</p>

通过在 cset

之后添加 -q 来清理一点
<p>166 [~]$ MM<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Switch'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Volume'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Switch'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Volume'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Volume'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Switch'<br>
Wrong control identifier: Playback<br>
Wrong control identifier: Volume'<br>
amixer: Control default element write error: Operation not
permitted<br>...etc</p>

但为什么我会收到所有这些 "Wrong control identifier" 消息?

我试着 man grep 但后来我的头掉了下来,我不得不用胶带把它重新绑起来,现在我头疼了。我饿了。

干杯 全民

试试这个:

read -p "Mute for how many seconds? " v1 ; \
amixer controls  | grep layback | grep -v ' Ma' | 
    xargs -I '{}' amixer -q cset '{}' on ; \
sleep $v1 ; \
amixer controls  | grep layback | grep -v ' Ma' | 
    xargs -I '{}' amixer -q cset '{}' 700% 

备注:

  1. 主要的问题似乎是像 'Playback Con Mask''Playback Channel Map'amixer 选项不兼容。使用 grep -v 过滤掉那些混合器可以解决这个问题。
  2. read应该先走,否则静音持续输入 秒 加上 用户输入它们所花费的时间。
  3. xargs 在这里不是必需的,但它似乎比使用更简单 带有变量的循环。
  4. 这些 ; \ 可以更轻松地一次性复制和粘贴到命令行。在脚本中不需要 ; \ 行结尾。