我是
靠谱客的博主
负责悟空,最近开发中收集的这篇文章主要介绍
delphi内进行音量控制及静音,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
unit UMute;
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
Result:
=
0
;
//
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
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;
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 Exit;
//
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;
mixerClose(hMix);
end;
end;
//
获取静音
function GetVolumeMute(DN:TDeviceName) : Boolean;
var
hMix: HMIXER;
mxlc: MIXERLINECONTROLS;
mxcd: TMIXERCONTROLDETAILS;
mxc: MIXERCONTROL;
mxl: TMixerLine;
intRet: Integer;
nMixerDevs: Integer;
mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
//
Check if Mixer is available
nMixerDevs :
=
mixerGetNumDevs();
Result:
=
False;
if
(nMixerDevs
<
1
) then Exit;
//
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;
end;
end;
//
获取静音
procedure SetVolumeMute(DN:TDeviceName; Value:Boolean);
var
hMix: HMIXER;
mxlc: MIXERLINECONTROLS;
mxcd: TMIXERCONTROLDETAILS;
mxc: MIXERCONTROL;
mxl: TMixerLine;
intRet: Integer;
nMixerDevs: Integer;
mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
begin
//
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
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;
if
Value then
mcdMute.fValue:
=
1
else
mcdMute.fValue:
=
0
;
//
Get mute
intRet :
=
mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
if
intRet
<>
MMSYSERR_NOERROR then
ShowMessage(
'
SetControlDetails Error
'
);
end
else
ShowMessage(
'
GetLineInfo Error
'
);
end;
end;
end;
end.
最后
以上就是负责悟空为你收集整理的delphi内进行音量控制及静音的全部内容,希望文章能够帮你解决delphi内进行音量控制及静音所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复