如上
解决方案 »
- 自己写的socket传送文件的程序,局域网没有问题,互联网上经常丢数据
- 应用程序如何与自己建立的系统服务程序通信?
- 用delphi的 TMediaPlayer 怎样实现慢放,快放功能,可以吗?
- 君卿本无意,来者犹可知,散分
- 如何使label上的字向上或向下移动?(急,在线等待)
- 各位大哥帮帮忙,库打不开呀,急
- 我用delphi里面的tmediaplayer,播放mid类型的文件的时候, 如何循环播放一个这样的文件!(有点不懂,在次提问!)
- 求PCHAR与STRING类型互相转换的函数
- 怎么写一个任务栏程序,就像QQ那样的?
- 求大神看下这个哪里有问题
- 进来拿分吧(Treeview控件怎么判断被select的节点没有子节点)
- 高手一定要看的高尖端问题:有什么办法可以让两个MODEM直接拨号相连接?
David Souchard
摘 要:播放WAV文件的另一种方法
关键字:MessageBeep MediaPlayer
类 别:多媒体
中文开发在线原创作品,未经允许,严禁任何形式的转载如果你要播放基本的系统声音,则要用适当的参数调用MessageBeep。如果你要用扬声器发声,就调用MessageBeep(-1);。要播放一个WAV声音,你可以使用对象TmediaPlayer,但如果你要快速播放,最简单的方法是调用API函数sndPlaySound(在mmsystem单元中声明)。例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('C:\Windows\Media\Tada.wav',
SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
sndPlaySound(nil, 0); //停止发音
end;如果你要经常播放一种声音,就应该考虑把文件载入内存并从内存中播放:
var
tada: string;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(Pointer(tada), SND_MEMORY
Or SND_NODEFAULT Or SND_ASYNC);
end;
initialization
tada := LoadFile('C:\Windows\Media\Tada.wav');
finalization
tada := '; //释放字符串占用的内存。
end.你可以把一个或多个wave文件嵌入可执行文件中,并从文件中播放。首先建立一个资源文件(.RES)。要做到这点,就要建立一个.RC文件,例如一个叫做sounds.rc的文件:
tada wave c:\windows\media\tada.wav
chimes wave c:\windows\media\chimes.wav然后用资源编译器进行编译(Delphi\Bin directory中的BRCC32.EXE),然后就得到一个名为sounds.res的文件,你可以用指令把它装入项目中。使用SND_RESOURCE标志,调用PlaySound(而不是sndPlaySound),就可以从可执行文件中播放声音。
{$R sounds.res}
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound('chimes', hInstance, SND_RESOURCE or SND_SYNC);
PlaySound('tada', hInstance, SND_RESOURCE or SND_ASYNC);
end;同样,如果你要经常播放一种声音,就应该考虑把文件装入内存并从内存中播放:
{$R sounds.res}
var
tada: Pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(tada, SND_MEMORY
or SND_NODEFAULT or SND_ASYNC);
end;
initialization
// 此处我们使用类型转换从而避免使用另一个变量
tada := Pointer(FindResource(hInstance, 'tada', 'wave'));
if tada <> nil then begin
tada := Pointer(LoadResource(hInstance, HRSRC(tada)));
if tada <> nil then tada := LockResource(HGLOBAL(tada));
end;
end.