무음만 재생되는 경우 감지

무음만 재생되는 경우 감지

내 컴퓨터는 네트워크를 통해 켜거나 끌 수 있는 오디오 증폭기에 연결되어 있습니다. 10분 동안 오디오가 재생되지 않으면 자동으로 꺼지도록 설정하고 싶습니다.

/proc/asound/card*/pcm*/sub*/status여기에서 오디오가 출력되고 있음을 나타내는 단어가 있는지 살펴보라고 제안하는 몇 가지 유사한 질문을 찾았지만 RUNNING, 많은 프로그램에서는 소음이 발생하지 않더라도 오디오가 실행되도록 하는 것 같습니다. 그냥 출력을 조용하게 하면 됩니다. Firefox 실행과 같은 일부 Python 프로그램이 이 작업을 수행하는 것으로 나타났습니다 apulse.

/proc/asound/이는 스피커가 영구적이기 때문에 오디오가 나오지 않는 시기를 감지할 수 없음을 의미합니다 RUNNING.

재생되는 유일한 오디오 신호가 무음인 경우를 감지하는 또 다른 방법이 있습니까? hw장치가 사용 중인 장치 인 경우에도 ALSA 출력을 기록하거나 가로채는 방법이 있습니까 ?

답변1

sox이것은 alsa(alsa 루프백 모듈)만을 사용하고 침묵을 감지하는 개념 증명 데모입니다. 루프백 모듈은 사운드를 재생한 다음 다시 녹음할 수 있는 출력 장치를 제공합니다. 예를 들어 mplayer사운드 출력에 루프백을 직접 사용한 다음 sox루프백에서 녹음을 실행하고 묵음을 감지한 다음 원래 하드웨어 출력 장치로 출력할 수 있습니다.

모듈 로드

sudo modprobe snd-aloop

(사용 가능한 커널 모듈 목록에 있습니다). aplay -l이제 2개의 장치가 포함된 새 카드가 나열됩니다. 장치 0은 재생에 사용되고 장치 1은 녹음에 사용됩니다. 8개의 독립적인 "하위 장치" 채널이 있으며 일반적으로 생략할 수 있으므로 숫자 0을 사용하는 것이 가장 쉽습니다. ( aplay가방에서 찾았어요 alsa-utils)

$ aplay -l
...
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
...
  Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
...
  Subdevice #7: subdevice #7

이제 패키지의 다른 유틸리티를 사용하여 루프백 장치 0(하위 장치 0)에서 연속 신호음을 생성할 수 있습니다.

speaker-test -t sine -D hw:Loopback

또는 예를 들어 mplayer옵션이 있는 장치를 사용하라고 지시합니다.-ao alsa:device=hw=Loopback

sox장치의 다른 쪽을 읽고 실제 하드웨어에 쓰도록 실행하기 전까지는 아무 소리도 들리지 않습니다 (카드 0이라고 가정).

sox -q  -t alsa hw:Loopback,1  -t alsa hw:0  silence 0 1 10.0 2%

(경고를 많이 봤는데삭스 경고 alsa: 언더런). 스피커 테스트를 중지하면 sox10초 동안 침묵한 후 명령이 중지됩니다. 음소거하면 mplayer소리가 나지 않지만 이는 데이터 수준과 관련이 없는 것 같습니다(에서 을 제거하면 시각화할 수 있습니다 -q) sox. mplayer침묵을 감지하려면 소리 수준을 일시 중지하거나 줄여야 합니다 . sox또한 오디오에 1~2초의 지연이 발생할 수도 있습니다. 카드0 대신 루프백 장치를 기본 장치로 설정하도록 alsa를 구성할 수 있어야 합니다.

더 만족스러운 해결책은 커널 사운드 드라이버가 실시간 오디오를 처리하도록 하고 sox이를 사용하여 침묵을 감지하고 출력을 삭제하는 것입니다. 가능해 보이지만 alsa만 사용하면 약간 복잡하고 내가 갖고 있지 않은 지식이 필요하지만 sox두 장치, 원래 사운드 카드 및 이를 읽을 수 있는 가상 장치에 사운드를 복사하는 예를 찾을 수 있습니다.

pulseaudio를 사용하여 더욱 간단한 솔루션 구현감시 장치가능합니다. pactl load-module module-combine-sink조사에 사용할 수도 있습니다.

관련 정보