क्या मैं वर्तमान में माइक्रोफ़ोन एक्सेस करने वाली प्रक्रियाओं (यदि कोई हो) की क्वेरी कर सकता हूं?


10

मैं डेबियन (तकनीकी रूप से रास्पबियन) चला रहा हूं, एक स्टार-ट्रेक स्टाइल वॉयस-कमांड सिस्टम प्राप्त करने की कोशिश कर रहा हूं। मैं इसे ज्यादातर ऊपर और चल रहा है, लेकिन गोपनीयता और उस सभी जाज के हितों में, मैं नहीं चाहता कि मेरा माइक्रोफोन हमेशा रिकॉर्डिंग करे।

मुझे आश्चर्य हो रहा है कि क्या कोई प्रक्रिया है, जो वर्तमान में माइक्रोफोन को एक्सेस कर रही है, यदि कोई प्रक्रिया है? विचार यह है कि मैं खुद को यह बताने के लिए थोड़ा संकेतक बनाऊंगा कि क्या माइक्रोफ़ोन वर्तमान में ऑडियो रिकॉर्ड कर रहा था या नहीं।

मेरा अंतिम लक्ष्य टीवी-रिमोट का उपयोग करके माइक्रोफोन को चालू करना और बंद करना है, और यदि यह चालू या बंद है, तो एक एलईडी संकेतक रखना है। मुझे सभी हार्डवेयर सामान काम कर रहे हैं, मुझे अभी सॉफ्टवेयर की आवश्यकता है।

मेरा मानना ​​है कि अभी मैं शुद्ध एएलएसए में कॉन्फ़िगर किया गया हूं, न कि पल्सएडियो, हालांकि मैं गलत हो सकता हूं।

जवाबों:


6

पहले अपने माइक्रोफ़ोन डिवाइस फ़ाइल की पहचान करें; के समान कुछ होना चाहिए /dev/snd/pcmC0D0c। डिवाइस फ़ाइल ढूंढने में आपकी मदद करने के लिए, आप arecordया तो ऐसा करने के साथ एक परीक्षण रिकॉर्डिंग शुरू कर सकते हैं lsof | grep '/dev/snd'; यह सभी कार्यक्रमों और उनके संबंधित डिवाइस फ़ाइल को सूचीबद्ध करेगा।

तब आप माइक्रोफ़ोन के उपयोग का उपयोग कर सकते हैं fuser /dev/snd/pcmC0D0c। यदि यह डिवाइस खोला गया है, तो यह डिवाइस तक पहुंचने वाले प्रोग्राम के पीआईडी ​​को वापस कर देगा।

आप inotifywait /dev/snd/pcmC0D0cस्थिति के लिए डिवाइस को लगातार मतदान करने के बजाय राज्य में परिवर्तनों का पता लगाने के लिए वैकल्पिक रूप से लूप करना पसंद कर सकते हैं ।


4

PCM डिवाइस owner_pidकी procfsफ़ाइल statusका फ़ील्ड दिखाता है कि किस प्रोग्राम ने इसे खोला है:

$ 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.