我这儿有个函数但不清楚 各参数的意义,那个大哥解释下哈?//音量控制
procedure TForm1.TrackBar1Change(Sender: TObject);
var
t,v:Longint;
begin
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl 24);
waveOutSetVolume(0,v);
end;就是 waveOutSetVolume(0,v); 0 和v 是代表什么??
v:=(t shl 8)or(t shl 24); shl 是???
procedure TForm1.TrackBar1Change(Sender: TObject);
var
t,v:Longint;
begin
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl 24);
waveOutSetVolume(0,v);
end;就是 waveOutSetVolume(0,v); 0 和v 是代表什么??
v:=(t shl 8)or(t shl 24); shl 是???
解决方案 »
- 请教连接远程 interbase 的详细说明。谢谢!
- 这个问题好奇怪呀!请大家帮帮忙!
- 急救,我DELPHI写的EXE执行文件通过HTTP协议调用远程的WEB服务器(JSP),调用JSP页面(JSP对数据操作),比如一个查询是JSP页面执行的,
- 关于架构高性能三层模式的讨论(参与者高分相送)
- 请教UpdateResource的使用
- Query删除记录的一个小问题
- 为什么我的MDI子窗体关闭时像最小化,而没有关闭?怎样可以关闭?
- shanmin进来领分!
- 哪里可以下载程序员大本营光盘2000汇粹版?
- WinGate代理上网,设置后OICQ不能发送信息。怎样通过编程或已有软件结除这种设置
- 在delphi怎样实现调用其它控件(exe文件)?
- 打印时如何使其自动换行?
{ }
{ 音量调节模块: }
{ 1. 获得音量(左右声道)的值和是否静音; }
{ 2. 设置音量(左右声道)的值和是否静音。 }
{ }
{*******************************************************************}unit VolumeUnit;interfaceuses
// BasicUnit
SysUtils,
MMSystem,
Dialogs;
Type
TDeviceName = (Master, Microphone, WaveOut, Synth); // 获得混音器参数
procedure GetVolume(DN: TDeviceName);
// 设置混音器参数
procedure SetVolume(DN: TDeviceName);
implementationvar
MuteVol : Boolean; // 静音
LeftVol : Integer; // 左声道
RightVol: Integer; // 右声道
{--- 获取声音的所有参数 ------------------------------------------------}
procedure GetVolume(DN: TDeviceName);
var
intRet : Integer;
hMix : HMIXER;
mxl : TMixerLine;
mxc : MIXERCONTROL;
mxlc : MIXERLINECONTROLS;
mxcd : TMIXERCONTROLDETAILS;
details : array [0..30] of Integer;
mcdMute : MIXERCONTROLDETAILS_BOOLEAN;
nMixerDevs: Integer;
begin // 检查混音器是否可用
nMixerDevs := mixerGetNumDevs();
if (nMixerDevs < 1) then
begin
Exit;
end; // 打开混音器
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); // 获得控制器的信息
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(Integer);
mxcd.paDetails := @details;
mxcd.cChannels := 2; intRet := mixerGetControlDetails(hMix, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE); LeftVol := details[0];
RightVol := details[1]; if intRet <> MMSYSERR_NOERROR then
ShowMessage('设置控制器参数错误!');
end
else
ShowMessage('获得控制器信息错误!');
end; // end 左右声道
// 获得静音值
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; // 获得静音控制器
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; // 获得静音值
intRet := mixerGetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE); if mcdMute.fValue = 0 then
MuteVol := false
else
MuteVol := True; if intRet <> MMSYSERR_NOERROR then
ShowMessage('设置控制器参数错误!');
end
else
ShowMessage('获得控制器信息错误!');
end; // end 静音 // 关闭混音器
intRet := mixerClose(hMix);
end;
end;{--- 设置声音的所有参数 ------------------------------------------------}
procedure setVolume(DN: TDeviceName);
var
intRet : Integer;
hMix : HMIXER;
mxl : TMixerLine;
mxc : MIXERCONTROL;
mxlc : MIXERLINECONTROLS;
mxcd : TMIXERCONTROLDETAILS;
details : array [0..30] of Integer;
mcdMute : MIXERCONTROLDETAILS_BOOLEAN;
nMixerDevs: Integer;
begin // 检查混音器是否可用
nMixerDevs := mixerGetNumDevs();
if (nMixerDevs < 1) then
begin
Exit;
end; // 打开混音器
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); // 获得控制器的信息
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(Integer);
mxcd.paDetails := @details;
mxcd.cChannels := 2; details[0] := LeftVol;
details[1] := RightVol; intRet := mixerSetControlDetails(hMix, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE); if intRet <> MMSYSERR_NOERROR then
ShowMessage('设置控制器参数错误!');
end
else
ShowMessage('获得控制器信息错误!');
end; // end 左右声道
// 设置静音
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; // 获得静音控制器
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; // 设置静音
mcdMute.fValue := Ord(MuteVol);
intRet := mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE); if intRet <> MMSYSERR_NOERROR then
ShowMessage('设置控制器参数错误!');
end
else
ShowMessage('获得控制器信息错误!');
end; // end 静音 // 关闭混音器
intRet := mixerClose(hMix);
end;
end;end.