내 오디오 장치가 음소거되었는지 확인하는 기본 프로그램이 있나요?
편집하다:무음이란 무언가가 재생 중일 때를 의미합니다(활성화되거나 켜져 있을 뿐 아니라).
이 같은:
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 찬드 /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