检测扬声器发出的声音

检测扬声器发出的声音

我决定用我的旧笔记本电脑制作一台收音机。我安装了 Puppy linux 并设置了特殊功能,例如:醒来后,它打开我最喜欢的在线广播(openFM)并关闭屏幕。

有时它会失去与互联网的连接并且音乐停止,但是当笔记本电脑重新连接到互联网时,音乐不会再次开始,我必须重新启动程序(openFM)。

我想编写一个脚本来检查当前是否正在播放音乐,并且当没有音乐播放时,它应该重新启动 openFM。

我不知道如何检测音乐是否正在播放。我试过:

/proc/asound/card*/pcm*/sub*/status

但它总是包含:

state: RUNNING

你还有其他建议吗?

答案1

我曾经找到一个脚本(我不记得我的 bash_history 在哪里)。

这不是解决方案,而是解决方法。我知道这不完全是您所要求的,但它可能有用。

它使用麦克风来检测静音。

这是我的脚本:

while :;
    do
    rec -t raw /dev/null rate 32k silence 1 0.1 4% 1 1.0 15%;
    clementine -t;
    sleep 1;
done
  • 1.0 代表静音时间(1 秒),将其更改为更长的时间以确保不是音乐暂停。
  • 15% 代表安静阈值,对于安静的地方使用较小的值,对于嘈杂的地方使用较高的值。
  • clementine -t 是我用来切换音乐播放器状态(又名 clementine)的命令,用您用来重新启动 openFM 的命令更改它。
  • sleep 1:稍微延迟一下,给事情一些时间。

你可以在这里阅读更多:http://linux.die.net/man/1/rec和这里:一旦检测到静音就结束 sox 录音

您也可以只对您知道将始终在线的主机进行 ping 操作,直到失败为止,然后继续尝试更多 ping 操作,直到它再次工作。此时您知道连接已消失但又回来了,因此您应该重新启动 openFM。这可以通过第三个循环内的两个循环来完成。

#!/bin/bash
while :;
    do

    while ping -c 1 8.8.8.8; # do we have connection?
        do
        sleep 5;
    done
    # the connection seems to be gone...

    until ping -c 1 8.8.8.8; # do we have connection?
        do
        sleep 5;
    done
    # the connection seems to be back again...

    # restart here your service

done

请注意 -c 1 表示仅进行一次 ping(然后我们再次调用它)。您不必 ping 到 google 的 DNS,可以根据需要更改睡眠时间。

相关内容