내 컴퓨터는 네트워크를 통해 켜거나 끌 수 있는 오디오 증폭기에 연결되어 있습니다. 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: 언더런). 스피커 테스트를 중지하면 sox
10초 동안 침묵한 후 명령이 중지됩니다. 음소거하면 mplayer
소리가 나지 않지만 이는 데이터 수준과 관련이 없는 것 같습니다(에서 을 제거하면 시각화할 수 있습니다 -q
) sox
. mplayer
침묵을 감지하려면 소리 수준을 일시 중지하거나 줄여야 합니다 . sox
또한 오디오에 1~2초의 지연이 발생할 수도 있습니다. 카드0 대신 루프백 장치를 기본 장치로 설정하도록 alsa를 구성할 수 있어야 합니다.
더 만족스러운 해결책은 커널 사운드 드라이버가 실시간 오디오를 처리하도록 하고 sox
이를 사용하여 침묵을 감지하고 출력을 삭제하는 것입니다. 가능해 보이지만 alsa만 사용하면 약간 복잡하고 내가 갖고 있지 않은 지식이 필요하지만 sox
두 장치, 원래 사운드 카드 및 이를 읽을 수 있는 가상 장치에 사운드를 복사하는 예를 찾을 수 있습니다.
pulseaudio를 사용하여 더욱 간단한 솔루션 구현감시 장치가능합니다. pactl load-module module-combine-sink
조사에 사용할 수도 있습니다.