有没有办法在音频设备打开或关闭时运行挂钩(即 shell 脚本等)?

有没有办法在音频设备打开或关闭时运行挂钩(即 shell 脚本等)?

我在 Raspperry Pi 上运行 MPD(音乐播放器守护进程),连接到一个高功率音频放大器。如果 24/7 保持打开状态,放大器会变得非常热,我担心它会自行烧毁,更不用说安静的交流电嗡嗡声会渗透到扬声器中,但我不喜欢必须走到它旁边才能打开每次我想听音乐时都会打开和关闭它。

我注意到 MPD 在开始和停止播放音乐时会自动打开和关闭与 PulseAudio 的连接,而不是像大多数程序那样始终保持连接打开状态。我在放大器和连接到 Pi 的 GPIO 引脚之一的电源插座之间连接了一个电源继电器,我想知道是否有一种方法可以让我运行 shell 脚本或其他东西来打开该引脚并根据 MPD 打开音频设备的时间自动关闭(或者,如果我在 ALSA 级别而不是 PulseAudio 级别执行此操作,则当任何应用程序打开音频设备时)。

这是否可能,或者我最好修改并重新编译 MPD 以运行 shell 脚本本身?

答案1

这是我在尝试在打开麦克风时执行代码时想到的 shell 脚本,您也许可以根据您的需要对其进行调整。关键是pactl subscribe

#!/bin/bash

source_number=""

pactl subscribe | while read x event y type num; do
    if [ $event == "'new'" -a $type == 'source-output' ]; then
        source_number=$num
        notify-send -u normal -a "Microphone Monitor" "Microphone ON" "Microphone has been turned ON"
        echo "$(date -Is) Microphone on"
    fi

    if [ $event == "'remove'" -a $type == 'source-output' -a $num == "$source_number" ]; then
        source_number=""
        notify-send -u normal -a "Microphone Monitor" "Microphone OFF" "Microphone has been turned OFF"
        echo "$(date -Is) Microphone off"
    fi
done

相关内容