नीचे दिए गए उदाहरण कोड पर थोड़ा बदलाव है here (श्रेय थॉमस स्टुटज़ है)। उदाहरण में माइक्रोफोन वॉल्यूम सेट है। मैंने बस माइक्रोफोन स्रोत के बजाय घटक प्रकार - स्पीकर गंतव्य को संशोधित किया, और mixerSetControlDetails
को mixerGetControlDetails
के साथ बदल दिया, और सेटर को निश्चित रूप से गेटटर में बदल दिया। मैंने यहां परीक्षण की गई कुछ प्रणालियों पर (XPSp3, XPSp2, W2K, 98), ऐसा लगता है कि यह काम करता है। फ़ंक्शन की वापसी पहले (डिफ़ॉल्ट) मिक्सर से स्पीकर है - 0-65535 का मान, बटन हैंडलर में 'शोमेसेज' इसे प्रतिशत में बदल देता है। लेकिन मुझे इसके बारे में अधिक जानकारी न पूछें, मुझे वास्तव में मिक्सर एपीआई के साथ कोई अनुभव नहीं है। इसके बजाय here f.i देखें, हालांकि लेख वास्तव में मेरे लिए व्यापक प्रतीत होता है।
function GetSpeakerVolume(var bValue: Word): Boolean;
var {0..65535}
hMix: HMIXER;
mxlc: MIXERLINECONTROLS;
mxcd: TMIXERCONTROLDETAILS;
vol: TMIXERCONTROLDETAILS_UNSIGNED;
mxc: MIXERCONTROL;
mxl: TMixerLine;
intRet: Integer;
nMixerDevs: Integer;
begin
Result := False;
// Check if Mixer is available
nMixerDevs := mixerGetNumDevs();
if (nMixerDevs < 1) then
Exit;
// open the mixer
intRet := mixerOpen(@hMix, 0, 0, 0, 0);
if intRet = MMSYSERR_NOERROR then
begin
mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mxl.cbStruct := SizeOf(mxl);
// get line info
intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if intRet = MMSYSERR_NOERROR then
begin
ZeroMemory(@mxlc, SizeOf(mxlc));
mxlc.cbStruct := SizeOf(mxlc);
mxlc.dwLineID := mxl.dwLineID;
mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls := 1;
mxlc.cbmxctrl := SizeOf(mxc);
mxlc.pamxctrl := @mxc;
intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if intRet = MMSYSERR_NOERROR then
begin
ZeroMemory(@mxcd, SizeOf(mxcd));
mxcd.dwControlID := mxc.dwControlID;
mxcd.cbStruct := SizeOf(mxcd);
mxcd.cMultipleItems := 0;
mxcd.cbDetails := SizeOf(vol);
mxcd.paDetails := @vol;
mxcd.cChannels := 1;
intRet := mixerGetControlDetails(hMix, @mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
if intRet <> MMSYSERR_NOERROR then
ShowMessage('GetControlDetails Error')
else begin
bValue := vol.dwValue;
Result := True;
end;
end
else
ShowMessage('GetLineInfo Error');
end;
intRet := mixerClose(hMix);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Vol: Word;
begin
if GetSpeakerVolume(Vol) then
ShowMessage(IntToStr(Round(Vol * 100/65535)));
end;
स्रोत
2010-12-22 01:57:22
इस प्रश्न में डेल्फी के साथ विशेष रूप से कुछ भी नहीं है, लेकिन केवल विंडोज एपीआई है। यह लिंक मदद कर सकता है: http://blogs.msdn.com/b/alejacma/archive/2010/01/13/how-to-set-sound-volume-programmatically.aspx –
मैं यह नहीं कह रहा हूं कि इसे करना है डेल्फी के साथ रहें, लेकिन मैं जानना चाहता हूं कि _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – eKek0
वह लिंक तरंग मात्रा के साथ सौदा करता है, न कि मास्टर वॉल्यूम। – eKek0