Tôi có thể truy vấn quy trình nào (nếu có) hiện đang truy cập micrô không?


10

Tôi đang chạy Debian (về mặt kỹ thuật Raspbian), cố gắng có được hệ thống ra lệnh bằng giọng nói kiểu Star-Trek. Tôi đã có nó chủ yếu và chạy, nhưng vì lợi ích riêng tư và tất cả nhạc jazz, tôi không muốn micrô của mình luôn ghi âm.

Tôi đang tự hỏi, có cách nào để thăm dò quá trình nào, nếu có, hiện đang truy cập micrô không? Ý tưởng là tôi tự tạo cho mình một chỉ báo nhỏ để biết micro có đang ghi âm hay không.

Mục tiêu cuối cùng của tôi là bật và tắt micrô bằng điều khiển TV và có đèn chỉ báo LED nếu bật hoặc tắt. Tôi đã có tất cả các công cụ phần cứng hoạt động, tôi chỉ cần phần mềm kết thúc ngay bây giờ.

Tôi tin rằng ngay bây giờ tôi được cấu hình trong ALSA thuần, tức là không phải PulseAudio, mặc dù tôi có thể sai.

Câu trả lời:


6

Đầu tiên xác định tập tin thiết bị micro của bạn; nên là một cái gì đó tương tự như /dev/snd/pcmC0D0c. Để giúp bạn tìm tệp thiết bị, bạn có thể bắt đầu ghi âm thử nghiệm arecordhoặc sau đó, sau đó làm lsof | grep '/dev/snd'; nó sẽ liệt kê tất cả các chương trình và tập tin thiết bị liên quan của chúng.

Sau đó, bạn có thể nhìn trộm sử dụng micro bằng cách sử dụng fuser /dev/snd/pcmC0D0c. Nó sẽ trả về PID của chương trình truy cập thiết bị, nếu nói thiết bị được mở.

Bạn có thể thích lặp lại inotifywait /dev/snd/pcmC0D0cthay thế, để phát hiện các thay đổi về trạng thái thay vì liên tục bỏ phiếu cho thiết bị về trạng thái.


4

Trường owner_pidtrong procfstệp statuscủa thiết bị PCM hiển thị chương trình nào đã mở nó:

$ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.