在进行多媒体软件开发时,经常要调整各种设备的音量和设置静音,本人编写了一个单元,四个函数,分别用于获取音量(GetVolume(DN))、设置音量(SetVolume(DN,Value))、获取静音(GetVolumeMute(DN))及设置静音(SetVolumeMute(DN,Value))。
unit funVolume;
interface 数据挖掘论坛
uses MMSystem, Dialogs; 数据挖掘交友
Type TDeviceName = (Master, Microphone, WaveOut, Synth); 数据挖掘工具
function GetVolume(DN:TDeviceName) : Word ; procedure SetVolume(DN:TDeviceName; Value:Word); function GetVolumeMute(DN:TDeviceName) : Boolean; procedure SetVolumeMute(DN:TDeviceName; Value:Boolean); 数据挖掘实验室
implementation 数据挖掘交友
//获取音量 function GetVolume(DN:TDeviceName) : Word; var hMix: HMIXER; mxlc: MIXERLINECONTROLS; mxcd: TMIXERCONTROLDETAILS; vol: TMIXERCONTROLDETAILS_UNSIGNED; mxc: MIXERCONTROL; mxl: TMixerLine; intRet: Integer; nMixerDevs: Integer; begin // Check if Mixer is available nMixerDevs := mixerGetNumDevs(); if (nMixerDevs < 1) then begin Exit; end;
// open the mixer intRet := mixerOpen(@hMix, 0, 0, 0, 0); if intRet = MMSYSERR_NOERROR then begin case DN of Master : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; Microphone : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; WaveOut : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; Synth : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; end; mxl.cbStruct := SizeOf(mxl); 数据挖掘研究院
// get line info intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); 数据挖掘实验室
if intRet = MMSYSERR_NOERROR then begin FillChar(mxlc, SizeOf(mxlc),0); 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 FillChar(mxcd, SizeOf(mxcd),0); 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_SETCONTROLDETAILSF_VALUE); 数据挖掘交友
Result := vol.dwValue ; 数据挖掘交友
if intRet <> MMSYSERR_NOERROR then ShowMessage("GetControlDetails Error"); end else ShowMessage("GetLineInfo Error"); end; intRet := mixerClose(hMix); end; end; 数据挖掘论坛
//设置音量 procedure setVolume(DN:TDeviceName; Value : Word); var hMix: HMIXER; mxlc: MIXERLINECONTROLS; mxcd: TMIXERCONTROLDETAILS; vol: TMIXERCONTROLDETAILS_UNSIGNED; mxc: MIXERCONTROL; mxl: TMixerLine; intRet: Integer; nMixerDevs: Integer; begin // Check if Mixer is available nMixerDevs := mixerGetNumDevs(); if (nMixerDevs < 1) then begin Exit; end; 数据挖掘工具
// open the mixer intRet := mixerOpen(@hMix, 0, 0, 0, 0); if intRet = MMSYSERR_NOERROR then begin case DN of Master : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; Microphone : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; WaveOut : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; Synth : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; end; mxl.cbStruct := SizeOf(mxl); 数据挖掘实验室
// get line info intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if intRet = MMSYSERR_NOERROR then begin FillChar(mxlc, SizeOf(mxlc),0); 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 FillChar(mxcd, SizeOf(mxcd),0); mxcd.dwControlID := mxc.dwControlID; mxcd.cbStruct := SizeOf(mxcd); mxcd.cMultipleItems := 0; mxcd.cbDetails := SizeOf(Vol); mxcd.paDetails := @vol; mxcd.cChannels := 1; 数据挖掘论坛
vol.dwValue := Value; 数据挖掘研究院
intRet := mixerSetControlDetails(hMix, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE); 数据挖掘实验室
if intRet <> MMSYSERR_NOERROR then ShowMessage("SetControlDetails Error"); end else ShowMessage("GetLineInfo Error"); end; intRet := mixerClose(hMix); end; end; 数据挖掘论坛
//获取静音 function GetVolumeMute(DN:TDeviceName) : Boolean; var hMix: HMIXER; mxlc: MIXERLINECONTROLS; mxcd: TMIXERCONTROLDETAILS; vol: TMIXERCONTROLDETAILS_UNSIGNED; mxc: MIXERCONTROL; mxl: TMixerLine; intRet: Integer; nMixerDevs: Integer; mcdMute: MIXERCONTROLDETAILS_BOOLEAN; begin // Check if Mixer is available nMixerDevs := mixerGetNumDevs(); if (nMixerDevs < 1) then begin Exit; end; 数据挖掘论坛
// open the mixer intRet := mixerOpen(@hMix, 0, 0, 0, 0); if intRet = MMSYSERR_NOERROR then begin case DN of Master : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; Microphone : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; WaveOut : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; Synth : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; end; mxl.cbStruct := SizeOf(mxl); 数据挖掘论坛
// mixerline info intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); 数据挖掘实验室
if intRet = MMSYSERR_NOERROR then begin FillChar(mxlc, SizeOf(mxlc),0); mxlc.cbStruct := SizeOf(mxlc); mxlc.dwLineID := mxl.dwLineID; mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE; mxlc.cControls := 1; mxlc.cbmxctrl := SizeOf(mxc); mxlc.pamxctrl := @mxc; 数据挖掘交友
// Get the mute control intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); 数据挖掘论坛
if intRet = MMSYSERR_NOERROR then begin FillChar(mxcd, SizeOf(mxcd),0); mxcd.cbStruct := SizeOf(TMIXERCONTROLDETAILS); mxcd.dwControlID := mxc.dwControlID; mxcd.cChannels := 1; mxcd.cbDetails := SizeOf(MIXERCONTROLDETAILS_BOOLEAN); mxcd.paDetails := @mcdMute;
// Get mute intRet := mixerGetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE); 数据挖掘实验室
if mcdMute.fValue = 0 then Result:=false else Result := True;
if intRet <> MMSYSERR_NOERROR then ShowMessage("SetControlDetails Error"); end else ShowMessage("GetLineInfo Error"); end; 数据挖掘研究院
intRet := mixerClose(hMix); end; end; 数据挖掘实验室
//设置静音 procedure SetVolumeMute(DN:TDeviceName; Value:Boolean); var hMix: HMIXER; mxlc: MIXERLINECONTROLS; mxcd: TMIXERCONTROLDETAILS; vol: TMIXERCONTROLDETAILS_UNSIGNED; mxc: MIXERCONTROL; mxl: TMixerLine; intRet: Integer; nMixerDevs: Integer; mcdMute: MIXERCONTROLDETAILS_BOOLEAN; begin // Check if Mixer is available nMixerDevs := mixerGetNumDevs(); if (nMixerDevs < 1) then begin Exit; end; 数据挖掘论坛
// open the mixer intRet := mixerOpen(@hMix, 0, 0, 0, 0); if intRet = MMSYSERR_NOERROR then begin case DN of Master : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; Microphone : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; WaveOut : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; Synth : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; end; mxl.cbStruct := SizeOf(mxl); 数据挖掘论坛
// mixerline info intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); 数据挖掘工具
if intRet = MMSYSERR_NOERROR then begin FillChar(mxlc, SizeOf(mxlc),0); mxlc.cbStruct := SizeOf(mxlc); mxlc.dwLineID := mxl.dwLineID; mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE; mxlc.cControls := 1; mxlc.cbmxctrl := SizeOf(mxc); mxlc.pamxctrl := @mxc; 数据挖掘研究院
// Get the mute control intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); 数据挖掘论坛
if intRet = MMSYSERR_NOERROR then begin FillChar(mxcd, SizeOf(mxcd),0); mxcd.cbStruct := SizeOf(TMIXERCONTROLDETAILS); mxcd.dwControlID := mxc.dwControlID; mxcd.cChannels := 1; mxcd.cbDetails := SizeOf(MIXERCONTROLDETAILS_BOOLEAN); mxcd.paDetails := @mcdMute; 数据挖掘交友
// Set and UnSet mute mcdMute.fValue := Ord(Value); intRet := mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE); 数据挖掘交友
if intRet <> MMSYSERR_NOERROR then ShowMessage("SetControlDetails Error"); end else ShowMessage("GetLineInfo Error"); end;
intRet := mixerClose(hMix); end; end; 数据挖掘工具
end. 数据挖掘论坛 |