概述
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.
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内进行音量控制及静音所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复