현재 마이크에 액세스하고 있는 프로세스(있는 경우)를 쿼리할 수 있습니까?

현재 마이크에 액세스하고 있는 프로세스(있는 경우)를 쿼리할 수 있습니까?

저는 Debian(기술적으로는 Raspbian)을 실행 중이고 Star Trek 스타일 음성 명령 시스템을 얻으려고 합니다. 기본적으로는 작동하고 있지만 개인 정보 보호와 모든 재즈를 위해 마이크가 항상 녹음되는 것을 원하지 않습니다.

현재 어떤 프로세스(있는 경우)가 마이크에 액세스하고 있는지 폴링하는 방법이 있는지 궁금합니다. 내 생각은 마이크가 현재 오디오를 녹음하고 있는지 알려주는 작은 표시기를 만드는 것이었습니다.

나의 궁극적인 목표는 TV 리모콘을 사용하여 마이크를 켜고 끄고 마이크가 켜져 있는지 여부를 나타내는 LED 조명을 갖는 것입니다. 모든 하드웨어가 제대로 작동하고 있습니다. 이제 마무리할 소프트웨어만 있으면 됩니다.

지금 구성하고 있는 것은 순수 ALSA, 즉 PulseAudio가 아니라고 생각합니다. 비록 제가 틀렸을 수도 있습니다.

답변1

마이크 장치 파일을 식별하는 것부터 시작하십시오 /dev/snd/pcmC0D0c. 장치 파일을 찾는 데 도움이 되도록 arecord다음 명령을 사용하여 테스트 기록을 시작한 후 실행하면 lsof | grep '/dev/snd'모든 프로그램과 관련 장치 파일이 나열됩니다.

그런 다음 을 사용하여 마이크 사용량을 볼 수 있습니다 fuser /dev/snd/pcmC0D0c. 장치가 열리면 장치에 액세스하는 프로그램의 PID가 반환됩니다.

inotifywait /dev/snd/pcmC0D0c장치 상태를 지속적으로 폴링하는 것보다 상태 변경을 감지하기 위해 루프를 선호할 수 있습니다 .

답변2

PCM 장치 파일 의 필드에는 owner_pid해당 파일을 연 프로그램이 표시됩니다.procfsstatus

$ grep owner_pid /proc/asound/card*/pcm*/sub*/status
/proc/asound/card2/pcm0p/sub0/status:owner_pid   : 1803
$ ps -p 1803
  PID TTY          TIME CMD
 1803 pts/0    00:00:00 aplay

관련 정보