是否有默认程序可以检查我的音频设备是否处于静音状态?
编辑:我所说的沉默是指如果有东西在播放(不仅仅是激活或打开)
像这样的东西:
if [[ device0 is silent ]] ; then
radio $RANDOM
fi
编辑2:我想要实现的是一个播放广播的脚本,并且可以在播放器失败时继续播放,例如,如果互联网连接中断并且播放器没有恢复,我将杀死播放器并重新开始
答案1
如果您使用 PulseAudio(基于 Gnome 的 Linux 发行版倾向于使用 PulseAudio,您可以检查是否正在运行ps -C pulseaudio
)并且您想知道某些应用程序是否正在向任何“接收器”发送任何数据,您可以这样做:
pacmd list-sink-inputs | grep -c 'state: RUNNING'
仍然使用 PulseAudio,如果您想检查声音输出是否静音,可能会更简单,但您可以使用以下命令获取默认“接收器”的“静音”状态:
pacmd dump | awk '
$1 == "set-sink-mute" {m[$2] = $3}
$1 == "set-default-sink" {s = $2}
END {print m[s]}'
答案2
如果我理解正确的话,这里有一个例子:
安静:
fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
There's silence
我打开大胆:
fuser /dev/snd/timer && echo "Something is playing" || echo "There's silence"
/dev/snd/timer: 47663
Something is playing
对于 OSS chande/dev/snd/timer
来说/dev/dsp
。
这是一个非常依赖的方法。
答案3
假设您使用 ALSA 混音器来播放声音,您可以使用amixer
它来查询有关音频设备的信息。音频设备通常有多个音频通道或控件,每个通道或控件都可以静音和取消静音。例如,要检查Master
控件是否静音,您可以执行以下操作:
if amixer get Master | grep -q off; then
# action
fi
使用该set
选项可以在控件上执行操作。请参阅man amixer
获取更多帮助。
答案4
htor 的答案可能会起作用,但“off”完全有可能出现在输出中的其他位置,从而导致不正确的结果。这是使用 GNU awk 进行的更严格的检查:
if amixer get Master | gawk 'END{ if ( $NF != "[off]" ) { exit 1 } }'; then
# muted
else
# unmuted
fi