有关音量控制的问题?(50分)

  • 主题发起人 主题发起人 qlc
  • 开始时间 开始时间
Q

qlc

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做2个按钮,分别是控制计算机的音量增加和减少
我不知道怎么实现,哪位高手帮帮我?
是不是要用到API函数,以及如何使用呀?
谢谢~~~~~~~~~
 
控制音量要用到waveOutSetVlume函数,此函数的声明在MMSystem.h单元中。
此单放在Delphi目录下的Source/rtl/win中

主意这儿用到两个函数waveOutSetVlume和waveOutGetVolume,不要用混,
我第一次用它们时就给搞混了,好费事。

程序如下:

三个TrackBar的属性设置:Max:=255;Frequency:=16;

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, mmsystem;

type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
TrackBar3: TTrackBar;
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure TrackBar3Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.DFM}

//音量控制
procedure TForm1.TrackBar1Change(Sender: TObject);
var
t,v:Longint;
begin

// if a=0 then
Exit;
t:=TrackBar1.Position;
v:=(t shl 8)or(t shl 24);
waveOutSetVolume(0,v);
end;


//左声道控制
procedure TForm1.TrackBar2Change(Sender: TObject);
var
t,v:Longint;
begin

t:=TrackBar2.Position;
waveOutGetVolume(0,@v);
v:=v and $ffff0000 or (t shl 8);
waveOutSetVolume(0,v);
end;


//右声道控制
procedure TForm1.TrackBar3Change(Sender: TObject);
var
t,v:Longint;
begin

t:=TrackBar3.Position;
waveOutGetVolume(0,@v);
v:=v and $0000ffff or (t shl 24);
waveOutSetVolume(0,v);
end;


//获得当前音量值
procedure TForm1.FormCreate(Sender: TObject);
var
v:longint;
begin

waveOutGetVolume(0,@v);
TrackBar2.Position:=hi(v);
TrackBar3.Position:=hi(v shr 16);
if hi(v)>hi(v shr 16) then

TrackBar1.Position:=hi(v)
else

TrackBar1.Position:=hi(v shr 16);
end;


end.



函数说明:

waveOutSetVolume
第一个参数是波形文件输出设备标识符;
第二个参娄是音量大小。这是一个32位的整数,低16位表示左声道的音量,
高16位表示右声道的音量。

waveOutGetVolume
第一个参数是波形文件输出设备标识符;
第二个参数是一个32位整数的指针。
 
这个问题已经讨论过多次了,搜索一下即可。

这里有一些供你参考:
uses MMSystem;

waveOutGetVolume(0,X) //获得当前音量值;
waveOutSetVolumn(0,X) //设置当前音量值;
第一个参数是波形文件输出设备标识符;
第二个参娄是音量大小。这是一个32位的整数,
低16位表示左声道的音量,
高16位表示右声道的音量。
 
很感谢,如果我想显示当前声音的百分比数,怎么办?
(就象WINAMP那样)
顺便问一下,TRealAudio组件在哪?
 
($ffff*0.8) shl 16 and ($ffff*0.8)就是80%
 
在ActiveX中,需要添加
具体如下:
在Delphi4的可视化编程环境中,选择File菜单下的"New Application"项,新建一个新的应用程序。然后
选择Component(组件)菜单下的"Import ActiveX Control..."(导入ActiveX控件)选项,选中其中的
"Real Player ActiveX Control Library(Vision1.0)"项,并单击Install,会出现一个install窗口。
 
后退
顶部