测试音频设备/声卡当前是否正在播放?

测试音频设备/声卡当前是否正在播放?

是否有默认程序可以检查我的音频设备是否处于静音状态?

编辑:我所说的沉默是指如果有东西在播放(不仅仅是激活或打开)

像这样的东西:

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

相关内容