如何检测声音当前正在 Linux 中播放?
Posted
技术标签:
【中文标题】如何检测声音当前正在 Linux 中播放?【英文标题】:How to detect that the sound is currently playing in Linux? 【发布时间】:2013-06-28 13:44:27 【问题描述】:我使用 ALSA。我想防止 PC 在播放声音时挂起。我使用这个 bash 代码来运行屏幕锁和挂起命令:
# Run a screen locker.
#xautolock -time 5 -locker slimlock &
# Run suspend
#xautolock -time 6 -locker 'systemctl suspend' &
我想检测是否播放了声音或视频并阻止 PC 挂起。 比如一个伪代码:
if (video is not played)
run a screen locker
if (sound is not played and video is not played)
run suspend command
如何使用命令行实用程序检测声音或视频正在播放?
【问题讨论】:
见unix.stackexchange.com/questions/61337/… 【参考方案1】:检查是否有任何/proc/asound/card*/pcm*/sub*/status
文件包含state: RUNNING
。
【讨论】:
在一般情况下,视频输出无法与任何其他图形输出区分开来。尝试使用ps
查看您的视频播放器应用程序是否正在运行。
这可能不是一个有用的评论,但我考虑了一会儿检测视频使用情况,然后我意识到在播放视频时通常有音频输出,所以你真的不需要检测视频使用情况。无论如何,这对我很有用【参考方案2】:
我用这个:
pacmd list-sink-inputs
【讨论】:
【参考方案3】:如果你使用xscreensaver
,那么这个命令会告诉你屏幕是否是空白的:
xscreensaver-command -time | grep -q 'screen \(locked\|blanked\)'
通常视频播放器会阻止屏幕保护程序激活,因此如果它已激活,则可能意味着没有视频播放。
你可以这样使用它:
if xscreensaver-command -time | grep -q 'screen \(locked\|blanked\)'; then
echo Screen is off (screensaver active)
else
echo Screen is on, video might be playing
fi
【讨论】:
【参考方案4】:你可以试试这个脚本(需要安装 xmacroplay):
#!/bin/bash
# Script to prevent screen blanking when audio is playing.
command -v xmacroplay > /dev/null 2>&1 || echo "ERROR: must install xmacroplay"; exit -1;
while true; do
sleep 50
if pacmd list-sink-inputs | grep -w state | grep -q RUNNING ; then
xmacroplay :0 >& /dev/null <<EOF
MotionNotify 90 90
MotionNotify 120 120
EOF
fi
done
【讨论】:
【参考方案5】:当其他脚本工作时,它会不断将鼠标移动到固定位置。这个只有在它没有改变的情况下才会尝试移动它,并将它保持在当前位置附近。
#!/bin/bash
# Script to prevent screen blanking when audio is playing.
if [ -z DISPLAY ]; then
DISPLAY=:0
fi
while true; do
sleep 50
if pacmd list-sink-inputs | grep -w state | grep -q RUNNING ; then
xdotool mousemove_relative -- -1 -1
sleep 1
xdotool mousemove_relative -- 1 1
fi
done
【讨论】:
以上是关于如何检测声音当前正在 Linux 中播放?的主要内容,如果未能解决你的问题,请参考以下文章