在Delphi5中如何通过window api调用实现系统音量的调节!(100分)

  • 主题发起人 主题发起人 apower
  • 开始时间 开始时间
A

apower

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi5中如何通过window api调用实现系统音量的调节或不用OCX的控件!
请EMAIL ME.
 
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=107514
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=96313
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=93092
……

 
我这有一个例子,是从网上Down下来的,还挺管用,如果要可给我来信
xxz007@yeah.net
 
问问题的时候先查一下,然后再问,
wjiachun 都替你查了那么多了。
 
新朋友的话可以原谅!
 

这些够用吗?
有相应的API函数可查(声音相关)

waveInAddBuffer 向声音输入设备发送缓冲区
waveInClose 关闭声音输入设备
waveInGetDevCaps 获取声音输入设备性能
waveInGetErrorText 获取声音出错的信息文本
waveInGetID 获取声音输入设备ID
waveInGetNumDevs 返回声音输入设备数量
waveInGetPosition 获取声音设备输入位置
waveInMessage 向声音输入设备发送信息
waveInOpen 打开声音输入设备
waveInPrepareHeader 预备声音输入缓冲区
waveInReset 停止声音输入设备工作
waveInStart 停止声音输入设备工作
waveInStop 停止声音输入
waveInUnprepareHeader 清除预备的声音文件头
waveOutBreakLoop 中断声音输出循环
waveOutClose 关闭声音输出设备
waveOutGetDevCaps 获取声音输出设备性能
waveOutGetErrorText 获取声音出错文本
waveOutGetID 获取声音输出设备ID
waveOutGetNumDevs 获取声音输出设备数量
waveOutGetPitch 获取声音输出的强度
waveOutGetPlaybackRate 获取声音回放率
waveOutGetPosition 获取声音回放位置
waveOutGetVolume 获取声音音量
waveOutMessage 向声音输出设备发送消息
waveOutOpen 打开声音输出设备
waveOutPause 暂停声音回放
waveOutPrepareHeader 预备声音回放数据块
waveOutReset 停止声音回放
waveOutRestart 重开始声音回放
waveOutSetPitch 设置波形输出强度
waveOutSetPlaybackRate 设置回放率
waveOutSetVolume 设置输出音量
waveOutUnprepareHeader 清除预备声音数据块
waveOutWrite 写入声音输出设备
 
程云:如果你有成功的代码,给我一段行吗?
我试用了auxGetVolume和auxSetVolume,返回值没错,但似乎没有效果。
 
auxgetvolume,auxsetvolume是调节线路混合设备的音量,你如果要调节
Wave的音量,应用WaveOutgetvoluem和Waveoutsetvoluem,参数为0到$ffff的值
其中高、低位分别代表左右声道的音量值。
 
好象有,是在书上,我回去找找,下次给你帖上。
 
控制音量要用到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位整数的指针。
 
看来大家误会我的意思: 我的意思是通过API或某种方法(而不要OCX,DLL等)来控制音量,这个音量是WINDOW 中的 VOLUME,即主音量,而不是什么WaveOutgetvoluem和Waveoutsetvoluem,大家可看一下WINDOW的'音量控制'.我手头上就有一个音量的OCX,但我很讨厌这种OCX,经常出问题,又不能做到程序上,
BY THE WAY: 谁有BUPACK 1.4的注册码及注册方法,EMAIL ME:APOWER@126.COM,谢谢! 急!急!
(它要 usernane,serial,firstKey,secondKey几个地方要填)
 
看来大家误会我的意思: 我的意思是通过API或某种方法(而不要OCX,DLL等)来控制音
量,这个音量是WINDOW 中的 VOLUME,即主音量,而不是什么WaveOutgetvoluem和
Waveoutsetvoluem,大家可看一下WINDOW的'音量控制'.我手头上就有一个音量的
OCX,但我很讨厌这种OCX,经常出问题,又不能做到程序上,
BY THE WAY: 谁有BUPACK 1.4的注册码及注册方法,EMAIL ME:APOWER@126.COM,谢谢!
(它要 usernane,serial,firstKey,secondKey几个地方要填)急!急!急!急!急!急!
 
>通过API或某种方法(而不要OCX,DLL等)来控制音量.
我的程序就是用API来作的,不是OCX,DLL。
而且主音量和左右声道的都有,你试过没有?
 
我也想找一个控制系统主音量的方法,请告知!!!多谢!!(不是控制左、右音量那种API)
 
有个Amixer 1.15的音量控制控件,可是也会偶尔出问题,
我也是要控制系统主音量,如有谁知道,也请一并告诉我,谢了。
caicheng@163.net
 
你如果只要BUPACK控件包可去(http://www.buypin.com/files/bupack13_d5.exe)down个,
它不要注册码,而且有源码。
 
俺有一个办法,你们看中用不中用:
Winexec('sndvol32.exe',SW_SHOWNORMAL);
//调用系统的音量控制程序,这样就可以调切系统主单量了。
 
我也有兴趣!
 

Similar threads

回复
0
查看
978
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部