Bisakah saya menanyakan proses mana (jika ada) yang saat ini mengakses mikrofon?

10

Saya sedang menjalankan Debian (secara teknis Raspbian), mencoba untuk mendapatkan sistem perintah suara gaya Star-Trek. Saya sudah sebagian besar berdiri dan berjalan, tetapi untuk kepentingan privasi dan semua jazz itu, saya tidak ingin mikrofon saya selalu merekam.

Saya bertanya-tanya, apakah ada cara untuk polling proses mana, jika ada, yang saat ini mengakses mikrofon? Idenya adalah saya akan membuat sendiri sedikit indikator untuk mengetahui apakah mikrofon sedang merekam audio atau tidak.

Tujuan utama saya adalah untuk menghidupkan dan mematikan mikrofon menggunakan remote TV, dan untuk memiliki indikator LED untuk apakah itu hidup atau mati. Saya memiliki semua perangkat keras yang berfungsi, saya hanya perlu perangkat lunak berakhir sekarang.

Saya percaya bahwa sekarang saya dikonfigurasi dalam ALSA murni yaitu bukan PulseAudio, meskipun saya bisa saja salah.

Ya ampun
sumber

Jawaban:

6

Pertama-tama identifikasi file perangkat mikrofon Anda; harus menjadi sesuatu yang mirip /dev/snd/pcmC0D0c. Untuk membantu Anda menemukan file perangkat, Anda dapat memulai rekaman uji dengan arecordatau semacamnya, lalu lakukan lsof | grep '/dev/snd'; itu akan mencantumkan semua program dan file perangkat terkait.

Kemudian Anda dapat mengintip penggunaan mikrofon menggunakan fuser /dev/snd/pcmC0D0c. Ini akan mengembalikan PID dari program yang mengakses perangkat, jika perangkat tersebut dibuka.

Anda dapat memilih untuk mengulang sebagai inotifywait /dev/snd/pcmC0D0calternatif, untuk mendeteksi perubahan status daripada terus-menerus mengumpulkan status perangkat.

Patrice Levesque
sumber
4

Bidang owner_piddalam procfsfile statusperangkat PCM menunjukkan program mana yang telah membukanya:

$ 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
CL.
sumber