【问题标题】:How to detect that the sound is currently playing in Linux?如何检测声音当前正在 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
}

如何使用命令行实用程序检测声音或视频正在播放?

【问题讨论】:

标签: bash audio video alsa


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-17
          • 1970-01-01
          • 1970-01-01
          • 2011-11-18
          • 1970-01-01
          • 2018-01-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多