2012-08-25 15 views
6

मेरे पास एक ऐसा एप्लिकेशन है जिसमें ध्वनि है। ध्वनि को म्यूट करने के लिए मेरे पास वैश्विक संपत्ति है। समस्या यह है कि, कई अलग-अलग चीजें हैं जो ध्वनि बना सकती हैं, मैं विभिन्न वर्ग प्रकारों के माध्यम से पुनरावृत्ति करने से नफरत करता हूं और उनकी आवाज को म्यूट/अनम्यूट करता हूं। इसके बजाय, मैं वैश्विक अनुप्रयोग स्तर पर ध्वनि को म्यूट करने का एक तरीका ढूंढ रहा हूं। मेरा मतलब यह नहीं है कि पूरे सिस्टम वॉल्यूम को म्यूट कर रहा हो।मेरे आवेदन की आवाज़ को म्यूट कैसे करें?

एक परिदृश्य: विंडोज 7 में, आप वॉल्यूम मिक्सर खोल सकते हैं और व्यक्तिगत अनुप्रयोगों की मात्रा समायोजित कर सकते हैं। जबकि मैं इस वास्तविक विशेष मूल्य को बदलने का इरादा नहीं रखता (जैसा कि मुझे पता है कि यह विंडोज 7 विशिष्ट है), मैं अपने आवेदन में सब कुछ एक ही बार में बदलना चाहता हूं। मुझे अपने आवेदन में सब कुछ की आवाज़ पूरी तरह से म्यूट करने की क्षमता भी होगी। मुझे Windows XP और ऊपर के साथ संगत होने की यह क्षमता चाहिए। मुझे लगता है कि इसमें विंडोज एपीआई कॉल शामिल होंगे, लेकिन मुझे नहीं पता कि कॉल करने के लिए क्या कॉल है।

+0

इस सवाल पर एक नज़र डालें: मैं क्या याद के लिए http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi

+3

, XP नहीं था प्रति आवेदन ध्वनि स्तर। आपके पास एप्लिकेशन में कुछ केंद्रीय ध्वनि आउटपुट एपीआई होगा और अगर आप इसे विंडोज एपीआई में छोड़ दें या केवल –

+1

को अनदेखा करें और निपटें तो WinXP में प्रति एप्लिकेशन ध्वनि नियंत्रण क्षमता नहीं है। यह Vista में जोड़ा गया था, और ऐसा करने के लिए जोड़े गए नए इंटरफेस के साथ ऐसा करने के लिए यह एक बिल्कुल अलग (नया) एपीआई का उपयोग करता है। लैरी ओस्टर्मन (एमएस पुराने टाइमर में से एक) के पास अपने ब्लॉग पर नए ध्वनि एपीआई पर एक श्रृंखला थी; मेरे पास इस मशीन पर इसका कोई लिंक नहीं है, लेकिन आप उसे गुगलिंग द्वारा ढूंढ पाएंगे। सीओ/सी ++ में एसओ पर इस पर पोस्ट हैं, मुझे कुछ समय पहले भी याद है; मैं देखूंगा कि क्या आप उन्हें खोजने के लिए उपयोग करने के लिए एक खोज शब्द पा सकते हैं। –

उत्तर

3

आप जो पूछ रहे हैं वह XP पर संभव नहीं है; ओएस बस प्रति-अनुप्रयोग वॉल्यूम स्तर का समर्थन नहीं करता है।

आप एक सेटिंग क्लास बनाकर जो चाहते हैं उसे पूरा कर सकते हैं जो SoundActive: Boolean या PlaySounds: Boolean या कुछ समान चीज़ों को रखता है। इसे अपनी इकाई में रखें, और एक प्रारंभिक अनुभाग है जो इसका एक उदाहरण बनाता है और एक अंतिमकरण खंड जो इसे मुक्त करता है (इसे प्रभावी रूप से वैश्विक मानों का संग्रह बना देता है)।

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

if CurrentSettings.PlaySounds then 
    // Code that makes sounds, plays music, whatever. 

सेटिंग्स वर्ग भी तरीकों कि (XP, सिस्टम-वाइड स्तर पर) वर्तमान वॉल्यूम स्तर का ट्रैक रखने के हो सकते हैं, और MMSystem वॉल्यूम फ़ंक्शन का उपयोग करके वॉल्यूम बढ़ाने या घटाने के तरीके (यहां कई उदाहरण हैं और ऐसा करने के माध्यम से Google)। आपका ऐप OnActivate और OnDeactivate ईवेंट का उपयोग वॉल्यूम स्तर सेट करने के लिए वॉल्यूम स्तर सेट करने के लिए कर सकता है, और जब आपका ऐप फोकस खो देता है तो उसे उचित मात्रा में पुनर्स्थापित कर सकते हैं।

Vista में और उसके बाद वाले प्रणाली विस्तृत मात्रा (मैं, ऐसा करने का एक उदाहरण है उचित MMDevAPI इंटरफ़ेस परिभाषाओं के साथ) या डिवाइस स्तर को नियंत्रित करने के IAudioEndPointVolume इंटरफेस कि मैंने पहले बताया है और या तो GetMasterVolumeLevel या SetMasterVolumeLevel तरीकों का उपयोग कर सकते हैं वॉल्यूम (IMMDevioce.Activate का उपयोग करके पहले उचित उपकरण का चयन करने के लिए और पैरामीटर में IMMDevice.Activate से प्राप्त डिवाइस इंटरफ़ेस पर उपरोक्त IAudioEndPointVolume विधियों का उपयोग करें)।

व्यक्तिगत आवेदनों के लिए, आप ISimpleAudioVolume इंटरफ़ेस है, जो चार विधियों है का उपयोग करें: GetMasterVolume और SetMasterVolume है, जो अपने आवेदन की ऑडियो सत्र के लिए ध्वनि के स्तर को नियंत्रित करते हैं, और GetMute और SetMute आप वर्तमान मूक ध्वज मान प्राप्त या स्थापित करने के लिए अनुमति देने के लिए यह क्रमशः। (एमएस के लैरी ओस्टर्मन, जो विस्टा और विन 7 में नए ऑडियो समर्थन पर काम करने वाले डेवलपर्स में से एक थे, ने अपने ब्लॉग पर नए एपीआई में ऑडियो के प्रकार और उनमें से प्रत्येक का उपयोग करने के बारे में अपने ब्लॉग पर starting point article का शानदार प्रदर्शन किया है।)

यह क्रम में निर्धारित करने के लिए कौन सा ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं, और प्रोग्राम के रूप में XP पर MMSystem कार्यक्षमता का उपयोग के बीच स्विच करने और पहले धारणात्मक संभव है, और Vista और उच्च पर MMDevAPI कार्यक्षमता। ऐसा करने के लिए कोड प्रदान करने के लिए यहां किसी की अपेक्षा करना थोड़ा अनुचित है, हालांकि। मेरे द्वारा प्रदान किए गए लिंक आपको सही रास्ते पर शुरू कर सकते हैं, और जब आप उन स्नैग के माध्यम से काम करने में विशिष्ट सहायता के साथ स्नैग में भाग लेते हैं तो वे बहुत अच्छे प्रश्न होंगे।

4

XP प्रति-अनुप्रयोग वॉल्यूम नियंत्रण का समर्थन नहीं करता है। Vista में यह क्षमता जोड़ा गया था। तो आप जो करने का प्रयास कर रहे हैं वह एक्सपी में निष्पक्ष साधनों से नहीं किया जा सकता है।

IndieVolume नामक सॉफ़्टवेयर है जो रेट्रो प्रति-एप वॉल्यूम नियंत्रण को XP पर फिट करता है। मैं केवल कल्पना कर सकता हूं कि यह निम्न स्तर की हैकिंग, डीएलएल इंजेक्शन और इसी तरह के माध्यम से ऐसा करता है। मुझे संदेह है कि यह वास्तव में आपके लिए एक विकल्प है।

संबंधित मुद्दे