सबसे पहले, ध्यान दें कि मुझे पता है कि पहले से ही इस तरह के कुछ प्रश्न हैं; हालांकि वे पर्याप्त समस्या को हल करने के लिए प्रतीत नहीं होते हैं। मेरे पास एक सी # एप्लिकेशन है, सभी पिनवोक हुक के साथ waveXXX एपीआई से बात करने के लिए, और मैं कैप्चर करने और ऑडियो के साथ वापस खेलने में सक्षम हूं। मैं उस एपीआई के साथ स्पीकर (वेवऑट) वॉल्यूम समायोजित करने में भी सक्षम हूं।
समस्या यह है कि किसी भी कारण से, एपीआई मुझे माइक्रोफोन (वेवइन) वॉल्यूम समायोजित करने की अनुमति नहीं देता है। इसलिए, मैंने कुछ मिक्सर कोड ढूंढने में कामयाब रहा जो मैंने P12voke के माध्यम से और तक पहुंच लिया है और यह मुझे माइक्रोफ़ोन वॉल्यूम समायोजित करने की अनुमति देता है, लेकिन केवल मेरे W7 पीसी पर। मेरे साथ शुरू किया गया मिक्सर कोड यहां से आता है: http://social.msdn.microsoft.com/Forums/en-US/isvvba/thread/05dc2d35-1d45-4837-8e16-562ee919da85 और यह काम करता है, लेकिन स्पीकर वॉल्यूम समायोजित करने के लिए लिखा जाता है। मैं SetMicVolume विधि यहाँ दिखाया गया है ...सी # से माइक्रोफोन लाभ को समायोजित करने के लिए कैसे करें (XP और W7 पर काम करने की आवश्यकता है)
public static void SetMicVolume(int mxid, int percentage)
{
bool rc;
int mixer, vVolume;
MIXERCONTROL volCtrl = new MIXERCONTROL();
int currentVol;
mixerOpen(out mixer, mxid, 0, 0, MIXER_OBJECTF_WAVEIN);
int type = MIXERCONTROL_CONTROLTYPE_VOLUME;
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
{
mixerClose(mixer);
mixerOpen(out mixer, 0, 0, 0, 0);
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
throw new Exception("SetMicVolume/GetVolumeControl() failed");
}
vVolume = ((int)((float)(volCtrl.lMaximum - volCtrl.lMinimum)/100.0F) * percentage);
rc = SetVolumeControl(mixer, volCtrl, vVolume);
if (rc == false)
throw new Exception("SetMicVolume/SetVolumeControl() failed");
mixerClose(mixer);
}
नोट "दूसरा प्रयास" GetVolumeControl कॉल करने के लिए() जोड़ा गया। ऐसा इसलिए किया जाता है क्योंकि एक्सपी पर, GetVolumeControl (उस कोड के लिए उपरोक्त साइट का संदर्भ लें) में पहली कॉल में, मिक्सर GetLineControlsA() को कॉल MIXERR_INVALCONTROL लौटने वाले XP सिस्टम के साथ विफल रहता है। फिर, mixerOpen (आउट मिक्सर, 0, 0, 0, 0) का उपयोग करके इस दूसरे प्रयास के साथ, कोड विफलता वापस नहीं करता है लेकिन माइक लाभ अप्रभावित है। नोट, जैसा कि मैंने उपरोक्त कहा है, यह W7 पर काम करता है (दूसरा प्रयास कभी निष्पादित नहीं होता है क्योंकि यह मिक्सर ओपन (आउट मिक्सर, एमएक्सआईडी, 0, 0, MIXER_OBJECTF_WAVEIN) का उपयोग करने में विफल नहीं होता है)।
मैं मिक्सर एपीआई पर अच्छी समझ नहीं लेता हूं, इसलिए मैं अब देख रहा हूं; हालांकि अगर किसी के पास कोई सुराग है तो यह W7 पर क्यों काम करेगा, लेकिन XP नहीं, मैं निश्चित रूप से इसे सुनना चाहता हूं। इस बीच, अगर मैं प्रतिक्रिया प्राप्त करने से पहले इसे समझता हूं, तो मैं अपना उत्तर पोस्ट करूंगा ...
ध्यान दें कि मेरे पास पहले से ही एक एक्सपी मशीन है जो यह विफल रही है, इसलिए यह अभी भी सही नहीं है ... –
आपके कोड में int mxid क्या है? एक कैसे प्राप्त करें? –