오디오 장치/사운드 카드가 현재 재생되고 있는지 테스트합니까?

오디오 장치/사운드 카드가 현재 재생되고 있는지 테스트합니까?

내 오디오 장치가 음소거되었는지 확인하는 기본 프로그램이 있나요?

편집하다:무음이란 무언가가 재생 중일 때를 의미합니다(활성화되거나 켜져 있을 뿐 아니라).

이 같은:

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

관련 정보