यह एप्सस्क्रिप्ट वास्तव में इनपुट वॉल्यूम को शून्य पर सेट क्यों नहीं करता है?


5

मेरे पास यह कमांड है जो इनपुट वॉल्यूम को म्यूट करने के लिए स्क्रिप्ट बनाता है। इनपुट वॉल्यूम पूरी तरह से म्यूट नहीं है, हालांकि। यह 0% की तुलना में 10% के करीब लगता है।

osacompile -x -e 'tell application "System Events" to set volume input volume 0' -o ~/bin/mute_mic.scpt

यह अजीब है, क्योंकि स्लाइडर बार जहां तक ​​छोड़ा जा सकता है, लेकिन जैसा कि आप संलग्न छवि से देख सकते हैं, ध्वनि अभी भी पंजीकृत है। हालांकि, अगर मैं शून्य पर स्लाइडर पर क्लिक करने के लिए माउस का उपयोग करता हूं, तो यह वास्तव में इनपुट को म्यूट करता है।

ऐसा क्यों होता है? क्या मैं यहां अनुचित तरीके से एप्सस्क्रिप्ट का उपयोग कर रहा हूं?

स्क्रिप्ट न होने का सबूत।

मैं इसे मूल AppleScript संपादक के साथ भी दोहरा सकता हूं, इसलिए मुझे पता है कि यह संकलन के साथ कोई समस्या नहीं है।

काम नहीं कर रहा है

(नोट: मैंने मूल रूप से इस प्रश्न के उत्तर से इस समस्या के समाधान के लिए अपना क्यू लिया है ।)

जवाबों:


3

जहां तक ​​मैं बता सकता हूं, स्क्रिप्ट उम्मीद के मुताबिक काम करती है, समस्या ओएस एक्स ऑडियो इनपुट कोड में है। जब मैं इसे चलाता हूं, तो स्लाइडर 0% तक चला जाता है, स्लाइडर पर मूसिंग द्वारा सत्यापित जब तक टूलटिप प्रकट न हो जाए:

टूलटिप

यह वैसा ही है जैसे मैं वॉल्यूम स्लाइडर को मैन्युअल रूप से खींचता हूं।

समस्या यह प्रतीत होती है कि "0%" वास्तव में बंद नहीं है , बल्कि बहुत कम सीमा है। कुछ त्वरित परीक्षण में, मैं अपने मैकबुक प्रो पर अपनी उंगली के दोहन की आवाज़ को माइक के पास रिकॉर्ड कर सकता था (ज्यादातर मशीनों पर मेरा मानना ​​है कि यह सही स्पीकर ग्रिल के आसपास है) जब वॉल्यूम 0 पर सेट किया गया था । मैं दोहरा सकता था कि चाहे मैं स्लाइडर को मैन्युअल रूप से या AppleScript के माध्यम से सेट करूं। यह काफी कम प्रतीत होता है कि वस्तुतः किसी अन्य ध्वनि को नहीं उठाया गया है, लेकिन स्पष्ट रूप से माइक्रोफोन वास्तव में बंद नहीं है।

जहां तक ​​मैं बता सकता हूं, बिल्ट-इन माइक को ठीक से म्यूट करने का कोई तरीका नहीं है। सबसे अच्छा मैं सुझाव दे सकता हूं कि लाइन का उपयोग करने के लिए ऑडियो इनपुट को बदल रहा है, अगर आपका मैक पोर्ट में एक लाइन से लैस है । AppleScript के माध्यम से ऐसा करने के लिए दुर्भाग्यवश कुछ GUI स्क्रिप्टिंग की आवश्यकता होती है, लेकिन इसे ऐसा करना चाहिए ( स्रोत ):

tell application "System Preferences"
   activate
   set current pane to pane id "com.apple.preference.sound"
end tell
tell application "System Events"
   tell process "System Preferences"
       set frontmost to true
       --get properties of UI element of tab group of window "Sound"
       click radio button "input" of tab group of window "Sound"
       tell row 2 of table 1 of scroll area 1 of tab group 1 of window "Sound" to set selected to true
   end tell
end tell

यदि आपके पास दो से अधिक मानक ऑडियो इनपुट (माइक और लाइन इन) हैं, तो आपको row 2अपनी इनपुट प्राथमिकताओं में क्रम के अनुसार, जो भी उपयुक्त हो, संख्या को बदलना होगा ।


आप मेरे स्क्रीनशॉट से देखेंगे, मेरे पास "आंतरिक माइक्रोफोन" की तुलना में कोई अन्य "इनपुट" विधि नहीं है। कोई "रेखा" क्यों नहीं होगी?
केनी

1
क्षमा करें, मुझे वह याद आया। मैं भूल गया था कि हाल के MacBooks के अधिकांश में लाइन नहीं है, केवल 15 "गैर-रेटिना एमबीपीएस करना तकनीकी तौर पर आप अभी भी माइक-इन एक iPhone संगत हेडसेट के साथ कर सकते हैं, लेकिन यह है कि इस मामले में वास्तव में उपयोगी नहीं
robmathers

जब से हम GUI स्क्रिप्टिंग की बात कर रहे हैं, क्या एक बार स्लाइडर पर क्लिक करने के बाद मुझे शून्य पर सेट करने का कोई तरीका है? (यह कैसे करना है पर मेरा applescript ज्ञान है)
केनी

(हाँ, यह मेरा उत्तर देखें)
केनी

ऐसा लगता है कि आपको वह मिल गया है, लेकिन आपकी स्क्रिप्ट कुछ भी नहीं बदलती है, यह सीधे AppleScript या मैन्युअल के माध्यम से इसे सेट करने के समान है - इसका मुद्दा वास्तव में मौन नहीं है। शायद मैंने आपके मूल इरादे को गलत समझा?
लुटेराथर्स

1

यह @robmathers GUI स्क्रिप्टिंग टुकड़ा और मेरे प्रश्न के बारे में बनाता है अगर आप स्लाइडर को ऐप्लस्क्रिप्ट के साथ "क्लिक" कर सकते हैं। मैंने AppleScript और UI कार्रवाइयों में कुछ खुदाई की थी और यह आपको पता चल सकता है

यह GUI स्क्रिप्टिंग का उपयोग करता है जो दुखद है, लेकिन यह काम करता है।

tell application "System Events"
    set volume input volume 0
end tell
tell application "System Preferences"
    activate
    set current pane to pane id "com.apple.preference.sound"
end tell
tell application "System Events"
    tell process "System Preferences"
        set frontmost to true
        click radio button "input" of tab group 1 of window "Sound"
        perform action "AXDecrement" of slider 1 of group 2 of tab group 1 of window "Sound"
    end tell
end tell
tell application "System Preferences"
    quit
end tell

यहाँ इस स्क्रिप्ट में क्या हो रहा है:

  1. इनपुट वॉल्यूम को 0 पर सेट करता है - यह स्लाइडर को बाईं ओर ले जाता है
  2. "क्लिक" स्लाइडर जो कुछ भी करने के लिए वूडू जो Apple ने वास्तव में इनपुट लाइन को "म्यूट" करने के लिए आवश्यक समझा है (यह हास्यास्पद है)
  3. सिस्टम वरीयताएँ अनुप्रयोग से बाहर निकलता है।

एक बात ध्यान दें: ध्वनि वरीयताएँ विंडो इस चलाने से पहले ही नहीं खुली हो सकती है या पहले set volume input volume 0काम नहीं करती है।

यह स्क्रिप्ट को अनम्यूट करने के लिए भी तुच्छ है (जो कि एक ही मुद्दे से ग्रस्त है)। (कार्रवाई के लिए "AXIncrement" का उपयोग करें)

जब तक मुझे इस आखिरी टुकड़े का पता लगाने की आवश्यकता होती है, तब तक @robmathers के लिए विशाल सहारा। मैं अभी भी उस इनाम को देने का इंतजार करूंगा जब किसी और के पास एक और अधिक सुंदर समाधान होगा, लेकिन अन्यथा, यह लेने के लिए उसका है।


: किसी को भी इस छोटे उपयोगिता के भावी परिवर्तनों का ट्रैक रखने के लिए करना चाहता है, तो मेरे dotfiles पर देखने github.com/kyounger/dotfiles/tree/master/osx/muting-scripts
केनी

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