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


10

Star-Trek 스타일의 음성 명령 시스템을 얻으려고 데비안 (기술적으로 Raspbian)을 실행하고 있습니다. 나는 주로 작동하고 있지만 프라이버시와 모든 재즈를 위해 마이크가 항상 녹음되는 것을 원하지 않습니다.

궁금합니다. 현재 어떤 프로세스가 현재 마이크에 액세스하고 있는지 폴링하는 방법이 있습니까? 아이디어는 마이크가 현재 오디오를 녹음하고 있는지 아닌지를 알려주는 작은 지표가 될 것입니다.

나의 궁극적 인 목표는 TV- 원격을 사용하여 마이크를 켜고 끄고, 켜져 있거나 꺼져 있는지에 대한 LED 표시기를 갖는 것입니다. 모든 하드웨어 작업이 완료되었으므로 소프트웨어가 필요합니다.

나는 지금 내가 잘못 될 수 있지만 PulseAudio가 아닌 순수한 ALSA로 구성되었다고 생각합니다.

답변:


6

먼저 마이크 장치 파일을 식별하십시오. 와 비슷해야합니다 /dev/snd/pcmC0D0c. 장치 파일을 쉽게 찾을 수 있도록 테스트 녹음을 arecord시작한 다음 수행하십시오 lsof | grep '/dev/snd'. 모든 프로그램과 관련 장치 파일이 나열됩니다.

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

inotifywait /dev/snd/pcmC0D0c장치의 상태를 지속적으로 폴링하는 대신 상태 변화를 감지 하기 위해 루프를 반복하는 것이 좋습니다.


4

필드 owner_pid에서 procfs파일 status프로그램이 열린 한 PCM 장치 쇼 :

$ 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.